/* * 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; } }