all files / app/auth/ userCredentials.service.js

100% Statements 46/46
100% Branches 8/8
100% Functions 11/11
100% Lines 46/46
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145                          231×   231×   231× 231× 231× 231× 231× 231× 231× 231×   231×                               26×             26×   26× 26×                           36× 36×                                             231×                         211×   28×   211×     37×   37× 37×     68× 68× 30×     38×   68×        
/**
 * @ngdoc service
 * @name app.auth.userCredentials
 * @description
 * Service to manage the current user's name and session token.
 *
 */
(function () {
    'use strict';
 
    angular
      .module('app.auth')
      .service('userCredentials', Service);
 
    /** @ngInject */
    function Service($http, $rootScope, $localStorage, validateCredentials, authHeaderName) {
      var service = this;
 
      var DATANAME = 'credentials';
 
      service.setCredentials = setCredentials;
      service.clearCredentials = clearCredentials;
      service.loadCredentials = loadCredentials;
      service.subscribeChanged = subscribeChanged;
      service.loggedIn = false;
      service.username = "";
      service.headerName = authHeaderName;
      service.localDataName = DATANAME;
 
      var data = null;
 
 
      /**
       * @ngdoc function
       * @name setCredentials
       * @methodOf app.auth.userCredentials
       * @description
       * * Store credentials locally
       * * Set HTTP request header.
       * * Emit an event to indicate that credentials have changed.
       * @param {String} username
       * name of current user
       * @param {String} token
       * session token of current user
       */
      function setCredentials(username, token) {
        data = {
          currentUser: {
            username: username,
            token: token
          }
        };
 
        $http.defaults.headers.common[authHeaderName] = token;
        // $cookieStore.put('globals', data);
        $localStorage[DATANAME] = data;
        changed();
      }
 
      /**
       * @ngdoc function
       * @name clearCredentials
       * @methodOf app.auth.userCredentials
       * @description
       * * Clear local credentials
       * * Clear HTTP request header.
       * * Emit an event to indicate that credentials have changed.
       * @param {Boolean} loading
       * The application is being loaded
       */
      function clearCredentials(loading) {
        clearData();
        changed(loading);
      }
 
      /**
       * @ngdoc function
       * @name loadCredentials
       * @methodOf app.auth.userCredentials
       * @description
       * * Load local credentials
       * * Update HTTP request header.
       * * Emit an event to indicate that credentials have changed.
       * @param {Boolean} loading
       * The application is being loaded
       */
      function loadCredentials(loading) {
        data = $localStorage[DATANAME] || {};
        if (data && data.currentUser) {
          validateCredentials(data.currentUser).then(
            function (credentials) {
              data.currentUser = angular.copy(credentials);
              changed(loading);
            },
            function () {
              clearData();
              changed(loading)
            }
          );
        }
        else
          changed(loading);
      }
 
      var EVENT_NAME = 'user-credentials:change';
 
      /**
       * @ngdoc function
       * @name subscribeChanged
       * @methodOf app.auth.userCredentials
       * @description
       * Subcribe to a change in user credentials
       * @param {String} scope
       * Controller scope
       * @param {Function} callback
       * Method to call when credentials change
       */
      function subscribeChanged(scope, callback) {
        var handler = $rootScope.$on(EVENT_NAME, 
          function(event, loading) {
            callback(loading)
          });
        scope.$on('$destroy', handler);
      }
 
      function clearData() {
        data = {};
        // $cookieStore.remove('globals');
        $localStorage[DATANAME] = undefined;
        delete $http.defaults.headers.common[authHeaderName];
      }
 
      function changed(loading) {
        service.loggedIn = data.currentUser;
        if (service.loggedIn) {
          service.username = data.currentUser.username;
        }
        else
          service.username = "";
 
        $rootScope.$emit(EVENT_NAME, loading);
      }
    }
  })();