-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathgoogle-auth.min.js
1 lines (1 loc) · 4.17 KB
/
google-auth.min.js
1
"use strict";angular.module("jackrabbitsgroup.angular-google-auth",[]).factory("jrgGoogleAuth",["$rootScope","$http","$q",function($rootScope,$http,$q){function loginCallback(params){if(params.returnVals.extraInfo.emails&¶ms.returnVals.extraInfo.emails.length>0){var retVal=pullPrimary(params.returnVals.extraInfo.emails,{valueKey:"value"});retVal&&(params.returnVals.extraInfo.emailPrimary=retVal)}params.callback.args&&void 0!==params.callback.args?void 0===params.callback.args.length&&(params.callback.args=[params.callback.args]):params.callback.args=[];var args=params.callback.args.concat([params.returnVals]);1==args.length&&(args=args[0]),$rootScope.$broadcast(params.callback.evtName,args),$rootScope.$$phase||$rootScope.$apply()}function pullPrimary(items,opts){var ii,valueKey="value",retVal=!1;opts.valueKey&&(valueKey=opts.valueKey);var found=!1;for(ii=0;ii<items.length;ii++)if(void 0!==opts.matchKey&&void 0!==opts.matchVal){if(void 0!==items[ii][opts.matchKey]&&items[ii][opts.matchKey]==opts.matchVal){retVal=items[ii][valueKey],found=!0;break}}else if(items[ii].primary||"true"==items[ii].primary){retVal=items[ii][valueKey],found=!0;break}return!found&&items.length>0&&(retVal=items[0][valueKey]),retVal}var self={init:function(params){this.setGoogleOpts(params)},setGoogleOpts:function(params){var ii;params.client_id&&(googleInfo.client_id=params.client_id);var scope="";if(params.scope?scope=params.scope:params.scopeHelp||(scope=googleInfo.scope),params.scopeHelp)for(scope+=" ",ii=0;ii<params.scopeHelp.length;ii++)scopeMap[params.scopeHelp[ii]]&&(scope+=scopeMap[params.scopeHelp[ii]]+" ");googleInfo.scope=scope},destroy:function(){googleInfo={client_id:!1,scope:"https://www.googleapis.com/auth/plus.login"},token={},inited=!1},login:function(params){var self1=this,config={scope:googleInfo.scope,client_id:googleInfo.client_id};gapi.auth.authorize(config,function(){var googleToken=gapi.auth.getToken();if(token=googleToken,params.returnVals={token:googleToken},void 0!==params.extraInfo&¶ms.extraInfo.user_id||params.extraInfo.emails){$http.defaults.headers.common["X-Requested-With"]=void 0;var url="https://www.googleapis.com/plus/v1/people/me?access_token="+encodeURIComponent(googleToken.access_token);$http.get(url).success(function(data){if(params.returnVals.rawData=data,params.returnVals.extraInfo={user_id:data.id},params.extraInfo.emails)if(params.returnVals.extraInfo.emails=!1,void 0!==data.emails)params.returnVals.extraInfo.emails=data.emails,loginCallback(params);else{var promise=self1.getContacts({emailOnly:!0});promise.then(function(data){params.returnVals.extraInfo.emails=[{value:data.email,type:"",primary:!0}],loginCallback(params)},function(){loginCallback(params)})}else loginCallback(params)}).error(function(){console.log("error retrieving Google info"),loginCallback(params)})}else loginCallback(params);$rootScope.$$phase||$rootScope.$apply()})},getContacts:function(opts){opts||(opts={});var deferred=$q.defer(),googleToken=token,maxResults=3e3;opts.emailOnly&&(maxResults=1),$http.defaults.headers.common["X-Requested-With"]=void 0;var url="https://www.google.com/m8/feeds/contacts/default/full?access_token="+encodeURIComponent(googleToken.access_token)+"&alt=json&max-results="+maxResults;return $http.get(url).success(function(data){if(opts.emailOnly)deferred.resolve({email:data.feed.id.$t});else{var ii,vals,tempVal,contacts=[];for(ii=0;ii<data.feed.entry.length;ii++)vals={email:!1,name:!1,phone:!1},data.feed.entry[ii].gd$email&&(tempVal=pullPrimary(data.feed.entry[ii].gd$email,{valueKey:"address"}),tempVal&&(vals.email=tempVal)),data.feed.entry[ii].gd$phoneNumber&&(tempVal=pullPrimary(data.feed.entry[ii].gd$phoneNumber,{valueKey:"$t"}),tempVal&&(vals.phone=tempVal)),data.feed.entry[ii].title&&(vals.name=data.feed.entry[ii].title.$t),contacts[ii]=vals;deferred.resolve({contacts:contacts})}}).error(function(){var msg="error retrieving Google contacts";console.log(msg),deferred.reject({msg:msg})}),deferred.promise}},inited=!1,token={},googleInfo={client_id:!1,scope:"https://www.googleapis.com/auth/plus.login"},scopeMap={login:"https://www.googleapis.com/auth/plus.login",email:"https://www.googleapis.com/auth/userinfo.email",contacts:"https://www.google.com/m8/feeds"};return self}]);