[FEATURE] Смена пароля пользователем без участия администратора

This commit is contained in:
Gravit 2019-09-01 20:25:15 +07:00
parent d9c4cfdbc8
commit aea67ae8ec
No known key found for this signature in database
GPG key ID: 061981E1E85D3216
5 changed files with 70 additions and 29 deletions

View file

@ -30,13 +30,13 @@ public class User {
private long id;
@Column(unique = true)
public String username;
public String email;
@Column(unique = true)
public UUID uuid;
@Column(name = "password")
private byte[] password;
private String accessToken;
public String serverID;
public String email;
private String password_salt;
public long permissions;
//TODO: заменить EAGER на LASY и придумать способ сохранить сессию

View file

@ -1,7 +1,6 @@
package pro.gravit.launchserver.socket;
import java.lang.reflect.Type;
import java.util.HashMap;
import com.google.gson.Gson;
@ -21,14 +20,7 @@
import pro.gravit.launchserver.socket.response.WebSocketServerResponse;
import pro.gravit.launchserver.socket.response.admin.AddLogListenerResponse;
import pro.gravit.launchserver.socket.response.admin.ExecCommandResponse;
import pro.gravit.launchserver.socket.response.auth.AuthResponse;
import pro.gravit.launchserver.socket.response.auth.CheckServerResponse;
import pro.gravit.launchserver.socket.response.auth.GetAvailabilityAuthResponse;
import pro.gravit.launchserver.socket.response.auth.JoinServerResponse;
import pro.gravit.launchserver.socket.response.auth.ProfilesResponse;
import pro.gravit.launchserver.socket.response.auth.RegisterResponse;
import pro.gravit.launchserver.socket.response.auth.RestoreSessionResponse;
import pro.gravit.launchserver.socket.response.auth.SetProfileResponse;
import pro.gravit.launchserver.socket.response.auth.*;
import pro.gravit.launchserver.socket.response.profile.BatchProfileByUsername;
import pro.gravit.launchserver.socket.response.profile.ProfileByUUIDResponse;
import pro.gravit.launchserver.socket.response.profile.ProfileByUsername;
@ -132,6 +124,7 @@ public static void registerResponses() {
providers.register("verifySecureToken", VerifySecureTokenResponse.class);
providers.register("getAvailabilityAuth", GetAvailabilityAuthResponse.class);
providers.register("register", RegisterResponse.class);
providers.register("setPassword", SetPasswordResponse.class);
}
public void sendObject(ChannelHandlerContext ctx, Object obj) {

View file

@ -0,0 +1,55 @@
package pro.gravit.launchserver.socket.response.auth;
import io.netty.channel.ChannelHandlerContext;
import pro.gravit.launcher.events.request.SetPasswordRequestEvent;
import pro.gravit.launchserver.dao.User;
import pro.gravit.launchserver.socket.Client;
import pro.gravit.launchserver.socket.response.SimpleResponse;
public class SetPasswordResponse extends SimpleResponse {
public String oldPassword;
public String newPassword;
public String username;
@Override
public String getType() {
return "setPassword";
}
@Override
public void execute(ChannelHandlerContext ctx, Client client) throws Exception {
if(( oldPassword == null && username == null ) || newPassword == null)
{
sendError("Request invalid");
return;
}
if(!client.isAuth)
{
sendError("You not authorized");
return;
}
if(username != null && !client.permissions.canAdmin)
{
sendError("You not admin");
return;
}
if(username != null)
{
User user = server.config.dao.userService.findUserByUsername(username);
user.setPassword(newPassword);
sendResult(new SetPasswordRequestEvent());
}
else
{
User user = server.config.dao.userService.findUserByUsername(client.username);
if(user.verifyPassword(oldPassword))
{
user.setPassword(newPassword);
sendResult(new SetPasswordRequestEvent());
}
else
{
sendError("Old password incorrect");
}
}
}
}

View file

@ -0,0 +1,10 @@
package pro.gravit.launcher.events.request;
import pro.gravit.launcher.events.RequestEvent;
public class SetPasswordRequestEvent extends RequestEvent {
@Override
public String getType() {
return "setPassword";
}
}

View file

@ -12,25 +12,7 @@
import pro.gravit.launcher.Launcher;
import pro.gravit.launcher.events.ExceptionEvent;
import pro.gravit.launcher.events.request.AuthRequestEvent;
import pro.gravit.launcher.events.request.BatchProfileByUsernameRequestEvent;
import pro.gravit.launcher.events.request.CheckServerRequestEvent;
import pro.gravit.launcher.events.request.ErrorRequestEvent;
import pro.gravit.launcher.events.request.ExecCommandRequestEvent;
import pro.gravit.launcher.events.request.GetAvailabilityAuthRequestEvent;
import pro.gravit.launcher.events.request.GetSecureTokenRequestEvent;
import pro.gravit.launcher.events.request.JoinServerRequestEvent;
import pro.gravit.launcher.events.request.LauncherRequestEvent;
import pro.gravit.launcher.events.request.LogEvent;
import pro.gravit.launcher.events.request.ProfileByUUIDRequestEvent;
import pro.gravit.launcher.events.request.ProfileByUsernameRequestEvent;
import pro.gravit.launcher.events.request.ProfilesRequestEvent;
import pro.gravit.launcher.events.request.RegisterRequestEvent;
import pro.gravit.launcher.events.request.RestoreSessionRequestEvent;
import pro.gravit.launcher.events.request.SetProfileRequestEvent;
import pro.gravit.launcher.events.request.UpdateListRequestEvent;
import pro.gravit.launcher.events.request.UpdateRequestEvent;
import pro.gravit.launcher.events.request.VerifySecureTokenRequestEvent;
import pro.gravit.launcher.events.request.*;
import pro.gravit.launcher.hasher.HashedEntry;
import pro.gravit.launcher.hasher.HashedEntryAdapter;
import pro.gravit.launcher.request.WebSocketEvent;
@ -126,6 +108,7 @@ public void registerResults() {
results.register("getAvailabilityAuth", GetAvailabilityAuthRequestEvent.class);
results.register("exception", ExceptionEvent.class);
results.register("register", RegisterRequestEvent.class);
results.register("setpassword", SetPasswordRequestEvent.class);
}
public void registerHandler(EventHandler eventHandler) {