Launcher/LaunchServer/src/main/java/pro/gravit/launchserver/socket/response/auth/AuthResponse.java

85 lines
3.4 KiB
Java

package pro.gravit.launchserver.socket.response.auth;
import io.netty.channel.ChannelHandlerContext;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import pro.gravit.launcher.base.events.request.AuthRequestEvent;
import pro.gravit.launcher.base.request.auth.AuthRequest;
import pro.gravit.launchserver.auth.AuthException;
import pro.gravit.launchserver.auth.AuthProviderPair;
import pro.gravit.launchserver.manangers.AuthManager;
import pro.gravit.launchserver.socket.Client;
import pro.gravit.launchserver.socket.response.SimpleResponse;
import pro.gravit.utils.HookException;
public class AuthResponse extends SimpleResponse {
private transient final Logger logger = LogManager.getLogger();
public String login;
public String client;
public AuthRequest.AuthPasswordInterface password;
public String auth_id;
public ConnectTypes authType;
@Override
public String getType() {
return "auth";
}
@Override
public void execute(ChannelHandlerContext ctx, Client clientData) {
try {
AuthRequestEvent result = new AuthRequestEvent();
AuthProviderPair pair;
if (auth_id == null || auth_id.isEmpty()) pair = server.config.getAuthProviderPair();
else pair = server.config.getAuthProviderPair(auth_id);
if (pair == null) {
sendError("auth_id incorrect");
return;
}
AuthContext context = server.authManager.makeAuthContext(clientData, authType, pair, login, client, ip);
server.authManager.check(context);
password = server.authManager.decryptPassword(password);
server.authHookManager.preHook.hook(context, clientData);
context.report = server.authManager.auth(context, password);
server.authHookManager.postHook.hook(context, clientData);
result.permissions = context.report.session() != null ? (context.report.session().getUser() != null ? context.report.session().getUser().getPermissions() : null) : null;
if (context.report.isUsingOAuth()) {
result.oauth = new AuthRequestEvent.OAuthRequestEvent(context.report.oauthAccessToken(), context.report.oauthRefreshToken(), context.report.oauthExpire());
}
if (context.report.minecraftAccessToken() != null) {
result.accessToken = context.report.minecraftAccessToken();
}
result.playerProfile = server.authManager.getPlayerProfile(clientData);
sendResult(result);
} catch (AuthException | HookException e) {
sendError(e.getMessage());
}
}
public enum ConnectTypes {
CLIENT,
API
}
public static class AuthContext {
public final String login;
public final String profileName;
public final String ip;
public final ConnectTypes authType;
public transient final Client client;
public transient final AuthProviderPair pair;
public transient AuthManager.AuthReport report;
public AuthContext(Client client, String login, String profileName, String ip, ConnectTypes authType, AuthProviderPair pair) {
this.client = client;
this.login = login;
this.profileName = profileName;
this.ip = ip;
this.authType = authType;
this.pair = pair;
}
}
}