forked from sahat/satellizer
-
Notifications
You must be signed in to change notification settings - Fork 0
/
satellizer.min.js
6 lines (6 loc) · 14.3 KB
/
satellizer.min.js
1
2
3
4
5
6
/**
* Satellizer 0.9.4
* (c) 2015 Sahat Yalkabov
* License: MIT
*/
!function(e,t){"use strict";t.module("satellizer",[]).constant("satellizer.config",{httpInterceptor:!0,loginOnSignup:!0,loginRedirect:"/",logoutRedirect:"/",signupRedirect:"/login",loginUrl:"/auth/login",signupUrl:"/auth/signup",loginRoute:"/login",signupRoute:"/signup",tokenRoot:!1,tokenName:"token",tokenPrefix:"satellizer",unlinkUrl:"/auth/unlink/",unlinkMethod:"get",authHeader:"Authorization",withCredentials:!0,platform:"browser",providers:{google:{name:"google",url:"/auth/google",authorizationEndpoint:"https://accounts.google.com/o/oauth2/auth",redirectUri:e.location.origin||e.location.protocol+"//"+e.location.host,scope:["profile","email"],scopePrefix:"openid",scopeDelimiter:" ",requiredUrlParams:["scope"],optionalUrlParams:["display"],display:"popup",type:"2.0",popupOptions:{width:452,height:633}},facebook:{name:"facebook",url:"/auth/facebook",authorizationEndpoint:"https://www.facebook.com/dialog/oauth",redirectUri:e.location.origin+"/"||e.location.protocol+"//"+e.location.host+"/",scope:["email"],scopeDelimiter:",",requiredUrlParams:["display","scope"],display:"popup",type:"2.0",popupOptions:{width:580,height:400}},linkedin:{name:"linkedin",url:"/auth/linkedin",authorizationEndpoint:"https://www.linkedin.com/uas/oauth2/authorization",redirectUri:e.location.origin||e.location.protocol+"//"+e.location.host,requiredUrlParams:["state"],scope:["r_emailaddress"],scopeDelimiter:" ",state:"STATE",type:"2.0",popupOptions:{width:527,height:582}},github:{name:"github",url:"/auth/github",authorizationEndpoint:"https://github.com/login/oauth/authorize",redirectUri:e.location.origin||e.location.protocol+"//"+e.location.host,optionalUrlParams:["scope"],scope:["user:email"],scopeDelimiter:" ",type:"2.0",popupOptions:{width:1020,height:618}},yahoo:{name:"yahoo",url:"/auth/yahoo",authorizationEndpoint:"https://api.login.yahoo.com/oauth2/request_auth",redirectUri:e.location.origin||e.location.protocol+"//"+e.location.host,scope:[],scopeDelimiter:",",type:"2.0",popupOptions:{width:559,height:519}},twitter:{name:"twitter",url:"/auth/twitter",type:"1.0",popupOptions:{width:495,height:645}},live:{name:"live",url:"/auth/live",authorizationEndpoint:"https://login.live.com/oauth20_authorize.srf",redirectUri:e.location.origin||e.location.protocol+"//"+e.location.host,scope:["wl.emails"],scopeDelimiter:" ",requiredUrlParams:["display","scope"],display:"popup",type:"2.0",popupOptions:{width:500,height:560}}}}).provider("$auth",["satellizer.config",function(e){Object.defineProperties(this,{httpInterceptor:{get:function(){return e.httpInterceptor},set:function(t){e.httpInterceptor=t}},loginOnSignup:{get:function(){return e.loginOnSignup},set:function(t){e.loginOnSignup=t}},logoutRedirect:{get:function(){return e.logoutRedirect},set:function(t){e.logoutRedirect=t}},loginRedirect:{set:function(t){e.loginRedirect=t},get:function(){return e.loginRedirect}},signupRedirect:{get:function(){return e.signupRedirect},set:function(t){e.signupRedirect=t}},loginUrl:{get:function(){return e.loginUrl},set:function(t){e.loginUrl=t}},signupUrl:{get:function(){return e.signupUrl},set:function(t){e.signupUrl=t}},loginRoute:{get:function(){return e.loginRoute},set:function(t){e.loginRoute=t}},signupRoute:{get:function(){return e.signupRoute},set:function(t){e.signupRoute=t}},tokenRoot:{get:function(){return e.tokenRoot},set:function(t){e.tokenRoot=t}},tokenName:{get:function(){return e.tokenName},set:function(t){e.tokenName=t}},tokenPrefix:{get:function(){return e.tokenPrefix},set:function(t){e.tokenPrefix=t}},unlinkUrl:{get:function(){return e.unlinkUrl},set:function(t){e.unlinkUrl=t}},authHeader:{get:function(){return e.authHeader},set:function(t){e.authHeader=t}},withCredentials:{get:function(){return e.withCredentials},set:function(t){e.withCredentials=t}},unlinkMethod:{get:function(){return e.unlinkMethod},set:function(t){e.unlinkMethod=t}},platform:{get:function(){return e.platform},set:function(t){e.platform=t}},useRedirectFlow:{get:function(){return e.useRedirectFlow},set:function(t){e.useRedirectFlow=t}}}),t.forEach(Object.keys(e.providers),function(n){this[n]=function(r){return t.extend(e.providers[n],r)}},this);var n=function(n){e.providers[n.name]=e.providers[n.name]||{},t.extend(e.providers[n.name],n)};this.oauth1=function(t){n(t),e.providers[t.name].type="1.0"},this.oauth2=function(t){n(t),e.providers[t.name].type="2.0"},this.$get=["$q","satellizer.shared","satellizer.local","satellizer.oauth",function(e,t,n,r){var o={};return o.authenticate=function(e,t){return r.authenticate(e,!1,t)},o.login=function(e,t){return n.login(e,t)},o.signup=function(e){return n.signup(e)},o.logout=function(e){return t.logout(e)},o.isAuthenticated=function(){return t.isAuthenticated()},o.link=function(e,t){return r.authenticate(e,!0,t)},o.unlink=function(e){return r.unlink(e)},o.getToken=function(){return t.getToken()},o.setToken=function(e,n){t.setToken({access_token:e},n)},o.removeToken=function(){return t.removeToken()},o.getPayload=function(){return t.getPayload()},o}]}]).factory("satellizer.shared",["$q","$window","$location","satellizer.config","satellizer.storage",function(e,n,r,o,i){var a={};return a.getToken=function(){var e=o.tokenPrefix?o.tokenPrefix+"_"+o.tokenName:o.tokenName;return i.get(e)},a.getPayload=function(){var e=o.tokenPrefix?o.tokenPrefix+"_"+o.tokenName:o.tokenName,t=i.get(e);if(t&&3===t.split(".").length){var r=t.split(".")[1],a=r.replace("-","+").replace("_","/");return JSON.parse(n.atob(a))}},a.setToken=function(e,n){var a,u=e&&e.access_token,l=e&&e.expires_in,c=e&&e.logout_success;u&&(t.isObject(u)&&t.isObject(u.data)?e=u:t.isString(u)&&(a=u)),!a&&e&&(a=o.tokenRoot&&e.data[o.tokenRoot]?e.data[o.tokenRoot][o.tokenName]:e.data[o.tokenName]);var s=o.tokenPrefix?o.tokenPrefix+"_"+o.tokenName:o.tokenName;if(!a)throw s=o.tokenRoot?o.tokenRoot+"."+o.tokenName:o.tokenName,new Error('Expecting a token named "'+s+'" but instead got: '+JSON.stringify(e.data));c||(i.set(s,a),i.set(s+"_expiresIn",(new Date).getTime()+1e3*parseInt(l,10))),o.loginRedirect&&!n?r.path(o.loginRedirect):n&&t.isString(n)&&r.path(encodeURI(n))},a.removeToken=function(){var e=o.tokenPrefix?o.tokenPrefix+"_"+o.tokenName:o.tokenName;i.remove(e)},a.isAuthenticated=function(){var e=o.tokenPrefix?o.tokenPrefix+"_"+o.tokenName:o.tokenName,t=i.get(e),r=i.get(e+"_expiresIn");if(t){if(r&&parseInt(r,10)<(new Date).getTime())return!1;if(3===t.split(".").length){var a=t.split(".")[1],u=a.replace("-","+").replace("_","/"),l=JSON.parse(n.atob(u)).exp;if(l)return Math.round((new Date).getTime()/1e3)<=l}return!0}return!1},a.logout=function(n){var a=o.tokenPrefix?o.tokenPrefix+"_"+o.tokenName:o.tokenName;return i.remove(a),i.remove(a+"_expiresIn"),o.logoutRedirect&&!n?r.url(o.logoutRedirect):t.isString(n)&&r.url(n),e.when()},a}]).factory("satellizer.oauth",["$q","$http","satellizer.config","satellizer.shared","satellizer.Oauth1","satellizer.Oauth2",function(e,n,r,o,i,a){var u={};return u.authenticate=function(n,u,l){var c="1.0"===r.providers[n].type?new i:new a,s=e.defer(),p=c.open(r.providers[n],l||{},s);return p&&p.then&&t.isFunction(p.then)&&p.then(function(e){o.setToken(e,u),s.resolve(e)}).catch(function(e){s.reject(e)}),s.promise},u.unlink=function(e){return"get"===r.unlinkMethod?n.get(r.unlinkUrl+e):"post"===r.unlinkMethod?n.post(r.unlinkUrl,e):void 0},u}]).factory("satellizer.local",["$q","$http","$location","satellizer.utils","satellizer.shared","satellizer.config",function(e,t,n,r,o,i){var a={};return a.login=function(e,n){return t.post(i.loginUrl,e).then(function(e){return o.setToken(e,n),e})},a.signup=function(e){return t.post(i.signupUrl,e).then(function(e){return i.loginOnSignup?o.setToken(e):i.signupRedirect&&n.path(i.signupRedirect),e})},a}]).factory("satellizer.Oauth2",["$q","$http","$window","satellizer.popup","satellizer.utils","satellizer.config","satellizer.storage","satellizer.redirect",function(e,n,r,o,i,a,u,l){return function(){var r={url:null,name:null,state:null,scope:null,scopeDelimiter:null,clientId:null,redirectUri:null,popupOptions:null,authorizationEndpoint:null,responseParams:null,requiredUrlParams:null,optionalUrlParams:null,defaultUrlParams:["response_type","client_id","redirect_uri"],responseType:"code"},c={};return c.open=function(n,i,s){t.extend(r,n);var p=r.name+"_state";t.isFunction(r.state)?u.set(p,r.state()):t.isString(r.state)&&u.set(p,r.state);var d=r.authorizationEndpoint+"?"+c.buildQueryString();if(i)for(var f in i)d+="&"+f+"="+i[f];return a.useRedirectFlow?void l.performRedirect(d,s):o.open(d,r.popupOptions,r.redirectUri).then(function(t){return"token"===r.responseType?t:t.state&&t.state!==u.get(p)?e.reject("OAuth 2.0 state parameter mismatch."):c.exchangeForToken(t,i)})},c.exchangeForToken=function(e,o){var i=t.extend({},o,{code:e.code,clientId:r.clientId,redirectUri:r.redirectUri});return e.state&&(i.state=e.state),t.forEach(r.responseParams,function(t){i[t]=e[t]}),n.post(r.url,i,{withCredentials:a.withCredentials})},c.buildQueryString=function(){var e=[],n=["defaultUrlParams","requiredUrlParams","optionalUrlParams"];return t.forEach(n,function(n){t.forEach(r[n],function(t){var n=i.camelCase(t),o=r[n];if("state"===t){var a=r.name+"_state";o=u.get(a)}"scope"===t&&Array.isArray(o)&&(o=o.join(r.scopeDelimiter),r.scopePrefix&&(o=[r.scopePrefix,o].join(r.scopeDelimiter))),e.push([t,o])})}),e.map(function(e){return e.join("=")}).join("&")},c}}]).factory("satellizer.Oauth1",["$q","$http","satellizer.popup",function(e,n,r){return function(){var e={url:null,name:null,popupOptions:null,redirectUri:null},o={};return o.open=function(n,i){return t.extend(e,n),r.open(e.url,e.popupOptions,e.redirectUri).then(function(e){return o.exchangeForToken(e,i)})},o.exchangeForToken=function(r,i){var a=t.extend({},i,r),u=o.buildQueryString(a);return n.get(e.url+"?"+u)},o.buildQueryString=function(e){var n=[];return t.forEach(e,function(e,t){n.push(encodeURIComponent(t)+"="+encodeURIComponent(e))}),n.join("&")},o}}]).factory("satellizer.popup",["$q","$interval","$window","$location","satellizer.config","satellizer.utils",function(n,r,o,i,a,u){var l=null,c=null,s={};return s.popupWindow=l,s.open=function(n,r,o){var i=t.extend({},r,{location:"no",toolbar:"no",hidespinner:"yes"}),u=s.stringifyOptions(s.prepareOptions(i));return l=e.open(n,"_blank",u),l&&l.focus&&l.focus(),"mobile"===a.platform?s.eventListener(o):s.pollPopup()},s.eventListener=function(e){var r=n.defer();return l.addEventListener("loadstart",function(n){if(0===n.url.indexOf(e)){var o=document.createElement("a");if(o.href=n.url,o.search||o.hash){var i=o.search.substring(1).replace(/\/$/,""),a=o.hash.substring(1).replace(/\/$/,""),c=u.parseQueryString(a),s=u.parseQueryString(i);t.extend(s,c),s.error?r.reject({error:s.error}):r.resolve(s),l.close()}}}),l.addEventListener("exit",function(){r.reject({data:"Provider Popup was closed"})}),l.addEventListener("loaderror",function(){r.reject({data:"Authorization Failed"})}),r.promise},s.pollPopup=function(){var e=n.defer();return c=r(function(){try{if(l.document.domain===document.domain&&(l.location.search||l.location.hash)){var n=l.location.search.substring(1).replace(/\/$/,""),o=l.location.hash.substring(1).replace(/\/$/,""),i=u.parseQueryString(o),a=u.parseQueryString(n);t.extend(a,i),a.error?e.reject({error:a.error}):e.resolve(a),l.close(),r.cancel(c)}}catch(s){}l?l.closed&&(r.cancel(c),e.reject({data:"Authorization Failed"})):(r.cancel(c),e.reject({data:"Provider Popup Blocked"}))},35),e.promise},s.prepareOptions=function(e){var n=e.width||500,r=e.height||500;return t.extend({width:n,height:r,left:o.screenX+(o.outerWidth-n)/2,top:o.screenY+(o.outerHeight-r)/2.5},e)},s.stringifyOptions=function(e){var n=[];return t.forEach(e,function(e,t){n.push(t+"="+e)}),n.join(",")},s}]).factory("satellizer.redirect",["$window","$location","$http","satellizer.config","satellizer.utils","satellizer.shared",function(t,n,r,o,i,a){var u,l={};return o.useRedirectFlow&&(u=i.parseQueryString(n.path().substring(1)),u.access_token&&a.setToken(u)),l.performRedirect=function(t,n){var o,i=new DOMParser,a=this||{},u=!1||!!document.documentMode,l=Object.prototype.toString.call(e.HTMLElement).indexOf("Constructor")>0;a.deferred=n,a.errorFactory=function(e){return new Error(e)},(u||l)&&e.location.assign(t),r({url:t,method:"GET",responseType:"text"}).success(function(n,r){o=i.parseFromString(n,"text/html"),o&&o.title.indexOf("Error")<0&&0!==r?e.location.assign(t):a.deferred.resolve(a.errorFactory(n))}).error(function(e){a.deferred.resolve(a.errorFactory(e))})},l}]).service("satellizer.utils",function(){this.camelCase=function(e){return e.replace(/([\:\-\_]+(.))/g,function(e,t,n,r){return r?n.toUpperCase():n})},this.parseQueryString=function(e){var n,r,o={};return t.forEach((e||"").split("&"),function(e){e&&(r=e.split("="),n=decodeURIComponent(r[0]),o[n]=t.isDefined(r[1])?decodeURIComponent(r[1]):!0)}),o}}).factory("satellizer.storage",function(){function t(){try{return"localStorage"in e&&null!==e.localStorage}catch(t){return!1}}return t()?{get:function(e){return localStorage.getItem(e)},set:function(e,t){return localStorage.setItem(e,t)},remove:function(e){return localStorage.removeItem(e)}}:(console.warn("Warning: Browser Local Storage is disabled or unavailable. Satellizer will not work correctly."),{get:function(){},set:function(){},remove:function(){}})}).factory("satellizer.interceptor",["$q","satellizer.config","satellizer.storage",function(e,t,n){var r=t.tokenPrefix?t.tokenPrefix+"_"+t.tokenName:t.tokenName;return{request:function(e){var o=n.get(r);return o&&t.httpInterceptor&&(o="Authorization"===t.authHeader?"Bearer "+o:o,e.headers[t.authHeader]=o),e},responseError:function(t){return e.reject(t)}}}]).config(["$httpProvider",function(e){e.interceptors.push("satellizer.interceptor")}])}(window,window.angular),function(){function e(e){this.message=e}var t="undefined"!=typeof exports?exports:this,n="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";e.prototype=new Error,e.prototype.name="InvalidCharacterError",t.btoa||(t.btoa=function(t){for(var r,o,i=String(t),a=0,u=n,l="";i.charAt(0|a)||(u="=",a%1);l+=u.charAt(63&r>>8-a%1*8)){if(o=i.charCodeAt(a+=.75),o>255)throw new e("'btoa' failed: The string to be encoded contains characters outside of the Latin1 range.");r=r<<8|o}return l}),t.atob||(t.atob=function(t){var r=String(t).replace(/=+$/,"");if(r.length%4==1)throw new e("'atob' failed: The string to be decoded is not correctly encoded.");for(var o,i,a=0,u=0,l="";i=r.charAt(u++);~i&&(o=a%4?64*o+i:i,a++%4)?l+=String.fromCharCode(255&o>>(-2*a&6)):0)i=n.indexOf(i);return l})}();