| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944 |
- /**
- * Satellizer 0.15.4
- * (c) 2016 Sahat Yalkabov
- * License: MIT
- */
- (function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
- typeof define === 'function' && define.amd ? define(factory) :
- (global.satellizer = factory());
- }(this, function () { 'use strict';
- var Config = (function () {
- function Config() {
- this.baseUrl = '/';
- this.loginUrl = '/auth/login';
- this.signupUrl = '/auth/signup';
- this.unlinkUrl = '/auth/unlink/';
- this.tokenName = 'token';
- this.tokenPrefix = 'satellizer';
- this.tokenHeader = 'Authorization';
- this.tokenType = 'Bearer';
- this.storageType = 'localStorage';
- this.tokenRoot = null;
- this.withCredentials = false;
- this.providers = {
- facebook: {
- name: 'facebook',
- url: '/auth/facebook',
- authorizationEndpoint: 'https://www.facebook.com/v2.5/dialog/oauth',
- redirectUri: window.location.origin + '/',
- requiredUrlParams: ['display', 'scope'],
- scope: ['email'],
- scopeDelimiter: ',',
- display: 'popup',
- oauthType: '2.0',
- popupOptions: { width: 580, height: 400 }
- },
- google: {
- name: 'google',
- url: '/auth/google',
- authorizationEndpoint: 'https://accounts.google.com/o/oauth2/auth',
- redirectUri: window.location.origin,
- requiredUrlParams: ['scope'],
- optionalUrlParams: ['display', 'state'],
- scope: ['profile', 'email'],
- scopePrefix: 'openid',
- scopeDelimiter: ' ',
- display: 'popup',
- oauthType: '2.0',
- popupOptions: { width: 452, height: 633 },
- state: function () { return encodeURIComponent(Math.random().toString(36).substr(2)); }
- },
- github: {
- name: 'github',
- url: '/auth/github',
- authorizationEndpoint: 'https://github.com/login/oauth/authorize',
- redirectUri: window.location.origin,
- optionalUrlParams: ['scope'],
- scope: ['user:email'],
- scopeDelimiter: ' ',
- oauthType: '2.0',
- popupOptions: { width: 1020, height: 618 }
- },
- instagram: {
- name: 'instagram',
- url: '/auth/instagram',
- authorizationEndpoint: 'https://api.instagram.com/oauth/authorize',
- redirectUri: window.location.origin,
- requiredUrlParams: ['scope'],
- scope: ['basic'],
- scopeDelimiter: '+',
- oauthType: '2.0'
- },
- linkedin: {
- name: 'linkedin',
- url: '/auth/linkedin',
- authorizationEndpoint: 'https://www.linkedin.com/uas/oauth2/authorization',
- redirectUri: window.location.origin,
- requiredUrlParams: ['state'],
- scope: ['r_emailaddress'],
- scopeDelimiter: ' ',
- state: 'STATE',
- oauthType: '2.0',
- popupOptions: { width: 527, height: 582 }
- },
- twitter: {
- name: 'twitter',
- url: '/auth/twitter',
- authorizationEndpoint: 'https://api.twitter.com/oauth/authenticate',
- redirectUri: window.location.origin,
- oauthType: '1.0',
- popupOptions: { width: 495, height: 645 }
- },
- twitch: {
- name: 'twitch',
- url: '/auth/twitch',
- authorizationEndpoint: 'https://api.twitch.tv/kraken/oauth2/authorize',
- redirectUri: window.location.origin,
- requiredUrlParams: ['scope'],
- scope: ['user_read'],
- scopeDelimiter: ' ',
- display: 'popup',
- oauthType: '2.0',
- popupOptions: { width: 500, height: 560 }
- },
- live: {
- name: 'live',
- url: '/auth/live',
- authorizationEndpoint: 'https://login.live.com/oauth20_authorize.srf',
- redirectUri: window.location.origin,
- requiredUrlParams: ['display', 'scope'],
- scope: ['wl.emails'],
- scopeDelimiter: ' ',
- display: 'popup',
- oauthType: '2.0',
- popupOptions: { width: 500, height: 560 }
- },
- yahoo: {
- name: 'yahoo',
- url: '/auth/yahoo',
- authorizationEndpoint: 'https://api.login.yahoo.com/oauth2/request_auth',
- redirectUri: window.location.origin,
- scope: [],
- scopeDelimiter: ',',
- oauthType: '2.0',
- popupOptions: { width: 559, height: 519 }
- },
- bitbucket: {
- name: 'bitbucket',
- url: '/auth/bitbucket',
- authorizationEndpoint: 'https://bitbucket.org/site/oauth2/authorize',
- redirectUri: window.location.origin + '/',
- requiredUrlParams: ['scope'],
- scope: ['email'],
- scopeDelimiter: ' ',
- oauthType: '2.0',
- popupOptions: { width: 1028, height: 529 }
- }
- };
- this.httpInterceptor = function () { return true; };
- }
- Object.defineProperty(Config, "getConstant", {
- get: function () {
- return new Config();
- },
- enumerable: true,
- configurable: true
- });
- return Config;
- }());
- ;
- var AuthProvider = (function () {
- function AuthProvider(SatellizerConfig) {
- this.SatellizerConfig = SatellizerConfig;
- }
- Object.defineProperty(AuthProvider.prototype, "baseUrl", {
- get: function () { return this.SatellizerConfig.baseUrl; },
- set: function (value) { this.SatellizerConfig.baseUrl = value; },
- enumerable: true,
- configurable: true
- });
- Object.defineProperty(AuthProvider.prototype, "loginUrl", {
- get: function () { return this.SatellizerConfig.loginUrl; },
- set: function (value) { this.SatellizerConfig.loginUrl = value; },
- enumerable: true,
- configurable: true
- });
- Object.defineProperty(AuthProvider.prototype, "signupUrl", {
- get: function () { return this.SatellizerConfig.signupUrl; },
- set: function (value) { this.SatellizerConfig.signupUrl = value; },
- enumerable: true,
- configurable: true
- });
- Object.defineProperty(AuthProvider.prototype, "unlinkUrl", {
- get: function () { return this.SatellizerConfig.unlinkUrl; },
- set: function (value) { this.SatellizerConfig.unlinkUrl = value; },
- enumerable: true,
- configurable: true
- });
- Object.defineProperty(AuthProvider.prototype, "tokenRoot", {
- get: function () { return this.SatellizerConfig.tokenRoot; },
- set: function (value) { this.SatellizerConfig.tokenRoot = value; },
- enumerable: true,
- configurable: true
- });
- Object.defineProperty(AuthProvider.prototype, "tokenName", {
- get: function () { return this.SatellizerConfig.tokenName; },
- set: function (value) { this.SatellizerConfig.tokenName = value; },
- enumerable: true,
- configurable: true
- });
- Object.defineProperty(AuthProvider.prototype, "tokenPrefix", {
- get: function () { return this.SatellizerConfig.tokenPrefix; },
- set: function (value) { this.SatellizerConfig.tokenPrefix = value; },
- enumerable: true,
- configurable: true
- });
- Object.defineProperty(AuthProvider.prototype, "tokenHeader", {
- get: function () { return this.SatellizerConfig.tokenHeader; },
- set: function (value) { this.SatellizerConfig.tokenHeader = value; },
- enumerable: true,
- configurable: true
- });
- Object.defineProperty(AuthProvider.prototype, "tokenType", {
- get: function () { return this.SatellizerConfig.tokenType; },
- set: function (value) { this.SatellizerConfig.tokenType = value; },
- enumerable: true,
- configurable: true
- });
- Object.defineProperty(AuthProvider.prototype, "withCredentials", {
- get: function () { return this.SatellizerConfig.withCredentials; },
- set: function (value) { this.SatellizerConfig.withCredentials = value; },
- enumerable: true,
- configurable: true
- });
- Object.defineProperty(AuthProvider.prototype, "storageType", {
- get: function () { return this.SatellizerConfig.storageType; },
- set: function (value) { this.SatellizerConfig.storageType = value; },
- enumerable: true,
- configurable: true
- });
- Object.defineProperty(AuthProvider.prototype, "httpInterceptor", {
- get: function () { return this.SatellizerConfig.httpInterceptor; },
- set: function (value) {
- if (typeof value === 'function') {
- this.SatellizerConfig.httpInterceptor = value;
- }
- else {
- this.SatellizerConfig.httpInterceptor = function () { return value; };
- }
- },
- enumerable: true,
- configurable: true
- });
- AuthProvider.prototype.facebook = function (options) {
- angular.extend(this.SatellizerConfig.providers.facebook, options);
- };
- AuthProvider.prototype.google = function (options) {
- angular.extend(this.SatellizerConfig.providers.google, options);
- };
- AuthProvider.prototype.github = function (options) {
- angular.extend(this.SatellizerConfig.providers.github, options);
- };
- AuthProvider.prototype.instagram = function (options) {
- angular.extend(this.SatellizerConfig.providers.instagram, options);
- };
- AuthProvider.prototype.linkedin = function (options) {
- angular.extend(this.SatellizerConfig.providers.linkedin, options);
- };
- AuthProvider.prototype.twitter = function (options) {
- angular.extend(this.SatellizerConfig.providers.twitter, options);
- };
- AuthProvider.prototype.twitch = function (options) {
- angular.extend(this.SatellizerConfig.providers.twitch, options);
- };
- AuthProvider.prototype.live = function (options) {
- angular.extend(this.SatellizerConfig.providers.live, options);
- };
- AuthProvider.prototype.yahoo = function (options) {
- angular.extend(this.SatellizerConfig.providers.yahoo, options);
- };
- AuthProvider.prototype.bitbucket = function (options) {
- angular.extend(this.SatellizerConfig.providers.bitbucket, options);
- };
- AuthProvider.prototype.oauth1 = function (options) {
- this.SatellizerConfig.providers[options.name] = angular.extend(options, {
- oauthType: '1.0'
- });
- };
- AuthProvider.prototype.oauth2 = function (options) {
- this.SatellizerConfig.providers[options.name] = angular.extend(options, {
- oauthType: '2.0'
- });
- };
- AuthProvider.prototype.$get = function (SatellizerShared, SatellizerLocal, SatellizerOAuth) {
- return {
- login: function (user, options) { return SatellizerLocal.login(user, options); },
- signup: function (user, options) { return SatellizerLocal.signup(user, options); },
- logout: function () { return SatellizerShared.logout(); },
- authenticate: function (name, data) { return SatellizerOAuth.authenticate(name, data); },
- link: function (name, data) { return SatellizerOAuth.authenticate(name, data); },
- unlink: function (name, options) { return SatellizerOAuth.unlink(name, options); },
- isAuthenticated: function () { return SatellizerShared.isAuthenticated(); },
- getPayload: function () { return SatellizerShared.getPayload(); },
- getToken: function () { return SatellizerShared.getToken(); },
- setToken: function (token) { return SatellizerShared.setToken({ access_token: token }); },
- removeToken: function () { return SatellizerShared.removeToken(); },
- setStorageType: function (type) { return SatellizerShared.setStorageType(type); }
- };
- };
- AuthProvider.$inject = ['SatellizerConfig'];
- return AuthProvider;
- }());
- AuthProvider.prototype.$get.$inject = ['SatellizerShared', 'SatellizerLocal', 'SatellizerOAuth'];
- function joinUrl(baseUrl, url) {
- if (/^(?:[a-z]+:)?\/\//i.test(url)) {
- return url;
- }
- var joined = [baseUrl, url].join('/');
- var normalize = function (str) {
- return str
- .replace(/[\/]+/g, '/')
- .replace(/\/\?/g, '?')
- .replace(/\/\#/g, '#')
- .replace(/\:\//g, '://');
- };
- return normalize(joined);
- }
- function getFullUrlPath(location) {
- var isHttps = location.protocol === 'https:';
- return location.protocol + '//' + location.hostname +
- ':' + (location.port || (isHttps ? '443' : '80')) +
- (/^\//.test(location.pathname) ? location.pathname : '/' + location.pathname);
- }
- function parseQueryString(str) {
- var obj = {};
- var key;
- var value;
- angular.forEach((str || '').split('&'), function (keyValue) {
- if (keyValue) {
- value = keyValue.split('=');
- key = decodeURIComponent(value[0]);
- obj[key] = angular.isDefined(value[1]) ? decodeURIComponent(value[1]) : true;
- }
- });
- return obj;
- }
- function decodeBase64(str) {
- var buffer;
- if (typeof module !== 'undefined' && module.exports) {
- try {
- buffer = require('buffer').Buffer;
- }
- catch (err) {
- }
- }
- var fromCharCode = String.fromCharCode;
- var re_btou = new RegExp([
- '[\xC0-\xDF][\x80-\xBF]',
- '[\xE0-\xEF][\x80-\xBF]{2}',
- '[\xF0-\xF7][\x80-\xBF]{3}'
- ].join('|'), 'g');
- var cb_btou = function (cccc) {
- switch (cccc.length) {
- case 4:
- var cp = ((0x07 & cccc.charCodeAt(0)) << 18)
- | ((0x3f & cccc.charCodeAt(1)) << 12)
- | ((0x3f & cccc.charCodeAt(2)) << 6)
- | (0x3f & cccc.charCodeAt(3));
- var offset = cp - 0x10000;
- return (fromCharCode((offset >>> 10) + 0xD800)
- + fromCharCode((offset & 0x3FF) + 0xDC00));
- case 3:
- return fromCharCode(((0x0f & cccc.charCodeAt(0)) << 12)
- | ((0x3f & cccc.charCodeAt(1)) << 6)
- | (0x3f & cccc.charCodeAt(2)));
- default:
- return fromCharCode(((0x1f & cccc.charCodeAt(0)) << 6)
- | (0x3f & cccc.charCodeAt(1)));
- }
- };
- var btou = function (b) {
- return b.replace(re_btou, cb_btou);
- };
- var _decode = buffer ? function (a) {
- return (a.constructor === buffer.constructor
- ? a : new buffer(a, 'base64')).toString();
- }
- : function (a) {
- return btou(atob(a));
- };
- return _decode(String(str).replace(/[-_]/g, function (m0) {
- return m0 === '-' ? '+' : '/';
- })
- .replace(/[^A-Za-z0-9\+\/]/g, ''));
- }
- var Shared = (function () {
- function Shared($q, $window, $log, SatellizerConfig, SatellizerStorage) {
- this.$q = $q;
- this.$window = $window;
- this.$log = $log;
- this.SatellizerConfig = SatellizerConfig;
- this.SatellizerStorage = SatellizerStorage;
- var _a = this.SatellizerConfig, tokenName = _a.tokenName, tokenPrefix = _a.tokenPrefix;
- this.prefixedTokenName = tokenPrefix ? [tokenPrefix, tokenName].join('_') : tokenName;
- }
- Shared.prototype.getToken = function () {
- return this.SatellizerStorage.get(this.prefixedTokenName);
- };
- Shared.prototype.getPayload = function () {
- var token = this.SatellizerStorage.get(this.prefixedTokenName);
- if (token && token.split('.').length === 3) {
- try {
- var base64Url = token.split('.')[1];
- var base64 = base64Url.replace('-', '+').replace('_', '/');
- return JSON.parse(decodeBase64(base64));
- }
- catch (e) {
- }
- }
- };
- Shared.prototype.setToken = function (response) {
- if (!response) {
- return this.$log.warn('Can\'t set token without passing a value');
- }
- var token;
- var accessToken = response && response.access_token;
- if (accessToken) {
- if (angular.isObject(accessToken) && angular.isObject(accessToken.data)) {
- response = accessToken;
- }
- else if (angular.isString(accessToken)) {
- token = accessToken;
- }
- }
- if (!token && response) {
- var tokenRootData = this.SatellizerConfig.tokenRoot && this.SatellizerConfig.tokenRoot.split('.').reduce(function (o, x) { return o[x]; }, response.data);
- token = tokenRootData ? tokenRootData[this.SatellizerConfig.tokenName] : response.data && response.data[this.SatellizerConfig.tokenName];
- }
- if (!token) {
- var tokenPath = this.SatellizerConfig.tokenRoot ? this.SatellizerConfig.tokenRoot + '.' + this.SatellizerConfig.tokenName : this.SatellizerConfig.tokenName;
- return this.$log.warn('Expecting a token named "' + tokenPath);
- }
- this.SatellizerStorage.set(this.prefixedTokenName, token);
- };
- Shared.prototype.removeToken = function () {
- this.SatellizerStorage.remove(this.prefixedTokenName);
- };
- Shared.prototype.isAuthenticated = function () {
- var token = this.SatellizerStorage.get(this.prefixedTokenName);
- if (token) {
- if (token.split('.').length === 3) {
- try {
- var base64Url = token.split('.')[1];
- var base64 = base64Url.replace('-', '+').replace('_', '/');
- var exp = JSON.parse(this.$window.atob(base64)).exp;
- if (exp) {
- return (Math.round(new Date().getTime() / 1000) >= exp) ? false : true;
- }
- }
- catch (e) {
- return true; // Pass: Non-JWT token that looks like JWT
- }
- }
- return true; // Pass: All other tokens
- }
- return false; // Fail: No token at all
- };
- Shared.prototype.logout = function () {
- this.SatellizerStorage.remove(this.prefixedTokenName);
- return this.$q.when();
- };
- Shared.prototype.setStorageType = function (type) {
- this.SatellizerConfig.storageType = type;
- };
- Shared.$inject = ['$q', '$window', '$log', 'SatellizerConfig', 'SatellizerStorage'];
- return Shared;
- }());
- var Local = (function () {
- function Local($http, SatellizerConfig, SatellizerShared) {
- this.$http = $http;
- this.SatellizerConfig = SatellizerConfig;
- this.SatellizerShared = SatellizerShared;
- }
- Local.prototype.login = function (user, options) {
- var _this = this;
- if (options === void 0) { options = {}; }
- options.url = options.url ? options.url : joinUrl(this.SatellizerConfig.baseUrl, this.SatellizerConfig.loginUrl);
- options.data = user || options.data;
- options.method = options.method || 'POST';
- options.withCredentials = options.withCredentials || this.SatellizerConfig.withCredentials;
- return this.$http(options).then(function (response) {
- _this.SatellizerShared.setToken(response);
- return response;
- });
- };
- Local.prototype.signup = function (user, options) {
- if (options === void 0) { options = {}; }
- options.url = options.url ? options.url : joinUrl(this.SatellizerConfig.baseUrl, this.SatellizerConfig.signupUrl);
- options.data = user || options.data;
- options.method = options.method || 'POST';
- options.withCredentials = options.withCredentials || this.SatellizerConfig.withCredentials;
- return this.$http(options);
- };
- Local.$inject = ['$http', 'SatellizerConfig', 'SatellizerShared'];
- return Local;
- }());
- var Popup = (function () {
- function Popup($interval, $window, $q) {
- this.$interval = $interval;
- this.$window = $window;
- this.$q = $q;
- this.popup = null;
- this.url = 'about:blank'; // TODO remove
- this.defaults = {
- redirectUri: null
- };
- }
- Popup.prototype.stringifyOptions = function (options) {
- var parts = [];
- angular.forEach(options, function (value, key) {
- parts.push(key + '=' + value);
- });
- return parts.join(',');
- };
- Popup.prototype.open = function (url, name, popupOptions) {
- this.url = url; // TODO remove
- var width = popupOptions.width || 500;
- var height = popupOptions.height || 500;
- var options = this.stringifyOptions({
- width: width,
- height: height,
- top: this.$window.screenY + ((this.$window.outerHeight - height) / 2.5),
- left: this.$window.screenX + ((this.$window.outerWidth - width) / 2)
- });
- var popupName = this.$window['cordova'] || this.$window.navigator.userAgent.indexOf('CriOS') > -1 ? '_blank' : name;
- this.popup = window.open(this.url, popupName, options);
- if (this.popup && this.popup.focus) {
- this.popup.focus();
- }
- //
- // if (this.$window['cordova']) {
- // return this.eventListener(this.defaults.redirectUri); // TODO pass redirect uri
- // } else {
- // return this.polling(redirectUri);
- // }
- };
- Popup.prototype.polling = function (redirectUri) {
- var _this = this;
- return this.$q(function (resolve, reject) {
- var redirectUriParser = document.createElement('a');
- redirectUriParser.href = redirectUri;
- var redirectUriPath = getFullUrlPath(redirectUriParser);
- var polling = _this.$interval(function () {
- if (!_this.popup || _this.popup.closed || _this.popup.closed === undefined) {
- _this.$interval.cancel(polling);
- reject(new Error('The popup window was closed'));
- }
- try {
- var popupWindowPath = getFullUrlPath(_this.popup.location);
- if (popupWindowPath === redirectUriPath) {
- if (_this.popup.location.search || _this.popup.location.hash) {
- var query = parseQueryString(_this.popup.location.search.substring(1).replace(/\/$/, ''));
- var hash = parseQueryString(_this.popup.location.hash.substring(1).replace(/[\/$]/, ''));
- var params = angular.extend({}, query, hash);
- if (params.error) {
- reject(new Error(params.error));
- }
- else {
- resolve(params);
- }
- }
- else {
- reject(new Error('OAuth redirect has occurred but no query or hash parameters were found. ' +
- 'They were either not set during the redirect, or were removed—typically by a ' +
- 'routing library—before Satellizer could read it.'));
- }
- _this.$interval.cancel(polling);
- _this.popup.close();
- }
- }
- catch (error) {
- }
- }, 500);
- });
- };
- Popup.prototype.eventListener = function (redirectUri) {
- var _this = this;
- return this.$q(function (resolve, reject) {
- _this.popup.addEventListener('loadstart', function (event) {
- if (!event.url.includes(redirectUri)) {
- return;
- }
- var parser = document.createElement('a');
- parser.href = event.url;
- if (parser.search || parser.hash) {
- var query = parseQueryString(parser.search.substring(1).replace(/\/$/, ''));
- var hash = parseQueryString(parser.hash.substring(1).replace(/[\/$]/, ''));
- var params = angular.extend({}, query, hash);
- if (params.error) {
- reject(new Error(params.error));
- }
- else {
- resolve(params);
- }
- _this.popup.close();
- }
- });
- _this.popup.addEventListener('loaderror', function () {
- reject(new Error('Authorization failed'));
- });
- _this.popup.addEventListener('exit', function () {
- reject(new Error('The popup window was closed'));
- });
- });
- };
- Popup.$inject = ['$interval', '$window', '$q'];
- return Popup;
- }());
- var OAuth1 = (function () {
- function OAuth1($http, $window, SatellizerConfig, SatellizerPopup) {
- this.$http = $http;
- this.$window = $window;
- this.SatellizerConfig = SatellizerConfig;
- this.SatellizerPopup = SatellizerPopup;
- this.defaults = {
- name: null,
- url: null,
- authorizationEndpoint: null,
- scope: null,
- scopePrefix: null,
- scopeDelimiter: null,
- redirectUri: null,
- requiredUrlParams: null,
- defaultUrlParams: null,
- oauthType: '1.0',
- popupOptions: { width: null, height: null }
- };
- }
- ;
- OAuth1.prototype.init = function (options, userData) {
- var _this = this;
- angular.extend(this.defaults, options);
- if (!this.$window['cordova']) {
- this.SatellizerPopup.open('about:blank', options.name, options.popupOptions);
- }
- return this.getRequestToken().then(function (response) {
- return _this.openPopup(options, response).then(function (popupResponse) {
- return _this.exchangeForToken(popupResponse, userData);
- });
- });
- };
- OAuth1.prototype.openPopup = function (options, response) {
- var popupUrl = [options.authorizationEndpoint, this.buildQueryString(response.data)].join('?');
- if (this.$window['cordova']) {
- this.SatellizerPopup.open(popupUrl, options.name, options.popupOptions);
- return this.SatellizerPopup.eventListener(this.defaults.redirectUri);
- }
- else {
- this.SatellizerPopup.popup.location = popupUrl;
- return this.SatellizerPopup.polling(this.defaults.redirectUri);
- }
- };
- OAuth1.prototype.getRequestToken = function () {
- var url = this.SatellizerConfig.baseUrl ? joinUrl(this.SatellizerConfig.baseUrl, this.defaults.url) : this.defaults.url;
- return this.$http.post(url, this.defaults);
- };
- OAuth1.prototype.exchangeForToken = function (oauthData, userData) {
- var payload = angular.extend({}, userData, oauthData);
- var exchangeForTokenUrl = this.SatellizerConfig.baseUrl ? joinUrl(this.SatellizerConfig.baseUrl, this.defaults.url) : this.defaults.url;
- return this.$http.post(exchangeForTokenUrl, payload, { withCredentials: this.SatellizerConfig.withCredentials });
- };
- OAuth1.prototype.buildQueryString = function (obj) {
- var str = [];
- angular.forEach(obj, function (value, key) {
- str.push(encodeURIComponent(key) + '=' + encodeURIComponent(value));
- });
- return str.join('&');
- };
- OAuth1.$inject = ['$http', '$window', 'SatellizerConfig', 'SatellizerPopup'];
- return OAuth1;
- }());
- var OAuth2 = (function () {
- function OAuth2($http, $window, $timeout, $q, SatellizerConfig, SatellizerPopup, SatellizerStorage) {
- this.$http = $http;
- this.$window = $window;
- this.$timeout = $timeout;
- this.$q = $q;
- this.SatellizerConfig = SatellizerConfig;
- this.SatellizerPopup = SatellizerPopup;
- this.SatellizerStorage = SatellizerStorage;
- this.defaults = {
- name: null,
- url: null,
- clientId: null,
- authorizationEndpoint: null,
- redirectUri: null,
- scope: null,
- scopePrefix: null,
- scopeDelimiter: null,
- state: null,
- requiredUrlParams: null,
- defaultUrlParams: ['response_type', 'client_id', 'redirect_uri'],
- responseType: 'code',
- responseParams: {
- code: 'code',
- clientId: 'clientId',
- redirectUri: 'redirectUri'
- },
- oauthType: '2.0',
- popupOptions: { width: null, height: null }
- };
- }
- OAuth2.camelCase = function (name) {
- return name.replace(/([\:\-\_]+(.))/g, function (_, separator, letter, offset) {
- return offset ? letter.toUpperCase() : letter;
- });
- };
- OAuth2.prototype.init = function (options, userData) {
- var _this = this;
- return this.$q(function (resolve, reject) {
- angular.extend(_this.defaults, options);
- _this.$timeout(function () {
- var stateName = _this.defaults.name + '_state';
- var _a = _this.defaults, name = _a.name, state = _a.state, popupOptions = _a.popupOptions, redirectUri = _a.redirectUri, responseType = _a.responseType;
- if (typeof state === 'function') {
- _this.SatellizerStorage.set(stateName, state());
- }
- else if (typeof state === 'string') {
- _this.SatellizerStorage.set(stateName, state);
- }
- var url = [_this.defaults.authorizationEndpoint, _this.buildQueryString()].join('?');
- _this.SatellizerPopup.open(url, name, popupOptions);
- _this.SatellizerPopup.polling(redirectUri).then(function (oauth) {
- if (responseType === 'token' || !url) {
- return resolve(oauth);
- }
- if (oauth.state && oauth.state !== _this.SatellizerStorage.get(stateName)) {
- return reject(new Error('The value returned in the state parameter does not match the state value from your original ' +
- 'authorization code request.'));
- }
- resolve(_this.exchangeForToken(oauth, userData));
- })
- .catch(function (error) { return reject(error); });
- });
- });
- };
- OAuth2.prototype.exchangeForToken = function (oauthData, userData) {
- var _this = this;
- var payload = angular.extend({}, userData);
- angular.forEach(this.defaults.responseParams, function (value, key) {
- switch (key) {
- case 'code':
- payload[value] = oauthData.code;
- break;
- case 'clientId':
- payload[value] = _this.defaults.clientId;
- break;
- case 'redirectUri':
- payload[value] = _this.defaults.redirectUri;
- break;
- default:
- payload[value] = oauthData[key];
- }
- });
- if (oauthData.state) {
- payload.state = oauthData.state;
- }
- var exchangeForTokenUrl = this.SatellizerConfig.baseUrl ?
- joinUrl(this.SatellizerConfig.baseUrl, this.defaults.url) :
- this.defaults.url;
- return this.$http.post(exchangeForTokenUrl, payload, { withCredentials: this.SatellizerConfig.withCredentials });
- };
- OAuth2.prototype.buildQueryString = function () {
- var _this = this;
- var keyValuePairs = [];
- var urlParamsCategories = ['defaultUrlParams', 'requiredUrlParams', 'optionalUrlParams'];
- angular.forEach(urlParamsCategories, function (paramsCategory) {
- angular.forEach(_this.defaults[paramsCategory], function (paramName) {
- var camelizedName = OAuth2.camelCase(paramName);
- var paramValue = angular.isFunction(_this.defaults[paramName]) ? _this.defaults[paramName]() : _this.defaults[camelizedName];
- if (paramName === 'redirect_uri' && !paramValue) {
- return;
- }
- if (paramName === 'state') {
- var stateName = _this.defaults.name + '_state';
- paramValue = encodeURIComponent(_this.SatellizerStorage.get(stateName));
- }
- if (paramName === 'scope' && Array.isArray(paramValue)) {
- paramValue = paramValue.join(_this.defaults.scopeDelimiter);
- if (_this.defaults.scopePrefix) {
- paramValue = [_this.defaults.scopePrefix, paramValue].join(_this.defaults.scopeDelimiter);
- }
- }
- keyValuePairs.push([paramName, paramValue]);
- });
- });
- return keyValuePairs.map(function (pair) { return pair.join('='); }).join('&');
- };
- OAuth2.$inject = ['$http', '$window', '$timeout', '$q', 'SatellizerConfig', 'SatellizerPopup', 'SatellizerStorage'];
- return OAuth2;
- }());
- var OAuth = (function () {
- function OAuth($http, $window, $timeout, $q, SatellizerConfig, SatellizerPopup, SatellizerStorage, SatellizerShared, SatellizerOAuth1, SatellizerOAuth2) {
- this.$http = $http;
- this.$window = $window;
- this.$timeout = $timeout;
- this.$q = $q;
- this.SatellizerConfig = SatellizerConfig;
- this.SatellizerPopup = SatellizerPopup;
- this.SatellizerStorage = SatellizerStorage;
- this.SatellizerShared = SatellizerShared;
- this.SatellizerOAuth1 = SatellizerOAuth1;
- this.SatellizerOAuth2 = SatellizerOAuth2;
- }
- OAuth.prototype.authenticate = function (name, userData) {
- var _this = this;
- return this.$q(function (resolve, reject) {
- var provider = _this.SatellizerConfig.providers[name];
- var oauth = null;
- switch (provider.oauthType) {
- case '1.0':
- oauth = new OAuth1(_this.$http, _this.$window, _this.SatellizerConfig, _this.SatellizerPopup);
- break;
- case '2.0':
- oauth = new OAuth2(_this.$http, _this.$window, _this.$timeout, _this.$q, _this.SatellizerConfig, _this.SatellizerPopup, _this.SatellizerStorage);
- break;
- default:
- return reject(new Error('Unknown OAuth Type'));
- }
- return oauth.init(provider, userData).then(function (response) {
- if (provider.url) {
- _this.SatellizerShared.setToken(response);
- }
- resolve(response);
- }).catch(function (error) {
- reject(error);
- });
- });
- };
- OAuth.prototype.unlink = function (provider, httpOptions) {
- if (httpOptions === void 0) { httpOptions = {}; }
- httpOptions.url = httpOptions.url ? httpOptions.url : joinUrl(this.SatellizerConfig.baseUrl, this.SatellizerConfig.unlinkUrl);
- httpOptions.data = { provider: provider } || httpOptions.data;
- httpOptions.method = httpOptions.method || 'POST';
- httpOptions.withCredentials = httpOptions.withCredentials || this.SatellizerConfig.withCredentials;
- return this.$http(httpOptions);
- };
- OAuth.$inject = [
- '$http',
- '$window',
- '$timeout',
- '$q',
- 'SatellizerConfig',
- 'SatellizerPopup',
- 'SatellizerStorage',
- 'SatellizerShared',
- 'SatellizerOAuth1',
- 'SatellizerOAuth2'
- ];
- return OAuth;
- }());
- var Storage = (function () {
- function Storage($window, SatellizerConfig) {
- this.$window = $window;
- this.SatellizerConfig = SatellizerConfig;
- this.memoryStore = {};
- }
- Storage.prototype.get = function (key) {
- try {
- return this.$window[this.SatellizerConfig.storageType].getItem(key);
- }
- catch (e) {
- return this.memoryStore[key];
- }
- };
- Storage.prototype.set = function (key, value) {
- try {
- this.$window[this.SatellizerConfig.storageType].setItem(key, value);
- }
- catch (e) {
- this.memoryStore[key] = value;
- }
- };
- Storage.prototype.remove = function (key) {
- try {
- this.$window[this.SatellizerConfig.storageType].removeItem(key);
- }
- catch (e) {
- delete this.memoryStore[key];
- }
- };
- Storage.$inject = ['$window', 'SatellizerConfig'];
- return Storage;
- }());
- var Interceptor = (function () {
- function Interceptor(SatellizerConfig, SatellizerShared, SatellizerStorage) {
- var _this = this;
- this.SatellizerConfig = SatellizerConfig;
- this.SatellizerShared = SatellizerShared;
- this.SatellizerStorage = SatellizerStorage;
- this.request = function (config) {
- if (config['skipAuthorization']) {
- return config;
- }
- if (_this.SatellizerShared.isAuthenticated() && _this.SatellizerConfig.httpInterceptor()) {
- var tokenName = _this.SatellizerConfig.tokenPrefix ?
- [_this.SatellizerConfig.tokenPrefix, _this.SatellizerConfig.tokenName].join('_') : _this.SatellizerConfig.tokenName;
- var token = _this.SatellizerStorage.get(tokenName);
- if (_this.SatellizerConfig.tokenHeader && _this.SatellizerConfig.tokenType) {
- token = _this.SatellizerConfig.tokenType + ' ' + token;
- }
- config.headers[_this.SatellizerConfig.tokenHeader] = token;
- }
- return config;
- };
- }
- Interceptor.Factory = function (SatellizerConfig, SatellizerShared, SatellizerStorage) {
- return new Interceptor(SatellizerConfig, SatellizerShared, SatellizerStorage);
- };
- Interceptor.$inject = ['SatellizerConfig', 'SatellizerShared', 'SatellizerStorage'];
- return Interceptor;
- }());
- Interceptor.Factory.$inject = ['SatellizerConfig', 'SatellizerShared', 'SatellizerStorage'];
- var HttpProviderConfig = (function () {
- function HttpProviderConfig($httpProvider) {
- this.$httpProvider = $httpProvider;
- $httpProvider.interceptors.push(Interceptor.Factory);
- }
- HttpProviderConfig.$inject = ['$httpProvider'];
- return HttpProviderConfig;
- }());
- angular.module('satellizer', [])
- .provider('$auth', ['SatellizerConfig', function (SatellizerConfig) { return new AuthProvider(SatellizerConfig); }])
- .constant('SatellizerConfig', Config.getConstant)
- .service('SatellizerShared', Shared)
- .service('SatellizerLocal', Local)
- .service('SatellizerPopup', Popup)
- .service('SatellizerOAuth', OAuth)
- .service('SatellizerOAuth2', OAuth2)
- .service('SatellizerOAuth1', OAuth1)
- .service('SatellizerStorage', Storage)
- .service('SatellizerInterceptor', Interceptor)
- .config(['$httpProvider', function ($httpProvider) { return new HttpProviderConfig($httpProvider); }]);
- var ng1 = 'satellizer';
- return ng1;
- }));
- //# sourceMappingURL=satellizer.js.map
|