田源
2025-04-03 9b4433fddf5b401edb0aace8a404ac733b122702
Source/BladeX-Tool/blade-starter-social/src/main/java/org/springblade/core/social/utils/SocialUtil.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,168 @@
/*
 *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
 *
 *  Redistribution and use in source and binary forms, with or without
 *  modification, are permitted provided that the following conditions are met:
 *
 *  Redistributions of source code must retain the above copyright notice,
 *  this list of conditions and the following disclaimer.
 *  Redistributions in binary form must reproduce the above copyright
 *  notice, this list of conditions and the following disclaimer in the
 *  documentation and/or other materials provided with the distribution.
 *  Neither the name of the dreamlu.net developer nor the names of its
 *  contributors may be used to endorse or promote products derived from
 *  this software without specific prior written permission.
 *  Author: Chill åº„骞 (smallchill@163.com)
 */
package org.springblade.core.social.utils;
import me.zhyd.oauth.cache.AuthStateCache;
import me.zhyd.oauth.config.AuthConfig;
import me.zhyd.oauth.config.AuthDefaultSource;
import me.zhyd.oauth.exception.AuthException;
import me.zhyd.oauth.request.*;
import org.springblade.core.social.props.SocialProperties;
import org.springblade.core.tool.utils.SpringUtil;
import java.util.Objects;
/**
 * SocialUtil
 *
 * @author Chill
 */
public class SocialUtil {
   /**
    * è‡ªå®šä¹‰state缓存
    */
   private static AuthStateCache authStateCache;
   public static AuthStateCache getAuthStateCache() {
      if (authStateCache == null) {
         authStateCache = SpringUtil.getBean(AuthStateCache.class);
      }
      return authStateCache;
   }
   /**
    * æ ¹æ®å…·ä½“的授权来源,获取授权请求工具类
    *
    * @param source æŽˆæƒæ¥æº
    * @return AuthRequest
    */
   public static AuthRequest getAuthRequest(String source, SocialProperties socialProperties) {
      AuthDefaultSource authSource = Objects.requireNonNull(AuthDefaultSource.valueOf(source.toUpperCase()));
      AuthConfig authConfig = socialProperties.getOauth().get(authSource);
      if (authConfig == null) {
         throw new AuthException("未获取到有效的Auth配置");
      }
      AuthRequest authRequest = null;
      switch (authSource) {
         case GITHUB:
            authRequest = new AuthGithubRequest(authConfig, getAuthStateCache());
            break;
         case GITEE:
            authRequest = new AuthGiteeRequest(authConfig, getAuthStateCache());
            break;
         case OSCHINA:
            authRequest = new AuthOschinaRequest(authConfig, getAuthStateCache());
            break;
         case QQ:
            authRequest = new AuthQqRequest(authConfig, getAuthStateCache());
            break;
         case WECHAT_OPEN:
            authRequest = new AuthWeChatOpenRequest(authConfig, getAuthStateCache());
            break;
         case WECHAT_ENTERPRISE:
            authRequest = new AuthWeChatEnterpriseQrcodeRequest(authConfig, getAuthStateCache());
            break;
         case WECHAT_ENTERPRISE_WEB:
            authRequest = new AuthWeChatEnterpriseWebRequest(authConfig, getAuthStateCache());
            break;
         case WECHAT_MP:
            authRequest = new AuthWeChatMpRequest(authConfig, getAuthStateCache());
            break;
         case DINGTALK:
            authRequest = new AuthDingTalkRequest(authConfig, getAuthStateCache());
            break;
         case ALIPAY:
            // æ”¯ä»˜å®åœ¨åˆ›å»ºå›žè°ƒåœ°å€æ—¶ï¼Œä¸å…è®¸ä½¿ç”¨localhost或者127.0.0.1,所以这儿的回调地址使用的局域网内的ip
            authRequest = new AuthAlipayRequest(authConfig, getAuthStateCache());
            break;
         case BAIDU:
            authRequest = new AuthBaiduRequest(authConfig, getAuthStateCache());
            break;
         case WEIBO:
            authRequest = new AuthWeiboRequest(authConfig, getAuthStateCache());
            break;
         case CODING:
            authRequest = new AuthCodingRequest(authConfig, getAuthStateCache());
            break;
         case CSDN:
            authRequest = new AuthCsdnRequest(authConfig, getAuthStateCache());
            break;
         case TAOBAO:
            authRequest = new AuthTaobaoRequest(authConfig, getAuthStateCache());
            break;
         case GOOGLE:
            authRequest = new AuthGoogleRequest(authConfig, getAuthStateCache());
            break;
         case FACEBOOK:
            authRequest = new AuthFacebookRequest(authConfig, getAuthStateCache());
            break;
         case DOUYIN:
            authRequest = new AuthDouyinRequest(authConfig, getAuthStateCache());
            break;
         case LINKEDIN:
            authRequest = new AuthLinkedinRequest(authConfig, getAuthStateCache());
            break;
         case MICROSOFT:
            authRequest = new AuthMicrosoftRequest(authConfig, getAuthStateCache());
            break;
         case MI:
            authRequest = new AuthMiRequest(authConfig, getAuthStateCache());
            break;
         case TOUTIAO:
            authRequest = new AuthToutiaoRequest(authConfig, getAuthStateCache());
            break;
         case TEAMBITION:
            authRequest = new AuthTeambitionRequest(authConfig, getAuthStateCache());
            break;
         case PINTEREST:
            authRequest = new AuthPinterestRequest(authConfig, getAuthStateCache());
            break;
         case RENREN:
            authRequest = new AuthRenrenRequest(authConfig, getAuthStateCache());
            break;
         case STACK_OVERFLOW:
            authRequest = new AuthStackOverflowRequest(authConfig, getAuthStateCache());
            break;
         case HUAWEI:
            authRequest = new AuthHuaweiRequest(authConfig, getAuthStateCache());
            break;
         case KUJIALE:
            authRequest = new AuthKujialeRequest(authConfig, getAuthStateCache());
            break;
         case GITLAB:
            authRequest = new AuthGitlabRequest(authConfig, getAuthStateCache());
            break;
         case MEITUAN:
            authRequest = new AuthMeituanRequest(authConfig, getAuthStateCache());
            break;
         case ELEME:
            authRequest = new AuthElemeRequest(authConfig, getAuthStateCache());
            break;
         case TWITTER:
            authRequest = new AuthTwitterRequest(authConfig, getAuthStateCache());
            break;
         default:
            break;
      }
      if (null == authRequest) {
         throw new AuthException("未获取到有效的Auth配置");
      }
      return authRequest;
   }
}