yangys
2024-03-31 53c8d3e3bd3596132b362f20e52aef380d493a84
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
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);
        }
    }
}