AuthToutiaoRequest.java 4.0 KB
Newer Older
1 2 3 4 5
package me.zhyd.oauth.request;

import cn.hutool.http.HttpResponse;
import com.alibaba.fastjson.JSONObject;
import me.zhyd.oauth.config.AuthConfig;
6
import me.zhyd.oauth.config.AuthSource;
智布道's avatar
智布道 已提交
7
import me.zhyd.oauth.enums.AuthToutiaoErrorCode;
智布道's avatar
智布道 已提交
8
import me.zhyd.oauth.enums.AuthUserGender;
9
import me.zhyd.oauth.exception.AuthException;
10 11 12
import me.zhyd.oauth.model.AuthCallback;
import me.zhyd.oauth.model.AuthToken;
import me.zhyd.oauth.model.AuthUser;
不合群的混子's avatar
不合群的混子 已提交
13
import me.zhyd.oauth.utils.UrlBuilder;
14 15 16 17 18 19 20 21

/**
 * 今日头条登录
 *
 * @author yadong.zhang (yadong.zhang0415(a)gmail.com)
 * @version 1.5
 * @since 1.5
 */
智布道's avatar
智布道 已提交
22
public class AuthToutiaoRequest extends AuthDefaultRequest {
23 24

    public AuthToutiaoRequest(AuthConfig config) {
不合群的混子's avatar
不合群的混子 已提交
25
        super(config, AuthSource.TOUTIAO);
26 27 28
    }

    @Override
29
    protected AuthToken getAccessToken(AuthCallback authCallback) {
不合群的混子's avatar
不合群的混子 已提交
30
        HttpResponse response = doGetAuthorizationCode(authCallback.getCode());
智布道's avatar
智布道 已提交
31
        JSONObject accessTokenObject = JSONObject.parseObject(response.body());
32

智布道's avatar
智布道 已提交
33
        this.checkResponse(accessTokenObject);
34 35

        return AuthToken.builder()
不合群的混子's avatar
不合群的混子 已提交
36 37 38 39
            .accessToken(accessTokenObject.getString("access_token"))
            .expireIn(accessTokenObject.getIntValue("expires_in"))
            .openId(accessTokenObject.getString("open_id"))
            .build();
40 41 42 43
    }

    @Override
    protected AuthUser getUserInfo(AuthToken authToken) {
不合群的混子's avatar
不合群的混子 已提交
44
        HttpResponse userResponse = doGetUserInfo(authToken);
45 46 47

        JSONObject userProfile = JSONObject.parseObject(userResponse.body());

智布道's avatar
智布道 已提交
48
        this.checkResponse(userProfile);
49 50 51 52 53 54 55

        JSONObject user = userProfile.getJSONObject("data");

        boolean isAnonymousUser = user.getIntValue("uid_type") == 14;
        String anonymousUserName = "匿名用户";

        return AuthUser.builder()
不合群的混子's avatar
不合群的混子 已提交
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
            .uuid(user.getString("uid"))
            .username(isAnonymousUser ? anonymousUserName : user.getString("screen_name"))
            .nickname(isAnonymousUser ? anonymousUserName : user.getString("screen_name"))
            .avatar(user.getString("avatar_url"))
            .remark(user.getString("description"))
            .gender(AuthUserGender.getRealGender(user.getString("gender")))
            .token(authToken)
            .source(AuthSource.TOUTIAO)
            .build();
    }

    /**
     * 返回认证url,可自行跳转页面
     *
     * @return 返回授权地址
     */
    @Override
    public String authorize() {
        return UrlBuilder.fromBaseUrl(source.authorize())
            .queryParam("response_type", "code")
            .queryParam("client_key", config.getClientId())
            .queryParam("redirect_uri", config.getRedirectUri())
            .queryParam("state", getRealState(config.getState()))
            .queryParam("auth_only", 1)
            .queryParam("display", 0)
            .build();
    }

    /**
     * 返回获取accessToken的url
     *
智布道's avatar
智布道 已提交
87
     * @param code 授权码
不合群的混子's avatar
不合群的混子 已提交
88 89 90 91 92 93 94 95 96 97 98 99 100 101 102
     * @return 返回获取accessToken的url
     */
    @Override
    protected String accessTokenUrl(String code) {
        return UrlBuilder.fromBaseUrl(source.accessToken())
            .queryParam("code", code)
            .queryParam("client_key", config.getClientId())
            .queryParam("client_secret", config.getClientSecret())
            .queryParam("grant_type", "authorization_code")
            .build();
    }

    /**
     * 返回获取userInfo的url
     *
智布道's avatar
智布道 已提交
103
     * @param authToken 用户授权后的token
不合群的混子's avatar
不合群的混子 已提交
104 105 106 107 108 109 110 111
     * @return 返回获取userInfo的url
     */
    @Override
    protected String userInfoUrl(AuthToken authToken) {
        return UrlBuilder.fromBaseUrl(source.userInfo())
            .queryParam("client_key", config.getClientId())
            .queryParam("access_token", authToken.getAccessToken())
            .build();
112
    }
智布道's avatar
智布道 已提交
113 114 115 116 117 118 119 120 121 122 123 124

    /**
     * 检查响应内容是否正确
     *
     * @param object 请求响应内容
     */
    private void checkResponse(JSONObject object) {
        if (object.containsKey("error_code")) {
            throw new AuthException(AuthToutiaoErrorCode.getErrorCode(object.getIntValue("error_code"))
                .getDesc());
        }
    }
125
}