PageRenderTime 48ms CodeModel.GetById 20ms RepoModel.GetById 0ms app.codeStats 0ms

/bridge/src/main/java/com/atlassian/oauth/bridge/Consumers.java

https://bitbucket.org/gnomix/atlassian-oauth
Java | 150 lines | 78 code | 17 blank | 55 comment | 5 complexity | 47caae56ec03a6fd047e67cbf3db4bca MD5 | raw file
  1. package com.atlassian.oauth.bridge;
  2. import java.net.URI;
  3. import java.security.PrivateKey;
  4. import java.security.PublicKey;
  5. import net.oauth.OAuth;
  6. import net.oauth.OAuthConsumer;
  7. import net.oauth.OAuthServiceProvider;
  8. import net.oauth.signature.RSA_SHA1;
  9. import com.atlassian.oauth.Consumer;
  10. import com.atlassian.oauth.ServiceProvider;
  11. import com.atlassian.oauth.Consumer.InstanceBuilder;
  12. import com.atlassian.oauth.Consumer.SignatureMethod;
  13. import com.atlassian.oauth.util.Check;
  14. /**
  15. * A utility class for converting between Atlassian {@link Consumer} objects and the OAuth.net library
  16. * {@link OAuthConsumer} objects.
  17. */
  18. public final class Consumers
  19. {
  20. private Consumers() {}
  21. /**
  22. * Converts a {@code Consumer} to an {@code OAuthConsumer}.
  23. *
  24. * @param consumer {@code Consumer} to be converted to an {@code OAuthConsumer}
  25. * @param serviceProvider {@code ServiceProvider} to convert to {@code OAuthServiceProvider}, and set as the
  26. * {@link OAuthConsumer#serviceProvider} attribute
  27. * @return {@code OAuthConsumer} converted from the {@code Consumer}
  28. */
  29. public static OAuthConsumer asOAuthConsumer(Consumer consumer, ServiceProvider serviceProvider)
  30. {
  31. return asOAuthConsumer(consumer, (String) null, serviceProvider);
  32. }
  33. /**
  34. * Converts a {@code Consumer} to an {@code OAuthConsumer}.
  35. *
  36. * @param consumer {@code Consumer} to be converted to an {@code OAuthConsumer}
  37. * @param oauthServiceProvider {@code OAuthServiceProvider} to set as the {@link OAuthConsumer#serviceProvider} attribute
  38. * @return {@code OAuthConsumer} converted from the {@code Consumer}
  39. */
  40. public static OAuthConsumer asOAuthConsumer(Consumer consumer, OAuthServiceProvider oauthServiceProvider)
  41. {
  42. return asOAuthConsumer(consumer, (String) null, oauthServiceProvider);
  43. }
  44. /**
  45. * Converts a {@code Consumer} to an {@code OAuthConsumer}, includes the {@code privateKey} in the
  46. * {@code OAuthConsumer}s properties so that it is suitable for signing.
  47. *
  48. * @param consumer {@code Consumer} to be converted to an {@code OAuthConsumer}
  49. * @param privateKey {@code PrivateKey} to use to sign requests
  50. * @param serviceProvider {@code ServiceProvider} to convert to {@code OAuthServiceProvider}, and set as the
  51. * {@link OAuthConsumer#serviceProvider} attribute
  52. * @return {@code OAuthConsumer} converted from the {@code Consumer}
  53. */
  54. public static OAuthConsumer asOAuthConsumer(Consumer consumer, PrivateKey privateKey, ServiceProvider serviceProvider)
  55. {
  56. OAuthConsumer oauthConsumer = asOAuthConsumer(consumer, serviceProvider);
  57. oauthConsumer.setProperty(RSA_SHA1.PRIVATE_KEY, privateKey);
  58. return oauthConsumer;
  59. }
  60. /**
  61. * Converts a {@code Consumer} to an {@code OAuthConsumer}, uses the {@code sharedSecret} in the
  62. * {@code OAuthConsumer}s constructor so that it is suitable for signing.
  63. *
  64. * @param consumer {@code Consumer} to be converted to an {@code OAuthConsumer}
  65. * @param sharedSecret shared secret to use to sign requests
  66. * @param serviceProvider {@code ServiceProvider} to convert to {@code OAuthServiceProvider}, and set as the
  67. * {@link OAuthConsumer#serviceProvider} attribute
  68. * @return {@code OAuthConsumer} converted from the {@code Consumer}
  69. */
  70. public static OAuthConsumer asOAuthConsumer(Consumer consumer, String sharedSecret, ServiceProvider serviceProvider)
  71. {
  72. Check.notNull(serviceProvider, "serviceProvider");
  73. return asOAuthConsumer(consumer, sharedSecret, ServiceProviders.asOAuthServiceProvider(serviceProvider));
  74. }
  75. /**
  76. * Converts a {@code Consumer} to an {@code OAuthConsumer}, uses the {@code sharedSecret} in the
  77. * {@code OAuthConsumer}s constructor so that it is suitable for signing.
  78. *
  79. * @param consumer {@code Consumer} to be converted to an {@code OAuthConsumer}
  80. * @param sharedSecret shared secret to use to sign requests
  81. * @param serviceProvider {@code OAuthServiceProvider} to set as the {@link OAuthConsumer#serviceProvider} attribute
  82. * @return {@code OAuthConsumer} converted from the {@code Consumer}
  83. */
  84. public static OAuthConsumer asOAuthConsumer(Consumer consumer, String sharedSecret, OAuthServiceProvider oauthServiceProvider)
  85. {
  86. Check.notNull(consumer, "consumer");
  87. Check.notNull(oauthServiceProvider, "oauthServiceProvider");
  88. String callback = consumer.getCallback() != null ? consumer.getCallback().toString() : null;
  89. OAuthConsumer oauthConsumer = new OAuthConsumer(callback, consumer.getKey(), sharedSecret, oauthServiceProvider);
  90. oauthConsumer.setProperty(ConsumerProperty.NAME, consumer.getName());
  91. oauthConsumer.setProperty(ConsumerProperty.DESCRIPTION, consumer.getDescription());
  92. if (consumer.getSignatureMethod() == SignatureMethod.RSA_SHA1)
  93. {
  94. oauthConsumer.setProperty(OAuth.OAUTH_SIGNATURE_METHOD, OAuth.RSA_SHA1);
  95. oauthConsumer.setProperty(RSA_SHA1.PUBLIC_KEY, consumer.getPublicKey());
  96. }
  97. else
  98. {
  99. oauthConsumer.setProperty(OAuth.OAUTH_SIGNATURE_METHOD, OAuth.HMAC_SHA1);
  100. }
  101. return oauthConsumer;
  102. }
  103. /**
  104. * Converts an {@code OAuthConsumer} to a {@code Consumer}.
  105. *
  106. * @param consumer {@code OAuthConsumer} to convert to a {@code Consumer}
  107. * @return {@code Consumer} converted from the {@code OAuthConsumer}
  108. */
  109. public static Consumer fromOAuthConsumer(OAuthConsumer consumer)
  110. {
  111. Check.notNull(consumer, "consumer");
  112. String name = (String) consumer.getProperty(ConsumerProperty.NAME);
  113. URI callback = consumer.callbackURL != null ? URI.create(consumer.callbackURL) : null;
  114. String description = (String) consumer.getProperty(ConsumerProperty.DESCRIPTION);
  115. InstanceBuilder builder = Consumer.key(consumer.consumerKey).name(name).description(description).callback(callback);
  116. if (consumer.getProperty(OAuth.OAUTH_SIGNATURE_METHOD).equals(OAuth.HMAC_SHA1))
  117. {
  118. builder.signatureMethod(SignatureMethod.HMAC_SHA1);
  119. }
  120. else
  121. {
  122. // we could check if it's a string or byte[] and do the conversion, but for now let's keep things simple
  123. PublicKey publicKey = (PublicKey) consumer.getProperty(RSA_SHA1.PUBLIC_KEY);
  124. builder.publicKey(publicKey);
  125. }
  126. return builder.build();
  127. }
  128. static final class ConsumerProperty
  129. {
  130. static final String NAME = "name";
  131. static final String DESCRIPTION = "description";
  132. }
  133. }