com.google.api.client.auth.oauth2.AccessProtectedResource Maven / Gradle / Ivy
Show all versions of google-api-client Show documentation
/*
* Copyright (c) 2010 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
* in compliance with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under the License
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
* or implied. See the License for the specific language governing permissions and limitations under
* the License.
*/
package com.google.api.client.auth.oauth2;
import com.google.api.client.http.HttpExecuteIntercepter;
import com.google.api.client.http.HttpMethod;
import com.google.api.client.http.HttpRequest;
import com.google.api.client.http.HttpTransport;
import com.google.api.client.http.UrlEncodedContent;
import com.google.api.client.util.GenericData;
import java.util.EnumSet;
/**
* OAuth 2.0 methods for specifying the access token parameter as specified in Accessing a Protected
* Resource.
*
* @author Yaniv Inbar
* @since 1.2
*/
public final class AccessProtectedResource {
/**
* Sets the {@code "Authorization"} header using the given access token for every executed HTTP
* request for the given HTTP transport.
*
* Any existing HTTP request execute intercepters for setting the OAuth 2 access token will be
* removed.
*
*
* @param transport HTTP transport
* @param accessToken access token
*/
public static void usingAuthorizationHeader(HttpTransport transport, String accessToken) {
new UsingAuthorizationHeader().authorize(transport, accessToken);
}
/**
* Sets the {@code "oauth_token"} URI query parameter using the given access token for every
* executed HTTP request for the given HTTP transport.
*
* Any existing HTTP request execute intercepters for setting the OAuth 2 access token will be
* removed.
*
* @param transport HTTP transport
* @param accessToken access token
*/
public static void usingQueryParameter(HttpTransport transport, String accessToken) {
new UsingQueryParameter().authorize(transport, accessToken);
}
/**
* Sets the {@code "oauth_token"} parameter in the form-encoded HTTP body using the given access
* token for every executed HTTP request for the given HTTP transport.
*
* Any existing HTTP request execute intercepters for setting the OAuth 2 access token will be
* removed. Requirements:
*
* - The HTTP method must be "POST", "PUT", or "DELETE".
* - The HTTP content must be {@code null} or {@link UrlEncodedContent}.
* - The {@link UrlEncodedContent#data} must be {@code null} or {@link GenericData}.
*
*
* @param transport HTTP transport
* @param accessToken access token
*/
public static void usingFormEncodedBody(HttpTransport transport, String accessToken) {
new UsingFormEncodedBody().authorize(transport, accessToken);
}
/**
* Abstract class to inject an access token parameter for every executed HTTP request .
*/
static abstract class AccessTokenIntercepter implements HttpExecuteIntercepter {
/** Access token to use. */
String accessToken;
void authorize(HttpTransport transport, String accessToken) {
this.accessToken = accessToken;
transport.removeIntercepters(AccessTokenIntercepter.class);
transport.intercepters.add(this);
}
}
static final class UsingAuthorizationHeader extends AccessTokenIntercepter {
public void intercept(HttpRequest request) {
request.headers.authorization = "OAuth " + accessToken;
}
}
static final class UsingQueryParameter extends AccessTokenIntercepter {
public void intercept(HttpRequest request) {
request.url.set("oauth_token", accessToken);
}
}
static final class UsingFormEncodedBody extends AccessTokenIntercepter {
private static final EnumSet ALLOWED_METHODS =
EnumSet.of(HttpMethod.POST, HttpMethod.PUT, HttpMethod.DELETE);
public void intercept(HttpRequest request) {
if (!ALLOWED_METHODS.contains(request.method)) {
throw new IllegalArgumentException(
"expected one of these HTTP methods: " + ALLOWED_METHODS);
}
// URL-encoded content (cast exception if not the right class)
UrlEncodedContent content = (UrlEncodedContent) request.content;
if (content == null) {
content = new UrlEncodedContent();
request.content = content;
}
// Generic data (cast exception if not the right class)
GenericData data = (GenericData) content.data;
if (data == null) {
data = new GenericData();
content.data = data;
}
data.put("oauth_token", accessToken);
}
}
private AccessProtectedResource() {
}
}