Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- * @author Joey Q. Chan (joeyqchan@gmail.com)
- * @date 07/06/2011
- * @description Generic Oauth 1.0 implementatopm based on the Oauth Playground for the base code (https://github.com/jesperfj/sfdc-oauth-playground)
- */
- public class Oauth {
- private String verifier;
- private String nonce;
- private String timestamp;
- private String signature;
- private Map<String,String> parameters = new Map<String,String>();
- public String REQUEST_TOKEN_URL;
- public String AUTHORIZATION_URL;
- public String ACCESS_TOKEN_URL;
- public String PAGEURL;
- public String consumerKey;
- public String consumerSecret;
- public String token;
- public String tokenSecret;
- public String message { get; set; }
- public String callbackUrl {get; set; }
- private void refreshParameters() {
- parameters.clear();
- parameters.put('oauth_consumer_key',consumerKey);
- if(token!=null) {
- parameters.put('oauth_token',token);
- }
- if(verifier!=null) {
- parameters.put('oauth_verifier',verifier);
- }
- parameters.put('oauth_signature_method','HMAC-SHA1');
- parameters.put('oauth_timestamp',timestamp);
- parameters.put('oauth_nonce',nonce);
- if(callbackUrl!=null) {
- parameters.put('oauth_callback',callbackUrl);
- }
- parameters.put('oauth_version','1.0');
- }
- public Map<String,String> getUrlParams(String value) {
- Map<String,String> res = new Map<String,String>();
- if(value==null || value=='') {
- return res;
- }
- for(String s : value.split('&')) {
- System.debug('getUrlParams: '+s);
- List<String> kv = s.split('=');
- if(kv.size()>1) {
- System.debug('getUrlParams: -> '+kv[0]+','+kv[1]);
- res.put(kv[0],kv[1]);
- }
- }
- return res;
- }
- private String createBaseString(Map<String,String> oauthParams, HttpRequest req) {
- Map<String,String> p = oauthParams.clone();
- if(req.getMethod().equalsIgnoreCase('post') && req.getBody()!=null &&
- req.getHeader('Content-Type')=='application/x-www-form-urlencoded') {
- p.putAll(getUrlParams(req.getBody()));
- }
- String host = req.getEndpoint();
- Integer n = host.indexOf('?');
- if(n>-1) {
- p.putAll(getUrlParams(host.substring(n+1)));
- host = host.substring(0,n);
- }
- List<String> keys = new List<String>();
- keys.addAll(p.keySet());
- keys.sort();
- String s = keys.get(0)+'='+p.get(keys.get(0));
- for(Integer i=1;i<keys.size();i++) {
- s = s + '&' + keys.get(i)+'='+p.get(keys.get(i));
- }
- // According to OAuth spec, host string should be lowercased, but Google and LinkedIn
- // both expect that case is preserved.
- return req.getMethod().toUpperCase()+ '&' +
- EncodingUtil.urlEncode(host, 'UTF-8') + '&' +
- EncodingUtil.urlEncode(s, 'UTF-8');
- }
- public void sign(HttpRequest req) {
- nonce = String.valueOf(Crypto.getRandomLong());
- //nonce = '65344ce1699a99da9247ff8947d18af5';
- timestamp = String.valueOf(DateTime.now().getTime()/1000);
- //timestamp = '1344627075';
- refreshParameters();
- String s = createBaseString(parameters, req);
- System.debug('Signature base string: '+s);
- Blob sig = Crypto.generateMac('HmacSHA1', Blob.valueOf(s),
- Blob.valueOf(consumerSecret+'&'+
- (tokenSecret!=null ? tokenSecret : '')));
- signature = EncodingUtil.urlEncode(EncodingUtil.base64encode(sig), 'UTF-8');
- System.debug('Signature: '+signature);
- String header = 'OAuth ';
- for (String key : parameters.keySet()) {
- header = header + key + '="'+parameters.get(key)+'", ';
- }
- header = header + 'oauth_signature="'+signature+'"';
- System.debug('Authorization: '+header);
- req.setHeader('Authorization',header);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement