Skip to content

Commit 96081d3

Browse files
committed
feature: Added email template in OrganizationCommonSettings, Added public url env variable and some code optimizations.
1 parent c4b18bd commit 96081d3

File tree

8 files changed

+29
-18
lines changed

8 files changed

+29
-18
lines changed

server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/organization/model/Organization.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ public OrganizationCommonSettings getCommonSettings() {
8686
public static class OrganizationCommonSettings extends HashMap<String, Object> {
8787
public static final String USER_EXTRA_TRANSFORMER = "userExtraTransformer";
8888
public static final String USER_EXTRA_TRANSFORMER_UPDATE_TIME = "userExtraTransformer_updateTime";
89-
89+
public static final String PASSWORD_RESET_EMAIL_TEMPLATE = "passwordRestEmailTemplate";
9090
// custom branding configs
9191
public static final String CUSTOM_BRANDING_KEY = "branding";
9292
}

server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/user/service/EmailCommunicationService.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ public class EmailCommunicationService {
2020

2121
public boolean sendMail(String to, String token, String message) {
2222
try {
23-
String subject = "Lost Password Email";
23+
String subject = "Reset Your Password";
2424
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
2525

2626
MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage, true);
@@ -30,7 +30,7 @@ public boolean sendMail(String to, String token, String message) {
3030
mimeMessageHelper.setSubject(subject);
3131

3232
// Construct the message with the token link
33-
String resetLink = "http://localhost:8080/api/users/lost-password/" + token;
33+
String resetLink = lowcoderPublicUrl + "/api/users/lost-password/" + token;
3434
String messageWithLink = message + "\n\nReset your password here: " + resetLink;
3535
mimeMessageHelper.setText(messageWithLink, true); // Set HTML to true to allow links
3636

server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/user/service/UserService.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,9 +50,9 @@ public interface UserService {
5050

5151
Mono<String> resetPassword(String userId);
5252

53-
Mono<Void> lostPassword(String userEmail);
53+
Mono<Boolean> lostPassword(String userEmail);
5454

55-
Mono<Void> resetLostPassword(String userEmail, String token, String newPassword);
55+
Mono<Boolean> resetLostPassword(String userEmail, String token, String newPassword);
5656

5757
Mono<Boolean> setPassword(String userId, String password);
5858

server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/user/service/UserServiceImpl.java

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import org.lowcoder.domain.group.service.GroupService;
1717
import org.lowcoder.domain.organization.model.OrgMember;
1818
import org.lowcoder.domain.organization.service.OrgMemberService;
19+
import org.lowcoder.domain.organization.service.OrganizationService;
1920
import org.lowcoder.domain.user.model.*;
2021
import org.lowcoder.domain.user.model.User.TransformedUserInfo;
2122
import org.lowcoder.domain.user.repository.UserRepository;
@@ -74,6 +75,8 @@ public class UserServiceImpl implements UserService {
7475
@Autowired
7576
private OrgMemberService orgMemberService;
7677
@Autowired
78+
private OrganizationService organizationService;
79+
@Autowired
7780
private GroupService groupService;
7881
@Autowired
7982
private CommonConfig commonConfig;
@@ -269,14 +272,20 @@ public Mono<String> resetPassword(String userId) {
269272
}
270273

271274
@Override
272-
public Mono<Void> lostPassword(String userEmail) {
275+
public Mono<Boolean> lostPassword(String userEmail) {
273276
return findByName(userEmail)
274-
.flatMap(user -> {
277+
.zipWhen(user -> orgMemberService.getCurrentOrgMember(user.getId())
278+
.flatMap(orgMember -> organizationService.getById(orgMember.getOrgId()))
279+
.map(organization -> organization.getCommonSettings().get("PASSWORD_RESET_EMAIL_TEMPLATE")))
280+
.flatMap(tuple -> {
281+
User user = tuple.getT1();
282+
String emailTemplate = (String)tuple.getT2();
283+
275284
String token = generateNewRandomPwd();
276285
Instant tokenExpiry = Instant.now().plus(12, ChronoUnit.HOURS);
277-
// TODO - IRFAN this is just a dummy email.
278-
if (!emailCommunicationService.sendMail("notify@lowcoder.org", token, "Click Here")) {
279-
return ofError(BizError.USER_NOT_EXIST, "SENDING_EMAIL_FAILED");
286+
287+
if (!emailCommunicationService.sendMail(userEmail, token, emailTemplate)) {
288+
return ofError(BizError.AUTH_ERROR, "SENDING_EMAIL_FAILED");
280289
}
281290
user.setPasswordResetToken(HashUtils.hash(token.getBytes()));
282291
user.setPasswordResetTokenExpiry(tokenExpiry);
@@ -285,7 +294,7 @@ public Mono<Void> lostPassword(String userEmail) {
285294
}
286295

287296
@Override
288-
public Mono<Void> resetLostPassword(String userEmail, String token, String newPassword) {
297+
public Mono<Boolean> resetLostPassword(String userEmail, String token, String newPassword) {
289298
return findByName(userEmail)
290299
.flatMap(user -> {
291300
if (Instant.now().until(user.getPasswordResetTokenExpiry(), ChronoUnit.MINUTES) <= 0) {
@@ -303,7 +312,8 @@ public Mono<Void> resetLostPassword(String userEmail, String token, String newPa
303312
user.setPassword(encryptionService.encryptPassword(newPassword));
304313
user.setPasswordResetToken(StringUtils.EMPTY);
305314
user.setPasswordResetTokenExpiry(Instant.now());
306-
return repository.save(user).then(Mono.empty());
315+
return repository.save(user)
316+
.thenReturn(true);
307317
});
308318
}
309319

server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/usermanagement/UserApiService.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,11 +65,11 @@ public Mono<String> resetPassword(String userId) {
6565
.then(userService.resetPassword(userId));
6666
}
6767

68-
public Mono<Void> lostPassword(String userEmail) {
68+
public Mono<Boolean> lostPassword(String userEmail) {
6969
return userService.lostPassword(userEmail);
7070
}
7171

72-
public Mono<Void> resetLostPassword(String userEmail, String token, String newPassword) {
72+
public Mono<Boolean> resetLostPassword(String userEmail, String token, String newPassword) {
7373
return userService.resetLostPassword(userEmail, token, newPassword);
7474
}
7575

server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/usermanagement/UserController.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@ public Mono<ResponseView<String>> resetPassword(@RequestBody ResetPasswordReques
147147
}
148148

149149
@Override
150-
public Mono<ResponseView<Void>> lostPassword(@RequestBody LostPasswordRequest request) {
150+
public Mono<ResponseView<Boolean>> lostPassword(@RequestBody LostPasswordRequest request) {
151151
if (StringUtils.isBlank(request.userEmail())) {
152152
return ofError(BizError.INVALID_PARAMETER, "INVALID_USER_EMAIL");
153153
}
@@ -156,7 +156,7 @@ public Mono<ResponseView<Void>> lostPassword(@RequestBody LostPasswordRequest re
156156
}
157157

158158
@Override
159-
public Mono<ResponseView<Void>> resetLostPassword(@PathVariable String token, @RequestBody ResetLostPasswordRequest request) {
159+
public Mono<ResponseView<Boolean>> resetLostPassword(@PathVariable String token, @RequestBody ResetLostPasswordRequest request) {
160160
if (StringUtils.isBlank(request.userEmail()) || StringUtils.isBlank(token)
161161
|| StringUtils.isBlank(request.newPassword())) {
162162
return ofError(BizError.INVALID_PARAMETER, "INVALID_PARAMETER");

server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/usermanagement/UserEndpoints.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -122,10 +122,10 @@ public interface UserEndpoints
122122
public Mono<ResponseView<String>> resetPassword(@RequestBody ResetPasswordRequest request);
123123

124124
@PostMapping("/lost-password")
125-
public Mono<ResponseView<Void>> lostPassword(@RequestBody LostPasswordRequest request);
125+
public Mono<ResponseView<Boolean>> lostPassword(@RequestBody LostPasswordRequest request);
126126

127127
@PostMapping("/lost-password/{token}")
128-
public Mono<ResponseView<Void>> resetLostPassword(@PathVariable String token, @RequestBody ResetLostPasswordRequest request);
128+
public Mono<ResponseView<Boolean>> resetLostPassword(@PathVariable String token, @RequestBody ResetLostPasswordRequest request);
129129

130130
@Operation(
131131
tags = TAG_USER_PASSWORD_MANAGEMENT,

server/api-service/lowcoder-server/src/main/resources/application-lowcoder.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ common:
5656
block-hound-enable: false
5757
js-executor:
5858
host: http://127.0.0.1:6060
59+
lowcoder_public_url: http://localhost:8080
5960

6061
material:
6162
mongodb-grid-fs:

0 commit comments

Comments
 (0)