Skip to content

Commit

Permalink
Merge pull request tekdi#54 from poojakarma/reset_password_forgot_pas…
Browse files Browse the repository at this point in the history
…sword

PS-2038: added changes for reset api and integrate email after reset successfully
  • Loading branch information
snehal0904 authored Sep 23, 2024
2 parents 0c818f2 + 8894975 commit 9d65423
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 7 deletions.
42 changes: 38 additions & 4 deletions src/adapters/postgres/user-adapter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,8 @@ export class PostgresUserService implements IServicelocator {

//Generate Token for password Reset
const tokenPayload = {
sub: userData.userId
sub: userData.userId,
email: emailOfUser
}
const jwtExpireTime = this.jwt_password_reset_expires_In;
const jwtSecretKey = this.jwt_secret;
Expand All @@ -109,16 +110,19 @@ export class PostgresUserService implements IServicelocator {

// Format expiration time
const time = formatTime(jwtExpireTime);
const programName = userData?.tenantData[0]?.tenantName;
const capilatizeFirstLettterOfProgram = programName ? programName.charAt(0).toUpperCase() + programName.slice(1) : '';


//Send Notification
const notificationPayload = {
isQueue: false,
context: 'USER',
key: "OnForgotPasswordReset",
replacements: {
"{username}": username,
"{username}": userData?.name,
"{resetToken}": resetToken,
"{programName}": userData?.tenantData[0]?.tenantName,
"{programName}": capilatizeFirstLettterOfProgram,
"{expireTime}": time,
"{frontEndUrl}": frontEndUrl
},
Expand Down Expand Up @@ -159,12 +163,14 @@ export class PostgresUserService implements IServicelocator {
if (!userDetail) {
return APIResponse.error(response, apiId, API_RESPONSES.NOT_FOUND, API_RESPONSES.USER_NOT_FOUND, HttpStatus.NOT_FOUND);
}
const userData: any = await this.findUserDetails(null, userDetail.username);
const keycloakResponse = await getKeycloakAdminToken();
const keyClocktoken = keycloakResponse.data.access_token;
let apiResponse: any;
try {
apiResponse = await this.resetKeycloakPassword(
request,
userData,
keyClocktoken,
body.newPassword,
userDetail.userId
Expand Down Expand Up @@ -914,11 +920,13 @@ export class PostgresUserService implements IServicelocator {
try {
apiResponse = await this.resetKeycloakPassword(
request,
userData,
resToken,
newPassword,
userId
);
} catch (e) {
}
catch (e) {
return APIResponse.error(response, apiId, "Internal Server Error", `Error : ${e?.response?.data.error}`, HttpStatus.INTERNAL_SERVER_ERROR);
}

Expand All @@ -939,6 +947,7 @@ export class PostgresUserService implements IServicelocator {

public async resetKeycloakPassword(
request: any,
userData: any,
token: string,
newPassword: string,
userId: string
Expand Down Expand Up @@ -981,6 +990,31 @@ export class PostgresUserService implements IServicelocator {
}

if (apiResponse.status === 204) {
if (userData.email) {
//Send Notification
const notificationPayload = {
isQueue: false,
context: 'USER',
key: "OnPasswordReset",
replacements: {
"{username}": userData.name,
"{programName}": userData?.tenantData?.[0]?.tenantName
? userData.tenantData[0].tenantName.charAt(0).toUpperCase() + userData.tenantData[0].tenantName.slice(1)
: ''
},
email: {
receipients: [userData.email]
}
};
try {
const mailSend = await this.notificationRequest.sendNotification(notificationPayload);
if (mailSend?.result?.email?.errors.length > 0) {
// error messgae if generated by notification service
}
} catch (error) {
// error
}
}
return new SuccessResponse({
statusCode: apiResponse.status,
message: apiResponse.statusText,
Expand Down
6 changes: 3 additions & 3 deletions src/common/utils/formatTimeConversion.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
export function formatTime(milliseconds) {
const seconds = Math.floor(milliseconds / 1000);
if (seconds < 60) {
return `${seconds} seconds`;
return `${seconds} second${seconds === 1 ? '' : 's'}`;
} else if (seconds < 3600) { // less than 1 hour
const minutes = Math.floor(seconds / 60);
return `${minutes} minutes`;
return `${minutes} minute${minutes === 1 ? '' : 's'}`;
} else {
const hours = Math.floor(seconds / 3600);
return `${hours} hours`;
return `${hours} hour${hours === 1 ? '' : 's'}`;
}
}

0 comments on commit 9d65423

Please sign in to comment.