diff --git a/apps/steward-app/src/main/js/app/client/common/authentication/authentication.js b/apps/steward-app/src/main/js/app/client/common/authentication/authentication-js.del similarity index 100% copy from apps/steward-app/src/main/js/app/client/common/authentication/authentication.js copy to apps/steward-app/src/main/js/app/client/common/authentication/authentication-js.del diff --git a/apps/steward-app/src/main/js/app/client/common/authentication/authentication-model.js b/apps/steward-app/src/main/js/app/client/common/authentication/authentication-model-js.del similarity index 100% copy from apps/steward-app/src/main/js/app/client/common/authentication/authentication-model.js copy to apps/steward-app/src/main/js/app/client/common/authentication/authentication-model-js.del diff --git a/apps/steward-app/src/main/js/app/client/common/authentication/authentication.js b/apps/steward-app/src/main/js/app/client/login/authentication-js.del similarity index 100% rename from apps/steward-app/src/main/js/app/client/common/authentication/authentication.js rename to apps/steward-app/src/main/js/app/client/login/authentication-js.del diff --git a/apps/steward-app/src/main/js/app/client/common/authentication/authentication-model.js b/apps/steward-app/src/main/js/app/client/login/authentication-model-js.del similarity index 100% rename from apps/steward-app/src/main/js/app/client/common/authentication/authentication-model.js rename to apps/steward-app/src/main/js/app/client/login/authentication-model-js.del diff --git a/apps/steward-app/src/main/js/app/client/login/login.controller.js b/apps/steward-app/src/main/js/app/client/login/login.controller.js index e69de29bb..a9bd6501f 100644 --- a/apps/steward-app/src/main/js/app/client/login/login.controller.js +++ b/apps/steward-app/src/main/js/app/client/login/login.controller.js @@ -0,0 +1,30 @@ +(function () { + 'use strict'; + + angular + .module('shrine.steward.login'); + + LoginController.$inject = ['LoginModel','LoginService', '$location', 'constants']; + function LoginController(loginModel, loginService, $location, constants) { + var login = this; + login.loginFail = false; + + function checkLogin() { + loginService.setAuthHeader(login.username, login.password); + loginService.login() + .then(navigateToHome, setLoginToError); + + } + + function navigateToHome(response) { + loginService.setCredentials(login.username, login.password, response.roles); + $location.path(constants.defaultRoute); + } + + function setLoginToError(response) { + loginService.clearCredentials(); + login.loginFail = true; + login.username = login.password = ''; + } + } +})(); diff --git a/apps/steward-app/src/main/js/app/client/login/login.model.js b/apps/steward-app/src/main/js/app/client/login/login.model.js new file mode 100644 index 000000000..3c75f6b72 --- /dev/null +++ b/apps/steward-app/src/main/js/app/client/login/login.model.js @@ -0,0 +1,50 @@ +(function () { + 'use strict'; + + angular + .module('shrine.steward.login') + .factory('loginModel', LoginModel); + + LoginModel.$inject = ['$http', '$q', 'constants']; + function LoginModel($http, $q, constants) { + + // -- private --// + var loginModel = this; + var authFail = 'AuthenticationFailed'; + var url = constants.baseUrl + 'user/whoami/'; + + return { + login: authenticate + }; + + function authenticate() { + return $http.get(url) + .then(parse, reject); + } + + function parse(result) { + + var data = result.data; + + return (data === 'AuthenticationFailed') ? + reject(result) : { + success: true, + msg: result.data.statusText, + userId: result.data.userId, + roles: result.data.roles + }; + } + + function reject(result, msg) { + + var statusText = result.data.statusText || result.data; + + var response = { + success: false, + msg: 'invalid login ' + statusText + }; + + return $q.reject(response); + } + } +})(); diff --git a/apps/steward-app/src/main/js/app/client/login/login.model.spec.js b/apps/steward-app/src/main/js/app/client/login/login.model.spec.js new file mode 100644 index 000000000..bc327ed54 --- /dev/null +++ b/apps/steward-app/src/main/js/app/client/login/login.model.spec.js @@ -0,0 +1,45 @@ +(function () { + 'use strict'; + + + describe('loginModel services', LoginModelSpec); + + function LoginModelSpec() { + + var loginModel, $httpBackend, constants; + + function setup() { + module('shrine.steward.login'); + + inject(function (_$httpBackend_, _loginModel_, _constants_) { + $httpBackend = _$httpBackend_; + loginModel = _loginModel_; + constants = _constants_; + $httpBackend.whenGET(/\.html$/).respond(''); + }); + } + + beforeEach(setup); + + it('loginModel.bar() - test', function () { + var mockData = { + statusText: 'success', + userId: 'test', + roles: ['testRole1,testRole2,testRole3'] + }; + + var expectedResult = { + success: true, + msg: 'success', + userId: mockData.userId, + roles: mockData.roles + } + + $httpBackend.expectGET(constants.baseUrl + 'user/whoami/').respond(mockData); + loginModel.login().then(function (data) { + expect(data.userId).toEqual(mockData.userId); + }); + $httpBackend.flush(); + }); + } +})(); diff --git a/apps/steward-app/src/main/js/app/client/login/login.module.js b/apps/steward-app/src/main/js/app/client/login/login.module.js new file mode 100644 index 000000000..2e2cd6806 --- /dev/null +++ b/apps/steward-app/src/main/js/app/client/login/login.module.js @@ -0,0 +1,8 @@ +(function() { + 'use strict'; + + var dependencies = ['shrine.steward']; + + angular + .module('shrine.steward.login', dependencies); +})(); diff --git a/apps/steward-app/src/main/js/app/client/login/login.service.js b/apps/steward-app/src/main/js/app/client/login/login.service.js new file mode 100644 index 000000000..d89db033b --- /dev/null +++ b/apps/steward-app/src/main/js/app/client/login/login.service.js @@ -0,0 +1,35 @@ +(function () { + 'use strict'; + + angular + .module('shrine.steward.login') + .factory('LoginService', LoginService); + + LoginService.$inject = ['$http','StewardService']; + function LoginService($http, StewardService) { + + var svc = StewardService; + + return { + setAuthHeader: setAuthHeader, + setCredentials: setCredentials, + clearCredentials: clearCredentials + }; + + function setAuthHeader(username, password) { + var authdata = svc.commonService.toBase64(username + ':' + password); + $http.defaults.headers.common['Authorization'] = 'Basic ' + authdata; + } + + function setCredentials(username, password, roles) { + var authdata = svc.commonService.toBase64(username + ':' + password); + svc.setAppUser(username, authdata, roles); + } + + function clearCredentials() { + var user = svc.getAppUser(); + svc.deleteAppUser(); + $http.defaults.headers.common.Authorization = ' Basic '; + } + } +})(); diff --git a/apps/steward-app/src/main/js/app/client/login/login.service.spec.js b/apps/steward-app/src/main/js/app/client/login/login.service.spec.js new file mode 100644 index 000000000..9670b367b --- /dev/null +++ b/apps/steward-app/src/main/js/app/client/login/login.service.spec.js @@ -0,0 +1,76 @@ +(function () { + 'use strict'; + + describe('shrine.steward.login LoginService tests', LoginServiceSpec); + + function LoginServiceSpec() { + + // -- vars -- // + var loginService, http, stewardService; + // -- arrange -- // + var username = 'test'; + var password = 'testpassword'; + var roles = ['testRole1', 'testRole2', 'testRole3']; + + function setup() { + module('shrine.steward.login'); + inject(function (LoginService, $http, StewardService) { + loginService = LoginService; + http = $http; + stewardService = StewardService; + }); + } + + //-- setup --/ + beforeEach(setup); + + // -- tests -- // + it('LoginService should exist', function () { + expect(typeof (loginService)).toBe('object'); + }); + + it('setAuthHeader should set the Authorization Header', function () { + + // -- arrange -- // + var expectedAuthHeader = 'Basic dGVzdDp0ZXN0cGFzc3dvcmQ='; + + //-- act --// + loginService.setAuthHeader(username, password); + var result = http.defaults.headers.common['Authorization']; + + // -- assert --// + expect(result).toEqual(expectedAuthHeader); + }); + + it('setCredentials should set the proper user credentials', function () { + + // -- arrange -- // + var expectedResult = { + username: 'test', + authdata: 'dGVzdDp0ZXN0cGFzc3dvcmQ=', + isLoggedIn: true, + roles: ['testRole1', 'testRole2', 'testRole3'] + }; + + // -- act -- // + loginService.setCredentials(username, password, roles); + var user = stewardService.getAppUser(); + + // -- assert --/ + expect(user).toEqual(expectedResult); + }); + + it('clearCredentials should clear the user', function () { + // -- arrange -- // + var expectedResult = {}; + + // -- act -- // + loginService.clearCredentials(); + var user = stewardService.getAppUser(); + + // -- assert --/ + expect(user).toEqual({}); + }); + + } +})();