diff --git a/api/pom.xml b/api/pom.xml new file mode 100644 index 0000000..6348870 --- /dev/null +++ b/api/pom.xml @@ -0,0 +1,76 @@ + + + 4.0.0 + + com.lktx.center + app-center + 1.0-SNAPSHOT + + + api + + + 17 + 17 + UTF-8 + + + + + hserver + cn.hserver + + + + hserver-plugin-web + cn.hserver + + + + hserver-plugin-forest + cn.hserver + + + + hserver-plugin-satoken + cn.hserver + + + + me.zhyd.oauth + JustAuth + 1.16.7 + + + + org.projectlombok + lombok + 1.18.30 + provided + + + + cn.hutool + hutool-all + 5.8.25 + + + + org.projectlombok + lombok + RELEASE + compile + + + + + + + hserver-plugin-maven + cn.hserver + + + + \ No newline at end of file diff --git a/src/main/java/com/lktx/center/Main.java b/api/src/main/java/com/lktx/center/Main.java similarity index 100% rename from src/main/java/com/lktx/center/Main.java rename to api/src/main/java/com/lktx/center/Main.java diff --git a/src/main/resources/app.yml b/api/src/main/resources/app.yml similarity index 100% rename from src/main/resources/app.yml rename to api/src/main/resources/app.yml diff --git a/src/main/resources/static/css/all.min.css b/api/src/main/resources/static/css/all.min.css similarity index 100% rename from src/main/resources/static/css/all.min.css rename to api/src/main/resources/static/css/all.min.css diff --git a/api/src/main/resources/static/webfonts/fa-solid-900.ttf b/api/src/main/resources/static/webfonts/fa-solid-900.ttf new file mode 100644 index 0000000..e69de29 diff --git a/api/src/main/resources/static/webfonts/fa-solid-900.woff2 b/api/src/main/resources/static/webfonts/fa-solid-900.woff2 new file mode 100644 index 0000000..e69de29 diff --git a/src/main/resources/template/index.ftl b/api/src/main/resources/template/index.ftl similarity index 100% rename from src/main/resources/template/index.ftl rename to api/src/main/resources/template/index.ftl diff --git a/pom.xml b/pom.xml index 65bf0fc..fcd6785 100644 --- a/pom.xml +++ b/pom.xml @@ -7,6 +7,11 @@ com.lktx.center app-center 1.0-SNAPSHOT + pom + + api + web + hserver-parent cn.hserver @@ -20,62 +25,6 @@ - - - - hserver - cn.hserver - - - - hserver-plugin-web - cn.hserver - - - hserver-plugin-forest - cn.hserver - - - - hserver-plugin-satoken - cn.hserver - - - - me.zhyd.oauth - JustAuth - 1.16.7 - - - - org.projectlombok - lombok - 1.18.30 - provided - - - - cn.hutool - hutool-all - 5.8.25 - - - - org.projectlombok - lombok - RELEASE - compile - - - - - - - hserver-plugin-maven - cn.hserver - - - \ No newline at end of file diff --git a/src/main/java/com/lktx/center/config/AuthRequestConfig.java b/src/main/java/com/lktx/center/config/AuthRequestConfig.java deleted file mode 100644 index 74c5777..0000000 --- a/src/main/java/com/lktx/center/config/AuthRequestConfig.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.lktx.center.config; - -import cn.hserver.core.ioc.annotation.Bean; -import cn.hserver.core.ioc.annotation.Configuration; -import cn.hserver.core.ioc.annotation.Value; -import me.zhyd.oauth.config.AuthConfig; - -import java.util.List; - -@Configuration -public class AuthRequestConfig { - - @Value("oauth.clientId") - private String clientId; - - @Value("oauth.clientSecret") - private String clientSecret; - - @Value("oauth.redirectUri") - private String redirectUri; - - @Value("oauth.url") - private String url; - - @Bean - public SsoAuthRequest getAuthRequest() { - return new SsoAuthRequest(AuthConfig.builder() - .clientId(clientId) - .clientSecret(clientSecret) - .redirectUri(redirectUri) - //其他系统可以不要center - .scopes(List.of("userinfo", "center")) - .build(),new SsoSource(url)); - } - -} diff --git a/src/main/java/com/lktx/center/config/Data.java b/src/main/java/com/lktx/center/config/Data.java deleted file mode 100644 index e487673..0000000 --- a/src/main/java/com/lktx/center/config/Data.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.lktx.center.config; - - -public interface Data { - String AuthToken = "AuthToken"; -} diff --git a/src/main/java/com/lktx/center/config/SsoAuthRequest.java b/src/main/java/com/lktx/center/config/SsoAuthRequest.java deleted file mode 100644 index 8d288ef..0000000 --- a/src/main/java/com/lktx/center/config/SsoAuthRequest.java +++ /dev/null @@ -1,128 +0,0 @@ -package com.lktx.center.config; - -import com.alibaba.fastjson.JSONObject; -import com.lktx.center.domain.vo.SsoUserAppVO; -import me.zhyd.oauth.cache.AuthStateCache; -import me.zhyd.oauth.config.AuthConfig; -import me.zhyd.oauth.enums.AuthResponseStatus; -import me.zhyd.oauth.enums.AuthUserGender; -import me.zhyd.oauth.exception.AuthException; -import me.zhyd.oauth.model.AuthCallback; -import me.zhyd.oauth.model.AuthResponse; -import me.zhyd.oauth.model.AuthToken; -import me.zhyd.oauth.model.AuthUser; -import me.zhyd.oauth.request.AuthDefaultRequest; -import me.zhyd.oauth.utils.*; - -import java.util.Map; - - -public class SsoAuthRequest extends AuthDefaultRequest { - - private final SsoSource source; - - public SsoAuthRequest(AuthConfig config,SsoSource source) { - super(config, source); - this.source=source; - } - - private AuthToken getAuthToken(JSONObject object) { - this.checkResponse(object); - return AuthToken.builder().accessToken(object.getString("access_token")).expireIn(object.getIntValue("expires_in")).tokenType(object.getString("token_type")).idToken(object.getString("id_token")).refreshToken(object.getString("refresh_token")).uid(object.getString("userId")).openId(object.getString("userId")).build(); - } - - private void checkResponse(JSONObject object) { - if (object.containsKey("error")) { - throw new AuthException(object.getString("error_description")); - } - } - @Override - protected String revokeUrl(AuthToken authToken) { - return UrlBuilder.fromBaseUrl(source.revoke()) - .queryParam("access_token", authToken.getAccessToken()) - .queryParam("client_id", this.config.getClientId()) - .queryParam("client_secret", this.config.getClientSecret()) - .build(); - } - - @Override - public String authorize(String state) { - return UrlBuilder.fromBaseUrl(source.authorize()).queryParam("response_type", "code").queryParam("client_id", this.config.getClientId()).queryParam("redirect_uri", this.config.getRedirectUri()).queryParam("scope", String.join(",",this.config.getScopes())).queryParam("state", this.getRealState(state)).build(); - } - - @Override - public AuthToken getAccessToken(AuthCallback authCallback) { - return AuthToken.builder().accessCode(authCallback.getCode()).build(); - } - - - @Override - public AuthUser getUserInfo(AuthToken authToken) { - String response = this.doPostAuthorizationCode(authToken.getAccessCode()); - JSONObject accessTokenObject = JSONObject.parseObject(response); - if (accessTokenObject.getIntValue("code") != 200) { - throw new AuthException(accessTokenObject.getString("mssg")); - } else { - authToken = this.getAuthToken(accessTokenObject); - return AuthUser.builder().rawUserInfo(accessTokenObject) - .uuid(StringUtils.isEmpty(authToken.getUid()) ? authToken.getOpenId() : authToken.getUid()) - .username(accessTokenObject.getString("username")).nickname(accessTokenObject.getString("nickname")) - .avatar(accessTokenObject.getString("avatar")) - .email(accessTokenObject.getString("email")) - .gender(AuthUserGender.UNKNOWN) - .token(authToken) - .source(source.toString()) - .build(); - } - } - - @Override - public AuthResponse refresh(AuthToken oldToken) { - String tokenUrl = this.refreshTokenUrl(oldToken.getRefreshToken()); - String response = (new HttpUtils(this.config.getHttpConfig())).post(tokenUrl).getBody(); - JSONObject accessTokenObject = JSONObject.parseObject(response); - AuthResponse authTokenAuthResponse = new AuthResponse<>(); - if (accessTokenObject.getIntValue("code") == 200) { - authTokenAuthResponse.setCode(AuthResponseStatus.SUCCESS.getCode()); - authTokenAuthResponse.setData(this.getAuthToken(accessTokenObject)); - }else { - authTokenAuthResponse.setCode(AuthResponseStatus.FAILURE.getCode()); - authTokenAuthResponse.setMsg(accessTokenObject.getString("msg")); - } - - return authTokenAuthResponse; - } - - - @Override - public AuthResponse revoke(AuthToken authToken) { - String tokenUrl = this.revokeUrl(authToken); - String response = (new HttpUtils(this.config.getHttpConfig())).post(tokenUrl).getBody(); - JSONObject accessTokenObject = JSONObject.parseObject(response); - AuthResponse authTokenAuthResponse = new AuthResponse<>(); - authTokenAuthResponse.setMsg(accessTokenObject.getString("msg")); - if (accessTokenObject.getIntValue("code") == 200) { - authTokenAuthResponse.setCode(AuthResponseStatus.SUCCESS.getCode()); - }else { - authTokenAuthResponse.setCode(AuthResponseStatus.FAILURE.getCode()); - } - return authTokenAuthResponse; - } - - - public AuthResponse center(AuthToken authToken) { - String response = (new HttpUtils(this.config.getHttpConfig())).post(source.center(),Map.of("access_token",authToken.getAccessToken()),true).getBody(); - JSONObject accessTokenObject = JSONObject.parseObject(response); - AuthResponse authTokenAuthResponse = new AuthResponse<>(); - authTokenAuthResponse.setMsg(accessTokenObject.getString("msg")); - if (accessTokenObject.getIntValue("code") == 200) { - authTokenAuthResponse.setCode(AuthResponseStatus.SUCCESS.getCode()); - authTokenAuthResponse.setData(accessTokenObject.getObject("data", SsoUserAppVO.class)); - }else { - authTokenAuthResponse.setCode(AuthResponseStatus.FAILURE.getCode()); - } - return authTokenAuthResponse; - } - - -} diff --git a/src/main/java/com/lktx/center/config/SsoSource.java b/src/main/java/com/lktx/center/config/SsoSource.java deleted file mode 100644 index 3b3b6c5..0000000 --- a/src/main/java/com/lktx/center/config/SsoSource.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.lktx.center.config; - -import me.zhyd.oauth.config.AuthSource; -import me.zhyd.oauth.request.AuthDefaultRequest; - -public class SsoSource implements AuthSource { - - private final String baseUrl; - - public SsoSource(String baseUrl) { - this.baseUrl = baseUrl; - } - - @Override - public String authorize() { - return baseUrl+"oauth2/authorize"; - } - @Override - public String accessToken() { - return baseUrl+"oauth2/token"; - } - @Override - public String userInfo() { - return baseUrl+"oauth2/userinfo"; - } - @Override - public String refresh() { - return baseUrl+"oauth2/refresh"; - } - @Override - public String revoke() { - return baseUrl+"oauth2/revoke"; - } - - public String center(){ - return baseUrl+"oauth2/center"; - } - - @Override - public Class getTargetClass() { - return SsoAuthRequest.class; - } -} \ No newline at end of file diff --git a/src/main/java/com/lktx/center/controller/HomeController.java b/src/main/java/com/lktx/center/controller/HomeController.java deleted file mode 100644 index ae94d12..0000000 --- a/src/main/java/com/lktx/center/controller/HomeController.java +++ /dev/null @@ -1,70 +0,0 @@ -package com.lktx.center.controller; - -import cn.dev33.satoken.session.SaSession; -import cn.dev33.satoken.stp.StpUtil; -import cn.hserver.core.ioc.annotation.Autowired; -import cn.hserver.plugin.web.annotation.Controller; -import cn.hserver.plugin.web.annotation.GET; -import cn.hserver.plugin.web.interfaces.HttpResponse; -import cn.hutool.json.JSONUtil; -import com.lktx.center.config.Data; -import com.lktx.center.config.SsoAuthRequest; -import com.lktx.center.domain.bean.SsoApp; -import com.lktx.center.domain.vo.SsoUserAppVO; -import lombok.extern.slf4j.Slf4j; -import me.zhyd.oauth.model.AuthResponse; -import me.zhyd.oauth.model.AuthToken; - -import java.util.Map; -import java.util.stream.Collectors; - -@Slf4j -@Controller -public class HomeController { - - @Autowired - private SsoAuthRequest authRequest; - - @GET("/") - public void index(HttpResponse response) { - if (StpUtil.isLogin()){ - try { - SaSession session = StpUtil.getSession(); - AuthToken authToken = session.get(Data.AuthToken,null); - if (authToken != null){ - AuthResponse center = authRequest.center(authToken); - if (center.ok()) { - Map data = Map.of( - "user", center.getData().getSsoUser(), - "appList", center.getData().getSsoAppList(), - "appGroup", center.getData().getSsoAppList().stream().map(SsoApp::getSsoAppGroup).collect(Collectors.toSet()) - ); - response.sendTemplate("index.ftl",data); - } - } - }catch (Exception e){ - //通常是token失效导致的异常返回 - response.redirect("/oauth/render"); - } - }else { - response.redirect("/oauth/render"); - } - } - - - @GET("/logout") - public void logout(HttpResponse response) { - if (StpUtil.isLogin()){ - //可以全局退出 - SaSession session = StpUtil.getSession(); - AuthToken authToken = session.get(Data.AuthToken,null); - if (authToken != null){ - AuthResponse revoke = authRequest.revoke(authToken); - System.out.println(revoke.getMsg()); - } - //子系统退出 - StpUtil.logout(); - } - response.redirect("/"); - } -} diff --git a/src/main/java/com/lktx/center/controller/RestAuthController.java b/src/main/java/com/lktx/center/controller/RestAuthController.java deleted file mode 100644 index 59ea08a..0000000 --- a/src/main/java/com/lktx/center/controller/RestAuthController.java +++ /dev/null @@ -1,42 +0,0 @@ -package com.lktx.center.controller; - -import cn.dev33.satoken.session.SaSession; -import cn.dev33.satoken.stp.StpUtil; -import cn.hserver.core.ioc.annotation.Autowired; -import cn.hserver.plugin.web.annotation.Controller; -import cn.hserver.plugin.web.annotation.RequestMapping; -import cn.hserver.plugin.web.interfaces.HttpResponse; -import com.lktx.center.config.Data; -import com.lktx.center.config.SsoAuthRequest; -import me.zhyd.oauth.model.AuthCallback; -import me.zhyd.oauth.model.AuthResponse; -import me.zhyd.oauth.model.AuthToken; -import me.zhyd.oauth.model.AuthUser; -import me.zhyd.oauth.utils.AuthStateUtils; - -@Controller("/oauth") -public class RestAuthController { - - @Autowired - private SsoAuthRequest authRequest; - - @RequestMapping("/render") - public void renderAuth(HttpResponse response) { - String authorize = authRequest.authorize(AuthStateUtils.createState()); - response.redirect(authorize); - } - - @RequestMapping("/callback") - public void login(AuthCallback callback,HttpResponse response) { - try { - AuthResponse login = authRequest.login(callback); - AuthToken token = login.getData().getToken(); - StpUtil.login(login.getData().getUuid()); - SaSession session = StpUtil.getSession(); - session.set(Data.AuthToken, token); - response.redirect("/"); - }catch (Exception e) { - response.redirect("/"); - } - } -} \ No newline at end of file diff --git a/src/main/java/com/lktx/center/domain/bean/RemoteRes.java b/src/main/java/com/lktx/center/domain/bean/RemoteRes.java deleted file mode 100644 index 3132695..0000000 --- a/src/main/java/com/lktx/center/domain/bean/RemoteRes.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.lktx.center.domain.bean; - -import lombok.Data; - -@Data -public class RemoteRes{ - private Integer code; - private String msg; - private T data; -} diff --git a/src/main/java/com/lktx/center/domain/bean/SsoApp.java b/src/main/java/com/lktx/center/domain/bean/SsoApp.java deleted file mode 100644 index 5a039d2..0000000 --- a/src/main/java/com/lktx/center/domain/bean/SsoApp.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.lktx.center.domain.bean; - -import lombok.Data; -import me.zhyd.oauth.utils.UrlBuilder; - -import java.time.LocalDateTime; - -/** app分组 - sso_app */ -@Data -public class SsoApp { - /**appId*/ - private Integer ssoAppId; - /**app分组*/ - private Integer ssoAppGroupId; - /**备注*/ - private String remark; - /**创建时间*/ - private Integer status; - /**客户端ID*/ - private String clientId; - /**客户端秘钥*/ - private String clientSecret; - /**app名字*/ - private String appName; - /**app图片地址*/ - private String appIcon; - /**APP类型*/ - private String appType; - private String appUrl; - private SsoAppGroup ssoAppGroup; - -} \ No newline at end of file diff --git a/src/main/java/com/lktx/center/domain/bean/SsoAppGroup.java b/src/main/java/com/lktx/center/domain/bean/SsoAppGroup.java deleted file mode 100644 index 5ab384d..0000000 --- a/src/main/java/com/lktx/center/domain/bean/SsoAppGroup.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.lktx.center.domain.bean; - - -import lombok.Data; - -import java.time.LocalDateTime; - -/** app分组 - sso_app_group */ -@Data -public class SsoAppGroup { - /**分组ID*/ - private Integer ssoAppGroupId; - /**分组名字*/ - private String name; - /**备注*/ - private String remark; - /**创建时间*/ - private LocalDateTime createTime; - /**更新时间*/ - private LocalDateTime updateTime; -} \ No newline at end of file diff --git a/src/main/java/com/lktx/center/domain/bean/SsoUser.java b/src/main/java/com/lktx/center/domain/bean/SsoUser.java deleted file mode 100644 index bf657d4..0000000 --- a/src/main/java/com/lktx/center/domain/bean/SsoUser.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.lktx.center.domain.bean; - -import lombok.Data; - -import java.time.LocalDateTime; - -/** SSO用户表 - sso_user */ -@Data -public class SsoUser { - private Integer ssoUserId; - /*组织ID*/ - private Integer ssoOrganizationId; - /**头像*/ - private String avatar; - /**用户姓名*/ - private String name; - /**用户昵称*/ - private String nickname; - /**用户登录名*/ - private String username; - /**手机号*/ - private String phone; - /**邮箱*/ - private String email; - /**密码*/ - private String password; - /**来源*/ - private String source; - /**是否冻结 0 启用 1 禁用*/ - private Integer locked; - /**用户描述*/ - private String remark; - /**是否逻辑删除*/ - private Integer deleted; - /**创建时间*/ - private LocalDateTime createTime; - /**更新时间*/ - private LocalDateTime updateTime; - -} \ No newline at end of file diff --git a/src/main/java/com/lktx/center/domain/vo/SsoUserAppVO.java b/src/main/java/com/lktx/center/domain/vo/SsoUserAppVO.java deleted file mode 100644 index 6e3c585..0000000 --- a/src/main/java/com/lktx/center/domain/vo/SsoUserAppVO.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.lktx.center.domain.vo; - -import com.lktx.center.domain.bean.SsoApp; -import com.lktx.center.domain.bean.SsoUser; -import lombok.Data; - -import java.util.List; - -@Data -public class SsoUserAppVO { - private SsoUser ssoUser; - private List ssoAppList; -} diff --git a/src/main/resources/static/webfonts/fa-solid-900.ttf b/src/main/resources/static/webfonts/fa-solid-900.ttf deleted file mode 100644 index 993dbe1..0000000 Binary files a/src/main/resources/static/webfonts/fa-solid-900.ttf and /dev/null differ diff --git a/src/main/resources/static/webfonts/fa-solid-900.woff2 b/src/main/resources/static/webfonts/fa-solid-900.woff2 deleted file mode 100644 index 5c16cd3..0000000 Binary files a/src/main/resources/static/webfonts/fa-solid-900.woff2 and /dev/null differ diff --git a/web/pom.xml b/web/pom.xml new file mode 100644 index 0000000..3653d39 --- /dev/null +++ b/web/pom.xml @@ -0,0 +1,20 @@ + + + 4.0.0 + + com.lktx.center + app-center + 1.0-SNAPSHOT + + + web + + + 17 + 17 + UTF-8 + + + \ No newline at end of file