1b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien/* 2b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien * Copyright 2008 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.client; 18b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien 19b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembienimport java.io.IOException; 20b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembienimport java.io.InputStream; 21b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembienimport java.util.Map; 22b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembienimport net.oauth.OAuth; 23b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembienimport net.oauth.OAuthMessage; 24b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembienimport net.oauth.OAuthProblemException; 25b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembienimport net.oauth.http.HttpMessage; 26b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembienimport net.oauth.http.HttpResponseMessage; 27b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien 28b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien/** 29b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien * An HTTP response, encapsulated as an OAuthMessage. 30b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien * 31b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien * @author John Kristian 32b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien * @hide 33b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien */ 34b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembienfinal class OAuthResponseMessage extends OAuthMessage 35b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien{ 36b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien OAuthResponseMessage(HttpResponseMessage http) throws IOException 37b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien { 38b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien super(http.method, http.url.toExternalForm(), null); 39b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien this.http = http; 40b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien getHeaders().addAll(http.headers); 41b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien for (Map.Entry<String, String> header : http.headers) { 42b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien if ("WWW-Authenticate".equalsIgnoreCase(header.getKey())) { 43b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien for (OAuth.Parameter parameter : decodeAuthorization(header.getValue())) { 44b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien if (!"realm".equalsIgnoreCase(parameter.getKey())) { 45b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien addParameter(parameter); 46b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien } 47b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien } 48b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien } 49b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien } 50b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien } 51b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien 52b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien private final HttpMessage http; 53b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien 54b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien @Override 55b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien public InputStream getBodyAsStream() throws IOException 56b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien { 57b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien return http.getBody(); 58b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien } 59b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien 60b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien @Override 61b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien public String getBodyEncoding() 62b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien { 63b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien return http.getContentCharset(); 64b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien } 65b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien 66b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien @Override 67b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien protected void completeParameters() throws IOException 68b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien { 69b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien super.completeParameters(); 70b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien String body = readBodyAsString(); 71b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien if (body != null) { 72b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien addParameters(OAuth.decodeForm(body.trim())); 73b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien } 74b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien } 75b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien 76b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien @Override 77b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien protected void dump(Map<String, Object> into) throws IOException 78b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien { 79b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien super.dump(into); 80b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien http.dump(into); 81b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien } 82b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien 83b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien @Override 84b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien public void requireParameters(String... names) throws OAuthProblemException, IOException { 85b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien try { 86b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien super.requireParameters(names); 87b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien } catch (OAuthProblemException problem) { 88b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien problem.getParameters().putAll(getDump()); 89b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien throw problem; 90b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien } 91b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien } 92b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien 93b852fcf48a8909164d7f323dd02a35d2a8056a61Nico Sallembien} 94