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);
|
return userSignup.signupAndLoginFromFormData(exchange);
|
||||||
}
|
}
|
||||||
|
|
||||||
@PostMapping("/super")
|
@PostMapping(value = "/super", consumes = {MediaType.APPLICATION_JSON_VALUE})
|
||||||
public Mono<ResponseDTO<User>> createSuperUser(
|
public Mono<ResponseDTO<User>> createSuperUser(
|
||||||
@Valid @RequestBody UserSignupRequestDTO resource,
|
@Valid @RequestBody UserSignupRequestDTO resource,
|
||||||
ServerWebExchange exchange
|
ServerWebExchange exchange
|
||||||
|
|
@ -84,6 +84,11 @@ public class UserController extends BaseController<UserService, User, String> {
|
||||||
.map(created -> new ResponseDTO<>(HttpStatus.CREATED.value(), created, null));
|
.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()
|
@PutMapping()
|
||||||
public Mono<ResponseDTO<User>> update(@RequestBody User resource, ServerWebExchange exchange) {
|
public Mono<ResponseDTO<User>> update(@RequestBody User resource, ServerWebExchange exchange) {
|
||||||
return service.updateCurrentUser(resource, exchange)
|
return service.updateCurrentUser(resource, exchange)
|
||||||
|
|
|
||||||
|
|
@ -125,7 +125,7 @@ public class UserSignup {
|
||||||
.map(formData -> {
|
.map(formData -> {
|
||||||
final User user = new User();
|
final User user = new User();
|
||||||
user.setEmail(formData.getFirst(FieldName.EMAIL));
|
user.setEmail(formData.getFirst(FieldName.EMAIL));
|
||||||
user.setPassword(formData.getFirst("password"));
|
user.setPassword(formData.getFirst(FieldName.PASSWORD));
|
||||||
if (formData.containsKey(FieldName.NAME)) {
|
if (formData.containsKey(FieldName.NAME)) {
|
||||||
user.setName(formData.getFirst(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