Java tutorial
/* Copyright (c) 2009 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 org.opensocial.auth; import net.oauth.OAuthAccessor; import net.oauth.OAuthException; import net.oauth.OAuthMessage; import net.oauth.ParameterStyle; import net.oauth.http.HttpMessage; import org.apache.commons.codec.binary.Base64; import org.opensocial.RequestException; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; import java.io.Serializable; import java.io.UnsupportedEncodingException; import java.security.MessageDigest; abstract class OAuthScheme implements Serializable { protected String consumerKey; protected String consumerSecret; protected OAuthScheme() { } public OAuthScheme(String consumerKey, String consumerSecret) { this.consumerKey = consumerKey; this.consumerSecret = consumerSecret; } public String getConsumerKey() { return consumerKey; } public String getConsumerSecret() { return consumerSecret; } protected InputStream byteArrayToStream(byte[] bytes) { InputStream stream = null; if (bytes != null) { stream = new ByteArrayInputStream(bytes); } return stream; } protected HttpMessage getHttpMessage(OAuthMessage message, OAuthAccessor accessor, byte[] body, boolean signBodyHash) throws IOException, RequestException { if (body != null) { if (signBodyHash) { try { MessageDigest md = MessageDigest.getInstance("SHA-1"); byte[] hash = md.digest(body); byte[] encodedHash = new Base64().encode(hash); message.addParameter("oauth_body_hash", new String(encodedHash, "UTF-8")); } catch (java.security.NoSuchAlgorithmException e) { // Ignore exception } catch (java.io.UnsupportedEncodingException e) { // Ignore exception } } else if (message.getHeader(HttpMessage.CONTENT_TYPE).equals("application/x-www-form-urlencoded")) { message.addParameter(byteArrayToString(body), ""); } } try { message.addRequiredParameters(accessor); } catch (OAuthException e) { throw new RequestException("OAuth error thrown while signing request " + e.getMessage()); } catch (java.net.URISyntaxException e) { throw new RequestException("Malformed request URL " + message.URL + " could not be signed"); } return HttpMessage.newRequest(message, ParameterStyle.QUERY_STRING); } private String byteArrayToString(byte[] bytes) { try { return new String(bytes, "UTF-8"); } catch (UnsupportedEncodingException e) { // Ignore return null; } } }