From a2740e15de10e3ba7ee504980379fb3271fed16f Mon Sep 17 00:00:00 2001 From: MaxKey Date: Thu, 31 Mar 2022 11:02:51 +0800 Subject: [PATCH] authn --- .../authn/AbstractAuthenticationProvider.java | 6 +- .../authn/RealmAuthenticationProvider.java | 13 +- .../authn/{ => annotation}/CurrentUser.java | 2 +- .../maxkey/authn/annotation/package-info.java | 1 + .../authn/interceptor/package-info.java | 1 - .../realm/AbstractAuthenticationRealm.java | 30 ++-- .../CurrentUserMethodArgumentResolver.java | 4 +- .../authn}/web/SessionListenerAdapter.java | 39 +++-- .../SessionSecurityContextHolderStrategy.java | 4 +- .../interceptor/PermissionAdapter.java | 2 +- .../authn/web/interceptor/package-info.java | 1 + .../org/maxkey/authn/web/package-info.java | 1 + .../AuthenticationAutoConfiguration.java | 11 ++ .../autoconfigure/MvcAutoConfiguration.java | 11 -- .../main/java/org/maxkey/entity/UserInfo.java | 12 +- .../org/maxkey/web/InitializeContext.java | 4 - .../java/org/maxkey/web/WebConstants.java | 2 - .../main/java/org/maxkey/web/WebContext.java | 2 - .../persistence/service/GroupsService.java | 20 +-- .../mapper/xml/mysql/GroupMemberMapper.xml | 6 +- .../contorller/LoginSessionController.java | 5 +- .../interceptor/HistoryLoginAppAdapter.java | 2 +- .../java/org/maxkey/MaxKeyMgtMvcConfig.java | 14 +- .../contorller/GroupMemberController.java | 4 +- .../contorller/GroupPrivilegesController.java | 4 +- .../access/contorller/GroupsController.java | 115 +++++++++++++ .../contorller/LoginSessionController.java | 29 ++-- .../web/access/contorller/package-info.java | 1 + .../apps/contorller/AdaptersController.java | 150 ----------------- .../AccountsStrategyController.java | 2 +- .../config/contorller/AdaptersController.java | 106 ++++++++++++ .../contorller/EmailSendersController.java | 80 ++++++++++ .../contorller/InstitutionsController.java | 2 +- .../contorller/LdapContextController.java | 74 +++++++++ .../contorller/LocalizationController.java | 2 +- .../contorller/NoticesController.java | 2 +- .../contorller/PasswordPolicyController.java | 104 ++++++++++++ .../contorller/SmsProviderController.java | 74 +++++++++ .../contorller/SocialsProviderController.java | 115 +++++++++++++ .../contorller/SynchronizersController.java | 80 ++++------ .../web/config/contorller/package-info.java | 1 + .../DashboardController.java} | 8 +- .../contorller/EmailSendersController.java | 93 ----------- .../web/contorller/GroupsController.java | 151 ------------------ .../web/contorller/LdapContextController.java | 87 ---------- .../LoginEndpoint.java | 2 +- .../LogoutEndpoint.java | 2 +- .../contorller/PasswordPolicyController.java | 121 -------------- .../web/contorller/RolesController.java | 151 ------------------ .../web/contorller/SmsProviderController.java | 86 ---------- .../contorller/SocialsProviderController.java | 144 ----------------- .../ConnectorHistoryController.java | 4 +- .../LoginAppsHistoryController.java | 4 +- .../contorller/LoginHistoryController.java | 4 +- .../SynchronizerHistoryController.java | 4 +- .../contorller/SystemLogsController.java | 4 +- .../contorller/PermissionsController.java | 2 +- .../contorller/ResourcesController.java | 2 +- .../contorller/RoleMemberController.java | 2 +- .../contorller/RolesController.java | 114 +++++++++++++ .../permissions/contorller/package-info.java | 1 + 61 files changed, 955 insertions(+), 1169 deletions(-) rename maxkey-authentications/maxkey-authentication-core/src/main/java/org/maxkey/authn/{ => annotation}/CurrentUser.java (89%) create mode 100644 maxkey-authentications/maxkey-authentication-core/src/main/java/org/maxkey/authn/annotation/package-info.java delete mode 100644 maxkey-authentications/maxkey-authentication-core/src/main/java/org/maxkey/authn/interceptor/package-info.java rename maxkey-authentications/maxkey-authentication-core/src/main/java/org/maxkey/authn/{ => web}/CurrentUserMethodArgumentResolver.java (93%) rename {maxkey-core/src/main/java/org/maxkey => maxkey-authentications/maxkey-authentication-core/src/main/java/org/maxkey/authn}/web/SessionListenerAdapter.java (66%) rename {maxkey-core/src/main/java/org/maxkey => maxkey-authentications/maxkey-authentication-core/src/main/java/org/maxkey/authn}/web/SessionSecurityContextHolderStrategy.java (95%) rename maxkey-authentications/maxkey-authentication-core/src/main/java/org/maxkey/authn/{ => web}/interceptor/PermissionAdapter.java (98%) create mode 100644 maxkey-authentications/maxkey-authentication-core/src/main/java/org/maxkey/authn/web/interceptor/package-info.java create mode 100644 maxkey-authentications/maxkey-authentication-core/src/main/java/org/maxkey/authn/web/package-info.java rename maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/{ => access}/contorller/GroupMemberController.java (98%) rename maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/{ => access}/contorller/GroupPrivilegesController.java (98%) create mode 100644 maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/access/contorller/GroupsController.java rename maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/{historys => access}/contorller/LoginSessionController.java (80%) create mode 100644 maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/access/contorller/package-info.java delete mode 100644 maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/apps/contorller/AdaptersController.java rename maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/{ => config}/contorller/AccountsStrategyController.java (99%) create mode 100644 maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/config/contorller/AdaptersController.java create mode 100644 maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/config/contorller/EmailSendersController.java rename maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/{ => config}/contorller/InstitutionsController.java (98%) create mode 100644 maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/config/contorller/LdapContextController.java rename maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/{ => config}/contorller/LocalizationController.java (98%) rename maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/{ => config}/contorller/NoticesController.java (99%) create mode 100644 maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/config/contorller/PasswordPolicyController.java create mode 100644 maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/config/contorller/SmsProviderController.java create mode 100644 maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/config/contorller/SocialsProviderController.java rename maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/{ => config}/contorller/SynchronizersController.java (57%) create mode 100644 maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/config/contorller/package-info.java rename maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/{endpoint/IndexEndpoint.java => contorller/DashboardController.java} (92%) delete mode 100644 maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/contorller/EmailSendersController.java delete mode 100644 maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/contorller/GroupsController.java delete mode 100644 maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/contorller/LdapContextController.java rename maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/{endpoint => contorller}/LoginEndpoint.java (99%) rename maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/{endpoint => contorller}/LogoutEndpoint.java (98%) delete mode 100644 maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/contorller/PasswordPolicyController.java delete mode 100644 maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/contorller/RolesController.java delete mode 100644 maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/contorller/SmsProviderController.java delete mode 100644 maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/contorller/SocialsProviderController.java rename maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/{ => permissions}/contorller/PermissionsController.java (99%) rename maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/{ => permissions}/contorller/ResourcesController.java (99%) rename maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/{ => permissions}/contorller/RoleMemberController.java (99%) create mode 100644 maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/permissions/contorller/RolesController.java create mode 100644 maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/permissions/contorller/package-info.java diff --git a/maxkey-authentications/maxkey-authentication-core/src/main/java/org/maxkey/authn/AbstractAuthenticationProvider.java b/maxkey-authentications/maxkey-authentication-core/src/main/java/org/maxkey/authn/AbstractAuthenticationProvider.java index 0dd603021..960c8a192 100644 --- a/maxkey-authentications/maxkey-authentication-core/src/main/java/org/maxkey/authn/AbstractAuthenticationProvider.java +++ b/maxkey-authentications/maxkey-authentication-core/src/main/java/org/maxkey/authn/AbstractAuthenticationProvider.java @@ -118,7 +118,7 @@ public abstract class AbstractAuthenticationProvider { changeSession(authentication); - authenticationRealm.insertLoginHistory( WebContext.getUserInfo(), + authenticationRealm.insertLoginHistory(((SigninPrincipal) authentication.getPrincipal()).getUserInfo(), ConstsLoginType.LOCAL, "", "xe00000004", @@ -141,10 +141,6 @@ public abstract class AbstractAuthenticationProvider { for(String attributeName : WebContext.sessionAttributeNameList) { WebContext.setAttribute(attributeName, sessionAttributeMap.get(attributeName)); } - - _logger.debug("Login Success Session {} Mapping to user Session {}.", - WebContext.getSession().getId(), - WebContext.getAttribute(WebConstants.CURRENT_USER_SESSION_ID)); } diff --git a/maxkey-authentications/maxkey-authentication-core/src/main/java/org/maxkey/authn/RealmAuthenticationProvider.java b/maxkey-authentications/maxkey-authentication-core/src/main/java/org/maxkey/authn/RealmAuthenticationProvider.java index 624cfe03b..7481841ad 100644 --- a/maxkey-authentications/maxkey-authentication-core/src/main/java/org/maxkey/authn/RealmAuthenticationProvider.java +++ b/maxkey-authentications/maxkey-authentication-core/src/main/java/org/maxkey/authn/RealmAuthenticationProvider.java @@ -189,6 +189,7 @@ public class RealmAuthenticationProvider extends AbstractAuthenticationProvider this.applicationConfig.getBaseDomainName(), WebConstants.ONLINE_TICKET_NAME, onlineTickitId); + userInfo.setOnlineTicket(currentUserSessionId); SigninPrincipal signinPrincipal = new SigninPrincipal(userInfo); //set OnlineTicket @@ -218,20 +219,14 @@ public class RealmAuthenticationProvider extends AbstractAuthenticationProvider onlineTicket.setAuthentication(authenticationToken); + //store onlineTicket this.onlineTicketServices.store(onlineTickitId, onlineTicket); /* - * put userInfo to current session context + * put Authentication to current session context */ - WebContext.setUserInfo(userInfo); - WebContext.setAuthentication(authenticationToken); - - WebContext.setAttribute(WebConstants.CURRENT_USER_SESSION_ID, currentUserSessionId); - - if(!WebContext.getInst(WebContext.getRequest()).equalsIgnoreCase(userInfo.getInstId())){ - //TODO : - } + return authenticationToken; } diff --git a/maxkey-authentications/maxkey-authentication-core/src/main/java/org/maxkey/authn/CurrentUser.java b/maxkey-authentications/maxkey-authentication-core/src/main/java/org/maxkey/authn/annotation/CurrentUser.java similarity index 89% rename from maxkey-authentications/maxkey-authentication-core/src/main/java/org/maxkey/authn/CurrentUser.java rename to maxkey-authentications/maxkey-authentication-core/src/main/java/org/maxkey/authn/annotation/CurrentUser.java index 610e2c37f..b1a114a00 100644 --- a/maxkey-authentications/maxkey-authentication-core/src/main/java/org/maxkey/authn/CurrentUser.java +++ b/maxkey-authentications/maxkey-authentication-core/src/main/java/org/maxkey/authn/annotation/CurrentUser.java @@ -1,4 +1,4 @@ -package org.maxkey.authn; +package org.maxkey.authn.annotation; import java.lang.annotation.Documented; import java.lang.annotation.Retention; diff --git a/maxkey-authentications/maxkey-authentication-core/src/main/java/org/maxkey/authn/annotation/package-info.java b/maxkey-authentications/maxkey-authentication-core/src/main/java/org/maxkey/authn/annotation/package-info.java new file mode 100644 index 000000000..1fac679e2 --- /dev/null +++ b/maxkey-authentications/maxkey-authentication-core/src/main/java/org/maxkey/authn/annotation/package-info.java @@ -0,0 +1 @@ +package org.maxkey.authn.annotation; \ No newline at end of file diff --git a/maxkey-authentications/maxkey-authentication-core/src/main/java/org/maxkey/authn/interceptor/package-info.java b/maxkey-authentications/maxkey-authentication-core/src/main/java/org/maxkey/authn/interceptor/package-info.java deleted file mode 100644 index ded056341..000000000 --- a/maxkey-authentications/maxkey-authentication-core/src/main/java/org/maxkey/authn/interceptor/package-info.java +++ /dev/null @@ -1 +0,0 @@ -package org.maxkey.authn.interceptor; \ No newline at end of file diff --git a/maxkey-authentications/maxkey-authentication-core/src/main/java/org/maxkey/authn/realm/AbstractAuthenticationRealm.java b/maxkey-authentications/maxkey-authentication-core/src/main/java/org/maxkey/authn/realm/AbstractAuthenticationRealm.java index f8c4ac2d6..dbf7ba193 100644 --- a/maxkey-authentications/maxkey-authentication-core/src/main/java/org/maxkey/authn/realm/AbstractAuthenticationRealm.java +++ b/maxkey-authentications/maxkey-authentication-core/src/main/java/org/maxkey/authn/realm/AbstractAuthenticationRealm.java @@ -22,6 +22,7 @@ import java.util.Date; import java.util.List; import javax.servlet.http.HttpServletResponse; +import org.maxkey.authn.SigninPrincipal; import org.maxkey.authn.realm.ldap.LdapAuthenticationRealmService; import org.maxkey.authn.support.rememberme.AbstractRemeberMeService; import org.maxkey.entity.Groups; @@ -38,6 +39,7 @@ import org.maxkey.web.ipregion.IpRegionFactory; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.security.core.Authentication; import org.springframework.security.core.GrantedAuthority; /** @@ -135,9 +137,10 @@ public abstract class AbstractAuthenticationRealm { HistoryLogin historyLogin = new HistoryLogin(); historyLogin.setSessionId(WebContext.genId()); historyLogin.setSessionStatus(7); - if(WebContext.getAttribute(WebConstants.CURRENT_USER_SESSION_ID) != null) { - historyLogin.setSessionStatus(1); - historyLogin.setSessionId(WebContext.getAttribute(WebConstants.CURRENT_USER_SESSION_ID).toString()); + Authentication authentication = (Authentication ) WebContext.getAttribute(WebConstants.AUTHENTICATION); + if(authentication.getPrincipal() instanceof SigninPrincipal) { + historyLogin.setSessionStatus(1); + historyLogin.setSessionId(userInfo.getOnlineTicket()); } _logger.debug("user session id is {} . ",historyLogin.getSessionId()); @@ -174,24 +177,23 @@ public abstract class AbstractAuthenticationRealm { * @return */ public boolean logout(HttpServletResponse response) { - if (isAuthenticated()) { - Object sessionIdAttribute = WebContext.getAttribute(WebConstants.CURRENT_USER_SESSION_ID); - UserInfo userInfo = WebContext.getUserInfo(); + Authentication authentication = (Authentication ) WebContext.getAttribute(WebConstants.AUTHENTICATION); + + if(authentication != null && authentication.getPrincipal() instanceof SigninPrincipal) { + SigninPrincipal signinPrincipal = ((SigninPrincipal) authentication.getPrincipal()); + UserInfo userInfo = signinPrincipal.getUserInfo(); userInfo.setLastLogoffTime(DateUtils.formatDateTime(new Date())); - if (sessionIdAttribute != null) { - remeberMeService.removeRemeberMe(response); + remeberMeService.removeRemeberMe(response); + + loginHistoryRepository.logoff(userInfo.getLastLogoffTime(), signinPrincipal.getOnlineTicket().getTicketId()); - loginHistoryRepository.logoff(userInfo.getLastLogoffTime(), sessionIdAttribute.toString()); - } loginRepository.updateLastLogoff(userInfo); - _logger.debug("Session " + WebContext.getAttribute(WebConstants.CURRENT_USER_SESSION_ID) + ", user " + _logger.debug("Session " + signinPrincipal.getOnlineTicket().getTicketId() + ", user " + userInfo.getUsername() + " Logout, datetime " + userInfo.getLastLogoffTime() + " ."); - //remove login user session id - WebContext.removeAttribute(WebConstants.CURRENT_USER_SESSION_ID); - } + } return true; } diff --git a/maxkey-authentications/maxkey-authentication-core/src/main/java/org/maxkey/authn/CurrentUserMethodArgumentResolver.java b/maxkey-authentications/maxkey-authentication-core/src/main/java/org/maxkey/authn/web/CurrentUserMethodArgumentResolver.java similarity index 93% rename from maxkey-authentications/maxkey-authentication-core/src/main/java/org/maxkey/authn/CurrentUserMethodArgumentResolver.java rename to maxkey-authentications/maxkey-authentication-core/src/main/java/org/maxkey/authn/web/CurrentUserMethodArgumentResolver.java index 207ab4c85..8cefcc173 100644 --- a/maxkey-authentications/maxkey-authentication-core/src/main/java/org/maxkey/authn/CurrentUserMethodArgumentResolver.java +++ b/maxkey-authentications/maxkey-authentication-core/src/main/java/org/maxkey/authn/web/CurrentUserMethodArgumentResolver.java @@ -1,5 +1,7 @@ -package org.maxkey.authn; +package org.maxkey.authn.web; +import org.maxkey.authn.SigninPrincipal; +import org.maxkey.authn.annotation.CurrentUser; import org.maxkey.entity.UserInfo; import org.maxkey.web.WebConstants; import org.springframework.core.MethodParameter; diff --git a/maxkey-core/src/main/java/org/maxkey/web/SessionListenerAdapter.java b/maxkey-authentications/maxkey-authentication-core/src/main/java/org/maxkey/authn/web/SessionListenerAdapter.java similarity index 66% rename from maxkey-core/src/main/java/org/maxkey/web/SessionListenerAdapter.java rename to maxkey-authentications/maxkey-authentication-core/src/main/java/org/maxkey/authn/web/SessionListenerAdapter.java index 16679ed27..8c0556111 100644 --- a/maxkey-core/src/main/java/org/maxkey/web/SessionListenerAdapter.java +++ b/maxkey-authentications/maxkey-authentication-core/src/main/java/org/maxkey/authn/web/SessionListenerAdapter.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.maxkey.web; +package org.maxkey.authn.web; import java.util.Date; @@ -23,12 +23,16 @@ import javax.servlet.http.HttpSessionEvent; import javax.servlet.http.HttpSessionListener; import org.apache.mybatis.jpa.util.WebContext; +import org.maxkey.authn.SigninPrincipal; import org.maxkey.entity.UserInfo; import org.maxkey.persistence.repository.LoginHistoryRepository; import org.maxkey.persistence.repository.LoginRepository; import org.maxkey.util.DateUtils; +import org.maxkey.web.WebConstants; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.context.SecurityContextHolder; @WebListener public class SessionListenerAdapter implements HttpSessionListener { @@ -57,6 +61,8 @@ public class SessionListenerAdapter implements HttpSessionListener { loginHistoryRepository = (LoginHistoryRepository)WebContext.getBean("loginHistoryRepository"); _logger.debug("SessionListenerAdapter function inited . "); } + _logger.info("SecurityContextHolder StrategyName " + SessionSecurityContextHolderStrategy.class.getCanonicalName()); + SecurityContextHolder.setStrategyName(SessionSecurityContextHolderStrategy.class.getCanonicalName()); } /** * session Created @@ -72,21 +78,22 @@ public class SessionListenerAdapter implements HttpSessionListener { @Override public void sessionDestroyed(HttpSessionEvent sessionEvent) { HttpSession session = sessionEvent.getSession(); - Object sessionIdAttribute = session.getAttribute(WebConstants.CURRENT_USER_SESSION_ID); - _logger.trace("session Id : " + session.getId()); - if(sessionIdAttribute != null) { - init(); - UserInfo userInfo = (UserInfo)session.getAttribute(WebConstants.CURRENT_USER); - userInfo.setLastLogoffTime(DateUtils.formatDateTime(new Date())); - loginRepository.updateLastLogoff(userInfo); - loginHistoryRepository.logoff(userInfo.getLastLogoffTime(), sessionIdAttribute.toString()); - - _logger.debug( - "session {} Destroyed as {} userId : {} , username : {}" , - sessionIdAttribute, - userInfo.getLastLogoffTime(), - userInfo.getId(), - userInfo.getUsername()); + Authentication authentication = (Authentication ) session.getAttribute(WebConstants.AUTHENTICATION); + if(authentication != null && authentication.getPrincipal() instanceof SigninPrincipal) { + SigninPrincipal signinPrincipal = ((SigninPrincipal) authentication.getPrincipal()); + _logger.trace("session Id : " + session.getId()); + init(); + UserInfo userInfo = signinPrincipal.getUserInfo(); + userInfo.setLastLogoffTime(DateUtils.formatDateTime(new Date())); + loginRepository.updateLastLogoff(userInfo); + loginHistoryRepository.logoff(userInfo.getLastLogoffTime(), userInfo.getOnlineTicket()); + + _logger.debug( + "session {} Destroyed as {} userId : {} , username : {}" , + userInfo.getOnlineTicket(), + userInfo.getLastLogoffTime(), + userInfo.getId(), + userInfo.getUsername()); } } diff --git a/maxkey-core/src/main/java/org/maxkey/web/SessionSecurityContextHolderStrategy.java b/maxkey-authentications/maxkey-authentication-core/src/main/java/org/maxkey/authn/web/SessionSecurityContextHolderStrategy.java similarity index 95% rename from maxkey-core/src/main/java/org/maxkey/web/SessionSecurityContextHolderStrategy.java rename to maxkey-authentications/maxkey-authentication-core/src/main/java/org/maxkey/authn/web/SessionSecurityContextHolderStrategy.java index 1b7b8b047..ad6f17915 100644 --- a/maxkey-core/src/main/java/org/maxkey/web/SessionSecurityContextHolderStrategy.java +++ b/maxkey-authentications/maxkey-authentication-core/src/main/java/org/maxkey/authn/web/SessionSecurityContextHolderStrategy.java @@ -15,8 +15,10 @@ */ -package org.maxkey.web; +package org.maxkey.authn.web; +import org.maxkey.web.WebConstants; +import org.maxkey.web.WebContext; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.security.core.Authentication; diff --git a/maxkey-authentications/maxkey-authentication-core/src/main/java/org/maxkey/authn/interceptor/PermissionAdapter.java b/maxkey-authentications/maxkey-authentication-core/src/main/java/org/maxkey/authn/web/interceptor/PermissionAdapter.java similarity index 98% rename from maxkey-authentications/maxkey-authentication-core/src/main/java/org/maxkey/authn/interceptor/PermissionAdapter.java rename to maxkey-authentications/maxkey-authentication-core/src/main/java/org/maxkey/authn/web/interceptor/PermissionAdapter.java index 5ab7f6c66..b52df56bf 100644 --- a/maxkey-authentications/maxkey-authentication-core/src/main/java/org/maxkey/authn/interceptor/PermissionAdapter.java +++ b/maxkey-authentications/maxkey-authentication-core/src/main/java/org/maxkey/authn/web/interceptor/PermissionAdapter.java @@ -15,7 +15,7 @@ */ -package org.maxkey.authn.interceptor; +package org.maxkey.authn.web.interceptor; import javax.servlet.RequestDispatcher; import javax.servlet.http.HttpServletRequest; diff --git a/maxkey-authentications/maxkey-authentication-core/src/main/java/org/maxkey/authn/web/interceptor/package-info.java b/maxkey-authentications/maxkey-authentication-core/src/main/java/org/maxkey/authn/web/interceptor/package-info.java new file mode 100644 index 000000000..2391b76d0 --- /dev/null +++ b/maxkey-authentications/maxkey-authentication-core/src/main/java/org/maxkey/authn/web/interceptor/package-info.java @@ -0,0 +1 @@ +package org.maxkey.authn.web.interceptor; \ No newline at end of file diff --git a/maxkey-authentications/maxkey-authentication-core/src/main/java/org/maxkey/authn/web/package-info.java b/maxkey-authentications/maxkey-authentication-core/src/main/java/org/maxkey/authn/web/package-info.java new file mode 100644 index 000000000..5d70dd6c8 --- /dev/null +++ b/maxkey-authentications/maxkey-authentication-core/src/main/java/org/maxkey/authn/web/package-info.java @@ -0,0 +1 @@ +package org.maxkey.authn.web; \ No newline at end of file diff --git a/maxkey-authentications/maxkey-authentication-core/src/main/java/org/maxkey/autoconfigure/AuthenticationAutoConfiguration.java b/maxkey-authentications/maxkey-authentication-core/src/main/java/org/maxkey/autoconfigure/AuthenticationAutoConfiguration.java index 9e34b849f..40645a2a9 100644 --- a/maxkey-authentications/maxkey-authentication-core/src/main/java/org/maxkey/autoconfigure/AuthenticationAutoConfiguration.java +++ b/maxkey-authentications/maxkey-authentication-core/src/main/java/org/maxkey/autoconfigure/AuthenticationAutoConfiguration.java @@ -26,6 +26,7 @@ import org.maxkey.authn.online.OnlineTicketServiceFactory; import org.maxkey.authn.realm.AbstractAuthenticationRealm; import org.maxkey.authn.support.rememberme.AbstractRemeberMeService; import org.maxkey.authn.support.rememberme.RemeberMeServiceFactory; +import org.maxkey.authn.web.SessionListenerAdapter; import org.maxkey.configuration.ApplicationConfig; import org.maxkey.configuration.AuthJwkConfig; import org.maxkey.constants.ConstsPersistence; @@ -151,6 +152,16 @@ public class AuthenticationAutoConfiguration implements InitializingBean { return onlineTicketService; } + @Bean(name = "sessionListenerAdapter") + public SessionListenerAdapter sessionListenerAdapter( + LoginRepository loginRepository, + LoginHistoryRepository loginHistoryRepository + ) { + SessionListenerAdapter sessionListenerAdapter = + new SessionListenerAdapter(loginRepository,loginHistoryRepository); + return sessionListenerAdapter; + } + @Override public void afterPropertiesSet() throws Exception { diff --git a/maxkey-core/src/main/java/org/maxkey/autoconfigure/MvcAutoConfiguration.java b/maxkey-core/src/main/java/org/maxkey/autoconfigure/MvcAutoConfiguration.java index e70422443..375c19f2f 100644 --- a/maxkey-core/src/main/java/org/maxkey/autoconfigure/MvcAutoConfiguration.java +++ b/maxkey-core/src/main/java/org/maxkey/autoconfigure/MvcAutoConfiguration.java @@ -28,7 +28,6 @@ import org.maxkey.constants.ConstsTimeInterval; import org.maxkey.persistence.repository.InstitutionsRepository; import org.maxkey.persistence.repository.LoginHistoryRepository; import org.maxkey.persistence.repository.LoginRepository; -import org.maxkey.web.SessionListenerAdapter; import org.maxkey.web.WebXssRequestFilter; import org.maxkey.web.WebInstRequestFilter; import org.slf4j.Logger; @@ -314,16 +313,6 @@ public class MvcAutoConfiguration implements InitializingBean , WebMvcConfigurer return registrationBean; } - @Bean(name = "sessionListenerAdapter") - public SessionListenerAdapter sessionListenerAdapter( - LoginRepository loginRepository, - LoginHistoryRepository loginHistoryRepository - ) { - SessionListenerAdapter sessionListenerAdapter = - new SessionListenerAdapter(loginRepository,loginHistoryRepository); - return sessionListenerAdapter; - } - @Override public void afterPropertiesSet() throws Exception { diff --git a/maxkey-core/src/main/java/org/maxkey/entity/UserInfo.java b/maxkey-core/src/main/java/org/maxkey/entity/UserInfo.java index 9ef0b5acf..a8fb7800d 100644 --- a/maxkey-core/src/main/java/org/maxkey/entity/UserInfo.java +++ b/maxkey-core/src/main/java/org/maxkey/entity/UserInfo.java @@ -48,6 +48,8 @@ public class UserInfo extends JpaBaseEntity { public static final String DEFAULT_PASSWORD_SUFFIX = "MaxKey@888"; + String onlineTicket; + // @Id @Column @@ -385,7 +387,15 @@ public class UserInfo extends JpaBaseEntity { this.id = id; } - /** + public String getOnlineTicket() { + return onlineTicket; + } + + public void setOnlineTicket(String onlineTicket) { + this.onlineTicket = onlineTicket; + } + + /** * @param username */ public UserInfo(String username) { diff --git a/maxkey-core/src/main/java/org/maxkey/web/InitializeContext.java b/maxkey-core/src/main/java/org/maxkey/web/InitializeContext.java index d384c63aa..ae15cb7f0 100644 --- a/maxkey-core/src/main/java/org/maxkey/web/InitializeContext.java +++ b/maxkey-core/src/main/java/org/maxkey/web/InitializeContext.java @@ -40,7 +40,6 @@ import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.support.PropertySourcesPlaceholderConfigurer; import org.springframework.core.env.PropertySource; import org.springframework.core.env.StandardEnvironment; -import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.web.context.support.WebApplicationContextUtils; /** @@ -63,9 +62,6 @@ public class InitializeContext extends HttpServlet { public void init(ServletConfig config) throws ServletException { super.init(config); - _logger.info("SecurityContextHolder StrategyName " + SessionSecurityContextHolderStrategy.class.getCanonicalName()); - SecurityContextHolder.setStrategyName(SessionSecurityContextHolderStrategy.class.getCanonicalName()); - WebContext.applicationContext = applicationContext; org.apache.mybatis.jpa.util.WebContext.applicationContext = applicationContext; diff --git a/maxkey-core/src/main/java/org/maxkey/web/WebConstants.java b/maxkey-core/src/main/java/org/maxkey/web/WebConstants.java index 18177400c..40e929f30 100644 --- a/maxkey-core/src/main/java/org/maxkey/web/WebConstants.java +++ b/maxkey-core/src/main/java/org/maxkey/web/WebConstants.java @@ -31,8 +31,6 @@ public class WebConstants { public static final String CURRENT_USER = "current_user"; - public static final String CURRENT_USER_SESSION_ID = "current_user_session_id"; - public static final String CURRENT_COMPANY = "current_user_company"; public static final String CURRENT_DEPARTMENT = "current_user_department"; diff --git a/maxkey-core/src/main/java/org/maxkey/web/WebContext.java b/maxkey-core/src/main/java/org/maxkey/web/WebContext.java index bd03e95b1..2e8aaeeeb 100644 --- a/maxkey-core/src/main/java/org/maxkey/web/WebContext.java +++ b/maxkey-core/src/main/java/org/maxkey/web/WebContext.java @@ -84,7 +84,6 @@ public final class WebContext { sessionAttributeNameList.add(WebConstants.CURRENT_USER); sessionAttributeNameList.add(WebConstants.CURRENT_USER_PASSWORD_SET_TYPE); - sessionAttributeNameList.add(WebConstants.CURRENT_USER_SESSION_ID); sessionAttributeNameList.add(WebConstants.CURRENT_INST); @@ -100,7 +99,6 @@ public final class WebContext { logoutAttributeNameList.add(WebConstants.CURRENT_USER); logoutAttributeNameList.add(WebConstants.CURRENT_USER_PASSWORD_SET_TYPE); - logoutAttributeNameList.add(WebConstants.CURRENT_USER_SESSION_ID); logoutAttributeNameList.add(WebConstants.FIRST_SAVED_REQUEST_PARAMETER); diff --git a/maxkey-persistence/src/main/java/org/maxkey/persistence/service/GroupsService.java b/maxkey-persistence/src/main/java/org/maxkey/persistence/service/GroupsService.java index b4dde9571..be98256b4 100644 --- a/maxkey-persistence/src/main/java/org/maxkey/persistence/service/GroupsService.java +++ b/maxkey-persistence/src/main/java/org/maxkey/persistence/service/GroupsService.java @@ -80,7 +80,8 @@ public class GroupsService extends JpaBaseService implements Serializab boolean isDynamicTimeSupport = false; boolean isBetweenEffectiveTime = false; if(StringUtils.isNotBlank(dynamicGroup.getResumeTime()) - &&StringUtils.isNotBlank(dynamicGroup.getSuspendTime())) { + &&StringUtils.isNotBlank(dynamicGroup.getSuspendTime()) + &&!dynamicGroup.getSuspendTime().equals("00:00")) { LocalTime currentTime = LocalDateTime.now().toLocalTime(); LocalTime resumeTime = LocalTime.parse(dynamicGroup.getResumeTime()); LocalTime suspendTime = LocalTime.parse(dynamicGroup.getSuspendTime()); @@ -100,16 +101,17 @@ public class GroupsService extends JpaBaseService implements Serializab dynamicGroup.setOrgIdsList("'"+dynamicGroup.getOrgIdsList().replace(",", "','")+"'"); } String filters = dynamicGroup.getFilters(); - if(StringUtils.filtersSQLInjection(filters.toLowerCase())) { - _logger.info("filters include SQL Injection Attack Risk."); - return; + if(StringUtils.isNotBlank(filters)) { + if(StringUtils.filtersSQLInjection(filters.toLowerCase())) { + _logger.info("filters include SQL Injection Attack Risk."); + return; + } + filters = filters.replace("&", " AND "); + filters = filters.replace("|", " OR "); + + dynamicGroup.setFilters(filters); } - filters = filters.replace("&", " AND "); - filters = filters.replace("|", " OR "); - - dynamicGroup.setFilters(filters); - if(isDynamicTimeSupport) { if(isBetweenEffectiveTime) { groupMemberService.deleteDynamicGroupMember(dynamicGroup); diff --git a/maxkey-persistence/src/main/resources/org/maxkey/persistence/mapper/xml/mysql/GroupMemberMapper.xml b/maxkey-persistence/src/main/resources/org/maxkey/persistence/mapper/xml/mysql/GroupMemberMapper.xml index ea5cddfcc..fca4fe6e0 100644 --- a/maxkey-persistence/src/main/resources/org/maxkey/persistence/mapper/xml/mysql/GroupMemberMapper.xml +++ b/maxkey-persistence/src/main/resources/org/maxkey/persistence/mapper/xml/mysql/GroupMemberMapper.xml @@ -206,13 +206,15 @@ id, groupid, memberid, - type + type, + instid ) select concat('${id}',u.id) id, '${id}' groupid, u.id memberid, - 'USER-DYNAMIC' TYPE + 'USER-DYNAMIC' type, + '${instId}' instid from mxk_userinfo u where not exists( select 1 from mxk_group_member gm diff --git a/maxkey-webs/maxkey-web-maxkey/src/main/java/org/maxkey/web/historys/contorller/LoginSessionController.java b/maxkey-webs/maxkey-web-maxkey/src/main/java/org/maxkey/web/historys/contorller/LoginSessionController.java index 30534bcea..92e757afc 100644 --- a/maxkey-webs/maxkey-web-maxkey/src/main/java/org/maxkey/web/historys/contorller/LoginSessionController.java +++ b/maxkey-webs/maxkey-web-maxkey/src/main/java/org/maxkey/web/historys/contorller/LoginSessionController.java @@ -29,7 +29,6 @@ import org.maxkey.persistence.repository.LoginRepository; import org.maxkey.persistence.service.HistoryLoginService; import org.maxkey.util.DateUtils; import org.maxkey.util.StringUtils; -import org.maxkey.web.WebConstants; import org.maxkey.web.WebContext; import org.maxkey.web.message.Message; import org.maxkey.web.message.MessageType; @@ -97,9 +96,7 @@ public class LoginSessionController { boolean isTerminated = false; try { String currentUserSessionId = ""; - if(WebContext.getAttribute(WebConstants.CURRENT_USER_SESSION_ID) != null) { - currentUserSessionId = WebContext.getAttribute(WebConstants.CURRENT_USER_SESSION_ID).toString(); - } + for(String sessionId : StringUtils.string2List(ids, ",")) { _logger.trace("terminate session Id {} ",sessionId); if(currentUserSessionId.contains(sessionId)) { diff --git a/maxkey-webs/maxkey-web-maxkey/src/main/java/org/maxkey/web/interceptor/HistoryLoginAppAdapter.java b/maxkey-webs/maxkey-web-maxkey/src/main/java/org/maxkey/web/interceptor/HistoryLoginAppAdapter.java index 49bd36604..bd1b6e858 100644 --- a/maxkey-webs/maxkey-web-maxkey/src/main/java/org/maxkey/web/interceptor/HistoryLoginAppAdapter.java +++ b/maxkey-webs/maxkey-web-maxkey/src/main/java/org/maxkey/web/interceptor/HistoryLoginAppAdapter.java @@ -83,7 +83,7 @@ public class HistoryLoginAppAdapter implements AsyncHandlerInterceptor { _logger.debug("postHandle"); final Apps app = (Apps)WebContext.getAttribute(WebConstants.AUTHORIZE_SIGN_ON_APP); - String sessionId = (String)WebContext.getAttribute(WebConstants.CURRENT_USER_SESSION_ID); + String sessionId = "";//(String)WebContext.getAttribute(WebConstants.CURRENT_USER_SESSION_ID); final UserInfo userInfo = WebContext.getUserInfo(); _logger.debug("sessionId : " + sessionId + " ,appId : " + app.getId()); HistoryLoginApps historyLoginApps = new HistoryLoginApps(); diff --git a/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/MaxKeyMgtMvcConfig.java b/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/MaxKeyMgtMvcConfig.java index 3e428e5be..07a46afab 100644 --- a/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/MaxKeyMgtMvcConfig.java +++ b/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/MaxKeyMgtMvcConfig.java @@ -20,12 +20,12 @@ package org.maxkey; import java.util.List; import org.maxkey.authn.AbstractAuthenticationProvider; -import org.maxkey.authn.CurrentUserMethodArgumentResolver; -import org.maxkey.authn.interceptor.PermissionAdapter; import org.maxkey.authn.support.jwt.HttpJwtEntryPoint; import org.maxkey.authn.support.jwt.JwtLoginService; import org.maxkey.authn.support.rememberme.AbstractRemeberMeService; import org.maxkey.authn.support.rememberme.HttpRemeberMeEntryPoint; +import org.maxkey.authn.web.CurrentUserMethodArgumentResolver; +import org.maxkey.authn.web.interceptor.PermissionAdapter; import org.maxkey.configuration.ApplicationConfig; import org.maxkey.web.interceptor.HistoryLogsAdapter; import org.maxkey.web.interceptor.RestApiPermissionAdapter; @@ -126,13 +126,19 @@ public class MaxKeyMgtMvcConfig implements WebMvcConfigurer { .addPathPatterns("/roles/**") .addPathPatterns("/rolemembers/**") .addPathPatterns("/resources/**") + + .addPathPatterns("/access/**") + .addPathPatterns("/access/**/**") + .addPathPatterns("/permissions/**") + .addPathPatterns("/permissions/**/**") + .addPathPatterns("/config/**") .addPathPatterns("/config/**/**") - .addPathPatterns("/logs/**") + .addPathPatterns("/historys/**") .addPathPatterns("/historys/**/**") - .addPathPatterns("/session/**") + .addPathPatterns("/socialsprovider/**") .addPathPatterns("/accountsstrategy/**") .addPathPatterns("/institutions/**") diff --git a/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/contorller/GroupMemberController.java b/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/access/contorller/GroupMemberController.java similarity index 98% rename from maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/contorller/GroupMemberController.java rename to maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/access/contorller/GroupMemberController.java index 24b632f2a..ce2f78e13 100644 --- a/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/contorller/GroupMemberController.java +++ b/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/access/contorller/GroupMemberController.java @@ -15,7 +15,7 @@ */ -package org.maxkey.web.contorller; +package org.maxkey.web.access.contorller; import org.apache.mybatis.jpa.persistence.JpaPageResults; import org.maxkey.constants.ConstsOperateMessage; @@ -39,7 +39,7 @@ import org.springframework.web.servlet.ModelAndView; @Controller -@RequestMapping(value={"/groupMember"}) +@RequestMapping(value={"/access/groupmembers"}) public class GroupMemberController { final static Logger _logger = LoggerFactory.getLogger(GroupMemberController.class); diff --git a/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/contorller/GroupPrivilegesController.java b/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/access/contorller/GroupPrivilegesController.java similarity index 98% rename from maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/contorller/GroupPrivilegesController.java rename to maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/access/contorller/GroupPrivilegesController.java index 85164cb83..8af0d45a5 100644 --- a/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/contorller/GroupPrivilegesController.java +++ b/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/access/contorller/GroupPrivilegesController.java @@ -15,7 +15,7 @@ */ -package org.maxkey.web.contorller; +package org.maxkey.web.access.contorller; import org.apache.mybatis.jpa.persistence.JpaPageResults; import org.maxkey.constants.ConstsOperateMessage; @@ -38,7 +38,7 @@ import org.springframework.web.servlet.ModelAndView; @Controller -@RequestMapping(value={"/groupPrivileges"}) +@RequestMapping(value={"/access/privileges"}) public class GroupPrivilegesController { final static Logger _logger = LoggerFactory.getLogger(GroupPrivilegesController.class); diff --git a/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/access/contorller/GroupsController.java b/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/access/contorller/GroupsController.java new file mode 100644 index 000000000..7f0f74229 --- /dev/null +++ b/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/access/contorller/GroupsController.java @@ -0,0 +1,115 @@ +/* + * Copyright [2020] [MaxKey of copyright http://www.maxkey.top] + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +package org.maxkey.web.access.contorller; + +import org.apache.mybatis.jpa.persistence.JpaPageResults; +import org.maxkey.authn.annotation.CurrentUser; +import org.maxkey.entity.Groups; +import org.maxkey.entity.Message; +import org.maxkey.entity.UserInfo; +import org.maxkey.persistence.service.GroupsService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; + + +@Controller +@RequestMapping(value={"/access/groups"}) +public class GroupsController { + final static Logger _logger = LoggerFactory.getLogger(GroupsController.class); + + @Autowired + GroupsService groupsService; + + @RequestMapping(value = { "/fetch" }, produces = {MediaType.APPLICATION_JSON_VALUE}) + @ResponseBody + public ResponseEntity fetch( + @ModelAttribute Groups groups, + @CurrentUser UserInfo currentUser) { + _logger.debug(""+groups); + groups.setInstId(currentUser.getInstId()); + return new Message>( + groupsService.queryPageResults(groups)).buildResponse(); + } + + @ResponseBody + @RequestMapping(value={"/query"}, produces = {MediaType.APPLICATION_JSON_VALUE}) + public ResponseEntity query(@ModelAttribute Groups group,@CurrentUser UserInfo currentUser) { + _logger.debug("-query :" + group); + group.setInstId(currentUser.getInstId()); + if (groupsService.load(group)!=null) { + return new Message(Message.SUCCESS).buildResponse(); + } else { + return new Message(Message.FAIL).buildResponse(); + } + + } + + @RequestMapping(value = { "/get/{id}" }, produces = {MediaType.APPLICATION_JSON_VALUE}) + public ResponseEntity get(@PathVariable("id") String id,@CurrentUser UserInfo currentUser) { + Groups group=groupsService.get(id); + return new Message(group).buildResponse(); + } + + @ResponseBody + @RequestMapping(value={"/add"}, produces = {MediaType.APPLICATION_JSON_VALUE}) + public ResponseEntity insert(@RequestBody Groups group,@CurrentUser UserInfo currentUser) { + _logger.debug("-Add :" + group); + group.setInstId(currentUser.getInstId()); + if (groupsService.insert(group)) { + groupsService.refreshDynamicGroups(group); + return new Message(Message.SUCCESS).buildResponse(); + } else { + return new Message(Message.FAIL).buildResponse(); + } + } + + @ResponseBody + @RequestMapping(value={"/update"}, produces = {MediaType.APPLICATION_JSON_VALUE}) + public ResponseEntity update(@RequestBody Groups group,@CurrentUser UserInfo currentUser) { + _logger.debug("-update group :" + group); + group.setInstId(currentUser.getInstId()); + if (groupsService.update(group)) { + groupsService.refreshDynamicGroups(group); + return new Message(Message.SUCCESS).buildResponse(); + } else { + return new Message(Message.FAIL).buildResponse(); + } + } + + @ResponseBody + @RequestMapping(value={"/delete"}, produces = {MediaType.APPLICATION_JSON_VALUE}) + public ResponseEntity delete(@RequestParam("ids") String ids,@CurrentUser UserInfo currentUser) { + _logger.debug("-delete ids : {}" , ids); + + if (groupsService.deleteBatch(ids)) { + return new Message(Message.SUCCESS).buildResponse(); + } else { + return new Message(Message.FAIL).buildResponse(); + } + } +} diff --git a/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/historys/contorller/LoginSessionController.java b/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/access/contorller/LoginSessionController.java similarity index 80% rename from maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/historys/contorller/LoginSessionController.java rename to maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/access/contorller/LoginSessionController.java index a6d71d31d..5d67e29ef 100644 --- a/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/historys/contorller/LoginSessionController.java +++ b/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/access/contorller/LoginSessionController.java @@ -15,12 +15,12 @@ */ -package org.maxkey.web.historys.contorller; +package org.maxkey.web.access.contorller; import java.text.SimpleDateFormat; import java.util.Date; import org.apache.mybatis.jpa.persistence.JpaPageResults; -import org.maxkey.authn.CurrentUser; +import org.maxkey.authn.annotation.CurrentUser; import org.maxkey.authn.online.OnlineTicketService; import org.maxkey.entity.HistoryLogin; import org.maxkey.entity.Message; @@ -30,8 +30,6 @@ import org.maxkey.persistence.repository.LoginRepository; import org.maxkey.persistence.service.HistoryLoginService; import org.maxkey.util.DateUtils; import org.maxkey.util.StringUtils; -import org.maxkey.web.WebConstants; -import org.maxkey.web.WebContext; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -46,14 +44,14 @@ import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; /** - * 登录日志查询. + * 登录会话管理. * * @author Crystal.sea * */ @Controller -@RequestMapping(value = { "/session" }) +@RequestMapping(value = { "/access/session" }) public class LoginSessionController { static final Logger _logger = LoggerFactory.getLogger(LoginSessionController.class); @@ -66,7 +64,7 @@ public class LoginSessionController { LoginHistoryRepository loginHistoryRepository; @Autowired - OnlineTicketService onlineTicketServices; + OnlineTicketService onlineTicketService; /** * 查询登录日志. @@ -74,15 +72,15 @@ public class LoginSessionController { * @param logsAuth * @return */ - @RequestMapping(value = { "/sessionList/fetch" }) + @RequestMapping(value = { "/fetch" }) @ResponseBody public ResponseEntity fetch( @ModelAttribute("historyLogin") HistoryLogin historyLogin, @CurrentUser UserInfo currentUser) { _logger.debug("history/session/fetch {}" , historyLogin); - historyLogin.setInstId(WebContext.getUserInfo().getInstId()); + historyLogin.setInstId(currentUser.getInstId()); return new Message>( - historyLoginService.queryPageResults(historyLogin) + historyLoginService.queryOnlineSession(historyLogin) ).buildResponse(); } @@ -90,23 +88,19 @@ public class LoginSessionController { @ResponseBody @RequestMapping(value="/terminate") - public ResponseEntity deleteUsersById(@RequestParam("id") String ids,@CurrentUser UserInfo currentUser) { + public ResponseEntity terminate(@RequestParam("ids") String ids,@CurrentUser UserInfo currentUser) { _logger.debug(ids); boolean isTerminated = false; try { - String currentUserSessionId = ""; - if(WebContext.getAttribute(WebConstants.CURRENT_USER_SESSION_ID) != null) { - currentUserSessionId = WebContext.getAttribute(WebConstants.CURRENT_USER_SESSION_ID).toString(); - } for(String sessionId : StringUtils.string2List(ids, ",")) { _logger.trace("terminate session Id {} ",sessionId); - if(currentUserSessionId.contains(sessionId)) { + if(currentUser.getOnlineTicket().contains(sessionId)) { continue;//skip current session } String lastLogoffTime = DateUtils.formatDateTime(new Date()); loginRepository.updateLastLogoff(currentUser); loginHistoryRepository.logoff(lastLogoffTime, sessionId); - onlineTicketServices.remove("OT-" + sessionId); + onlineTicketService.remove("OT-" + sessionId); } isTerminated = true; }catch(Exception e) { @@ -119,6 +113,7 @@ public class LoginSessionController { return new Message(Message.ERROR).buildResponse(); } } + @InitBinder public void initBinder(WebDataBinder binder) { SimpleDateFormat dateFormat = new SimpleDateFormat(DateUtils.FORMAT_DATE_HH_MM_SS); diff --git a/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/access/contorller/package-info.java b/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/access/contorller/package-info.java new file mode 100644 index 000000000..2b2fa3501 --- /dev/null +++ b/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/access/contorller/package-info.java @@ -0,0 +1 @@ +package org.maxkey.web.access.contorller; \ No newline at end of file diff --git a/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/apps/contorller/AdaptersController.java b/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/apps/contorller/AdaptersController.java deleted file mode 100644 index aaa007dbb..000000000 --- a/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/apps/contorller/AdaptersController.java +++ /dev/null @@ -1,150 +0,0 @@ -/* - * Copyright [2020] [MaxKey of copyright http://www.maxkey.top] - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - -package org.maxkey.web.apps.contorller; - -import org.apache.mybatis.jpa.persistence.JpaPageResults; -import org.maxkey.constants.ConstsOperateMessage; -import org.maxkey.entity.apps.AppsAdapters; -import org.maxkey.persistence.service.AppsAdaptersService; -import org.maxkey.web.WebContext; -import org.maxkey.web.message.Message; -import org.maxkey.web.message.MessageType; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.ModelAttribute; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.servlet.ModelAndView; - - -@Controller -@RequestMapping(value={"/apps/adapters"}) -public class AdaptersController { - final static Logger _logger = LoggerFactory.getLogger(AdaptersController.class); - - @Autowired - @Qualifier("appsAdaptersService") - AppsAdaptersService appsAdaptersService; - - - - @RequestMapping(value={"/list"}) - public ModelAndView rolesList(){ - return new ModelAndView("apps/adapters/adaptersList"); - } - - @RequestMapping(value={"/selectAdaptersList"}) - public ModelAndView selectAdaptersList(@RequestParam(name="protocol",required=false) String protocol){ - ModelAndView modelAndView=new ModelAndView("apps/adapters/selectAdaptersList"); - modelAndView.addObject("protocol", protocol); - return modelAndView; - } - - - @RequestMapping(value = { "/grid" }) - @ResponseBody - public JpaPageResults queryDataGrid(@ModelAttribute("appsAdapter") AppsAdapters appsAdapter) { - _logger.debug(""+appsAdapter); - return appsAdaptersService.queryPageResults(appsAdapter); - } - - - @RequestMapping(value = { "/forwardAdd" }) - public ModelAndView forwardAdd() { - return new ModelAndView("apps/adapters/adapterAdd"); - } - - @RequestMapping(value = { "/forwardUpdate/{id}" }) - public ModelAndView forwardUpdate(@PathVariable("id") String id) { - ModelAndView modelAndView=new ModelAndView("apps/adapters/adapterUpdate"); - AppsAdapters appsAdapter=appsAdaptersService.get(id); - modelAndView.addObject("model",appsAdapter); - return modelAndView; - } - - @ResponseBody - @RequestMapping(value={"/add"}) - public Message insert(@ModelAttribute("appsAdapter") AppsAdapters appsAdapter) { - _logger.debug("-Add :" + appsAdapter); - - if (appsAdaptersService.insert(appsAdapter)) { - return new Message(WebContext.getI18nValue(ConstsOperateMessage.INSERT_SUCCESS),MessageType.success); - - } else { - return new Message(WebContext.getI18nValue(ConstsOperateMessage.INSERT_SUCCESS),MessageType.error); - } - - } - - /** - * 查询 - * @param role - * @return - */ - @ResponseBody - @RequestMapping(value={"/query"}) - public Message query(@ModelAttribute("appsAdapter") AppsAdapters appsAdapter) { - _logger.debug("-query :" + appsAdapter); - if (appsAdaptersService.load(appsAdapter)!=null) { - return new Message(WebContext.getI18nValue(ConstsOperateMessage.INSERT_SUCCESS),MessageType.success); - - } else { - return new Message(WebContext.getI18nValue(ConstsOperateMessage.INSERT_ERROR),MessageType.error); - } - - } - - /** - * 修改 - * @param role - * @return - */ - @ResponseBody - @RequestMapping(value={"/update"}) - public Message update(@ModelAttribute("appsAdapter") AppsAdapters appsAdapter) { - _logger.debug("-update appsAdapter :" + appsAdapter); - - if (appsAdaptersService.update(appsAdapter)) { - return new Message(WebContext.getI18nValue(ConstsOperateMessage.UPDATE_SUCCESS),MessageType.success); - - } else { - return new Message(WebContext.getI18nValue(ConstsOperateMessage.UPDATE_ERROR),MessageType.error); - } - - } - - - @ResponseBody - @RequestMapping(value={"/delete"}) - public Message delete(@ModelAttribute("appsAdapter") AppsAdapters appsAdapter) { - _logger.debug("-delete appsAdapter :" + appsAdapter); - - if (appsAdaptersService.deleteBatch(appsAdapter.getId())) { - return new Message(WebContext.getI18nValue(ConstsOperateMessage.DELETE_SUCCESS),MessageType.success); - - } else { - return new Message(WebContext.getI18nValue(ConstsOperateMessage.DELETE_SUCCESS),MessageType.error); - } - - } -} diff --git a/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/contorller/AccountsStrategyController.java b/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/config/contorller/AccountsStrategyController.java similarity index 99% rename from maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/contorller/AccountsStrategyController.java rename to maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/config/contorller/AccountsStrategyController.java index 00dcf5fea..e243b696a 100644 --- a/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/contorller/AccountsStrategyController.java +++ b/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/config/contorller/AccountsStrategyController.java @@ -15,7 +15,7 @@ */ -package org.maxkey.web.contorller; +package org.maxkey.web.config.contorller; import org.apache.mybatis.jpa.persistence.JpaPageResults; import org.maxkey.constants.ConstsOperateMessage; diff --git a/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/config/contorller/AdaptersController.java b/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/config/contorller/AdaptersController.java new file mode 100644 index 000000000..f2f2e8cba --- /dev/null +++ b/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/config/contorller/AdaptersController.java @@ -0,0 +1,106 @@ +/* + * Copyright [2020] [MaxKey of copyright http://www.maxkey.top] + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +package org.maxkey.web.config.contorller; + +import org.apache.mybatis.jpa.persistence.JpaPageResults; +import org.maxkey.authn.annotation.CurrentUser; +import org.maxkey.entity.Message; +import org.maxkey.entity.UserInfo; +import org.maxkey.entity.apps.AppsAdapters; +import org.maxkey.persistence.service.AppsAdaptersService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; + + +@Controller +@RequestMapping(value={"/config/adapters"}) +public class AdaptersController { + final static Logger _logger = LoggerFactory.getLogger(AdaptersController.class); + + @Autowired + AppsAdaptersService appsAdaptersService; + + @RequestMapping(value = { "/fetch" }, produces = {MediaType.APPLICATION_JSON_VALUE}) + @ResponseBody + public ResponseEntity fetch(@ModelAttribute AppsAdapters appsAdapter) { + _logger.debug(""+appsAdapter); + return new Message>( + appsAdaptersService.queryPageResults(appsAdapter)).buildResponse(); + } + + @ResponseBody + @RequestMapping(value={"/query"}, produces = {MediaType.APPLICATION_JSON_VALUE}) + public ResponseEntity query(@ModelAttribute AppsAdapters appsAdapter,@CurrentUser UserInfo currentUser) { + _logger.debug("-query :" + appsAdapter); + if (appsAdaptersService.load(appsAdapter)!=null) { + return new Message(Message.SUCCESS).buildResponse(); + } else { + return new Message(Message.SUCCESS).buildResponse(); + } + } + + @RequestMapping(value = { "/get/{id}" }, produces = {MediaType.APPLICATION_JSON_VALUE}) + public ResponseEntity get(@PathVariable("id") String id) { + AppsAdapters appsAdapter=appsAdaptersService.get(id); + return new Message(appsAdapter).buildResponse(); + } + + @ResponseBody + @RequestMapping(value={"/add"}, produces = {MediaType.APPLICATION_JSON_VALUE}) + public ResponseEntity insert(@RequestBody AppsAdapters appsAdapter,@CurrentUser UserInfo currentUser) { + _logger.debug("-Add :" + appsAdapter); + + if (appsAdaptersService.insert(appsAdapter)) { + return new Message(Message.SUCCESS).buildResponse(); + } else { + return new Message(Message.FAIL).buildResponse(); + } + } + + @ResponseBody + @RequestMapping(value={"/update"}, produces = {MediaType.APPLICATION_JSON_VALUE}) + public ResponseEntity update(@RequestBody AppsAdapters appsAdapter,@CurrentUser UserInfo currentUser) { + _logger.debug("-update :" + appsAdapter); + if (appsAdaptersService.update(appsAdapter)) { + return new Message(Message.SUCCESS).buildResponse(); + } else { + return new Message(Message.FAIL).buildResponse(); + } + } + + @ResponseBody + @RequestMapping(value={"/delete"}, produces = {MediaType.APPLICATION_JSON_VALUE}) + public ResponseEntity delete(@RequestParam("ids") String ids,@CurrentUser UserInfo currentUser) { + _logger.debug("-delete ids : {} " , ids); + if (appsAdaptersService.deleteBatch(ids)) { + return new Message(Message.SUCCESS).buildResponse(); + } else { + return new Message(Message.FAIL).buildResponse(); + } + } +} diff --git a/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/config/contorller/EmailSendersController.java b/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/config/contorller/EmailSendersController.java new file mode 100644 index 000000000..1fe0263a3 --- /dev/null +++ b/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/config/contorller/EmailSendersController.java @@ -0,0 +1,80 @@ +/* + * Copyright [2022] [MaxKey of copyright http://www.maxkey.top] + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +package org.maxkey.web.config.contorller; + +import org.apache.commons.lang3.StringUtils; +import org.maxkey.authn.annotation.CurrentUser; +import org.maxkey.crypto.password.PasswordReciprocal; +import org.maxkey.entity.EmailSenders; +import org.maxkey.entity.Message; +import org.maxkey.entity.UserInfo; +import org.maxkey.persistence.service.EmailSendersService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Controller; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +@Controller +@RequestMapping(value={"/config/emailsenders"}) +public class EmailSendersController { + final static Logger _logger = LoggerFactory.getLogger(EmailSendersController.class); + + @Autowired + private EmailSendersService emailSendersService; + + @RequestMapping(value={"/get"}) + public ResponseEntity get(@CurrentUser UserInfo currentUser){ + EmailSenders emailSenders = emailSendersService.get(currentUser.getInstId()); + if(emailSenders != null && StringUtils.isNotBlank(emailSenders.getCredentials())) { + emailSenders.setCredentials(PasswordReciprocal.getInstance().decoder(emailSenders.getCredentials())); + }else { + emailSenders =new EmailSenders(); + emailSenders.setProtocol("smtp"); + emailSenders.setEncoding("utf-8"); + } + return new Message(emailSenders).buildResponse(); + } + + @RequestMapping(value={"/update"}) + @ResponseBody + public ResponseEntity update( @RequestBody EmailSenders emailSenders,@CurrentUser UserInfo currentUser,BindingResult result) { + _logger.debug("update emailSenders : "+emailSenders); + emailSenders.setInstId(currentUser.getInstId()); + emailSenders.setCredentials(PasswordReciprocal.getInstance().encode(emailSenders.getCredentials())); + if(StringUtils.isBlank(emailSenders.getId())) { + emailSenders.setId(emailSenders.getInstId()); + if(emailSendersService.insert(emailSenders)) { + return new Message(Message.SUCCESS).buildResponse(); + }else { + return new Message(Message.ERROR).buildResponse(); + } + }else { + if(emailSendersService.update(emailSenders)) { + return new Message(Message.SUCCESS).buildResponse(); + }else { + return new Message(Message.ERROR).buildResponse(); + } + } + + } +} diff --git a/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/contorller/InstitutionsController.java b/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/config/contorller/InstitutionsController.java similarity index 98% rename from maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/contorller/InstitutionsController.java rename to maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/config/contorller/InstitutionsController.java index 29e794057..86d86eeca 100644 --- a/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/contorller/InstitutionsController.java +++ b/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/config/contorller/InstitutionsController.java @@ -15,7 +15,7 @@ */ -package org.maxkey.web.contorller; +package org.maxkey.web.config.contorller; import org.maxkey.constants.ConstsOperateMessage; import org.maxkey.entity.Institutions; diff --git a/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/config/contorller/LdapContextController.java b/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/config/contorller/LdapContextController.java new file mode 100644 index 000000000..ab409c560 --- /dev/null +++ b/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/config/contorller/LdapContextController.java @@ -0,0 +1,74 @@ +/* + * Copyright [2022] [MaxKey of copyright http://www.maxkey.top] + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +package org.maxkey.web.config.contorller; + +import org.apache.commons.lang3.StringUtils; +import org.maxkey.authn.annotation.CurrentUser; +import org.maxkey.crypto.password.PasswordReciprocal; +import org.maxkey.entity.LdapContext; +import org.maxkey.entity.Message; +import org.maxkey.entity.UserInfo; +import org.maxkey.persistence.service.LdapContextService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Controller; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +@Controller +@RequestMapping(value={"/config/ldapcontext"}) +public class LdapContextController { + final static Logger _logger = LoggerFactory.getLogger(LdapContextController.class); + + @Autowired + private LdapContextService ldapContextService; + + @RequestMapping(value={"/get"}, produces = {MediaType.APPLICATION_JSON_VALUE}) + public ResponseEntity get(@CurrentUser UserInfo currentUser){ + LdapContext ldapContext = ldapContextService.get(currentUser.getInstId()); + if(ldapContext != null && StringUtils.isNoneBlank(ldapContext.getCredentials())) { + ldapContext.setCredentials(PasswordReciprocal.getInstance().decoder(ldapContext.getCredentials())); + } + return new Message(ldapContext).buildResponse(); + } + + @RequestMapping(value={"/update"}) + @ResponseBody + public ResponseEntity update( @RequestBody LdapContext ldapContext,@CurrentUser UserInfo currentUser,BindingResult result) { + _logger.debug("update ldapContext : "+ldapContext); + ldapContext.setCredentials(PasswordReciprocal.getInstance().encode(ldapContext.getCredentials())); + ldapContext.setInstId(currentUser.getInstId()); + boolean updateResult = false; + if(StringUtils.isBlank(ldapContext.getId())) { + ldapContext.setId(ldapContext.getInstId()); + updateResult = ldapContextService.insert(ldapContext); + }else { + updateResult = ldapContextService.update(ldapContext); + } + if(updateResult) { + return new Message(Message.SUCCESS).buildResponse(); + } else { + return new Message(Message.FAIL).buildResponse(); + } + } +} diff --git a/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/contorller/LocalizationController.java b/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/config/contorller/LocalizationController.java similarity index 98% rename from maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/contorller/LocalizationController.java rename to maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/config/contorller/LocalizationController.java index 763a6a7cc..b6eaf853f 100644 --- a/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/contorller/LocalizationController.java +++ b/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/config/contorller/LocalizationController.java @@ -15,7 +15,7 @@ */ -package org.maxkey.web.contorller; +package org.maxkey.web.config.contorller; import org.apache.commons.lang3.StringUtils; import org.maxkey.constants.ConstsOperateMessage; diff --git a/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/contorller/NoticesController.java b/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/config/contorller/NoticesController.java similarity index 99% rename from maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/contorller/NoticesController.java rename to maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/config/contorller/NoticesController.java index 5bdfd459e..7b967bc57 100644 --- a/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/contorller/NoticesController.java +++ b/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/config/contorller/NoticesController.java @@ -15,7 +15,7 @@ */ -package org.maxkey.web.contorller; +package org.maxkey.web.config.contorller; import org.apache.mybatis.jpa.persistence.JpaPageResults; import org.maxkey.constants.ConstsOperateMessage; diff --git a/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/config/contorller/PasswordPolicyController.java b/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/config/contorller/PasswordPolicyController.java new file mode 100644 index 000000000..00fb6574f --- /dev/null +++ b/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/config/contorller/PasswordPolicyController.java @@ -0,0 +1,104 @@ +/* + * Copyright [2020] [MaxKey of copyright http://www.maxkey.top] + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +package org.maxkey.web.config.contorller; + +import javax.validation.Valid; + +import org.maxkey.authn.annotation.CurrentUser; +import org.maxkey.entity.Message; +import org.maxkey.entity.PasswordPolicy; +import org.maxkey.entity.UserInfo; +import org.maxkey.persistence.service.PasswordPolicyService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Controller; +import org.springframework.validation.BindingResult; +import org.springframework.validation.FieldError; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; + +@Controller +@RequestMapping(value={"/config/passwordpolicy"}) +public class PasswordPolicyController { + final static Logger _logger = LoggerFactory.getLogger(PasswordPolicyController.class); + + @Autowired + private PasswordPolicyService passwordPolicyService; + + @RequestMapping(value={"/get"}, produces = {MediaType.APPLICATION_JSON_VALUE}) + public ResponseEntity get(@CurrentUser UserInfo currentUser){ + PasswordPolicy passwordPolicy = passwordPolicyService.get(currentUser.getInstId()); + return new Message(passwordPolicy).buildResponse(); + } + + @RequestMapping(value={"/update"}, produces = {MediaType.APPLICATION_JSON_VALUE}) + public ResponseEntity update(@Valid @RequestBody PasswordPolicy passwordPolicy,@CurrentUser UserInfo currentUser,BindingResult result) { + _logger.debug("updateRole passwordPolicy : "+passwordPolicy); + //Message message = this.validate(result, passwordPolicy); + + if(passwordPolicyService.update(passwordPolicy)) { + return new Message(Message.SUCCESS).buildResponse(); + } else { + return new Message(Message.ERROR).buildResponse(); + } + } + + public Message validate(BindingResult result,PasswordPolicy passwordPolicy) { + if (result.hasErrors()) { + return new Message(result); + } + if(passwordPolicy.getMinLength() < 3) { + FieldError fe = new FieldError("passwordPolicy", "minLength", + passwordPolicy.getMinLength(), true, + new String[]{"ui.passwordpolicy.xe00000001"},//密码最小长度不能小于3位字符 + null, null); + result.addError(fe); + return new Message(result); + } + if(passwordPolicy.getMinLength() > passwordPolicy.getMaxLength()) { + FieldError fe = new FieldError("passwordPolicy", "maxLength", + passwordPolicy.getMinLength(), true, + new String[]{"ui.passwordpolicy.xe00000002"},//密码最大长度不能小于最小长度 + null, null); + result.addError(fe); + return new Message(result); + } + + if(passwordPolicy.getDigits() + passwordPolicy.getLowerCase() + passwordPolicy.getUpperCase() + passwordPolicy.getSpecialChar() < 2) { + FieldError fe = new FieldError("passwordPolicy", "specialChar", + 2, true, + new String[]{"ui.passwordpolicy.xe00000003"},//密码包含小写字母、大写字母、数字、特殊字符的个数不能小于2 + null, null); + result.addError(fe); + return new Message(result); + } + + if(passwordPolicy.getDigits() + passwordPolicy.getLowerCase() + passwordPolicy.getUpperCase() + passwordPolicy.getSpecialChar() > passwordPolicy.getMaxLength()) { + FieldError fe = new FieldError("passwordPolicy", "specialChar", + passwordPolicy.getMinLength(), true, + new String[]{"ui.passwordpolicy.xe00000004"},//密码包含小写字母、大写字母、数字、特殊字符的个数不能大于密码的最大长度 + null, null); + result.addError(fe); + return new Message(result); + } + return null; + } +} diff --git a/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/config/contorller/SmsProviderController.java b/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/config/contorller/SmsProviderController.java new file mode 100644 index 000000000..3e6a07ea2 --- /dev/null +++ b/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/config/contorller/SmsProviderController.java @@ -0,0 +1,74 @@ +/* + * Copyright [2022] [MaxKey of copyright http://www.maxkey.top] + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +package org.maxkey.web.config.contorller; + +import org.apache.commons.lang3.StringUtils; +import org.maxkey.authn.annotation.CurrentUser; +import org.maxkey.crypto.password.PasswordReciprocal; +import org.maxkey.entity.Message; +import org.maxkey.entity.SmsProvider; +import org.maxkey.entity.UserInfo; +import org.maxkey.persistence.service.SmsProviderService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Controller; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +@Controller +@RequestMapping(value={"/config/smsprovider"}) +public class SmsProviderController { + final static Logger _logger = LoggerFactory.getLogger(SmsProviderController.class); + + @Autowired + private SmsProviderService smsProviderService; + + @RequestMapping(value={"/get"}, produces = {MediaType.APPLICATION_JSON_VALUE}) + public ResponseEntity get(@CurrentUser UserInfo currentUser){ + SmsProvider smsProvider = smsProviderService.get(currentUser.getInstId()); + if(smsProvider != null && StringUtils.isNoneBlank(smsProvider.getId())) { + smsProvider.setAppSecret(PasswordReciprocal.getInstance().decoder(smsProvider.getAppSecret())); + } + return new Message(smsProvider).buildResponse(); + } + + @RequestMapping(value={"/update"}) + @ResponseBody + public ResponseEntity update( @RequestBody SmsProvider smsProvider,@CurrentUser UserInfo currentUser,BindingResult result) { + _logger.debug("update smsProvider : "+smsProvider); + smsProvider.setAppSecret(PasswordReciprocal.getInstance().encode(smsProvider.getAppSecret())); + smsProvider.setInstId(currentUser.getInstId()); + boolean updateResult = false; + if(StringUtils.isBlank(smsProvider.getId())) { + smsProvider.setId(smsProvider.getInstId()); + updateResult = smsProviderService.insert(smsProvider); + }else { + updateResult = smsProviderService.update(smsProvider); + } + if(updateResult) { + return new Message(Message.SUCCESS).buildResponse(); + } else { + return new Message(Message.FAIL).buildResponse(); + } + } +} diff --git a/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/config/contorller/SocialsProviderController.java b/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/config/contorller/SocialsProviderController.java new file mode 100644 index 000000000..8a0dcc3db --- /dev/null +++ b/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/config/contorller/SocialsProviderController.java @@ -0,0 +1,115 @@ +/* + * Copyright [2021] [MaxKey of copyright http://www.maxkey.top] + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +package org.maxkey.web.config.contorller; + +import org.apache.mybatis.jpa.persistence.JpaPageResults; +import org.maxkey.authn.annotation.CurrentUser; +import org.maxkey.crypto.password.PasswordReciprocal; +import org.maxkey.entity.Message; +import org.maxkey.entity.SocialsProvider; +import org.maxkey.entity.UserInfo; +import org.maxkey.persistence.service.SocialsProviderService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; + + +@Controller +@RequestMapping(value={"/config/socialsprovider"}) +public class SocialsProviderController { + final static Logger _logger = LoggerFactory.getLogger(SocialsProviderController.class); + + @Autowired + SocialsProviderService socialsProviderService; + + @RequestMapping(value = { "/fetch" }, produces = {MediaType.APPLICATION_JSON_VALUE}) + @ResponseBody + public ResponseEntity fetch(@ModelAttribute SocialsProvider socialsProvider,@CurrentUser UserInfo currentUser) { + _logger.debug(""+socialsProvider); + socialsProvider.setInstId(currentUser.getInstId()); + return new Message>( + socialsProviderService.queryPageResults(socialsProvider)).buildResponse(); + } + + @ResponseBody + @RequestMapping(value={"/query"}, produces = {MediaType.APPLICATION_JSON_VALUE}) + public ResponseEntity query(@ModelAttribute SocialsProvider socialsProvider,@CurrentUser UserInfo currentUser) { + _logger.debug("-query :" + socialsProvider); + socialsProvider.setInstId(currentUser.getInstId()); + if (socialsProviderService.load(socialsProvider)!=null) { + return new Message(Message.SUCCESS).buildResponse(); + } else { + return new Message(Message.SUCCESS).buildResponse(); + } + } + + @RequestMapping(value = { "/get/{id}" }, produces = {MediaType.APPLICATION_JSON_VALUE}) + public ResponseEntity get(@PathVariable("id") String id) { + SocialsProvider socialsProvider=socialsProviderService.get(id); + socialsProvider.setClientSecret(PasswordReciprocal.getInstance().decoder(socialsProvider.getClientSecret())); + return new Message(socialsProvider).buildResponse(); + } + + @ResponseBody + @RequestMapping(value={"/add"}, produces = {MediaType.APPLICATION_JSON_VALUE}) + public ResponseEntity insert(@RequestBody SocialsProvider socialsProvider,@CurrentUser UserInfo currentUser) { + _logger.debug("-Add :" + socialsProvider); + socialsProvider.setInstId(currentUser.getInstId()); + socialsProvider.setClientSecret(PasswordReciprocal.getInstance().encode(socialsProvider.getClientSecret())); + if (socialsProviderService.insert(socialsProvider)) { + return new Message(Message.SUCCESS).buildResponse(); + } else { + return new Message(Message.FAIL).buildResponse(); + } + } + + @ResponseBody + @RequestMapping(value={"/update"}, produces = {MediaType.APPLICATION_JSON_VALUE}) + public ResponseEntity update(@RequestBody SocialsProvider socialsProvider,@CurrentUser UserInfo currentUser) { + _logger.debug("-update :" + socialsProvider); + socialsProvider.setInstId(currentUser.getInstId()); + socialsProvider.setClientSecret(PasswordReciprocal.getInstance().encode(socialsProvider.getClientSecret())); + if (socialsProviderService.update(socialsProvider)) { + return new Message(Message.SUCCESS).buildResponse(); + } else { + return new Message(Message.FAIL).buildResponse(); + } + } + + + @ResponseBody + @RequestMapping(value={"/delete"}, produces = {MediaType.APPLICATION_JSON_VALUE}) + public ResponseEntity delete(@RequestParam("ids") String ids,@CurrentUser UserInfo currentUser) { + _logger.debug("-delete ids : {} " , ids); + if (socialsProviderService.deleteBatch(ids)) { + return new Message(Message.SUCCESS).buildResponse(); + } else { + return new Message(Message.FAIL).buildResponse(); + } + } + +} diff --git a/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/contorller/SynchronizersController.java b/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/config/contorller/SynchronizersController.java similarity index 57% rename from maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/contorller/SynchronizersController.java rename to maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/config/contorller/SynchronizersController.java index 97dd4d932..2fb4f5603 100644 --- a/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/contorller/SynchronizersController.java +++ b/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/config/contorller/SynchronizersController.java @@ -15,100 +15,73 @@ */ -package org.maxkey.web.contorller; +package org.maxkey.web.config.contorller; import java.util.List; import org.apache.mybatis.jpa.persistence.JpaPageResults; -import org.maxkey.constants.ConstsOperateMessage; +import org.maxkey.authn.annotation.CurrentUser; import org.maxkey.crypto.password.PasswordReciprocal; +import org.maxkey.entity.Message; import org.maxkey.entity.Synchronizers; +import org.maxkey.entity.UserInfo; import org.maxkey.persistence.service.SynchronizersService; import org.maxkey.synchronizer.ISynchronizerService; import org.maxkey.util.StringUtils; import org.maxkey.web.WebContext; -import org.maxkey.web.message.Message; -import org.maxkey.web.message.MessageType; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.servlet.ModelAndView; - @Controller -@RequestMapping(value={"/synchronizers"}) +@RequestMapping(value={"/config/synchronizers"}) public class SynchronizersController { final static Logger _logger = LoggerFactory.getLogger(SynchronizersController.class); @Autowired - @Qualifier("synchronizersService") SynchronizersService synchronizersService; - @RequestMapping(value={"/list"}) - public ModelAndView groupsList(){ - return new ModelAndView("synchronizers/synchronizersList"); - } - - - - @RequestMapping(value = { "/grid" }) + @RequestMapping(value = { "/fetch" }, produces = {MediaType.APPLICATION_JSON_VALUE}) @ResponseBody - public JpaPageResults queryDataGrid(@ModelAttribute("synchronizers") Synchronizers synchronizers) { + public ResponseEntity fetch(Synchronizers synchronizers,@CurrentUser UserInfo currentUser) { _logger.debug(""+synchronizers); - synchronizers.setInstId(WebContext.getUserInfo().getInstId()); - return synchronizersService.queryPageResults(synchronizers); + synchronizers.setInstId(currentUser.getInstId()); + return new Message>( + synchronizersService.queryPageResults(synchronizers)).buildResponse(); } - - - - @RequestMapping(value = { "/forwardUpdate/{id}" }) - public ModelAndView forwardUpdate(@PathVariable("id") String id) { - ModelAndView modelAndView=new ModelAndView("synchronizers/synchronizerUpdate"); + @RequestMapping(value = { "/get/{id}" }, produces = {MediaType.APPLICATION_JSON_VALUE}) + public ResponseEntity get(@PathVariable("id") String id) { Synchronizers synchronizers=synchronizersService.get(id); synchronizers.setCredentials(PasswordReciprocal.getInstance().decoder(synchronizers.getCredentials())); - modelAndView.addObject("model",synchronizers); - return modelAndView; + return new Message(synchronizers).buildResponse(); } - - - /** - * 修改 - * @param group - * @return - */ @ResponseBody - @RequestMapping(value={"/update"}) - public Message update(@ModelAttribute("synchronizers") Synchronizers synchronizers) { - _logger.debug("-update synchronizers :" + synchronizers); - synchronizers.setInstId(WebContext.getUserInfo().getInstId()); + @RequestMapping(value={"/update"}, produces = {MediaType.APPLICATION_JSON_VALUE}) + public ResponseEntity update(@RequestBody Synchronizers synchronizers,@CurrentUser UserInfo currentUser) { + _logger.debug("-update :" + synchronizers); + synchronizers.setInstId(currentUser.getInstId()); synchronizers.setCredentials(PasswordReciprocal.getInstance().encode(synchronizers.getCredentials())); if (synchronizersService.update(synchronizers)) { - return new Message(WebContext.getI18nValue(ConstsOperateMessage.UPDATE_SUCCESS),MessageType.success); - + return new Message(Message.SUCCESS).buildResponse(); } else { - return new Message(WebContext.getI18nValue(ConstsOperateMessage.UPDATE_ERROR),MessageType.error); + return new Message(Message.FAIL).buildResponse(); } - } - /** - * 修改 - * @param group - * @return - */ @ResponseBody @RequestMapping(value={"/sync"}) - public Message sync(@RequestParam("id") String id) { - _logger.debug("-update synchronizers ids :" + id); + public ResponseEntity sync(@RequestParam("id") String id) { + _logger.debug("-sync ids :" + id); List ids = StringUtils.string2List(id, ","); try { @@ -122,9 +95,10 @@ public class SynchronizersController { } }catch(Exception e) { _logger.error("synchronizer Exception " , e); - return new Message(WebContext.getI18nValue(ConstsOperateMessage.UPDATE_ERROR),MessageType.error); + return new Message(Message.FAIL).buildResponse(); + } - return new Message(WebContext.getI18nValue(ConstsOperateMessage.UPDATE_SUCCESS),MessageType.success); + return new Message(Message.SUCCESS).buildResponse(); } } diff --git a/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/config/contorller/package-info.java b/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/config/contorller/package-info.java new file mode 100644 index 000000000..1e1e006a7 --- /dev/null +++ b/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/config/contorller/package-info.java @@ -0,0 +1 @@ +package org.maxkey.web.config.contorller; \ No newline at end of file diff --git a/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/endpoint/IndexEndpoint.java b/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/contorller/DashboardController.java similarity index 92% rename from maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/endpoint/IndexEndpoint.java rename to maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/contorller/DashboardController.java index c53a2517e..c590d9005 100644 --- a/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/endpoint/IndexEndpoint.java +++ b/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/contorller/DashboardController.java @@ -15,11 +15,11 @@ */ -package org.maxkey.web.endpoint; +package org.maxkey.web.contorller; import java.util.HashMap; -import org.maxkey.authn.CurrentUser; +import org.maxkey.authn.annotation.CurrentUser; import org.maxkey.entity.Message; import org.maxkey.entity.UserInfo; import org.maxkey.persistence.service.ReportService; @@ -37,9 +37,9 @@ import org.springframework.web.bind.annotation.RequestMapping; * */ @Controller -public class IndexEndpoint { +public class DashboardController { - private static Logger _logger = LoggerFactory.getLogger(IndexEndpoint.class); + private static Logger _logger = LoggerFactory.getLogger(DashboardController.class); @Autowired @Qualifier("reportService") ReportService reportService; diff --git a/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/contorller/EmailSendersController.java b/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/contorller/EmailSendersController.java deleted file mode 100644 index a242b8348..000000000 --- a/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/contorller/EmailSendersController.java +++ /dev/null @@ -1,93 +0,0 @@ -/* - * Copyright [2022] [MaxKey of copyright http://www.maxkey.top] - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - -package org.maxkey.web.contorller; - -import org.apache.commons.lang3.StringUtils; -import org.maxkey.authn.CurrentUser; -import org.maxkey.crypto.password.PasswordReciprocal; -import org.maxkey.entity.EmailSenders; -import org.maxkey.entity.Message; -import org.maxkey.entity.UserInfo; -import org.maxkey.persistence.service.EmailSendersService; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.ResponseEntity; -import org.springframework.stereotype.Controller; -import org.springframework.validation.BindingResult; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseBody; - -@Controller -@RequestMapping(value={"/config/emailsenders"}) -public class EmailSendersController { - - - final static Logger _logger = LoggerFactory.getLogger(EmailSendersController.class); - - @Autowired - private EmailSendersService emailSendersService; - - /** - * 读取 - * @return - */ - @RequestMapping(value={"/get"}) - public ResponseEntity get(@CurrentUser UserInfo currentUser){ - EmailSenders emailSenders = emailSendersService.get(currentUser.getInstId()); - if(emailSenders != null && StringUtils.isNotBlank(emailSenders.getCredentials())) { - emailSenders.setCredentials(PasswordReciprocal.getInstance().decoder(emailSenders.getCredentials())); - }else { - emailSenders =new EmailSenders(); - emailSenders.setProtocol("smtp"); - emailSenders.setEncoding("utf-8"); - } - return new Message(emailSenders).buildResponse(); - } - - /** - * 更新 - * @param emailSenders - * @return - */ - @RequestMapping(value={"/update"}) - @ResponseBody - public ResponseEntity update( @RequestBody EmailSenders emailSenders,@CurrentUser UserInfo currentUser,BindingResult result) { - _logger.debug("update emailSenders : "+emailSenders); - emailSenders.setInstId(currentUser.getInstId()); - emailSenders.setCredentials(PasswordReciprocal.getInstance().encode(emailSenders.getCredentials())); - if(StringUtils.isBlank(emailSenders.getId())) { - emailSenders.setId(emailSenders.getInstId()); - if(emailSendersService.insert(emailSenders)) { - return new Message(Message.SUCCESS).buildResponse(); - }else { - return new Message(Message.ERROR).buildResponse(); - } - }else { - if(emailSendersService.update(emailSenders)) { - return new Message(Message.SUCCESS).buildResponse(); - }else { - return new Message(Message.ERROR).buildResponse(); - } - } - - } - - -} diff --git a/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/contorller/GroupsController.java b/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/contorller/GroupsController.java deleted file mode 100644 index 90e67bb80..000000000 --- a/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/contorller/GroupsController.java +++ /dev/null @@ -1,151 +0,0 @@ -/* - * Copyright [2020] [MaxKey of copyright http://www.maxkey.top] - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - -package org.maxkey.web.contorller; - -import org.apache.mybatis.jpa.persistence.JpaPageResults; -import org.maxkey.constants.ConstsOperateMessage; -import org.maxkey.entity.Groups; -import org.maxkey.persistence.service.GroupsService; -import org.maxkey.web.WebContext; -import org.maxkey.web.message.Message; -import org.maxkey.web.message.MessageType; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.ModelAttribute; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.servlet.ModelAndView; - - -@Controller -@RequestMapping(value={"/groups"}) -public class GroupsController { - final static Logger _logger = LoggerFactory.getLogger(GroupsController.class); - - @Autowired - @Qualifier("groupsService") - GroupsService groupsService; - - - - @RequestMapping(value={"/list"}) - public ModelAndView groupsList(){ - return new ModelAndView("groups/groupsList"); - } - - @RequestMapping(value={"/selectGroupsList"}) - public ModelAndView selectGroupsList(){ - return new ModelAndView("groups/selectGroupsList"); - } - - - @RequestMapping(value = { "/grid" }) - @ResponseBody - public JpaPageResults queryDataGrid(@ModelAttribute("groups") Groups groups) { - _logger.debug(""+groups); - groups.setInstId(WebContext.getUserInfo().getInstId()); - return groupsService.queryPageResults(groups); - } - - - @RequestMapping(value = { "/forwardAdd" }) - public ModelAndView forwardAdd() { - return new ModelAndView("groups/groupAdd"); - } - - @RequestMapping(value = { "/forwardUpdate/{id}" }) - public ModelAndView forwardUpdate(@PathVariable("id") String id) { - ModelAndView modelAndView=new ModelAndView("groups/groupUpdate"); - Groups group=groupsService.get(id); - modelAndView.addObject("model",group); - return modelAndView; - } - - @ResponseBody - @RequestMapping(value={"/add"}) - public Message insert(@ModelAttribute("group") Groups group) { - _logger.debug("-Add :" + group); - group.setInstId(WebContext.getUserInfo().getInstId()); - if (groupsService.insert(group)) { - groupsService.refreshDynamicGroups(group); - return new Message(WebContext.getI18nValue(ConstsOperateMessage.INSERT_SUCCESS),MessageType.success); - - } else { - return new Message(WebContext.getI18nValue(ConstsOperateMessage.INSERT_SUCCESS),MessageType.error); - } - - } - - /** - * 查询 - * @param group - * @return - */ - @ResponseBody - @RequestMapping(value={"/query"}) - public Message query(@ModelAttribute("group") Groups group) { - _logger.debug("-query :" + group); - group.setInstId(WebContext.getUserInfo().getInstId()); - if (groupsService.load(group)!=null) { - return new Message(WebContext.getI18nValue(ConstsOperateMessage.INSERT_SUCCESS),MessageType.success); - - } else { - return new Message(WebContext.getI18nValue(ConstsOperateMessage.INSERT_ERROR),MessageType.error); - } - - } - - /** - * 修改 - * @param group - * @return - */ - @ResponseBody - @RequestMapping(value={"/update"}) - public Message update(@ModelAttribute("group") Groups group) { - _logger.debug("-update group :" + group); - group.setInstId(WebContext.getUserInfo().getInstId()); - if (groupsService.update(group)) { - groupsService.refreshDynamicGroups(group); - return new Message(WebContext.getI18nValue(ConstsOperateMessage.UPDATE_SUCCESS),MessageType.success); - - } else { - return new Message(WebContext.getI18nValue(ConstsOperateMessage.UPDATE_ERROR),MessageType.error); - } - - } - - - @ResponseBody - @RequestMapping(value={"/delete"}) - public Message delete(@ModelAttribute("group") Groups group) { - _logger.debug("-delete group :" + group); - - if (groupsService.deleteById(group.getId())) { - return new Message(WebContext.getI18nValue(ConstsOperateMessage.DELETE_SUCCESS),MessageType.success); - - } else { - return new Message(WebContext.getI18nValue(ConstsOperateMessage.DELETE_SUCCESS),MessageType.error); - } - - } -} diff --git a/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/contorller/LdapContextController.java b/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/contorller/LdapContextController.java deleted file mode 100644 index 377d2ebb9..000000000 --- a/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/contorller/LdapContextController.java +++ /dev/null @@ -1,87 +0,0 @@ -/* - * Copyright [2022] [MaxKey of copyright http://www.maxkey.top] - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - -package org.maxkey.web.contorller; - -import org.apache.commons.lang3.StringUtils; -import org.maxkey.authn.CurrentUser; -import org.maxkey.crypto.password.PasswordReciprocal; -import org.maxkey.entity.LdapContext; -import org.maxkey.entity.Message; -import org.maxkey.entity.UserInfo; -import org.maxkey.persistence.service.LdapContextService; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.MediaType; -import org.springframework.http.ResponseEntity; -import org.springframework.stereotype.Controller; -import org.springframework.validation.BindingResult; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseBody; - -@Controller -@RequestMapping(value={"/config/ldapcontext"}) -public class LdapContextController { - - - final static Logger _logger = LoggerFactory.getLogger(LdapContextController.class); - - @Autowired - private LdapContextService ldapContextService; - - /** - * 读取 - * @return - */ - @RequestMapping(value={"/get"}, produces = {MediaType.APPLICATION_JSON_VALUE}) - public ResponseEntity get(@CurrentUser UserInfo currentUser){ - LdapContext ldapContext = ldapContextService.get(currentUser.getInstId()); - if(ldapContext != null && StringUtils.isNoneBlank(ldapContext.getCredentials())) { - ldapContext.setCredentials(PasswordReciprocal.getInstance().decoder(ldapContext.getCredentials())); - } - return new Message(ldapContext).buildResponse(); - } - - /** - * 更新 - * @param sysConfig - * @return - */ - @RequestMapping(value={"/update"}) - @ResponseBody - public ResponseEntity update( @RequestBody LdapContext ldapContext,@CurrentUser UserInfo currentUser,BindingResult result) { - _logger.debug("update ldapContext : "+ldapContext); - ldapContext.setCredentials(PasswordReciprocal.getInstance().encode(ldapContext.getCredentials())); - ldapContext.setInstId(currentUser.getInstId()); - boolean updateResult = false; - if(StringUtils.isBlank(ldapContext.getId())) { - ldapContext.setId(ldapContext.getInstId()); - updateResult = ldapContextService.insert(ldapContext); - }else { - updateResult = ldapContextService.update(ldapContext); - } - if(updateResult) { - return new Message(Message.SUCCESS).buildResponse(); - } else { - return new Message(Message.FAIL).buildResponse(); - } - } - - -} diff --git a/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/endpoint/LoginEndpoint.java b/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/contorller/LoginEndpoint.java similarity index 99% rename from maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/endpoint/LoginEndpoint.java rename to maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/contorller/LoginEndpoint.java index 7c4748a10..130c6b583 100644 --- a/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/endpoint/LoginEndpoint.java +++ b/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/contorller/LoginEndpoint.java @@ -15,7 +15,7 @@ */ -package org.maxkey.web.endpoint; +package org.maxkey.web.contorller; import org.maxkey.authn.AbstractAuthenticationProvider; import org.maxkey.authn.LoginCredential; diff --git a/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/endpoint/LogoutEndpoint.java b/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/contorller/LogoutEndpoint.java similarity index 98% rename from maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/endpoint/LogoutEndpoint.java rename to maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/contorller/LogoutEndpoint.java index 30d5ed674..26d5b1280 100644 --- a/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/endpoint/LogoutEndpoint.java +++ b/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/contorller/LogoutEndpoint.java @@ -15,7 +15,7 @@ */ -package org.maxkey.web.endpoint; +package org.maxkey.web.contorller; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; diff --git a/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/contorller/PasswordPolicyController.java b/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/contorller/PasswordPolicyController.java deleted file mode 100644 index 41475ccf4..000000000 --- a/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/contorller/PasswordPolicyController.java +++ /dev/null @@ -1,121 +0,0 @@ -/* - * Copyright [2020] [MaxKey of copyright http://www.maxkey.top] - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - -package org.maxkey.web.contorller; - -import javax.validation.Valid; - -import org.maxkey.authn.CurrentUser; -import org.maxkey.entity.Message; -import org.maxkey.entity.PasswordPolicy; -import org.maxkey.entity.UserInfo; -import org.maxkey.persistence.service.PasswordPolicyService; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.MediaType; -import org.springframework.http.ResponseEntity; -import org.springframework.stereotype.Controller; -import org.springframework.validation.BindingResult; -import org.springframework.validation.FieldError; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; - -@Controller -@RequestMapping(value={"/config/passwordpolicy"}) -public class PasswordPolicyController { - - - final static Logger _logger = LoggerFactory.getLogger(PasswordPolicyController.class); - - @Autowired - private PasswordPolicyService passwordPolicyService; - - /** - * 读取 - * @return - */ - @RequestMapping(value={"/get"}, produces = {MediaType.APPLICATION_JSON_VALUE}) - public ResponseEntity get(@CurrentUser UserInfo currentUser){ - PasswordPolicy passwordPolicy = passwordPolicyService.get(currentUser.getInstId()); - return new Message(passwordPolicy).buildResponse(); - } - - /** - * 更新 - * @param sysConfig - * @return - */ - @RequestMapping(value={"/update"}, produces = {MediaType.APPLICATION_JSON_VALUE}) - public ResponseEntity update(@Valid @RequestBody PasswordPolicy passwordPolicy,@CurrentUser UserInfo currentUser,BindingResult result) { - _logger.debug("updateRole passwordPolicy : "+passwordPolicy); - //Message message = this.validate(result, passwordPolicy); - - if(passwordPolicyService.update(passwordPolicy)) { - return new Message(Message.SUCCESS).buildResponse(); - } else { - return new Message(Message.ERROR).buildResponse(); - } - } - - /** - * 验证函数 - * @param result - * @param passwordPolicy - * @return - */ - public Message validate(BindingResult result,PasswordPolicy passwordPolicy) { - if (result.hasErrors()) { - return new Message(result); - } - if(passwordPolicy.getMinLength() < 3) { - FieldError fe = new FieldError("passwordPolicy", "minLength", - passwordPolicy.getMinLength(), true, - new String[]{"ui.passwordpolicy.xe00000001"},//密码最小长度不能小于3位字符 - null, null); - result.addError(fe); - return new Message(result); - } - if(passwordPolicy.getMinLength() > passwordPolicy.getMaxLength()) { - FieldError fe = new FieldError("passwordPolicy", "maxLength", - passwordPolicy.getMinLength(), true, - new String[]{"ui.passwordpolicy.xe00000002"},//密码最大长度不能小于最小长度 - null, null); - result.addError(fe); - return new Message(result); - } - - if(passwordPolicy.getDigits() + passwordPolicy.getLowerCase() + passwordPolicy.getUpperCase() + passwordPolicy.getSpecialChar() < 2) { - FieldError fe = new FieldError("passwordPolicy", "specialChar", - 2, true, - new String[]{"ui.passwordpolicy.xe00000003"},//密码包含小写字母、大写字母、数字、特殊字符的个数不能小于2 - null, null); - result.addError(fe); - return new Message(result); - } - - if(passwordPolicy.getDigits() + passwordPolicy.getLowerCase() + passwordPolicy.getUpperCase() + passwordPolicy.getSpecialChar() > passwordPolicy.getMaxLength()) { - FieldError fe = new FieldError("passwordPolicy", "specialChar", - passwordPolicy.getMinLength(), true, - new String[]{"ui.passwordpolicy.xe00000004"},//密码包含小写字母、大写字母、数字、特殊字符的个数不能大于密码的最大长度 - null, null); - result.addError(fe); - return new Message(result); - } - return null; - } -} diff --git a/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/contorller/RolesController.java b/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/contorller/RolesController.java deleted file mode 100644 index 1e8172ca9..000000000 --- a/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/contorller/RolesController.java +++ /dev/null @@ -1,151 +0,0 @@ -/* - * Copyright [2020] [MaxKey of copyright http://www.maxkey.top] - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - -package org.maxkey.web.contorller; - -import org.apache.mybatis.jpa.persistence.JpaPageResults; -import org.maxkey.constants.ConstsOperateMessage; -import org.maxkey.entity.Roles; -import org.maxkey.persistence.service.RolesService; -import org.maxkey.web.WebContext; -import org.maxkey.web.message.Message; -import org.maxkey.web.message.MessageType; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.ModelAttribute; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.servlet.ModelAndView; - - -@Controller -@RequestMapping(value={"/roles"}) -public class RolesController { - final static Logger _logger = LoggerFactory.getLogger(RolesController.class); - - @Autowired - @Qualifier("rolesService") - RolesService rolesService; - - - - @RequestMapping(value={"/list"}) - public ModelAndView rolesList(){ - return new ModelAndView("roles/rolesList"); - } - - @RequestMapping(value={"/selectRolesList"}) - public ModelAndView selectRolesList(){ - return new ModelAndView("roles/selectRolesList"); - } - - - @RequestMapping(value = { "/grid" }) - @ResponseBody - public JpaPageResults queryDataGrid(@ModelAttribute("roles") Roles roles) { - _logger.debug(""+roles); - roles.setInstId(WebContext.getUserInfo().getInstId()); - return rolesService.queryPageResults(roles); - } - - - @RequestMapping(value = { "/forwardAdd" }) - public ModelAndView forwardAdd() { - return new ModelAndView("roles/roleAdd"); - } - - @RequestMapping(value = { "/forwardUpdate/{id}" }) - public ModelAndView forwardUpdate(@PathVariable("id") String id) { - ModelAndView modelAndView=new ModelAndView("roles/roleUpdate"); - Roles role=rolesService.get(id); - modelAndView.addObject("model",role); - return modelAndView; - } - - @ResponseBody - @RequestMapping(value={"/add"}) - public Message insert(@ModelAttribute("role") Roles role) { - _logger.debug("-Add :" + role); - role.setInstId(WebContext.getUserInfo().getInstId()); - if (rolesService.insert(role)) { - rolesService.refreshDynamicRoles(role); - return new Message(WebContext.getI18nValue(ConstsOperateMessage.INSERT_SUCCESS),MessageType.success); - - } else { - return new Message(WebContext.getI18nValue(ConstsOperateMessage.INSERT_SUCCESS),MessageType.error); - } - - } - - /** - * 查询 - * @param role - * @return - */ - @ResponseBody - @RequestMapping(value={"/query"}) - public Message query(@ModelAttribute("role") Roles role) { - _logger.debug("-query :" + role); - role.setInstId(WebContext.getUserInfo().getInstId()); - if (rolesService.load(role)!=null) { - return new Message(WebContext.getI18nValue(ConstsOperateMessage.INSERT_SUCCESS),MessageType.success); - - } else { - return new Message(WebContext.getI18nValue(ConstsOperateMessage.INSERT_ERROR),MessageType.error); - } - - } - - /** - * 修改 - * @param role - * @return - */ - @ResponseBody - @RequestMapping(value={"/update"}) - public Message update(@ModelAttribute("role") Roles role) { - _logger.debug("-update role :" + role); - role.setInstId(WebContext.getUserInfo().getInstId()); - if (rolesService.update(role)) { - rolesService.refreshDynamicRoles(role); - return new Message(WebContext.getI18nValue(ConstsOperateMessage.UPDATE_SUCCESS),MessageType.success); - - } else { - return new Message(WebContext.getI18nValue(ConstsOperateMessage.UPDATE_ERROR),MessageType.error); - } - - } - - - @ResponseBody - @RequestMapping(value={"/delete"}) - public Message delete(@ModelAttribute("role") Roles role) { - _logger.debug("-delete role :" + role); - - if (rolesService.deleteById(role.getId())) { - return new Message(WebContext.getI18nValue(ConstsOperateMessage.DELETE_SUCCESS),MessageType.success); - - } else { - return new Message(WebContext.getI18nValue(ConstsOperateMessage.DELETE_SUCCESS),MessageType.error); - } - - } -} diff --git a/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/contorller/SmsProviderController.java b/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/contorller/SmsProviderController.java deleted file mode 100644 index d29a0f502..000000000 --- a/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/contorller/SmsProviderController.java +++ /dev/null @@ -1,86 +0,0 @@ -/* - * Copyright [2022] [MaxKey of copyright http://www.maxkey.top] - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - -package org.maxkey.web.contorller; - -import org.apache.commons.lang3.StringUtils; -import org.maxkey.authn.CurrentUser; -import org.maxkey.crypto.password.PasswordReciprocal; -import org.maxkey.entity.Message; -import org.maxkey.entity.SmsProvider; -import org.maxkey.entity.UserInfo; -import org.maxkey.persistence.service.SmsProviderService; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.MediaType; -import org.springframework.http.ResponseEntity; -import org.springframework.stereotype.Controller; -import org.springframework.validation.BindingResult; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseBody; - -@Controller -@RequestMapping(value={"/config/smsprovider"}) -public class SmsProviderController { - - final static Logger _logger = LoggerFactory.getLogger(SmsProviderController.class); - - @Autowired - private SmsProviderService smsProviderService; - - /** - * 读取 - * @return - */ - @RequestMapping(value={"/get"}, produces = {MediaType.APPLICATION_JSON_VALUE}) - public ResponseEntity get(@CurrentUser UserInfo currentUser){ - SmsProvider smsProvider = smsProviderService.get(currentUser.getInstId()); - if(smsProvider != null && StringUtils.isNoneBlank(smsProvider.getId())) { - smsProvider.setAppSecret(PasswordReciprocal.getInstance().decoder(smsProvider.getAppSecret())); - } - return new Message(smsProvider).buildResponse(); - } - - /** - * 更新 - * @param sysConfig - * @return - */ - @RequestMapping(value={"/update"}) - @ResponseBody - public ResponseEntity update( @RequestBody SmsProvider smsProvider,@CurrentUser UserInfo currentUser,BindingResult result) { - _logger.debug("update smsProvider : "+smsProvider); - smsProvider.setAppSecret(PasswordReciprocal.getInstance().encode(smsProvider.getAppSecret())); - smsProvider.setInstId(currentUser.getInstId()); - boolean updateResult = false; - if(StringUtils.isBlank(smsProvider.getId())) { - smsProvider.setId(smsProvider.getInstId()); - updateResult = smsProviderService.insert(smsProvider); - }else { - updateResult = smsProviderService.update(smsProvider); - } - if(updateResult) { - return new Message(Message.SUCCESS).buildResponse(); - } else { - return new Message(Message.FAIL).buildResponse(); - } - } - - -} diff --git a/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/contorller/SocialsProviderController.java b/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/contorller/SocialsProviderController.java deleted file mode 100644 index 1ea5a6275..000000000 --- a/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/contorller/SocialsProviderController.java +++ /dev/null @@ -1,144 +0,0 @@ -/* - * Copyright [2021] [MaxKey of copyright http://www.maxkey.top] - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - -package org.maxkey.web.contorller; - -import org.apache.mybatis.jpa.persistence.JpaPageResults; -import org.maxkey.constants.ConstsOperateMessage; -import org.maxkey.crypto.password.PasswordReciprocal; -import org.maxkey.entity.SocialsProvider; -import org.maxkey.persistence.service.SocialsProviderService; -import org.maxkey.web.WebContext; -import org.maxkey.web.message.Message; -import org.maxkey.web.message.MessageType; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.ModelAttribute; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.servlet.ModelAndView; - - -@Controller -@RequestMapping(value={"/socialsprovider"}) -public class SocialsProviderController { - final static Logger _logger = LoggerFactory.getLogger(SocialsProviderController.class); - - @Autowired - SocialsProviderService socialsProviderService; - - @RequestMapping(value={"/list"}) - public ModelAndView noticesList(){ - return new ModelAndView("socialsprovider/socialsProviderList"); - } - - - @RequestMapping(value = { "/grid" }) - @ResponseBody - public JpaPageResults queryDataGrid(@ModelAttribute("socialsProvider") SocialsProvider socialsProvider) { - _logger.debug(""+socialsProvider); - socialsProvider.setInstId(WebContext.getUserInfo().getInstId()); - return socialsProviderService.queryPageResults(socialsProvider); - } - - - @RequestMapping(value = { "/forwardAdd" }) - public ModelAndView forwardAdd() { - return new ModelAndView("socialsprovider/socialsProviderAdd"); - } - - @RequestMapping(value = { "/forwardUpdate/{id}" }) - public ModelAndView forwardUpdate(@PathVariable("id") String id) { - ModelAndView modelAndView=new ModelAndView("socialsprovider/socialsProviderUpdate"); - SocialsProvider socialsProvider = socialsProviderService.get(id); - socialsProvider.setClientSecret(PasswordReciprocal.getInstance().decoder(socialsProvider.getClientSecret())); - modelAndView.addObject("model",socialsProvider); - return modelAndView; - } - - @ResponseBody - @RequestMapping(value={"/add"}) - public Message insert(@ModelAttribute("socialsProvider") SocialsProvider socialsProvider) { - _logger.debug("-Add :" + socialsProvider); - socialsProvider.setInstId(WebContext.getUserInfo().getInstId()); - socialsProvider.setClientSecret(PasswordReciprocal.getInstance().encode(socialsProvider.getClientSecret())); - if (socialsProviderService.insert(socialsProvider)) { - return new Message(WebContext.getI18nValue(ConstsOperateMessage.INSERT_SUCCESS),MessageType.success); - - } else { - return new Message(WebContext.getI18nValue(ConstsOperateMessage.INSERT_SUCCESS),MessageType.error); - } - - } - - /** - * 查询 - * @param role - * @return - */ - @ResponseBody - @RequestMapping(value={"/query"}) - public Message query(@ModelAttribute("socialsProvider") SocialsProvider socialsProvider) { - _logger.debug("-query :" + socialsProvider); - socialsProvider.setInstId(WebContext.getUserInfo().getInstId()); - if (socialsProviderService.load(socialsProvider)!=null) { - return new Message(WebContext.getI18nValue(ConstsOperateMessage.INSERT_SUCCESS),MessageType.success); - - } else { - return new Message(WebContext.getI18nValue(ConstsOperateMessage.INSERT_ERROR),MessageType.error); - } - - } - - /** - * 修改 - * @param role - * @return - */ - @ResponseBody - @RequestMapping(value={"/update"}) - public Message update(@ModelAttribute("socialsProvider") SocialsProvider socialsProvider) { - _logger.debug("-update socialsProvider :" + socialsProvider); - socialsProvider.setInstId(WebContext.getUserInfo().getInstId()); - socialsProvider.setClientSecret(PasswordReciprocal.getInstance().encode(socialsProvider.getClientSecret())); - if (socialsProviderService.update(socialsProvider)) { - return new Message(WebContext.getI18nValue(ConstsOperateMessage.UPDATE_SUCCESS),MessageType.success); - - } else { - return new Message(WebContext.getI18nValue(ConstsOperateMessage.UPDATE_ERROR),MessageType.error); - } - - } - - - @ResponseBody - @RequestMapping(value={"/delete"}) - public Message delete(@ModelAttribute("socialsProvider") SocialsProvider socialsProvider) { - _logger.debug("-delete socialsProvider :" + socialsProvider); - - if (socialsProviderService.deleteBatch(socialsProvider.getId())) { - return new Message(WebContext.getI18nValue(ConstsOperateMessage.DELETE_SUCCESS),MessageType.success); - - } else { - return new Message(WebContext.getI18nValue(ConstsOperateMessage.DELETE_SUCCESS),MessageType.error); - } - - } -} diff --git a/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/historys/contorller/ConnectorHistoryController.java b/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/historys/contorller/ConnectorHistoryController.java index 7f228d8cb..b84915ca9 100644 --- a/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/historys/contorller/ConnectorHistoryController.java +++ b/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/historys/contorller/ConnectorHistoryController.java @@ -20,7 +20,7 @@ package org.maxkey.web.historys.contorller; import java.text.SimpleDateFormat; import java.util.Date; import org.apache.mybatis.jpa.persistence.JpaPageResults; -import org.maxkey.authn.CurrentUser; +import org.maxkey.authn.annotation.CurrentUser; import org.maxkey.entity.HistoryConnector; import org.maxkey.entity.Message; import org.maxkey.entity.UserInfo; @@ -59,7 +59,7 @@ final static Logger _logger = LoggerFactory.getLogger(ConnectorHistoryController * @param historySynchronizer * @return */ - @RequestMapping(value={"/connectorHistoryList/fetch"}) + @RequestMapping(value={"/connectorHistory/fetch"}) @ResponseBody public ResponseEntity fetch( @ModelAttribute("historyConnector") HistoryConnector historyConnector, diff --git a/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/historys/contorller/LoginAppsHistoryController.java b/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/historys/contorller/LoginAppsHistoryController.java index dec3e34ff..b8d8d9258 100644 --- a/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/historys/contorller/LoginAppsHistoryController.java +++ b/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/historys/contorller/LoginAppsHistoryController.java @@ -20,7 +20,7 @@ package org.maxkey.web.historys.contorller; import java.text.SimpleDateFormat; import java.util.Date; import org.apache.mybatis.jpa.persistence.JpaPageResults; -import org.maxkey.authn.CurrentUser; +import org.maxkey.authn.annotation.CurrentUser; import org.maxkey.entity.HistoryLoginApps; import org.maxkey.entity.Message; import org.maxkey.entity.UserInfo; @@ -57,7 +57,7 @@ final static Logger _logger = LoggerFactory.getLogger(LoginAppsHistoryController * @param loginAppsHistory * @return */ - @RequestMapping(value={"/loginAppsHistoryList/fetch"}) + @RequestMapping(value={"/loginAppsHistory/fetch"}) @ResponseBody public ResponseEntity fetch( @ModelAttribute("historyLoginApp") HistoryLoginApps historyLoginApp, diff --git a/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/historys/contorller/LoginHistoryController.java b/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/historys/contorller/LoginHistoryController.java index 40275a46d..459a4c925 100644 --- a/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/historys/contorller/LoginHistoryController.java +++ b/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/historys/contorller/LoginHistoryController.java @@ -20,7 +20,7 @@ package org.maxkey.web.historys.contorller; import java.text.SimpleDateFormat; import java.util.Date; import org.apache.mybatis.jpa.persistence.JpaPageResults; -import org.maxkey.authn.CurrentUser; +import org.maxkey.authn.annotation.CurrentUser; import org.maxkey.entity.HistoryLogin; import org.maxkey.entity.Message; import org.maxkey.entity.UserInfo; @@ -57,7 +57,7 @@ final static Logger _logger = LoggerFactory.getLogger(LoginHistoryController.cla * @param HistoryLogin * @return */ - @RequestMapping(value={"/loginHistoryList/fetch"}) + @RequestMapping(value={"/loginHistory/fetch"}) @ResponseBody public ResponseEntity fetch( @ModelAttribute("historyLogin") HistoryLogin historyLogin, diff --git a/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/historys/contorller/SynchronizerHistoryController.java b/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/historys/contorller/SynchronizerHistoryController.java index 29fcdf4e7..e60f5e338 100644 --- a/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/historys/contorller/SynchronizerHistoryController.java +++ b/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/historys/contorller/SynchronizerHistoryController.java @@ -20,7 +20,7 @@ package org.maxkey.web.historys.contorller; import java.text.SimpleDateFormat; import java.util.Date; import org.apache.mybatis.jpa.persistence.JpaPageResults; -import org.maxkey.authn.CurrentUser; +import org.maxkey.authn.annotation.CurrentUser; import org.maxkey.entity.HistorySynchronizer; import org.maxkey.entity.Message; import org.maxkey.entity.UserInfo; @@ -59,7 +59,7 @@ final static Logger _logger = LoggerFactory.getLogger(SynchronizerHistoryControl * @param historySynchronizer * @return */ - @RequestMapping(value={"/synchronizerHistoryList/fetch"}) + @RequestMapping(value={"/synchronizerHistory/fetch"}) @ResponseBody public ResponseEntity fetch( @ModelAttribute("historySynchronizer") HistorySynchronizer historySynchronizer, diff --git a/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/historys/contorller/SystemLogsController.java b/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/historys/contorller/SystemLogsController.java index c44ffd851..29599f833 100644 --- a/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/historys/contorller/SystemLogsController.java +++ b/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/historys/contorller/SystemLogsController.java @@ -20,7 +20,7 @@ package org.maxkey.web.historys.contorller; import java.text.SimpleDateFormat; import java.util.Date; import org.apache.mybatis.jpa.persistence.JpaPageResults; -import org.maxkey.authn.CurrentUser; +import org.maxkey.authn.annotation.CurrentUser; import org.maxkey.entity.HistoryLogs; import org.maxkey.entity.Message; import org.maxkey.entity.UserInfo; @@ -58,7 +58,7 @@ final static Logger _logger = LoggerFactory.getLogger(SystemLogsController.class * @param logs * @return */ - @RequestMapping(value={"/systemLogsList/fetch"}) + @RequestMapping(value={"/systemLogs/fetch"}) @ResponseBody public ResponseEntity fetch(@ModelAttribute("historyLog") HistoryLogs historyLog, @CurrentUser UserInfo currentUser){ diff --git a/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/contorller/PermissionsController.java b/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/permissions/contorller/PermissionsController.java similarity index 99% rename from maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/contorller/PermissionsController.java rename to maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/permissions/contorller/PermissionsController.java index 0a5a4c9f0..c98a43c52 100644 --- a/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/contorller/PermissionsController.java +++ b/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/permissions/contorller/PermissionsController.java @@ -15,7 +15,7 @@ */ -package org.maxkey.web.contorller; +package org.maxkey.web.permissions.contorller; import java.util.ArrayList; import java.util.HashMap; diff --git a/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/contorller/ResourcesController.java b/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/permissions/contorller/ResourcesController.java similarity index 99% rename from maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/contorller/ResourcesController.java rename to maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/permissions/contorller/ResourcesController.java index 17f2fd1dd..302737cb6 100644 --- a/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/contorller/ResourcesController.java +++ b/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/permissions/contorller/ResourcesController.java @@ -15,7 +15,7 @@ */ -package org.maxkey.web.contorller; +package org.maxkey.web.permissions.contorller; import java.util.HashMap; import java.util.List; diff --git a/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/contorller/RoleMemberController.java b/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/permissions/contorller/RoleMemberController.java similarity index 99% rename from maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/contorller/RoleMemberController.java rename to maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/permissions/contorller/RoleMemberController.java index 3eb4034d5..ed01142aa 100644 --- a/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/contorller/RoleMemberController.java +++ b/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/permissions/contorller/RoleMemberController.java @@ -15,7 +15,7 @@ */ -package org.maxkey.web.contorller; +package org.maxkey.web.permissions.contorller; import org.apache.mybatis.jpa.persistence.JpaPageResults; import org.maxkey.constants.ConstsOperateMessage; diff --git a/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/permissions/contorller/RolesController.java b/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/permissions/contorller/RolesController.java new file mode 100644 index 000000000..945204124 --- /dev/null +++ b/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/permissions/contorller/RolesController.java @@ -0,0 +1,114 @@ +/* + * Copyright [2020] [MaxKey of copyright http://www.maxkey.top] + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +package org.maxkey.web.permissions.contorller; + +import org.apache.mybatis.jpa.persistence.JpaPageResults; +import org.maxkey.authn.annotation.CurrentUser; +import org.maxkey.entity.Message; +import org.maxkey.entity.Roles; +import org.maxkey.entity.UserInfo; +import org.maxkey.persistence.service.RolesService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; + + +@Controller +@RequestMapping(value={"/permissions/roles"}) +public class RolesController { + final static Logger _logger = LoggerFactory.getLogger(RolesController.class); + + @Autowired + RolesService rolesService; + + @RequestMapping(value = { "/fetch" }, produces = {MediaType.APPLICATION_JSON_VALUE}) + @ResponseBody + public ResponseEntity fetch(@ModelAttribute Roles roles,@CurrentUser UserInfo currentUser) { + _logger.debug(""+roles); + roles.setInstId(currentUser.getInstId()); + return new Message>( + rolesService.queryPageResults(roles)).buildResponse(); + } + + @ResponseBody + @RequestMapping(value={"/query"}, produces = {MediaType.APPLICATION_JSON_VALUE}) + public ResponseEntity query(@ModelAttribute Roles role,@CurrentUser UserInfo currentUser) { + _logger.debug("-query :" + role); + role.setInstId(currentUser.getInstId()); + if (rolesService.load(role)!=null) { + return new Message(Message.SUCCESS).buildResponse(); + } else { + return new Message(Message.SUCCESS).buildResponse(); + } + + } + + @RequestMapping(value = { "/get/{id}" }, produces = {MediaType.APPLICATION_JSON_VALUE}) + public ResponseEntity get(@PathVariable("id") String id) { + Roles role=rolesService.get(id); + return new Message(role).buildResponse(); + } + + @ResponseBody + @RequestMapping(value={"/add"}, produces = {MediaType.APPLICATION_JSON_VALUE}) + public ResponseEntity insert(@RequestBody Roles role,@CurrentUser UserInfo currentUser) { + _logger.debug("-Add :" + role); + role.setInstId(currentUser.getInstId()); + if (rolesService.insert(role)) { + rolesService.refreshDynamicRoles(role); + return new Message(Message.SUCCESS).buildResponse(); + } else { + return new Message(Message.FAIL).buildResponse(); + } + } + + @ResponseBody + @RequestMapping(value={"/update"}, produces = {MediaType.APPLICATION_JSON_VALUE}) + public ResponseEntity update(@RequestBody Roles role,@CurrentUser UserInfo currentUser) { + _logger.debug("-update :" + role); + role.setInstId(currentUser.getInstId()); + if (rolesService.update(role)) { + rolesService.refreshDynamicRoles(role); + return new Message(Message.SUCCESS).buildResponse(); + } else { + return new Message(Message.FAIL).buildResponse(); + } + } + + @ResponseBody + @RequestMapping(value={"/delete"}, produces = {MediaType.APPLICATION_JSON_VALUE}) + public ResponseEntity delete(@RequestParam("ids") String ids,@CurrentUser UserInfo currentUser) { + _logger.debug("-delete ids : {} " , ids); + + if (rolesService.deleteBatch(ids)) { + return new Message(Message.SUCCESS).buildResponse(); + } else { + return new Message(Message.FAIL).buildResponse(); + } + + } +} diff --git a/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/permissions/contorller/package-info.java b/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/permissions/contorller/package-info.java new file mode 100644 index 000000000..d17aa1257 --- /dev/null +++ b/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/permissions/contorller/package-info.java @@ -0,0 +1 @@ +package org.maxkey.web.permissions.contorller; \ No newline at end of file -- GitLab