From 00973c491ca6ea93b36d9cf5dd74f019b6721ff9 Mon Sep 17 00:00:00 2001 From: Anthony89 Date: Wed, 28 Sep 2016 10:28:03 +0300 Subject: [PATCH] test project --- .eslintignore | 0 .eslintrc | 0 .gitignore | 0 README.md | 0 gulpfile.js/config/index.js | 0 gulpfile.js/error/index.js | 0 gulpfile.js/index.js | 0 gulpfile.js/server/index.js | 0 npm-shrinkwrap.json | 210 ++++++++++++++++++ package.json | 7 +- src/app/login/controllers/LoginCtrl.js | 30 +++ src/app/login/index.js | 9 + src/app/login/route.js | 16 ++ src/app/login/templates/login.tpl.jade | 26 +++ src/app/showcase/auth.js | 25 +++ src/app/showcase/config.js | 0 src/app/showcase/controllers/DashboardCtrl.js | 20 ++ .../showcase/directives/DashboardDirective.js | 20 ++ .../directives/DashboardDirective.tpl.jade | 2 + src/app/showcase/index.js | 10 +- src/app/showcase/route.js | 6 +- src/app/showcase/services/DataService.js | 33 +++ src/app/showcase/templates/dashboard.tpl.jade | 3 + src/app/showcase/templates/home.tpl.jade | 2 - src/app/signup/controllers/SignUpCtrl.js | 27 ++- src/app/signup/index.js | 3 +- src/app/signup/route.js | 0 src/app/signup/services/UserService.js | 73 +++++- src/app/signup/templates/signup.tpl.jade | 35 ++- src/index.jade | 0 src/less/main.less | 0 31 files changed, 538 insertions(+), 19 deletions(-) mode change 100644 => 100755 .eslintignore mode change 100644 => 100755 .eslintrc mode change 100644 => 100755 .gitignore mode change 100644 => 100755 README.md mode change 100644 => 100755 gulpfile.js/config/index.js mode change 100644 => 100755 gulpfile.js/error/index.js mode change 100644 => 100755 gulpfile.js/index.js mode change 100644 => 100755 gulpfile.js/server/index.js create mode 100755 src/app/login/controllers/LoginCtrl.js create mode 100755 src/app/login/index.js create mode 100755 src/app/login/route.js create mode 100755 src/app/login/templates/login.tpl.jade create mode 100644 src/app/showcase/auth.js mode change 100644 => 100755 src/app/showcase/config.js create mode 100644 src/app/showcase/controllers/DashboardCtrl.js create mode 100644 src/app/showcase/directives/DashboardDirective.js create mode 100644 src/app/showcase/directives/DashboardDirective.tpl.jade mode change 100644 => 100755 src/app/showcase/index.js mode change 100644 => 100755 src/app/showcase/route.js create mode 100644 src/app/showcase/services/DataService.js create mode 100755 src/app/showcase/templates/dashboard.tpl.jade delete mode 100644 src/app/showcase/templates/home.tpl.jade mode change 100644 => 100755 src/app/signup/controllers/SignUpCtrl.js mode change 100644 => 100755 src/app/signup/index.js mode change 100644 => 100755 src/app/signup/route.js mode change 100644 => 100755 src/app/signup/services/UserService.js mode change 100644 => 100755 src/app/signup/templates/signup.tpl.jade mode change 100644 => 100755 src/index.jade mode change 100644 => 100755 src/less/main.less diff --git a/.eslintignore b/.eslintignore old mode 100644 new mode 100755 diff --git a/.eslintrc b/.eslintrc old mode 100644 new mode 100755 diff --git a/.gitignore b/.gitignore old mode 100644 new mode 100755 diff --git a/README.md b/README.md old mode 100644 new mode 100755 diff --git a/gulpfile.js/config/index.js b/gulpfile.js/config/index.js old mode 100644 new mode 100755 diff --git a/gulpfile.js/error/index.js b/gulpfile.js/error/index.js old mode 100644 new mode 100755 diff --git a/gulpfile.js/index.js b/gulpfile.js/index.js old mode 100644 new mode 100755 diff --git a/gulpfile.js/server/index.js b/gulpfile.js/server/index.js old mode 100644 new mode 100755 diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json index 622b3e8..4de9718 100644 --- a/npm-shrinkwrap.json +++ b/npm-shrinkwrap.json @@ -66,6 +66,16 @@ "from": "angular-ui-router@>=0.2.15 <0.3.0", "resolved": "https://registry.npmjs.org/angular-ui-router/-/angular-ui-router-0.2.18.tgz" }, + "angular-validation-match": { + "version": "1.9.0", + "from": "angular-validation-match@latest", + "resolved": "https://registry.npmjs.org/angular-validation-match/-/angular-validation-match-1.9.0.tgz" + }, + "angularfire": { + "version": "2.0.2", + "from": "angularfire@latest", + "resolved": "https://registry.npmjs.org/angularfire/-/angularfire-2.0.2.tgz" + }, "ansi-escapes": { "version": "1.1.1", "from": "ansi-escapes@>=1.1.0 <2.0.0", @@ -1155,6 +1165,206 @@ } } }, + "firebase": { + "version": "3.4.1", + "from": "firebase@latest", + "resolved": "https://registry.npmjs.org/firebase/-/firebase-3.4.1.tgz", + "dependencies": { + "dom-storage": { + "version": "2.0.2", + "from": "dom-storage@2.0.2", + "resolved": "https://registry.npmjs.org/dom-storage/-/dom-storage-2.0.2.tgz" + }, + "faye-websocket": { + "version": "0.9.3", + "from": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.9.3.tgz", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.9.3.tgz", + "dependencies": { + "websocket-driver": { + "version": "0.6.4", + "from": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.6.4.tgz", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.6.4.tgz", + "dependencies": { + "websocket-extensions": { + "version": "0.1.1", + "from": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.1.tgz", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.1.tgz" + } + } + } + } + }, + "jsonwebtoken": { + "version": "5.7.0", + "from": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-5.7.0.tgz", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-5.7.0.tgz", + "dependencies": { + "jws": { + "version": "3.1.3", + "from": "https://registry.npmjs.org/jws/-/jws-3.1.3.tgz", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.1.3.tgz", + "dependencies": { + "base64url": { + "version": "1.0.6", + "from": "https://registry.npmjs.org/base64url/-/base64url-1.0.6.tgz", + "resolved": "https://registry.npmjs.org/base64url/-/base64url-1.0.6.tgz", + "dependencies": { + "concat-stream": { + "version": "1.4.10", + "from": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.4.10.tgz", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.4.10.tgz", + "dependencies": { + "inherits": { + "version": "2.0.1", + "from": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz" + }, + "readable-stream": { + "version": "1.1.14", + "from": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "dependencies": { + "core-util-is": { + "version": "1.0.2", + "from": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz" + }, + "isarray": { + "version": "0.0.1", + "from": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz" + }, + "string_decoder": { + "version": "0.10.31", + "from": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz" + } + } + }, + "typedarray": { + "version": "0.0.6", + "from": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz" + } + } + }, + "meow": { + "version": "2.0.0", + "from": "https://registry.npmjs.org/meow/-/meow-2.0.0.tgz", + "resolved": "https://registry.npmjs.org/meow/-/meow-2.0.0.tgz", + "dependencies": { + "camelcase-keys": { + "version": "1.0.0", + "from": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-1.0.0.tgz", + "dependencies": { + "camelcase": { + "version": "1.2.1", + "from": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz" + }, + "map-obj": { + "version": "1.0.1", + "from": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz" + } + } + }, + "indent-string": { + "version": "1.2.2", + "from": "https://registry.npmjs.org/indent-string/-/indent-string-1.2.2.tgz", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-1.2.2.tgz", + "dependencies": { + "get-stdin": { + "version": "4.0.1", + "from": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz" + }, + "repeating": { + "version": "1.1.3", + "from": "https://registry.npmjs.org/repeating/-/repeating-1.1.3.tgz", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-1.1.3.tgz", + "dependencies": { + "is-finite": { + "version": "1.0.1", + "from": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.1.tgz", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.1.tgz", + "dependencies": { + "number-is-nan": { + "version": "1.0.0", + "from": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.0.tgz" + } + } + } + } + } + } + }, + "minimist": { + "version": "1.2.0", + "from": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz" + }, + "object-assign": { + "version": "1.0.0", + "from": "https://registry.npmjs.org/object-assign/-/object-assign-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-1.0.0.tgz" + } + } + } + } + }, + "jwa": { + "version": "1.1.3", + "from": "https://registry.npmjs.org/jwa/-/jwa-1.1.3.tgz", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.1.3.tgz", + "dependencies": { + "buffer-equal-constant-time": { + "version": "1.0.1", + "from": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz" + }, + "ecdsa-sig-formatter": { + "version": "1.0.5", + "from": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.5.tgz", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.5.tgz", + "dependencies": { + "base64-url": { + "version": "1.2.2", + "from": "https://registry.npmjs.org/base64-url/-/base64-url-1.2.2.tgz", + "resolved": "https://registry.npmjs.org/base64-url/-/base64-url-1.2.2.tgz" + } + } + } + } + } + } + }, + "ms": { + "version": "0.7.1", + "from": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz" + }, + "xtend": { + "version": "4.0.1", + "from": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz" + } + } + }, + "rsvp": { + "version": "3.2.1", + "from": "https://registry.npmjs.org/rsvp/-/rsvp-3.2.1.tgz", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-3.2.1.tgz" + }, + "xmlhttprequest": { + "version": "1.8.0", + "from": "xmlhttprequest@1.8.0", + "resolved": "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz" + } + } + }, "first-chunk-stream": { "version": "1.0.0", "from": "first-chunk-stream@>=1.0.0 <2.0.0", diff --git a/package.json b/package.json index de2c156..36931fc 100644 --- a/package.json +++ b/package.json @@ -48,5 +48,10 @@ "license": "UNLICENSED", "private": true, "authors": "Anid Monsur ", - "repository": "bookbottles/showcase" + "repository": "bookbottles/showcase", + "dependencies": { + "angular-validation-match": "^1.9.0", + "angularfire": "^2.0.2", + "firebase": "^3.4.1" + } } diff --git a/src/app/login/controllers/LoginCtrl.js b/src/app/login/controllers/LoginCtrl.js new file mode 100755 index 0000000..9a593ac --- /dev/null +++ b/src/app/login/controllers/LoginCtrl.js @@ -0,0 +1,30 @@ +'use strict'; + +module.exports = LoginCtrl; + +/** + * @ngInject + */ +function LoginCtrl($state, UserService) { + var vm = this; + + vm.login = function(form) { + vm.submitted = true; + + if (form.$valid) { + UserService.login({ + name: vm.user.name, + password: vm.user.password + }) + .then(function(){ + // Account validated, redirect to dashboard + $state.go('dashboard'); + }) + .catch(function(err){ + vm.errors = {}; + + vm.errors.other = err.message; + }); + } + }; +} diff --git a/src/app/login/index.js b/src/app/login/index.js new file mode 100755 index 0000000..5a9508e --- /dev/null +++ b/src/app/login/index.js @@ -0,0 +1,9 @@ +'use strict'; + +module.exports = require('angular') + .module('bookbottles.showcase.login', [ + require('angular-ui-router') + ]) + .config(require('./route')) + .controller('LoginCtrl', require('./controllers/LoginCtrl')) + .name; diff --git a/src/app/login/route.js b/src/app/login/route.js new file mode 100755 index 0000000..2416313 --- /dev/null +++ b/src/app/login/route.js @@ -0,0 +1,16 @@ +'use strict'; + +module.exports = route; + +/** + * @ngInject + */ +function route($stateProvider) { + // Configure states here + $stateProvider + .state('login', { + url: '/login', + template: require('./templates/login.tpl.jade'), + controller: 'LoginCtrl as vm' + }); +} diff --git a/src/app/login/templates/login.tpl.jade b/src/app/login/templates/login.tpl.jade new file mode 100755 index 0000000..fb75d58 --- /dev/null +++ b/src/app/login/templates/login.tpl.jade @@ -0,0 +1,26 @@ +.container + .row + .col-sm-12 + h1 Login + p + | Default Test User account is + code bookbottles + | / + code showcase + .col-sm-12 + form.form(name='form', ng-submit='vm.login(form)', novalidate='') + .form-group + label Name + input.form-control(type='name', name='name', ng-model='vm.user.name', required='') + .form-group + label Password + input.form-control(type='password', name='password', ng-model='vm.user.password', required='') + .form-group.has-error + p.help-block(ng-show='form.name.$error.required && form.password.$error.required && vm.submitted') + | Please enter your name and password. + p.help-block(ng-show='vm.submitted') {{ vm.errors.other }} + div + button.btn.btn-inverse.btn-lg.btn-login(type='submit') + | Login + a.btn.btn-default.btn-lg.btn-register(ui-sref='signup') + | Register \ No newline at end of file diff --git a/src/app/showcase/auth.js b/src/app/showcase/auth.js new file mode 100644 index 0000000..d1ba819 --- /dev/null +++ b/src/app/showcase/auth.js @@ -0,0 +1,25 @@ +'use strict'; + +module.exports = auth; + +/** + * @ngInject + */ +function auth($rootScope, $state, UserService) { + // Redirect to login if route requires auth and the user is not logged in, or doesn't have required role + $rootScope.$on('$stateChangeStart', function(event, next) { + if (!next.authenticate) { + return; + } + + UserService.isLoggedIn() + .then(function(is) { + if (is) { + return; + } + + event.preventDefault(); + $state.go('login'); + }); + }); +} diff --git a/src/app/showcase/config.js b/src/app/showcase/config.js old mode 100644 new mode 100755 diff --git a/src/app/showcase/controllers/DashboardCtrl.js b/src/app/showcase/controllers/DashboardCtrl.js new file mode 100644 index 0000000..4270e9f --- /dev/null +++ b/src/app/showcase/controllers/DashboardCtrl.js @@ -0,0 +1,20 @@ +'use strict'; + +module.exports = DashboardCtrl; + +/** + * @ngInject + */ +function DashboardCtrl($state, $scope, DataService) { + var vm = this; + + vm.data = []; + + DataService.fetchData($scope); + + $scope.$on('DATA_LOADED', function(event, data){ + $scope.$apply(function(){ + vm.data = data; + }); + }); +} diff --git a/src/app/showcase/directives/DashboardDirective.js b/src/app/showcase/directives/DashboardDirective.js new file mode 100644 index 0000000..6315d6d --- /dev/null +++ b/src/app/showcase/directives/DashboardDirective.js @@ -0,0 +1,20 @@ +'use strict'; + +module.exports = DashboardDirective; + +/** + * @ngInject + */ +function DashboardDirective() { + return { + template: require('./DashboardDirective.tpl.jade'), + restrict: 'E', + scope: { + data: '=' + }, + controller: function(){ + }, + controllerAs: 'ctrl', + bindToController: true + }; +} diff --git a/src/app/showcase/directives/DashboardDirective.tpl.jade b/src/app/showcase/directives/DashboardDirective.tpl.jade new file mode 100644 index 0000000..b53a50d --- /dev/null +++ b/src/app/showcase/directives/DashboardDirective.tpl.jade @@ -0,0 +1,2 @@ +div(ng-repeat="item in ctrl.data") + p {{item.headline}} \ No newline at end of file diff --git a/src/app/showcase/index.js b/src/app/showcase/index.js old mode 100644 new mode 100755 index 88c2fda..21649f7 --- a/src/app/showcase/index.js +++ b/src/app/showcase/index.js @@ -4,9 +4,15 @@ require('angular') .module('bookbottles.showcase', [ /* 3rd Party */ require('angular-ui-router'), + require('angularfire'), /* Custom */ - require('../signup') + require('../signup'), + require('../login') ]) .config(require('./config')) - .config(require('./route')); + .config(require('./route')) + .run(require('./auth')) + .controller('DashboardCtrl', require('./controllers/DashboardCtrl')) + .factory('DataService', require('./services/DataService')) + .directive('dashboardDirective', require('./directives/DashboardDirective')); \ No newline at end of file diff --git a/src/app/showcase/route.js b/src/app/showcase/route.js old mode 100644 new mode 100755 index dddfc76..fe36873 --- a/src/app/showcase/route.js +++ b/src/app/showcase/route.js @@ -8,8 +8,10 @@ module.exports = route; function route($stateProvider) { // Configure states here $stateProvider - .state('home', { + .state('dashboard', { url: '/', - template: require('./templates/home.tpl.jade') + template: require('./templates/dashboard.tpl.jade'), + controller: 'DashboardCtrl as vm', + authenticate: true }); } diff --git a/src/app/showcase/services/DataService.js b/src/app/showcase/services/DataService.js new file mode 100644 index 0000000..2cb007f --- /dev/null +++ b/src/app/showcase/services/DataService.js @@ -0,0 +1,33 @@ +'use strict'; + +var firebase = require('firebase'); +var app = firebase.initializeApp({ + apiKey: "AIzaSyA_qscbJY_eCHsYDgYyd8adwk4U4b1MEs8", + authDomain: "blockchaser-pulse-af7c6.firebaseapp.com", + databaseURL: "https://blockchaser-pulse-af7c6.firebaseio.com", + storageBucket: "blockchaser-pulse-af7c6.appspot.com", + messagingSenderId: "729699690939" +}); + +module.exports = DataService; + +/** + * @ngInject + */ +function DataService($q, $firebaseArray) { + var DataService = { + fetchData: fetchData + }; + + return DataService; + + ////////// + + function fetchData(scope) { + var ref = app.database().ref('lot_index_test').orderByChild('high_bid'); + + ref.on('value', function(item){ + scope.$emit('DATA_LOADED', item.val()); + }) + } +} diff --git a/src/app/showcase/templates/dashboard.tpl.jade b/src/app/showcase/templates/dashboard.tpl.jade new file mode 100755 index 0000000..50481d9 --- /dev/null +++ b/src/app/showcase/templates/dashboard.tpl.jade @@ -0,0 +1,3 @@ +h1 Hello World + +dashboard-directive(data="vm.data") \ No newline at end of file diff --git a/src/app/showcase/templates/home.tpl.jade b/src/app/showcase/templates/home.tpl.jade deleted file mode 100644 index 5b2da51..0000000 --- a/src/app/showcase/templates/home.tpl.jade +++ /dev/null @@ -1,2 +0,0 @@ -h1 Hello World -a(ui-sref="signup") Sign Up \ No newline at end of file diff --git a/src/app/signup/controllers/SignUpCtrl.js b/src/app/signup/controllers/SignUpCtrl.js old mode 100644 new mode 100755 index a7c1af0..9637c07 --- a/src/app/signup/controllers/SignUpCtrl.js +++ b/src/app/signup/controllers/SignUpCtrl.js @@ -5,9 +5,30 @@ module.exports = SignUpCtrl; /** * @ngInject */ -function SignUpCtrl(UserService) { +function SignUpCtrl($state, UserService) { var vm = this; - vm.signUp = UserService.create; -} + vm.signUp = function(form) { + vm.submitted = true; + + if (form.$valid) { + UserService.create({ + name: vm.user.name, + password: vm.user.password + }) + .then(function(){ + // Account created, redirect to dashboard + $state.go('dashboard'); + }) + .catch(function(err){ + vm.errors = {}; + // Update validity of form fields that match the server errors + angular.forEach(err.errors, function(error, field) { + form[field].$setValidity('server', false); + vm.errors[field] = error.message; + }); + }); + } + }; +} diff --git a/src/app/signup/index.js b/src/app/signup/index.js old mode 100644 new mode 100755 index 625516d..f4718a7 --- a/src/app/signup/index.js +++ b/src/app/signup/index.js @@ -2,7 +2,8 @@ module.exports = require('angular') .module('bookbottles.showcase.signup', [ - require('angular-ui-router') + require('angular-ui-router'), + require('angular-validation-match') ]) .config(require('./route')) .controller('SignUpCtrl', require('./controllers/SignUpCtrl')) diff --git a/src/app/signup/route.js b/src/app/signup/route.js old mode 100644 new mode 100755 diff --git a/src/app/signup/services/UserService.js b/src/app/signup/services/UserService.js old mode 100644 new mode 100755 index 3741e69..efb821b --- a/src/app/signup/services/UserService.js +++ b/src/app/signup/services/UserService.js @@ -5,17 +5,82 @@ module.exports = UserService; /** * @ngInject */ -function UserService() { +function UserService($q) { var UserService = { - create: create + create: create, + login: login, + isLoggedIn: isLoggedIn }; return UserService; ////////// - function create() { + function create(user) { + var d = $q.defer(); + + //at least one number, one lowercase and one uppercase letter + //at least 3 characters + var re = /(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{3,}/; + var error = {}; + console.debug('Creating a user'); + + if (re.test(user.password)) { + localStorage['currentUser'] = user; + + d.resolve(); + } else { + error.errors = { + password: { + message: 'The password should consist of at least one number, one lowercase and one uppercase characters' + } + }; + d.reject(error); + } + + return d.promise; } -} + function login(user) { + var d = $q.defer(); + + var error = null; + + console.debug('Validating the user', user); + + if (user.name !== 'bookbottles') { + error = { + message: 'The name does not exist.' + }; + } else if (user.password !== 'showcase') { + error = { + message: 'The password is invalid.' + }; + } + + if (!error) { + localStorage['currentUser'] = user; + + d.resolve(); + } else { + d.reject(error); + } + + return d.promise; + } + + function isLoggedIn() { + var d = $q.defer(); + + console.debug('Authenticating the user', localStorage['currentUser']); + + if (localStorage['currentUser']) { + d.resolve(true); + } else { + d.resolve(false); + } + + return d.promise; + } +} diff --git a/src/app/signup/templates/signup.tpl.jade b/src/app/signup/templates/signup.tpl.jade old mode 100644 new mode 100755 index 49299a8..8024247 --- a/src/app/signup/templates/signup.tpl.jade +++ b/src/app/signup/templates/signup.tpl.jade @@ -1,4 +1,31 @@ -h1 Sign Up -div - button.btn.btn-default(ng-click='vm.signUp()') Create User -a(ui-sref="home") Home \ No newline at end of file +.container + .row + .col-sm-12 + h1 Sign up + .col-sm-12 + form.form(name='form', ng-submit='vm.signUp(form)', novalidate='') + .form-group(ng-class="{ 'has-success': form.name.$valid && vm.submitted,\ + 'has-error': form.name.$invalid && vm.submitted }") + label Name + input.form-control(type='text', name='name', ng-model='vm.user.name', required='') + p.help-block(ng-show='form.name.$error.required && vm.submitted') + | A name is required + .form-group(ng-class="{ 'has-success': form.password.$valid && vm.submitted,\ + 'has-error': form.password.$invalid && vm.submitted }") + label Password + input.form-control(type='password', name='password', ng-model='vm.user.password', ng-minlength='3', required='', mongoose-error='') + p.help-block(ng-show='(form.password.$error.minlength || form.password.$error.required) && vm.submitted') + | Password must be at least 3 characters. + p.help-block(ng-show='form.password.$error.mongoose') + | {{ vm.errors.password }} + .form-group(ng-class="{ 'has-success': form.confirmPassword.$valid && vm.submitted,\ + 'has-error': form.confirmPassword.$invalid && vm.submitted }") + label Confirm Password + input.form-control(type='password', name='confirmPassword', ng-model='vm.user.confirmPassword', match='vm.user.password', ng-minlength='3', required='') + p.help-block(ng-show='form.confirmPassword.$error.match && vm.submitted') + | Passwords must match. + div + button.btn.btn-inverse.btn-lg.btn-register(type='submit') + | Sign up + a.btn.btn-default.btn-lg.btn-login(ui-sref='login') + | Login \ No newline at end of file diff --git a/src/index.jade b/src/index.jade old mode 100644 new mode 100755 diff --git a/src/less/main.less b/src/less/main.less old mode 100644 new mode 100755