forgot password and oauth

This commit is contained in:
Gustavo Fuhr 2022-12-01 18:00:41 -03:00
parent 82c8df2d7e
commit b9918a0614
7 changed files with 44 additions and 9 deletions

View File

@ -19,7 +19,6 @@
package com.wisemapping.rest; package com.wisemapping.rest;
import com.wisemapping.exceptions.WiseMappingException; import com.wisemapping.exceptions.WiseMappingException;
import com.wisemapping.mail.NotificationService;
import com.wisemapping.model.Collaboration; import com.wisemapping.model.Collaboration;
import com.wisemapping.model.Label; import com.wisemapping.model.Label;
import com.wisemapping.model.Mindmap; import com.wisemapping.model.Mindmap;
@ -54,10 +53,6 @@ public class AccountController extends BaseController {
@Autowired @Autowired
private LabelService labelService; private LabelService labelService;
@Autowired
private NotificationService notificationService;
@RequestMapping(method = RequestMethod.PUT, value = "account/password", consumes = {"text/plain"}) @RequestMapping(method = RequestMethod.PUT, value = "account/password", consumes = {"text/plain"})
@ResponseStatus(value = HttpStatus.NO_CONTENT) @ResponseStatus(value = HttpStatus.NO_CONTENT)
public void changePassword(@RequestBody String password) { public void changePassword(@RequestBody String password) {

View File

@ -23,6 +23,7 @@ import com.wisemapping.exceptions.WiseMappingException;
import com.wisemapping.model.AuthenticationType; import com.wisemapping.model.AuthenticationType;
import com.wisemapping.model.User; import com.wisemapping.model.User;
import com.wisemapping.rest.model.RestOath2CallbackResponse; import com.wisemapping.rest.model.RestOath2CallbackResponse;
import com.wisemapping.rest.model.RestResetPasswordResponse;
import com.wisemapping.rest.model.RestUserRegistration; import com.wisemapping.rest.model.RestUserRegistration;
import com.wisemapping.service.*; import com.wisemapping.service.*;
import com.wisemapping.validator.Messages; import com.wisemapping.validator.Messages;
@ -129,9 +130,9 @@ public class UserController extends BaseController {
@RequestMapping(method = RequestMethod.PUT, value = "/users/resetPassword", produces = { "application/json" }) @RequestMapping(method = RequestMethod.PUT, value = "/users/resetPassword", produces = { "application/json" })
@ResponseStatus(value = HttpStatus.OK) @ResponseStatus(value = HttpStatus.OK)
public void resetPassword(@RequestParam String email) throws InvalidAuthSchemaException, EmailNotExistsException { public RestResetPasswordResponse resetPassword(@RequestParam String email) throws InvalidAuthSchemaException, EmailNotExistsException {
try { try {
userService.resetPassword(email); return userService.resetPassword(email);
} catch (InvalidUserEmailException e) { } catch (InvalidUserEmailException e) {
throw new EmailNotExistsException(e); throw new EmailNotExistsException(e);
} }

View File

@ -0,0 +1,7 @@
package com.wisemapping.rest.model;
public enum RestResetPasswordAction {
EMAIL_SENT, OAUTH2_USER
}

View File

@ -0,0 +1,15 @@
package com.wisemapping.rest.model;
public class RestResetPasswordResponse {
RestResetPasswordAction action;
public RestResetPasswordAction getAction() {
return action;
}
public void setAction(RestResetPasswordAction action) {
this.action = action;
}
}

View File

@ -23,6 +23,7 @@ import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInclude;
import com.wisemapping.model.AuthenticationType;
import com.wisemapping.model.User; import com.wisemapping.model.User;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
@ -102,6 +103,10 @@ public class RestUser {
return this.user; return this.user;
} }
public AuthenticationType getAuthenticationType() {
return user.getAuthenticationType();
}
@Override @Override
public boolean equals(Object o) { public boolean equals(Object o) {
if (!(o instanceof RestUser)) { if (!(o instanceof RestUser)) {

View File

@ -20,6 +20,8 @@ package com.wisemapping.service;
import com.wisemapping.exceptions.WiseMappingException; import com.wisemapping.exceptions.WiseMappingException;
import com.wisemapping.model.User; import com.wisemapping.model.User;
import com.wisemapping.rest.model.RestResetPasswordResponse;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
public interface UserService { public interface UserService {
@ -40,7 +42,7 @@ public interface UserService {
void updateUser(User user); void updateUser(User user);
void resetPassword(@NotNull String email) throws InvalidUserEmailException, InvalidAuthSchemaException; RestResetPasswordResponse resetPassword(@NotNull String email) throws InvalidUserEmailException, InvalidAuthSchemaException;
void removeUser(@NotNull User user); void removeUser(@NotNull User user);

View File

@ -23,6 +23,8 @@ import com.wisemapping.exceptions.InvalidMindmapException;
import com.wisemapping.exceptions.WiseMappingException; import com.wisemapping.exceptions.WiseMappingException;
import com.wisemapping.mail.NotificationService; import com.wisemapping.mail.NotificationService;
import com.wisemapping.model.*; import com.wisemapping.model.*;
import com.wisemapping.rest.model.RestResetPasswordAction;
import com.wisemapping.rest.model.RestResetPasswordResponse;
import com.wisemapping.service.google.GoogleAccountBasicData; import com.wisemapping.service.google.GoogleAccountBasicData;
import com.wisemapping.service.google.GoogleService; import com.wisemapping.service.google.GoogleService;
import com.wisemapping.util.VelocityEngineUtils; import com.wisemapping.util.VelocityEngineUtils;
@ -58,10 +60,15 @@ public class UserServiceImpl
} }
@Override @Override
public void resetPassword(@NotNull String email) public RestResetPasswordResponse resetPassword(@NotNull String email)
throws InvalidUserEmailException, InvalidAuthSchemaException { throws InvalidUserEmailException, InvalidAuthSchemaException {
final User user = userManager.getUserBy(email); final User user = userManager.getUserBy(email);
if (user != null) { if (user != null) {
RestResetPasswordResponse response = new RestResetPasswordResponse();
if (user.getAuthenticationType().equals(AuthenticationType.GOOGLE_OAUTH2)) {
response.setAction(RestResetPasswordAction.OAUTH2_USER);
return response;
}
if (user.getAuthenticationType() != AuthenticationType.DATABASE) { if (user.getAuthenticationType() != AuthenticationType.DATABASE) {
throw new InvalidAuthSchemaException("Could not change password for " + user.getAuthenticationType().getCode()); throw new InvalidAuthSchemaException("Could not change password for " + user.getAuthenticationType().getCode());
@ -74,6 +81,9 @@ public class UserServiceImpl
// Send an email with the new temporal password ... // Send an email with the new temporal password ...
notificationService.resetPassword(user, password); notificationService.resetPassword(user, password);
response.setAction(RestResetPasswordAction.EMAIL_SENT);
return response;
} else { } else {
throw new InvalidUserEmailException("The email '" + email + "' does not exists."); throw new InvalidUserEmailException("The email '" + email + "' does not exists.");
} }