Skip to content

Commit

Permalink
fix
Browse files Browse the repository at this point in the history
  • Loading branch information
javamxd committed Mar 13, 2022
1 parent d940afa commit 482150c
Showing 1 changed file with 32 additions and 30 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,19 +3,16 @@
import org.apache.commons.lang3.StringUtils;
import org.springframework.http.HttpHeaders;
import org.ssssssss.magicapi.core.annotation.Message;
import org.ssssssss.magicapi.core.config.Constants;
import org.ssssssss.magicapi.core.config.MessageType;
import org.ssssssss.magicapi.core.config.WebSocketSessionManager;
import org.ssssssss.magicapi.core.exception.MagicLoginException;
import org.ssssssss.magicapi.core.interceptor.AuthorizationInterceptor;
import org.ssssssss.magicapi.core.context.MagicUser;
import org.ssssssss.magicapi.core.config.Constants;
import org.ssssssss.magicapi.core.context.MagicConsoleSession;
import org.ssssssss.magicapi.modules.servlet.RequestModule;
import org.ssssssss.magicapi.core.context.MagicUser;
import org.ssssssss.magicapi.core.interceptor.AuthorizationInterceptor;
import org.ssssssss.magicapi.utils.IpUtils;

import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import java.util.stream.Collectors;

Expand All @@ -36,33 +33,38 @@ public MagicWorkbenchHandler(AuthorizationInterceptor authorizationInterceptor)

@Message(MessageType.LOGIN)
public void onLogin(MagicConsoleSession session, String token, String clientId) {
session.setClientId(clientId);
MagicUser user = null;
try {
MagicUser user = guest;
session.setClientId(clientId);
if (!authorizationInterceptor.requireLogin() || (user = authorizationInterceptor.getUserByToken(token)) != null) {
String ip = Optional.ofNullable(session.getWebSocketSession().getRemoteAddress()).map(it -> it.getAddress().getHostAddress()).orElse("unknown");
HttpHeaders headers = session.getWebSocketSession().getHandshakeHeaders();
ip = IpUtils.getRealIP(ip, headers::getFirst, null);
session.setAttribute(Constants.WEBSOCKET_ATTRIBUTE_USER_ID, user.getId());
session.setAttribute(Constants.WEBSOCKET_ATTRIBUTE_USER_IP, StringUtils.defaultIfBlank(ip, "unknown"));
session.setAttribute(Constants.WEBSOCKET_ATTRIBUTE_USER_NAME, user.getUsername());
session.setActivateTime(System.currentTimeMillis());
synchronized (MagicWorkbenchHandler.class){
if(WebSocketSessionManager.getConsoleSession(clientId) != null){
WebSocketSessionManager.sendBySession(session, WebSocketSessionManager.buildMessage(MessageType.LOGIN_RESPONSE, "-1"));
return;
}
WebSocketSessionManager.add(session);
}
WebSocketSessionManager.sendBySession(session, WebSocketSessionManager.buildMessage(MessageType.LOGIN_RESPONSE, "1", session.getAttributes()));
List<Map<String, Object>> messages = getOnlineUsers();
if(!messages.isEmpty()){
WebSocketSessionManager.sendByClientId(session.getClientId(), WebSocketSessionManager.buildMessage(MessageType.ONLINE_USERS, messages));
user = authorizationInterceptor.getUserByToken(token);
} catch (Exception e) {
if(!authorizationInterceptor.requireLogin()){
user = guest;
}
}
if (user != null) {
String ip = Optional.ofNullable(session.getWebSocketSession().getRemoteAddress()).map(it -> it.getAddress().getHostAddress()).orElse("unknown");
HttpHeaders headers = session.getWebSocketSession().getHandshakeHeaders();
ip = IpUtils.getRealIP(ip, headers::getFirst, null);
session.setAttribute(Constants.WEBSOCKET_ATTRIBUTE_USER_ID, user.getId());
session.setAttribute(Constants.WEBSOCKET_ATTRIBUTE_USER_IP, StringUtils.defaultIfBlank(ip, "unknown"));
session.setAttribute(Constants.WEBSOCKET_ATTRIBUTE_USER_NAME, user.getUsername());
session.setActivateTime(System.currentTimeMillis());
synchronized (MagicWorkbenchHandler.class){
if(WebSocketSessionManager.getConsoleSession(clientId) != null){
WebSocketSessionManager.sendBySession(session, WebSocketSessionManager.buildMessage(MessageType.LOGIN_RESPONSE, "-1"));
return;
}
WebSocketSessionManager.sendToMachine(MessageType.SEND_ONLINE, session.getClientId());
WebSocketSessionManager.sendToOther(session.getClientId(), MessageType.USER_LOGIN, session.getAttributes());
WebSocketSessionManager.add(session);
}
WebSocketSessionManager.sendBySession(session, WebSocketSessionManager.buildMessage(MessageType.LOGIN_RESPONSE, "1", session.getAttributes()));
List<Map<String, Object>> messages = getOnlineUsers();
if(!messages.isEmpty()){
WebSocketSessionManager.sendByClientId(session.getClientId(), WebSocketSessionManager.buildMessage(MessageType.ONLINE_USERS, messages));
}
} catch (MagicLoginException ignored) {
WebSocketSessionManager.sendToMachine(MessageType.SEND_ONLINE, session.getClientId());
WebSocketSessionManager.sendToOther(session.getClientId(), MessageType.USER_LOGIN, session.getAttributes());
} else {
WebSocketSessionManager.sendBySession(session, WebSocketSessionManager.buildMessage(MessageType.LOGIN_RESPONSE, "0"));
}
}
Expand Down

0 comments on commit 482150c

Please sign in to comment.