|
|
@ -46,7 +46,7 @@ exports.accountcleanup = functions.https.onRequest((req, res) => { |
|
|
|
getUsers().then(users => { |
|
|
|
// Find users that have not signed in in the last 30 days.
|
|
|
|
const inactiveUsers = users.filter( |
|
|
|
user => parseInt(user.lastLoginAt, 10) > Date.now() - 30 * 24 * 60 * 60 * 1000); |
|
|
|
user => parseInt(user.lastLoginAt, 10) < Date.now() - 30 * 24 * 60 * 60 * 1000); |
|
|
|
|
|
|
|
// Use a pool so that we delete maximum `MAX_CONCURRENT` users in parallel.
|
|
|
|
const promisePool = new PromisePool(() => { |
|
|
@ -54,10 +54,10 @@ exports.accountcleanup = functions.https.onRequest((req, res) => { |
|
|
|
const userToDelete = inactiveUsers.pop(); |
|
|
|
|
|
|
|
// Delete the inactive user.
|
|
|
|
return admin.auth().deleteUser(userToDelete.uid).then(() => { |
|
|
|
console.log('Deleted user account', userToDelete.uid, 'because of inactivity'); |
|
|
|
return admin.auth().deleteUser(userToDelete.localId).then(() => { |
|
|
|
console.log('Deleted user account', userToDelete.localId, 'because of inactivity'); |
|
|
|
}).catch(error => { |
|
|
|
console.error('Deletion of inactive user account', userToDelete.uid, 'failed:', error); |
|
|
|
console.error('Deletion of inactive user account', userToDelete.localId, 'failed:', error); |
|
|
|
}); |
|
|
|
} |
|
|
|
}, MAX_CONCURRENT); |
|
|
@ -107,7 +107,8 @@ function getAccessToken(accessToken) { |
|
|
|
|
|
|
|
const options = { |
|
|
|
uri: 'http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token', |
|
|
|
header: {'Metadata-Flavor': 'Google'} |
|
|
|
headers: {'Metadata-Flavor': 'Google'}, |
|
|
|
json: true |
|
|
|
}; |
|
|
|
|
|
|
|
return rp(options).then(resp => resp.access_token); |
|
|
|