/// <reference path="../typings/angular/index.d.ts" />
'use strict';
var App;
(function (App) {
    angular.module('app').factory('$remember', function () {
        function fetchValue(name) {
            var gCookieVal = document.cookie.split("; ");
            for (var i = 0; i < gCookieVal.length; i++) {
                // a name/value pair (a crumb) is separated by an equal sign
                var gCrumb = gCookieVal[i].split("=");
                if (name === gCrumb[0]) {
                    var value = '';
                    try {
                        value = angular.fromJson(gCrumb[1]);
                    }
                    catch (e) {
                        value = gCrumb[1]; //unescape(gCrumb[1]);
                    }
                    return value;
                }
            }
            // a cookie with the requested name does not exist
            return null;
        }
        return function (name, values) {
            if (arguments.length === 1)
                return fetchValue(name);
            var cookie = name + '=';
            if (typeof values === 'object') {
                var expires = '';
                cookie += (typeof values.value === 'object') ? angular.toJson(values.value) + ';' : values.value + ';';
                if (values.expires) {
                    var date = new Date();
                    date.setTime(date.getTime() + (values.expires * 24 * 60 * 60 * 1000));
                    expires = date.toUTCString(); //toGMTString();
                }
                cookie += (!values.session) ? 'expires=' + expires + ';' : '';
                cookie += (values.path) ? 'path=' + values.path + ';' : '';
                cookie += (values.secure) ? 'secure;' : '';
            }
            else {
                cookie += values + ';';
            }
            document.cookie = cookie;
        };
    });
})(App || (App = {}));
//# sourceMappingURL=remember.js.map;
/// <reference path="../typings/angular/index.d.ts" />
'use strict';
var App;
(function (App) {
    angular.module('app').factory('authenticationService', ['$http', '$q', '$localStorage', 'ngAuthSettings', function ($http, $q, $localStorageProvider, ngAuthSettings) {
            var serviceBase = ngAuthSettings.apiServiceBaseUri;
            var _authentication = {
                isAuth: false,
                userName: "",
                useRefreshTokens: false
            };
            var _externalAuthData = {
                provider: "",
                userName: "",
                externalAccessToken: ""
            };
            var _saveRegistration = function (registration) {
                //preserver external authentication data in participant after logout
                //var extAuthData = App.Global.Participant.ExternalAuthData;
                //_logOut();
                //if (App.Global.Participant == null)
                //    App.Global.Participant = {};
                //App.Global.Participant.ExternalAuthData = extAuthData;
                return $http.post(serviceBase + 'api/account/register', registration).then(function (response) {
                    return response.data;
                });
            };
            var _unsubscribe = function (unsubscribeData) {
                return $http.post(serviceBase + 'api/account/unsubscribe', unsubscribeData).then(function (response) {
                    return response.data;
                });
            };
            var _loginAutoLink = function (guid) {
                //log out first
                _logOut();
                //gather data
                var data = "grant_type=password&invite=" + encodeURIComponent(guid);
                data = data + "&client_id=" + ngAuthSettings.appClientID;
                data = data + "&callLetters=" + ngAuthSettings.clientCallLetters;
                //if (loginData.unknown != null && loginData.unknown == true) {
                //    data = data + "&unknown=true";
                //}
                //promise
                var deferred = $q.defer();
                //post
                $http.post(serviceBase + 'token', data, { headers: { 'Content-Type': 'application/x-www-form-urlencoded' } }).then(function (response) {
                    //if (loginData.unknown != null && loginData.unknown == true) {
                    //    $localStorageProvider.setKeyPrefix(response.data.callLetters);
                    //}
                    var useRefreshTokens = true;
                    if (useRefreshTokens) {
                        App.Global.AuthorizationData = { token: response.data.access_token, userName: response.data.userName, refreshToken: response.data.refresh_token, useRefreshTokens: true };
                    }
                    else {
                        App.Global.AuthorizationData = { token: response.data.access_token, userName: response.data.userName, refreshToken: "", useRefreshTokens: false };
                    }
                    //Set global participant info
                    App.Global.Participant = {
                        "ID": response.data.participantID,
                        "Name": response.data.participantName,
                        "EMail": response.data.userName
                    };
                    App.Global.Authenticated = true;
                    _authentication.isAuth = true;
                    _authentication.userName = response.data.userName;
                    _authentication.useRefreshTokens = useRefreshTokens;
                    deferred.resolve(response);
                }, function (err, status) {
                    console.log("authentication error E");
                    deferred.reject(err);
                });
                return deferred.promise;
            };
            var _login = function (loginData) {
                //log out first
                _logOut();
                //gather data
                var data = "grant_type=password&username=" + encodeURIComponent(loginData.userName) + "&password=" + encodeURIComponent(loginData.password);
                if (loginData.useRefreshTokens) {
                    data = data + "&client_id=" + ngAuthSettings.appClientID;
                }
                data = data + "&callLetters=" + ngAuthSettings.clientCallLetters;
                if (loginData.unknown != null && loginData.unknown == true) {
                    data = data + "&unknown=true";
                }
                if (loginData.requestid != null && loginData.requestid > 0) {
                    data = data + "&requestid=" + loginData.requestid;
                }
                //promise
                var deferred = $q.defer();
                //post
                $http.post(serviceBase + 'token', data, { headers: { 'Content-Type': 'application/x-www-form-urlencoded' } }).then(function (response) {
                    //if (loginData.unknown != null && loginData.unknown == true) {
                    //    $localStorageProvider.setKeyPrefix(response.callLetters);
                    //}
                    if (loginData.useRefreshTokens) {
                        App.Global.AuthorizationData = { token: response.data.access_token, userName: loginData.userName, refreshToken: response.data.refresh_token, useRefreshTokens: true };
                    }
                    else {
                        App.Global.AuthorizationData = { token: response.data.access_token, userName: loginData.userName, refreshToken: "", useRefreshTokens: false };
                    }
                    //Set global participant info
                    App.Global.Participant = {
                        "ID": response.data.participantID,
                        "Name": response.data.participantName,
                        "EMail": loginData.userName
                    };
                    App.Global.Authenticated = true;
                    _authentication.isAuth = true;
                    _authentication.userName = loginData.userName;
                    _authentication.useRefreshTokens = loginData.useRefreshTokens;
                    deferred.resolve(response);
                }, function (err, status) {
                    console.log("Error Authentication.ts: " + err);
                    deferred.reject(err);
                });
                return deferred.promise;
            };
            var _forgotPassword = function (loginData) {
                return $http.post(serviceBase + 'api/account/EmailPassword', loginData).then(function (response) {
                    return response.data;
                });
            };
            var _loginresetPassword = function (guid) {
                //log out first
                _logOut();
                //gather data
                var data = "grant_type=password&resetPW=" + encodeURIComponent(guid);
                data = data + "&client_id=" + ngAuthSettings.appClientID;
                data = data + "&callLetters=" + ngAuthSettings.clientCallLetters;
                //if (loginData.unknown != null && loginData.unknown == true) {
                //    data = data + "&unknown=true";
                //}
                //promise
                var deferred = $q.defer();
                //post
                $http.post(serviceBase + 'token', data, { headers: { 'Content-Type': 'application/x-www-form-urlencoded' } }).then(function (response) {
                    //if (loginData.unknown != null && loginData.unknown == true) {
                    //    $localStorageProvider.setKeyPrefix(response.data.callLetters);
                    //}
                    var useRefreshTokens = true;
                    if (useRefreshTokens) {
                        App.Global.AuthorizationData = { token: response.data.access_token, userName: response.data.userName, refreshToken: response.data.refresh_token, useRefreshTokens: true };
                    }
                    else {
                        App.Global.AuthorizationData = { token: response.data.access_token, userName: response.data.userName, refreshToken: "", useRefreshTokens: false };
                    }
                    //Set global participant info
                    App.Global.Participant = {
                        "ID": response.data.participantID,
                        "Name": response.data.participantName,
                        "EMail": response.data.userName
                    };
                    App.Global.Authenticated = true;
                    _authentication.isAuth = true;
                    _authentication.userName = response.data.userName;
                    _authentication.useRefreshTokens = useRefreshTokens;
                    deferred.resolve(response);
                }, function (err, status) {
                    console.log("authentication error B");
                    deferred.reject(err);
                });
                return deferred.promise;
            };
            var _logOut = function () {
                var authData = App.Global.AuthorizationData;
                if (authData) {
                    App.Global.PrevAuthorizationData = authData;
                }
                App.Global.AuthorizationData = null;
                App.Global.Authenticated = false;
                App.Global.Participant = null;
                _authentication.isAuth = false;
                _authentication.userName = "";
                _authentication.useRefreshTokens = false;
            };
            var _fillAuthData = function () {
                var authData = App.Global.AuthorizationData;
                if (authData) {
                    App.Global.Authenticated = true;
                    _authentication.isAuth = true;
                    _authentication.userName = authData.userName;
                    _authentication.useRefreshTokens = authData.useRefreshTokens;
                }
            };
            var _getAuthData = function () {
                return App.Global.AuthorizationData;
            };
            var _getUserName = function () {
                var authData = App.Global.AuthorizationData;
                if (authData) {
                    if (authData.useRefreshTokens) {
                        return authData.userName;
                    }
                }
                else {
                    authData = App.Global.PrevAuthorizationData;
                    if (authData) {
                        if (authData.useRefreshTokens) {
                            return authData.userName;
                        }
                    }
                }
                return null;
            };
            var _refreshToken = function () {
                var deferred = $q.defer();
                var authData = App.Global.AuthorizationData;
                if (authData) {
                    if (authData.useRefreshTokens) {
                        var data = "grant_type=refresh_token&refresh_token=" + authData.refreshToken + "&client_id=" + ngAuthSettings.appClientID;
                        $http.post(serviceBase + 'token', data, { headers: { 'Content-Type': 'application/x-www-form-urlencoded' } }).then(function (response) {
                            App.Global.AuthorizationData = { token: response.data.access_token, userName: response.data.userName, refreshToken: response.data.refresh_token, useRefreshTokens: true };
                            deferred.resolve(response);
                        }, function (err) {
                            console.log("authentication error A");
                            _logOut();
                            deferred.reject(err);
                        });
                    }
                }
                return deferred.promise;
            };
            var _obtainAccessToken = function (externalData) {
                var deferred = $q.defer();
                $http.get(serviceBase + 'api/account/ObtainLocalAccessToken', { params: { provider: externalData.provider, externalAccessToken: externalData.externalAccessToken, callLetters: ngAuthSettings.clientCallLetters } }).then(function (response) {
                    App.Global.AuthorizationData = { token: response.data.access_token, userName: response.data.userName, refreshToken: "", useRefreshTokens: false };
                    //Set global participant info
                    App.Global.Participant = {
                        "ID": response.data.participantID,
                        "Name": response.data.participantName,
                        "EMail": response.data.userName
                    };
                    //App.Global.Authenticated = true;
                    //_authentication.isAuth = true;
                    //_authentication.userName = loginData.userName;
                    //_authentication.useRefreshTokens = loginData.useRefreshTokens;
                    App.Global.Authenticated = true;
                    _authentication.isAuth = true;
                    _authentication.userName = response.userName;
                    _authentication.useRefreshTokens = true;
                    deferred.resolve(response);
                }, function (err) {
                    console.log("authentication error C");
                    _logOut();
                    deferred.reject(err);
                });
                return deferred.promise;
            };
            var _registerExternal = function (registerExternalData) {
                var deferred = $q.defer();
                $http.post(serviceBase + 'api/account/registerexternal', registerExternalData).then(function (response) {
                    App.Global.AuthorizationData = { token: response.data.access_token, userName: response.data.userName, refreshToken: "", useRefreshTokens: false };
                    App.Global.Authenticated = true;
                    _authentication.isAuth = true;
                    _authentication.userName = response.data.userName;
                    _authentication.useRefreshTokens = false;
                    deferred.resolve(response);
                }, function (err) {
                    console.log("authentication error D");
                    _logOut();
                    deferred.reject(err);
                });
                return deferred.promise;
            };
            var authenticationServiceFactory = {
                saveRegistration: _saveRegistration,
                login: _login,
                logOut: _logOut,
                fillAuthData: _fillAuthData,
                //authentication: _authentication,
                refreshToken: _refreshToken,
                obtainAccessToken: _obtainAccessToken,
                //externalAuthData: _externalAuthData,
                registerExternal: _registerExternal,
                forgotPassword: _forgotPassword,
                loginresetPassword: _loginresetPassword,
                getUserName: _getUserName,
                getAuthData: _getAuthData,
                loginAutoLink: _loginAutoLink,
                unsubscribe: _unsubscribe,
            };
            return authenticationServiceFactory;
        }]);
})(App || (App = {}));
//# sourceMappingURL=authentication.js.map;
/// <reference path="../typings/angular/index.d.ts" />
'use strict';
var App;
(function (App) {
    angular.module('app').factory('interceptorService', ['$q', '$injector', '$location', function ($q, $injector, $location) {
            var _request = function (config) {
                config.headers = config.headers || {};
                if (App.Global != undefined) {
                    var authData = App.Global.AuthorizationData;
                    if (authData) {
                        config.headers.Authorization = 'Bearer ' + authData.token;
                    }
                }
                return config;
            };
            var _responseError = function (rejection) {
                if (rejection.status === 401) {
                    var authService = $injector.get('authenticationService');
                    var authData = App.Global.AuthorizationData;
                    if (authData && authData.useRefreshTokens) {
                        var defer = $q.defer();
                        authService.refreshToken().then(function (response) {
                            retryHttpRequest(rejection.config, defer);
                        }, function (err) {
                            console.log(err);
                            authService.logOut();
                            App.Helper.GoToLogin();
                        });
                        return defer.promise;
                    }
                    else {
                        authService.logOut();
                        //check for personal info
                        var $window = $injector.get('$window');
                        if ($window.location.hash.includes('personalinfo')) {
                            $window.location.href = SiteSubFolder + 'personalinfo' + $window.location.hash + '/notauth'; //reload with personalinfo
                        }
                        App.Helper.GoToLogin();
                    }
                }
                else {
                    console.log("error in interceptor.ts: " + rejection.status);
                }
                return $q.reject(rejection);
            };
            var retryHttpRequest = function (config, deferred) {
                function successCallback(response) {
                    deferred.resolve(response);
                }
                function errorCallback(response) {
                    deferred.reject(response);
                }
                var $http = $injector.get('$http');
                $http(config).then(successCallback, errorCallback);
            };
            var interceptorServiceFactory = {
                request: _request,
                responseError: _responseError
            };
            return interceptorServiceFactory;
        }]);
})(App || (App = {}));
//# sourceMappingURL=interceptor.js.map;
/// <reference path="../typings/angular/index.d.ts" />
'use strict';
var App;
(function (App) {
    angular.module('app').factory('tokensService', ['$http', 'ngAuthSettings', function ($http, ngAuthSettings) {
            var serviceBase = ngAuthSettings.apiServiceBaseUri;
            var _getRefreshTokens = function () {
                return $http.get(serviceBase + 'api/refreshtokens').then(function (results) {
                    return results.data;
                });
            };
            var _deleteRefreshTokens = function (tokenid) {
                return $http.delete(serviceBase + 'api/refreshtokens/?tokenid=' + tokenid).then(function (results) {
                    return results.data;
                });
            };
            var tokensServiceFactory = { deleteRefreshTokens: _deleteRefreshTokens, getRefreshTokens: _getRefreshTokens };
            return tokensServiceFactory;
        }]);
})(App || (App = {}));
//# sourceMappingURL=tokens.js.map;
