package com.qianwen.core.social.request;
|
|
import com.alibaba.fastjson.JSONObject;
|
import com.dingtalk.api.DefaultDingTalkClient;
|
import com.dingtalk.api.request.OapiGettokenRequest;
|
import com.dingtalk.api.request.OapiUserGetRequest;
|
import com.dingtalk.api.request.OapiUserGetuserinfoRequest;
|
import com.dingtalk.api.response.OapiGettokenResponse;
|
import com.dingtalk.api.response.OapiUserGetResponse;
|
import com.dingtalk.api.response.OapiUserGetuserinfoResponse;
|
import me.zhyd.oauth.cache.AuthStateCache;
|
import me.zhyd.oauth.config.AuthConfig;
|
import me.zhyd.oauth.exception.AuthException;
|
import me.zhyd.oauth.model.AuthCallback;
|
import me.zhyd.oauth.model.AuthToken;
|
import me.zhyd.oauth.model.AuthUser;
|
import me.zhyd.oauth.request.AuthDefaultRequest;
|
import org.slf4j.Logger;
|
import org.slf4j.LoggerFactory;
|
import com.qianwen.core.social.props.BladeAuthSource;
|
|
/* loaded from: blade-starter-social-9.3.2.0-SNAPSHOT.jar:org/springblade/core/social/request/CustomAuthDingTalkRequest.class */
|
public class CustomAuthDingTalkRequest extends AuthDefaultRequest {
|
private static final Logger log = LoggerFactory.getLogger(CustomAuthDingTalkRequest.class);
|
public static final String DAILY_DING_JS_TICKET = "dailyApplication:ticket:";
|
public static final String DAILY_DING_ACCESS_TOKEN = "dailyApplication:accessToken:";
|
private static final String URL_GET_USER_INFO = "https://oapi.dingtalk.com/user/getuserinfo";
|
|
public CustomAuthDingTalkRequest(AuthConfig config, AuthStateCache authStateCache) {
|
this(config, BladeAuthSource.DINGTALK_WEB, authStateCache);
|
}
|
|
public CustomAuthDingTalkRequest(AuthConfig config, BladeAuthSource source, AuthStateCache authStateCache) {
|
super(config, source, authStateCache);
|
}
|
|
public AuthToken getAccessToken(final AuthCallback authCallback) {
|
String accessToken = getAccessToken();
|
AuthToken authToken = null;
|
if (accessToken != null) {
|
authToken = new AuthToken();
|
authToken.setAccessToken(accessToken);
|
authToken.setCode(authCallback.getCode());
|
}
|
return authToken;
|
}
|
|
public String getAccessToken() {
|
try {
|
String appkey = this.config.getClientId();
|
String appsecret = this.config.getClientSecret();
|
String appTokenRedisKey = DAILY_DING_ACCESS_TOKEN.concat(appkey).concat(":");
|
String accessToken = this.authStateCache.get(appTokenRedisKey);
|
if (accessToken != null) {
|
return accessToken;
|
}
|
DefaultDingTalkClient client = new DefaultDingTalkClient(this.source.accessToken());
|
OapiGettokenRequest request = new OapiGettokenRequest();
|
request.setAppkey(appkey);
|
request.setAppsecret(appsecret);
|
request.setHttpMethod("GET");
|
OapiGettokenResponse response = client.execute(request);
|
if (!response.isSuccess()) {
|
throw new AuthException(response.getErrmsg());
|
}
|
String accessToken2 = response.getAccessToken();
|
this.authStateCache.cache(appTokenRedisKey, accessToken2, response.getExpiresIn().longValue() * 1000);
|
return accessToken2;
|
}catch(Exception e) {
|
throw new RuntimeException(e);
|
}
|
}
|
|
public String getUserId(final String authCode) {
|
try {
|
String accessToken = getAccessToken();
|
DefaultDingTalkClient defaultDingTalkClient = new DefaultDingTalkClient(URL_GET_USER_INFO);
|
OapiUserGetuserinfoRequest request = new OapiUserGetuserinfoRequest();
|
request.setCode(authCode);
|
request.setHttpMethod("GET");
|
//OapiGettokenResponse response = (OapiGettokenResponse)defaultDingTalkClient.execute(request);
|
|
OapiUserGetuserinfoResponse response = defaultDingTalkClient.execute(request, accessToken);
|
if (!response.isSuccess()) {
|
throw new AuthException(response.getErrmsg());
|
}
|
|
return response.getUserid();
|
}catch(Exception e) {
|
throw new RuntimeException(e);
|
}
|
}
|
|
protected AuthUser getUserInfo(AuthToken authToken) {
|
try {
|
String accessToken = authToken.getAccessToken();
|
String userId = getUserId(authToken.getCode());
|
DefaultDingTalkClient defaultDingTalkClient = new DefaultDingTalkClient(this.source.userInfo());
|
OapiUserGetRequest request = new OapiUserGetRequest();
|
request.setUserid(userId);
|
request.setHttpMethod("GET");
|
//OapiUserGetResponse response = defaultDingTalkClient.execute(request, accessToken);
|
OapiUserGetResponse response = defaultDingTalkClient.execute(request, accessToken);
|
if (!response.isSuccess()) {
|
throw new AuthException(response.getErrmsg());
|
}
|
log.info("用户信息:{}", JSONObject.toJSONString(response));
|
return AuthUser.builder().rawUserInfo((JSONObject) JSONObject.toJSON(response)).uuid(response.getUserid()).nickname(response.getNickname()).username(response.getName()).location(response.getPosition()).email(response.getEmail()).avatar(response.getAvatar()).source(this.source.toString()).token(authToken).build();
|
}catch(Exception e) {
|
throw new RuntimeException(e);
|
}
|
}
|
}
|