feat: Implement user invitation backend functionality
This commit is contained in:
@@ -43,6 +43,11 @@ class User extends Base {
|
||||
type: ['string', 'null'],
|
||||
format: 'date-time',
|
||||
},
|
||||
invitationToken: { type: ['string', 'null'] },
|
||||
invitationTokenSentAt: {
|
||||
type: ['string', 'null'],
|
||||
format: 'date-time',
|
||||
},
|
||||
trialExpiryDate: { type: 'string' },
|
||||
roleId: { type: 'string', format: 'uuid' },
|
||||
deletedAt: { type: 'string' },
|
||||
@@ -210,6 +215,13 @@ class User extends Base {
|
||||
await this.$query().patch({ resetPasswordToken, resetPasswordTokenSentAt });
|
||||
}
|
||||
|
||||
async generateInvitationToken() {
|
||||
const invitationToken = crypto.randomBytes(64).toString('hex');
|
||||
const invitationTokenSentAt = new Date().toISOString();
|
||||
|
||||
await this.$query().patch({ invitationToken, invitationTokenSentAt });
|
||||
}
|
||||
|
||||
async resetPassword(password) {
|
||||
return await this.$query().patch({
|
||||
resetPasswordToken: null,
|
||||
@@ -218,6 +230,14 @@ class User extends Base {
|
||||
});
|
||||
}
|
||||
|
||||
async acceptInvitation(password) {
|
||||
return await this.$query().patch({
|
||||
invitationToken: null,
|
||||
invitationTokenSentAt: null,
|
||||
password,
|
||||
});
|
||||
}
|
||||
|
||||
async isResetPasswordTokenValid() {
|
||||
if (!this.resetPasswordTokenSentAt) {
|
||||
return false;
|
||||
@@ -230,6 +250,18 @@ class User extends Base {
|
||||
return now.getTime() - sentAt.getTime() < fourHoursInMilliseconds;
|
||||
}
|
||||
|
||||
async isInvitationTokenValid() {
|
||||
if (!this.invitationTokenSentAt) {
|
||||
return false;
|
||||
}
|
||||
|
||||
const sentAt = new Date(this.invitationTokenSentAt);
|
||||
const now = new Date();
|
||||
const seventyTwoHoursInMilliseconds = 1000 * 60 * 60 * 72;
|
||||
|
||||
return now.getTime() - sentAt.getTime() < seventyTwoHoursInMilliseconds;
|
||||
}
|
||||
|
||||
async generateHash() {
|
||||
if (this.password) {
|
||||
this.password = await bcrypt.hash(this.password, 10);
|
||||
|
Reference in New Issue
Block a user