1b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien/* 2b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien * Copyright 2007 Netflix, Inc. 3b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien * 4b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien * Licensed under the Apache License, Version 2.0 (the "License"); 5b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien * you may not use this file except in compliance with the License. 6b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien * You may obtain a copy of the License at 7b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien * 8b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien * http://www.apache.org/licenses/LICENSE-2.0 9b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien * 10b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien * Unless required by applicable law or agreed to in writing, software 11b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien * distributed under the License is distributed on an "AS IS" BASIS, 12b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien * See the License for the specific language governing permissions and 14b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien * limitations under the License. 15b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien */ 16b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien 17b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembienpackage net.oauth; 18b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien 19b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembienimport java.io.IOException; 20b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembienimport java.io.Serializable; 21b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembienimport java.net.URISyntaxException; 22b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembienimport java.util.Collection; 23b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembienimport java.util.HashMap; 24b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembienimport java.util.Map; 25b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembienimport net.oauth.http.HttpMessage; 26b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien 27b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien/** 28b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien * Properties of one User of an OAuthConsumer. Properties may be added freely, 29b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien * e.g. to support extensions. 30b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien * 31b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien * @author John Kristian 32b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien * @hide 33b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien */ 34b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembienpublic class OAuthAccessor implements Serializable { 35b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien 36b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien private static final long serialVersionUID = 5590788443138352999L; 37b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien 38b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien public final OAuthConsumer consumer; 39b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien public String requestToken; 40b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien public String accessToken; 41b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien public String tokenSecret; 42b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien 43b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien public OAuthAccessor(OAuthConsumer consumer) { 44b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien this.consumer = consumer; 45b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien this.requestToken = null; 46b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien this.accessToken = null; 47b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien this.tokenSecret = null; 48b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien } 49b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien 50b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien private final Map<String, Object> properties = new HashMap<String, Object>(); 51b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien 52b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien public Object getProperty(String name) { 53b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien return properties.get(name); 54b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien } 55b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien 56b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien public void setProperty(String name, Object value) { 57b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien properties.put(name, value); 58b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien } 59b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien 60b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien /** 61b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien * Construct a request message containing the given parameters but no body. 62b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien * Don't send the message, merely construct it. The caller will ordinarily 63b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien * send it, for example by calling OAuthClient.invoke. 64b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien * 65b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien * @param method 66b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien * the HTTP request method. If this is null, use the default 67b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien * method; that is getProperty("httpMethod") or (if that's null) 68b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien * consumer.getProperty("httpMethod") or (if that's null) 69b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien * OAuthMessage.GET. 70b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien */ 71b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien public OAuthMessage newRequestMessage(String method, String url, 72b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien Collection<? extends Map.Entry> parameters) 73b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien throws OAuthException, IOException, URISyntaxException { 74b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien if (method == null) { 75b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien method = (String) this.getProperty("httpMethod"); 76b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien if (method == null) { 77b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien method = (String) this.consumer.getProperty("httpMethod"); 78b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien if (method == null) { 79b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien method = OAuthMessage.GET; 80b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien } 81b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien } 82b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien } 83b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien OAuthMessage message = new OAuthMessage(method, url, parameters); 84b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien message.addRequiredParameters(this); 85b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien Object accepted = consumer.getProperty(OAuthConsumer.ACCEPT_ENCODING); 86b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien if (accepted != null) { 87b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien message.getHeaders().add(new OAuth.Parameter(HttpMessage.ACCEPT_ENCODING, accepted.toString())); 88b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien } 89b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien return message; 90b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien } 91b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien 92b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien} 93