diff --git a/broker/src/main/java/io/moquette/imhandler/GetTokenHandler.java b/broker/src/main/java/io/moquette/imhandler/GetTokenHandler.java index 1ce59ab9..f1e4e9b2 100644 --- a/broker/src/main/java/io/moquette/imhandler/GetTokenHandler.java +++ b/broker/src/main/java/io/moquette/imhandler/GetTokenHandler.java @@ -26,6 +26,11 @@ public class GetTokenHandler extends IMHandler { if(userInfo != null && userInfo.getType() == 1) { return ErrorCode.ERROR_CODE_ROBOT_NO_TOKEN; } + if((session.isPcClient() || session.isPadClient())) { + if(m_messagesStore.isLocked(session.getUsername(), session.getClientID())) { + m_messagesStore.updateUserSettings(session.getUsername(), WFCMessage.ModifyUserSettingReq.newBuilder().setScope(UserSettingScopeLockPC).setKey(session.getClientID()).setValue("0").build(), null); + } + } TokenAuthenticator authenticator = new TokenAuthenticator(); String strToken = authenticator.generateToken(fromUser); diff --git a/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java b/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java index e48d07b6..2571a52d 100755 --- a/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java +++ b/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java @@ -3024,13 +3024,6 @@ public class MemoryMessagesStore implements IMessagesStore { return; } - if(!online && (session.isPcClient()) || session.isPadClient()) { - WFCMessage.UserSettingEntry lockSetting = getUserSetting(session.getUsername(), UserSettingScopeLockPC, session.getClientID()); - if(lockSetting != null && "1".equals(lockSetting.getValue())) { - updateUserSettings(session.getUsername(), WFCMessage.ModifyUserSettingReq.newBuilder().setScope(UserSettingScopeLockPC).setKey(session.getClientID()).setValue("0").build(), null); - } - } - String pcValue = null; String padValue = null; for (MemorySessionStore.Session s : m_Server.getStore().sessionsStore().sessionForUser(session.username)) { @@ -4552,6 +4545,15 @@ public class MemoryMessagesStore implements IMessagesStore { } } + @Override + public boolean isLocked(String userId, String clientId) { + WFCMessage.UserSettingEntry lockSetting = getUserSetting(userId, UserSettingScopeLockPC, clientId); + if(lockSetting != null && "1".equals(lockSetting.getValue())) { + return true; + } + return false; + } + @Override public boolean getUserGlobalSilent(String userId) { Boolean slient = userGlobalSlientMap.get(userId); diff --git a/broker/src/main/java/io/moquette/spi/IMessagesStore.java b/broker/src/main/java/io/moquette/spi/IMessagesStore.java index 8876ec20..7e5b934e 100755 --- a/broker/src/main/java/io/moquette/spi/IMessagesStore.java +++ b/broker/src/main/java/io/moquette/spi/IMessagesStore.java @@ -208,6 +208,9 @@ public interface IMessagesStore { List getUserSetting(String userId, int scope); long updateUserSettings(String userId, WFCMessage.ModifyUserSettingReq request, String clientId); void clearUserSettings(String userId); + + boolean isLocked(String userId, String clientId); + boolean getUserGlobalSilent(String userId); boolean getUserVoipSilent(String userId);