Add form data support for superuser signup API (#6844)
The superuser signup api available at /users/super currently only supports JSON payload. This PR adds support for form-data payload at the same endpoint, and makes it consistent with the normal user's signup API endpoint.
This commit is contained in:
parent
58fad5f3fb
commit
e0273ecc03
|
|
@ -75,7 +75,7 @@ public class UserController extends BaseController<UserService, User, String> {
|
|||
return userSignup.signupAndLoginFromFormData(exchange);
|
||||
}
|
||||
|
||||
@PostMapping("/super")
|
||||
@PostMapping(value = "/super", consumes = {MediaType.APPLICATION_JSON_VALUE})
|
||||
public Mono<ResponseDTO<User>> createSuperUser(
|
||||
@Valid @RequestBody UserSignupRequestDTO resource,
|
||||
ServerWebExchange exchange
|
||||
|
|
@ -84,6 +84,11 @@ public class UserController extends BaseController<UserService, User, String> {
|
|||
.map(created -> new ResponseDTO<>(HttpStatus.CREATED.value(), created, null));
|
||||
}
|
||||
|
||||
@PostMapping(value = "/super", consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE})
|
||||
public Mono<Void> createSuperUserFromFormData(ServerWebExchange exchange) {
|
||||
return userSignup.signupAndLoginSuperFromFormData(exchange);
|
||||
}
|
||||
|
||||
@PutMapping()
|
||||
public Mono<ResponseDTO<User>> update(@RequestBody User resource, ServerWebExchange exchange) {
|
||||
return service.updateCurrentUser(resource, exchange)
|
||||
|
|
|
|||
|
|
@ -125,7 +125,7 @@ public class UserSignup {
|
|||
.map(formData -> {
|
||||
final User user = new User();
|
||||
user.setEmail(formData.getFirst(FieldName.EMAIL));
|
||||
user.setPassword(formData.getFirst("password"));
|
||||
user.setPassword(formData.getFirst(FieldName.PASSWORD));
|
||||
if (formData.containsKey(FieldName.NAME)) {
|
||||
user.setName(formData.getFirst(FieldName.NAME));
|
||||
}
|
||||
|
|
@ -201,4 +201,49 @@ public class UserSignup {
|
|||
});
|
||||
}
|
||||
|
||||
public Mono<Void> signupAndLoginSuperFromFormData(ServerWebExchange exchange) {
|
||||
return exchange.getFormData()
|
||||
.map(formData -> {
|
||||
final UserSignupRequestDTO user = new UserSignupRequestDTO();
|
||||
user.setEmail(formData.getFirst(FieldName.EMAIL));
|
||||
user.setPassword(formData.getFirst(FieldName.PASSWORD));
|
||||
user.setSource(LoginSource.FORM);
|
||||
user.setState(UserState.ACTIVATED);
|
||||
user.setEnabled(true);
|
||||
if (formData.containsKey(FieldName.NAME)) {
|
||||
user.setName(formData.getFirst(FieldName.NAME));
|
||||
}
|
||||
if (formData.containsKey("role")) {
|
||||
user.setRole(formData.getFirst("role"));
|
||||
}
|
||||
if (formData.containsKey("companyName")) {
|
||||
user.setCompanyName(formData.getFirst("companyName"));
|
||||
}
|
||||
if (formData.containsKey("allowCollectingAnonymousData")) {
|
||||
user.setAllowCollectingAnonymousData("true".equals(formData.getFirst("allowCollectingAnonymousData")));
|
||||
}
|
||||
if (formData.containsKey("signupForNewsletter")) {
|
||||
user.setSignupForNewsletter("true".equals(formData.getFirst("signupForNewsletter")));
|
||||
}
|
||||
return user;
|
||||
})
|
||||
.flatMap(user -> signupAndLoginSuper(user, exchange))
|
||||
.then()
|
||||
.onErrorResume(error -> {
|
||||
String referer = exchange.getRequest().getHeaders().getFirst("referer");
|
||||
if (referer == null) {
|
||||
referer = DEFAULT_ORIGIN_HEADER;
|
||||
}
|
||||
final URIBuilder redirectUriBuilder = new URIBuilder(URI.create(referer)).setParameter("error", error.getMessage());
|
||||
URI redirectUri;
|
||||
try {
|
||||
redirectUri = redirectUriBuilder.build();
|
||||
} catch (URISyntaxException e) {
|
||||
log.error("Error building redirect URI with error for signup, {}.", e.getMessage(), error);
|
||||
redirectUri = URI.create(referer);
|
||||
}
|
||||
return redirectStrategy.sendRedirect(exchange, redirectUri);
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user