forked from sahat/satellizer
-
Notifications
You must be signed in to change notification settings - Fork 0
/
satellizer.min.js
1 lines (1 loc) · 8.45 KB
/
satellizer.min.js
1
!function(e,t){"use strict";var n={logoutRedirect:"/",loginRedirect:"/",loginUrl:"/auth/login",signupUrl:"/auth/signup",signupRedirect:"/login",loginRoute:"/login",signupRoute:"/signup",user:"currentUser",tokenName:"satellizerToken",unlinkUrl:"/auth/unlink/"},o={google:{url:"/auth/google",authorizationEndpoint:"https://accounts.google.com/o/oauth2/auth",redirectUri:e.location.origin,scope:"openid profile email",scopeDelimiter:" ",requiredUrlParams:["scope"],optionalUrlParams:["display"],display:"popup",type:"2.0",popupOptions:{width:452,height:633}},facebook:{url:"/auth/facebook",authorizationEndpoint:"https://www.facebook.com/dialog/oauth",redirectUri:e.location.origin+"/",scope:"email",scopeDelimiter:",",requiredUrlParams:["display","scope"],display:"popup",type:"2.0",popupOptions:{width:481,height:269}},linkedin:{url:"/auth/linkedin",authorizationEndpoint:"https://www.linkedin.com/uas/oauth2/authorization",redirectUri:e.location.origin,requiredUrlParams:["state"],scope:[],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,scope:[],scopeDelimiter:" ",type:"2.0",popupOptions:{width:1020,height:618}},twitter:{url:"/auth/twitter",type:"1.0"}};t.module("Satellizer",[]).provider("$auth",function(){Object.defineProperties(this,{loginRedirect:{get:function(){return n.loginRedirect},set:function(e){n.loginRedirect=e}},logoutRedirect:{get:function(){return n.logoutRedirect},set:function(e){n.logoutRedirect=e}},loginUrl:{get:function(){return n.loginUrl},set:function(e){n.loginUrl=e}},signupUrl:{get:function(){return n.signupUrl},set:function(e){n.signupUrl=e}},signupRedirect:{get:function(){return n.signupRedirect},set:function(e){n.signupRedirect=e}},loginRoute:{get:function(){return n.loginRoute},set:function(e){n.loginRoute=e}},signupRoute:{get:function(){return n.signupRoute},set:function(e){n.signupRoute=e}},user:{get:function(){return n.user},set:function(e){n.user=e}},tokenName:{get:function(){return n.tokenName},set:function(e){n.tokenName=e}},unlinkUrl:{get:function(){return n.unlinkUrl},set:function(e){n.unlinkUrl=e}}}),this.providers=o,this.facebook=function(e){t.extend(o.facebook,e)},this.google=function(e){t.extend(o.google,e)},this.linkedin=function(e){t.extend(o.linkedin,e)},this.github=function(e){t.extend(o.github,e)},this.twitter=function(e){t.extend(o.twitter,e)},this.oauthBase=function(e){o[e.name]=o[e.name]||{},t.extend(o[e.name],e)},this.oauth1=function(e){this.oauthBase(e),o[e.name].type="1.0"},this.oauth2=function(e){this.oauthBase(e),o[e.name].type="2.0"},this.$get=["$q","$http","$rootScope","Oauth1","Oauth2","Local","Utils",function(e,t,r,i,u,a,c){var l={};return l.authenticate=function(t){var n=e.defer(),r="1.0"===o[t].type?i:u;return r.open(o[t]).then(function(e){a.parseUser(e.data.token,n)}).catch(function(e){n.reject(e)}),n.promise},l.login=function(e){return a.login(e)},l.signup=function(e){return a.signup(e)},l.logout=function(){return a.logout()},l.isAuthenticated=function(){return a.isAuthenticated()},l.link=function(e){return l.authenticate(e)},l.unlink=function(e){return a.unlink(e)},l.updateToken=function(e){localStorage.setItem(n.tokenName,e),r[n.user]=c.userFromToken(e)},l}]}).factory("Local",["$q","$http","$rootScope","$location","Utils",function(e,t,o,r,i){var u={};return u.parseUser=function(e,t){var u=i.userFromToken(e);localStorage.setItem(n.tokenName,e),o[n.user]=u,n.loginRedirect&&r.path(n.loginRedirect),t.resolve(u)},u.login=function(o){var r=e.defer();return t.post(n.loginUrl,o).then(function(e){u.parseUser(e.data.token,r)}).catch(function(e){r.reject(e)}),r.promise},u.signup=function(o){var i=e.defer();return t.post(n.signupUrl,o).then(function(){r.path(n.signupRedirect),i.resolve()}).catch(function(e){i.reject(e)}),i.promise},u.logout=function(){var t=e.defer();return delete o[n.user],localStorage.removeItem(n.tokenName),n.logoutRedirect&&r.path(n.logoutRedirect),t.resolve(),t.promise},u.isAuthenticated=function(){return Boolean(o.currentUser)},u.unlink=function(o){var r=e.defer();return t.get(n.unlinkUrl+o).then(function(e){u.parseUser(e.data.token,r)}).catch(function(e){r.reject(e)}),r.promise},u}]).factory("Oauth2",["$q","$http","Utils","Popup",function(e,n,o,r){var i={url:null,name:null,scope:null,scopeDelimiter:null,clientId:null,redirectUri:null,popupOptions:null,authorizationEndpoint:null,requiredUrlParams:null,optionalUrlParams:null,defaultUrlParams:["response_type","client_id","redirect_uri"],responseType:"code"},u={};return u.open=function(n){t.extend(i,n);var o=e.defer(),a=u.buildUrl();return r.open(a,i.popupOptions).then(function(e){u.exchangeForToken(e).then(function(e){o.resolve(e)}).catch(function(e){o.reject(e)})}).catch(function(e){o.reject(e)}),o.promise},u.exchangeForToken=function(e){return n.post(i.url,{code:e.code,clientId:i.clientId,redirectUri:i.redirectUri})},u.buildUrl=function(){var e=i.authorizationEndpoint,t=u.buildQueryString();return[e,t].join("?")},u.buildQueryString=function(){var e=[],n=["defaultUrlParams","requiredUrlParams","optionalUrlParams"];return t.forEach(n,function(n){t.forEach(i[n],function(t){var n=o.camelCase(t),r=i[n];e.push([t,encodeURIComponent(r)])})}),e.map(function(e){return e.join("=")}).join("&")},u}]).factory("Oauth1",["$q","$http","Popup",function(e,n,o){var r={url:null,name:null,popupOptions:null},i={};return i.open=function(n){t.extend(r,n);var u=e.defer();return o.open(r.url).then(function(e){i.exchangeForToken(e).then(function(e){u.resolve(e)}).catch(function(e){u.reject(e)})}).catch(function(e){u.reject(e)}),u.promise},i.exchangeForToken=function(e){return e=i.buildQueryString(e),n.get(r.url+"?"+e)},i.buildQueryString=function(e){var n=[];return t.forEach(e,function(e,t){n.push(encodeURIComponent(t)+"="+encodeURIComponent(e))}),n.join("&")},i}]).factory("Popup",["$q","$interval","$window",function(e,n,o){var r=null,i=null,u={};return u.popupWindow=r,u.open=function(t,n){var i=e.defer(),a=u.stringifyOptions(u.prepareOptions(n||{}));return r=o.open(t,"_blank",a),r.focus(),u.postMessageHandler(i),u.pollPopup(i),i.promise},u.pollPopup=function(e){i=n(function(){r.closed&&(n.cancel(i),e.reject({data:"Authorization Failed"}))},35)},u.postMessageHandler=function(e){o.addEventListener("message",function(t){t.origin===o.location.origin&&(r.close(),t.data.error?e.reject({data:t.data.error}):e.resolve(t.data))},!1)},u.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)},u.stringifyOptions=function(e){var n=[];return t.forEach(e,function(e,t){n.push(t+"="+e)}),n.join(",")},u}]).factory("RunBlock",["$rootScope","$window","$location","Utils",function(e,o,r,i){return{run:function(){var t=o.localStorage[n.tokenName];t&&(e[n.user]=i.userFromToken(t));var u=o.location.search.substring(1),a=Object.keys(r.search()).length?r.search():i.parseQueryString(u);o.opener&&o.opener.location.origin===o.location.origin&&(a.oauth_token&&a.oauth_verifier?o.opener.postMessage({oauth_token:a.oauth_token,oauth_verifier:a.oauth_verifier},o.location.origin):a.code?o.opener.postMessage({code:a.code},o.location.origin):a.error&&o.opener.postMessage({error:a.error},o.location.origin))},routeChangeListener:function(){try{t.module("ngRoute"),e.$on("$routeChangeStart",function(t,o){!e[n.user]||o.originalPath!==n.loginRoute&&o.originalPath!==n.signupRoute||r.path("/"),o.protected&&!e[n.user]&&r.path(n.loginRoute)})}catch(o){}try{t.module("ui.router"),e.$on("$stateChangeStart",function(t,o){!e[n.user]||o.url!==n.loginRoute&&o.url!==n.signupRoute||r.path("/"),o.protected&&!e[n.user]&&r.path(n.loginRoute)})}catch(o){}}}}]).service("Utils",function(){this.camelCase=function(e){return e.replace(/([\:\-\_]+(.))/g,function(e,t,n,o){return o?n.toUpperCase():n})},this.parseQueryString=function(e){var n,o,r={};return t.forEach((e||"").split("&"),function(e){e&&(o=e.split("="),n=decodeURIComponent(o[0]),r[n]=t.isDefined(o[1])?decodeURIComponent(o[1]):!0)}),r},this.userFromToken=function(t){var n=JSON.parse(e.atob(t.split(".")[1]));return n.user}}).config(["$httpProvider",function(e){e.interceptors.push(["$q","$window","$location",function(e,t){return{request:function(e){return t.localStorage[n.tokenName]&&(e.headers.Authorization="Bearer "+t.localStorage[n.tokenName]),e},responseError:function(o){return 401===o.status&&delete t.localStorage[n.tokenName],e.reject(o)}}}])}]).run(["RunBlock",function(e){e.run(),e.routeChangeListener()}])}(window,window.angular);