implemented otp login
Signed-off-by: Stephan Richter <s.richter@srsoftware.de>
This commit is contained in:
@@ -18,6 +18,6 @@ public class Paths {
|
||||
public static final String OPENID_LOGIN = "openid_login";
|
||||
public static final String RESET_PW = "reset_pw";
|
||||
public static final String SESSION = "session";
|
||||
public static final String VALIDATE_TOKEN = "validateToken";
|
||||
public static final String VALIDATE_TOKEN = "validate";
|
||||
public static final String WHOAMI = "whoami";
|
||||
}
|
||||
|
||||
@@ -158,6 +158,7 @@ public class UserModule extends BaseHandler {
|
||||
case LIST: return getUserList(ex, user);
|
||||
case LOGOUT: return logout(ex, sessionToken);
|
||||
case OIDC: return getOIDC(ex,user,path);
|
||||
case VALIDATE_TOKEN: return validateToken(ex,path.pop());
|
||||
case WHOAMI: return getUser(ex, user);
|
||||
|
||||
};
|
||||
@@ -477,12 +478,13 @@ public class UserModule extends BaseHandler {
|
||||
tokenMap.put(email,token);
|
||||
var subject = "user.your_password_reset_token";
|
||||
var content = "user.go_to_url_to_reset_password";
|
||||
var fills = Map.of("token",token);
|
||||
var url = url(ex).replace("/api/user/reset_pw","/user/reset/pw")+"?token="+token;
|
||||
var fills = Map.of("url",url);
|
||||
var message = new Message(user,subject,content,fills,null);
|
||||
var envelope = new Envelope(message,user);
|
||||
messages.send(envelope);
|
||||
} catch (UmbrellaException e){
|
||||
|
||||
return send(ex,e);
|
||||
}
|
||||
return sendEmptyResponse(HTTP_OK,ex);
|
||||
}
|
||||
@@ -540,6 +542,21 @@ public class UserModule extends BaseHandler {
|
||||
return sendContent(ex,HTTP_OK,saved);
|
||||
}
|
||||
|
||||
private boolean validateToken(HttpExchange ex, String token) throws IOException {
|
||||
if (token == null) return sendContent(ex,HTTP_UNPROCESSABLE,"No token provided!");
|
||||
var email = tokenMap.get(token);
|
||||
tokenMap.remove(token);
|
||||
if (email == null) return sendContent(ex,HTTP_UNAUTHORIZED,"Unknown token!");
|
||||
try {
|
||||
var user = users.load(new EmailAddress(email));
|
||||
users.getSession(user).cookie().addTo(ex);
|
||||
return sendContent(ex,user);
|
||||
} catch (UmbrellaException e) {
|
||||
return send(ex,e);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private String verifyAndGetUserId(String jwt, State state) throws UmbrellaException {
|
||||
var jwksEndpoint = state.config.getString(JWKS_ENDPOINT);
|
||||
var audience = state.loginService.clientId();
|
||||
|
||||
@@ -511,7 +511,7 @@ CREATE TABLE IF NOT EXISTS {0} (
|
||||
);
|
||||
}
|
||||
|
||||
private DbUser toUser(ResultSet rs) throws SQLException {
|
||||
private DbUser toUser(ResultSet rs) throws SQLException, UmbrellaException {
|
||||
long id = rs.getLong(ID);
|
||||
Set<DbUser.PERMISSION> perms = id == 1 ? ADMIN_PERMISSIONS : Set.of();
|
||||
return new DbUser(
|
||||
|
||||
Reference in New Issue
Block a user