001// License: GPL. For details, see LICENSE file. 002package org.openstreetmap.josm.data.oauth; 003 004import java.io.IOException; 005import java.io.InputStream; 006import java.net.URL; 007import java.util.Map; 008 009import org.openstreetmap.josm.tools.HttpClient; 010 011import oauth.signpost.AbstractOAuthConsumer; 012import oauth.signpost.AbstractOAuthProvider; 013 014/** 015 * Adapters to make {@code oauth.signpost} work with {@link HttpClient}. 016 */ 017public final class SignpostAdapters { 018 019 private SignpostAdapters() { 020 } 021 022 public static class OAuthProvider extends AbstractOAuthProvider { 023 024 public OAuthProvider(String requestTokenEndpointUrl, String accessTokenEndpointUrl, String authorizationWebsiteUrl) { 025 super(requestTokenEndpointUrl, accessTokenEndpointUrl, authorizationWebsiteUrl); 026 } 027 028 @Override 029 protected HttpRequest createRequest(String endpointUrl) throws Exception { 030 return new HttpRequest(HttpClient.create(new URL(endpointUrl), "GET")); 031 } 032 033 @Override 034 protected HttpResponse sendRequest(oauth.signpost.http.HttpRequest request) throws Exception { 035 return new HttpResponse(((HttpRequest) request).request.connect()); 036 } 037 038 @Override 039 protected void closeConnection(oauth.signpost.http.HttpRequest request, oauth.signpost.http.HttpResponse response) throws Exception { 040 if (response != null) { 041 ((HttpResponse) response).response.disconnect(); 042 } else if (request != null) { 043 ((HttpRequest) request).request.disconnect(); 044 } 045 } 046 } 047 048 public static class OAuthConsumer extends AbstractOAuthConsumer { 049 050 public OAuthConsumer(String consumerKey, String consumerSecret) { 051 super(consumerKey, consumerSecret); 052 } 053 054 @Override 055 protected HttpRequest wrap(Object request) { 056 return new HttpRequest((HttpClient) request); 057 } 058 } 059 060 private static class HttpRequest implements oauth.signpost.http.HttpRequest { 061 private final HttpClient request; 062 063 HttpRequest(HttpClient request) { 064 this.request = request; 065 } 066 067 @Override 068 public void setHeader(String name, String value) { 069 request.setHeader(name, value); 070 } 071 072 @Override 073 public String getMethod() { 074 return request.getRequestMethod(); 075 } 076 077 @Override 078 public String getRequestUrl() { 079 return request.getURL().toExternalForm(); 080 } 081 082 @Override 083 public String getContentType() { 084 return request.getRequestHeader("Content-Type"); 085 } 086 087 @Override 088 public String getHeader(String name) { 089 return request.getRequestHeader(name); 090 } 091 092 @Override 093 public InputStream getMessagePayload() throws IOException { 094 return null; 095 } 096 097 @Override 098 public void setRequestUrl(String url) { 099 throw new IllegalStateException(); 100 } 101 102 @Override 103 public Map<String, String> getAllHeaders() { 104 throw new IllegalStateException(); 105 } 106 107 @Override 108 public Object unwrap() { 109 throw new IllegalStateException(); 110 } 111 } 112 113 private static class HttpResponse implements oauth.signpost.http.HttpResponse { 114 private final HttpClient.Response response; 115 116 HttpResponse(HttpClient.Response response) { 117 this.response = response; 118 } 119 120 @Override 121 public int getStatusCode() throws IOException { 122 return response.getResponseCode(); 123 } 124 125 @Override 126 public String getReasonPhrase() throws Exception { 127 return response.getResponseMessage(); 128 } 129 130 @Override 131 public InputStream getContent() throws IOException { 132 return response.getContent(); 133 } 134 135 @Override 136 public Object unwrap() { 137 throw new IllegalStateException(); 138 } 139 } 140 141}