File "oauth.xing.js"
Full Path: /srv/www/www.cadoro.it/app/lib/ng-cordova-oauth/src/oauth.xing.js
File size: 5.71 KB
MIME-type: text/plain
Charset: utf-8
(function() {
'use strict';
angular.module('oauth.xing', ['oauth.utils'])
.factory('$ngCordovaXing', xing);
function xing($q, $http, $cordovaOauthUtility) {
return { signin: oauthXing };
/*
* Sign into the Xing service
* Note that this service requires jsSHA for generating HMAC-SHA1 Oauth 1.0 signatures
*
* @param string clientId
* @param string clientSecret
* @param object options
* @return promise
*/
function oauthXing(clientId, clientSecret, options) {
var deferred = $q.defer();
if(window.cordova) {
if($cordovaOauthUtility.isInAppBrowserInstalled()) {
var redirect_uri = 'http://localhost/callback';
if(options !== undefined) {
if(options.hasOwnProperty('redirect_uri')) {
redirect_uri = options.redirect_uri;
}
}
if(typeof jsSHA !== 'undefined') {
var oauthObject = {
oauth_consumer_key: clientId,
oauth_nonce: $cordovaOauthUtility.createNonce(10),
oauth_signature_method: 'HMAC-SHA1',
oauth_timestamp: Math.round((new Date()).getTime() / 1000.0),
oauth_version: '1.0'
};
var signatureObj = $cordovaOauthUtility.createSignature('POST', 'https://api.xing.com/v1/request_token', oauthObject, { oauth_callback: redirect_uri }, clientSecret);
$http({
method: 'post',
url: 'https://api.xing.com/v1/request_token',
headers: {
'Authorization': signatureObj.authorization_header,
'Content-Type': 'application/x-www-form-urlencoded'
},
data: 'oauth_callback=' + encodeURIComponent(redirect_uri)
})
.success(function(requestTokenResult) {
var requestTokenParameters = (requestTokenResult).split('&');
var parameterMap = {};
for(var i = 0; i < requestTokenParameters.length; i++) {
parameterMap[requestTokenParameters[i].split('=')[0]] = requestTokenParameters[i].split('=')[1];
}
if(parameterMap.hasOwnProperty('oauth_token') === false) {
deferred.reject('Oauth request token was not received');
}
var oauthTokenSecret = parameterMap.oauth_token_secret;
var browserRef = window.cordova.InAppBrowser.open('https://api.xing.com/v1/authorize?oauth_token=' + parameterMap.oauth_token, '_blank', 'location=no,clearsessioncache=yes,clearcache=yes');
browserRef.addEventListener('loadstart', function(event) {
if((event.url).indexOf(redirect_uri) === 0) {
var callbackResponse = (event.url).split('?')[1];
var responseParameters = (callbackResponse).split('&');
var parameterMap = {};
for(var i = 0; i < responseParameters.length; i++) {
parameterMap[responseParameters[i].split('=')[0]] = responseParameters[i].split('=')[1];
}
if(parameterMap.hasOwnProperty('oauth_verifier') === false) {
deferred.reject('Browser authentication failed to complete. No oauth_verifier was returned');
}
delete oauthObject.oauth_signature;
oauthObject.oauth_token = parameterMap.oauth_token;
var signatureObj = $cordovaOauthUtility.createSignature('POST', 'https://api.xing.com/v1/access_token', oauthObject, { oauth_verifier: parameterMap.oauth_verifier }, clientSecret, oauthTokenSecret);
$http({
method: 'post',
url: 'https://api.xing.com/v1/access_token',
headers: {
'Authorization': signatureObj.authorization_header
},
params: {
'oauth_verifier': parameterMap.oauth_verifier
}
})
.success(function(result) {
var accessTokenParameters = result.split('&');
var parameterMap = {};
for(var i = 0; i < accessTokenParameters.length; i++) {
parameterMap[accessTokenParameters[i].split('=')[0]] = accessTokenParameters[i].split('=')[1];
}
if(parameterMap.hasOwnProperty('oauth_token_secret') === false) {
deferred.reject('Oauth access token was not received');
}
deferred.resolve(parameterMap);
})
.error(function(error) {
deferred.reject(error);
})
.finally(function() {
setTimeout(function() {
browserRef.close();
}, 10);
});
}
});
browserRef.addEventListener('exit', function(event) {
deferred.reject('The sign in flow was canceled');
});
})
.error(function(error) {
deferred.reject(error);
});
} else {
deferred.reject('Missing jsSHA JavaScript library');
}
} else {
deferred.reject('Could not find InAppBrowser plugin');
}
} else {
deferred.reject('Cannot authenticate via a web browser');
}
return deferred.promise;
}
}
xing.$inject = ['$q', '$http', '$cordovaOauthUtility'];
})();