All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.dropbox.core.DbxAuthFinish Maven / Gradle / Ivy

The newest version!
package com.dropbox.core;

import com.dropbox.core.json.JsonExtractionException;
import com.dropbox.core.json.JsonExtractor;
import static com.dropbox.core.util.StringUtil.jq;

import com.fasterxml.jackson.core.JsonLocation;
import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonToken;

import java.io.IOException;

/**
 * When you successfully complete the authorization process, the Dropbox server returns
 * this information to you.
 */
public final class DbxAuthFinish implements java.io.Serializable
{
    public static final long serialVersionUID = 0;

    /**
     * An access token that can be used to make Dropbox API calls.
     * Pass this in to the {@link DbxClient} constructor.
     */
    public final String accessToken;

    /**
     * The Dropbox user ID of the user who just approved your app for access to
     * their Dropbox account.
     */
    public final String userId;

    /**
     * The state data you passed in to {@link DbxWebAuth#start}.  If you didn't pass anything
     * in, or you used {@link DbxWebAuthNoRedirect}, this will be {@code null}.
     */
    public final String urlState;

    /**
     * @param accessToken {@link #accessToken}
     * @param userId {@link #userId}
     */
    public DbxAuthFinish(String accessToken, String userId, String urlState)
    {
        this.accessToken = accessToken;
        this.userId = userId;
        this.urlState = urlState;
    }

    /**
     * For JSON parsing.
     */
    public static final JsonExtractor Extractor = new JsonExtractor()
    {
        public DbxAuthFinish extract(JsonParser parser) throws IOException, JsonExtractionException
        {
            JsonLocation top = JsonExtractor.expectObjectStart(parser);

            String accessToken = null;
            String tokenType = null;
            String userId = null;

            while (parser.getCurrentToken() == JsonToken.FIELD_NAME) {
                String fieldName = parser.getCurrentName();
                JsonExtractor.nextToken(parser);

                try {
                    if (fieldName.equals("token_type")) {
                        tokenType = BearerTokenTypeExtractor.extractField(parser, fieldName, tokenType);
                    }
                    else if (fieldName.equals("access_token")) {
                        accessToken = AccessTokenExtractor.extractField(parser, fieldName, accessToken);
                    }
                    else if (fieldName.equals("uid")) {
                        userId = JsonExtractor.StringExtractor.extractField(parser, fieldName, userId);
                    }
                    else {
                        // Unknown field.  Skip over it.
                        JsonExtractor.skipValue(parser);
                    }
                }
                catch (JsonExtractionException ex) {
                    throw ex.addFieldContext(fieldName);
                }
            }

            JsonExtractor.expectObjectEnd(parser);

            if (tokenType == null) throw new JsonExtractionException("missing field \"token_type\"", top);
            if (accessToken == null) throw new JsonExtractionException("missing field \"access_token\"", top);
            if (userId == null) throw new JsonExtractionException("missing field \"uid\"", top);

            return new DbxAuthFinish(accessToken, userId, null);
        }
    };

    public static final JsonExtractor BearerTokenTypeExtractor = new JsonExtractor()
    {
        @Override
        public String extract(JsonParser parser) throws IOException, JsonExtractionException
        {
            try {
                String v = parser.getText();
                if (!v.equals("Bearer") && !v.equals("bearer")) {
                    throw new JsonExtractionException("expecting \"Bearer\": got " + jq(v), parser.getTokenLocation());
                }
                parser.nextToken();
                return v;
            }
            catch (JsonParseException ex) {
                throw JsonExtractionException.fromJackson(ex);
            }
        }

    };

    public static final JsonExtractor AccessTokenExtractor = new JsonExtractor()
    {
        @Override
        public String extract(JsonParser parser) throws IOException, JsonExtractionException
        {
            try {
                String v = parser.getText();
                String error = DbxAppInfo.getTokenPartError(v);
                if (error != null) {
                    throw new JsonExtractionException(error, parser.getTokenLocation());
                }
                parser.nextToken();
                return v;
            }
            catch (JsonParseException ex) {
                throw JsonExtractionException.fromJackson(ex);
            }
        }

    };
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy