Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 8d5561e

Browse files
authored
Merge pull request lowcoder-org#228 from neon-balcony/develop
feat: move workspace & request buffer limit settings to application.yml & check org state in enterprise mode
2 parents 74cd702 + a711f46 commit 8d5561e

File tree

6 files changed

+66
-8
lines changed

6 files changed

+66
-8
lines changed

server/api-service/openblocks-domain/src/main/java/com/openblocks/domain/user/service/UserService.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@
88

99
import com.openblocks.domain.user.model.AuthorizedUser;
1010
import com.openblocks.domain.user.model.Connection;
11-
import com.openblocks.domain.user.model.UserDetail;
1211
import com.openblocks.domain.user.model.User;
12+
import com.openblocks.domain.user.model.UserDetail;
1313
import com.openblocks.infra.annotation.NonEmptyMono;
1414

1515
import reactor.core.publisher.Mono;
@@ -45,6 +45,8 @@ public interface UserService {
4545

4646
Mono<Boolean> updatePassword(String userId, String oldPassword, String newPassword);
4747

48+
Mono<String> resetPassword(String userId);
49+
4850
Mono<Boolean> setPassword(String userId, String password);
4951

5052
Mono<UserDetail> buildUserDetail(User user, boolean withoutDynamicGroups);

server/api-service/openblocks-domain/src/main/java/com/openblocks/domain/user/service/UserServiceImpl.java

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import static com.openblocks.sdk.util.ExceptionUtils.ofError;
88
import static com.openblocks.sdk.util.ExceptionUtils.ofException;
99

10+
import java.security.SecureRandom;
1011
import java.util.Collection;
1112
import java.util.List;
1213
import java.util.Locale;
@@ -17,9 +18,11 @@
1718
import java.util.function.Function;
1819
import java.util.stream.Collectors;
1920

21+
import javax.annotation.Nonnull;
2022
import javax.annotation.PostConstruct;
2123

2224
import org.apache.commons.lang3.ObjectUtils;
25+
import org.apache.commons.lang3.RandomStringUtils;
2326
import org.apache.commons.lang3.StringUtils;
2427
import org.springframework.beans.factory.annotation.Autowired;
2528
import org.springframework.http.codec.multipart.Part;
@@ -37,9 +40,9 @@
3740
import com.openblocks.domain.organization.service.OrgMemberService;
3841
import com.openblocks.domain.user.model.AuthorizedUser;
3942
import com.openblocks.domain.user.model.Connection;
40-
import com.openblocks.domain.user.model.UserDetail;
4143
import com.openblocks.domain.user.model.User;
4244
import com.openblocks.domain.user.model.User.TransformedUserInfo;
45+
import com.openblocks.domain.user.model.UserDetail;
4346
import com.openblocks.domain.user.model.UserState;
4447
import com.openblocks.domain.user.repository.UserRepository;
4548
import com.openblocks.infra.mongo.MongoUpsertHelper;
@@ -245,6 +248,31 @@ public Mono<Boolean> updatePassword(String userId, String oldPassword, String ne
245248
.thenReturn(true);
246249
}
247250

251+
@Override
252+
public Mono<String> resetPassword(String userId) {
253+
return findById(userId)
254+
.flatMap(user -> {
255+
String password = user.getPassword();
256+
if (StringUtils.isBlank(password)) {
257+
return ofError(BizError.INVALID_PASSWORD, "PASSWORD_NOT_SET_YET");
258+
}
259+
260+
String randomStr = generateNewRandomPwd();
261+
user.setPassword(encryptionService.encryptPassword(randomStr));
262+
return repository.save(user)
263+
.thenReturn(randomStr);
264+
});
265+
}
266+
267+
@SuppressWarnings("SpellCheckingInspection")
268+
@Nonnull
269+
private static String generateNewRandomPwd() {
270+
char[] possibleCharacters = ("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789~`!@#$%^&*()-_=+[{]}<>?")
271+
.toCharArray();
272+
return RandomStringUtils.random(12, 0, possibleCharacters.length - 1,
273+
false, false, possibleCharacters, new SecureRandom());
274+
}
275+
248276
@Override
249277
public Mono<Boolean> setPassword(String userId, String password) {
250278
return findById(userId)

server/api-service/openblocks-sdk/src/main/java/com/openblocks/sdk/config/CommonConfig.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,10 @@ public boolean isSelfHost() {
3939
return !isCloud();
4040
}
4141

42+
public boolean isEnterpriseMode() {
43+
return workspace.getMode() == WorkspaceMode.ENTERPRISE;
44+
}
45+
4246
@Data
4347
public static class Domain {
4448
private String defaultValue;

server/api-service/openblocks-sdk/src/main/resources/locale_en.properties

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,8 @@ USER_NOT_SIGNED_IN=Unknown user, you have to log in first.
4343
FAIL_TO_GET_OIDC_INFO=Failed to get OIDC information, error message: {0}.
4444
LOG_IN_SOURCE_NOT_SUPPORTED=Sorry, this log in channel is not supported.
4545
USER_LOGIN_ID_EXIST=Current email already used by another user.
46-
INVALID_PASSWORD=Sorry, passwords do not match, please retype.
46+
INVALID_PASSWORD=Sorry, passwords do not match.
47+
PASSWORD_NOT_SET_YET=This user hasn't set password yet and cannot be reset.
4748
INVALID_EMAIL_OR_PASSWORD=Invalid email or password.
4849
ALREADY_BIND=Sorry, {0} has been bound by user {1}.
4950
NEED_BIND_THIRD_PARTY_CONNECTION=Sorry, it needs to bind the current workspace login channel.

server/api-service/openblocks-server/src/main/java/com/openblocks/api/usermanagement/UserApiService.java

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,13 +28,13 @@ public class UserApiService {
2828
private UserService userService;
2929

3030
public Mono<UserDetail> getUserDetailById(String userId) {
31-
return checkPermission(userId)
31+
return checkAdminPermissionAndUserBelongsToCurrentOrg(userId)
3232
.then(userService.findById(userId)
3333
.flatMap(user -> userService.buildUserDetail(user, false)));
3434
}
3535

36-
private Mono<Void> checkPermission(String userId) {
37-
return sessionUserService.getVisitorOrgMember()
36+
private Mono<Void> checkAdminPermissionAndUserBelongsToCurrentOrg(String userId) {
37+
return sessionUserService.getVisitorOrgMemberCache()
3838
.flatMap(orgMember -> {
3939
if (!orgMember.isAdmin()) {
4040
return ofError(UNSUPPORTED_OPERATION, "BAD_REQUEST");
@@ -50,4 +50,8 @@ private Mono<Void> checkPermission(String userId) {
5050
});
5151
}
5252

53+
public Mono<String> resetPassword(String userId) {
54+
return checkAdminPermissionAndUserBelongsToCurrentOrg(userId)
55+
.then(userService.resetPassword(userId));
56+
}
5357
}

server/api-service/openblocks-server/src/main/java/com/openblocks/api/usermanagement/UserController.java

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import com.openblocks.domain.user.service.UserStatusService;
3333
import com.openblocks.infra.constant.NewUrl;
3434
import com.openblocks.infra.constant.Url;
35+
import com.openblocks.sdk.config.CommonConfig;
3536
import com.openblocks.sdk.exception.BizError;
3637
import com.openblocks.sdk.util.UriUtils;
3738

@@ -61,6 +62,9 @@ public class UserController {
6162
@Autowired
6263
private UserApiService userApiService;
6364

65+
@Autowired
66+
private CommonConfig commonConfig;
67+
6468
@GetMapping("/me")
6569
public Mono<ResponseView<?>> getUserProfile(ServerWebExchange exchange) {
6670
String domain = UriUtils.getRefererDomain(exchange);
@@ -133,11 +137,23 @@ public Mono<Void> getProfilePhoto(ServerWebExchange exchange, @PathVariable Stri
133137

134138
@PutMapping("/password")
135139
public Mono<ResponseView<Boolean>> updatePassword(@RequestBody UpdatePasswordRequest request) {
136-
if (StringUtils.isBlank(request.oldPassword) || StringUtils.isBlank(request.newPassword)) {
140+
if (StringUtils.isBlank(request.oldPassword()) || StringUtils.isBlank(request.newPassword())) {
137141
return ofError(BizError.INVALID_PARAMETER, "PASSWORD_EMPTY");
138142
}
139143
return sessionUserService.getVisitorId()
140-
.flatMap(user -> userService.updatePassword(user, request.oldPassword, request.newPassword))
144+
.flatMap(user -> userService.updatePassword(user, request.oldPassword(), request.newPassword()))
145+
.map(ResponseView::success);
146+
}
147+
148+
@PostMapping("/reset-password")
149+
public Mono<ResponseView<String>> resetPassword(@RequestBody ResetPasswordRequest request) {
150+
if (!commonConfig.isEnterpriseMode()) {
151+
return ofError(BizError.UNSUPPORTED_OPERATION, "BAD_REQUEST");
152+
}
153+
if (StringUtils.isBlank(request.userId())) {
154+
return ofError(BizError.INVALID_PARAMETER, "INVALID_USER_ID");
155+
}
156+
return userApiService.resetPassword(request.userId())
141157
.map(ResponseView::success);
142158

143159
}
@@ -165,6 +181,9 @@ public Mono<ResponseView<?>> getUserDetail(@PathVariable("id") String userId) {
165181
.map(ResponseView::success);
166182
}
167183

184+
public record ResetPasswordRequest(String userId) {
185+
}
186+
168187
public record UpdatePasswordRequest(String oldPassword, String newPassword) {
169188
}
170189

0 commit comments

Comments
 (0)