From 77db907cae57a0618c3aa18eee14586c96b335ea Mon Sep 17 00:00:00 2001 From: Christopher De Cairos Date: Thu, 16 Oct 2014 17:30:38 -0400 Subject: [PATCH 1/2] implement new webmaker login --- Gruntfile.coffee | 2 + app/_js/app.js | 1 + app/_js/controllers.js | 67 ------------------------------- app/_js/directives.js | 18 ++++----- app/_less/components/imports.less | 3 ++ app/_partials/login.html | 12 +++--- app/index.template | 3 +- bower.json | 1 + env.cson.example | 1 + server/routes/index.js | 18 ++++++--- server/server.js | 11 +++++ 11 files changed, 46 insertions(+), 91 deletions(-) diff --git a/Gruntfile.coffee b/Gruntfile.coffee index 249c81e..e40f6dc 100644 --- a/Gruntfile.coffee +++ b/Gruntfile.coffee @@ -16,6 +16,8 @@ module.exports = (grunt) -> 'app/_bower_components/locompleter/locompleter.js' 'app/_bower_components/webmaker-analytics/analytics.js' 'app/_bower_components/spiiin/src/spiiin.js' + 'app/_bower_components/webmaker-login-angular/dist/ngWebmakerLogin.js' + 'app/_bower_components/webmaker-login-angular/dist/templates/ngWebmakerLogin.templates.js' 'app/_js/app.js' 'app/_js/services.js' 'app/_js/controllers.js' diff --git a/app/_js/app.js b/app/_js/app.js index bc02965..9cf55a0 100644 --- a/app/_js/app.js +++ b/app/_js/app.js @@ -4,6 +4,7 @@ angular.module('wmProfile', [ 'ui.bootstrap', 'wmProfile.filters', 'wmProfile.services', + 'ngWebmakerLogin', 'localization', 'wmProfile.directives', 'wmProfile.controllers', diff --git a/app/_js/controllers.js b/app/_js/controllers.js index d2e9ea9..32254ec 100644 --- a/app/_js/controllers.js +++ b/app/_js/controllers.js @@ -99,71 +99,4 @@ angular.module('wmProfile.controllers', []) return curYear !== prevYear; }; } - ]) - .controller('createUserController', ['$scope', '$http', '$modal', 'loginService', - function ($scope, $http, $modal, loginService) { - - loginService.auth.on('newuser', function (assertion) { - $modal.open({ - templateUrl: '/user/_partials/create-user-form.html', - controller: createUserCtrl, - resolve: { - assertion: function () { - return assertion; - } - } - }); - }); - - var createUserCtrl = function ($scope, $modalInstance, loginService, assertion) { - - $scope.form = {}; - $scope.user = {}; - - // TODO: Finish localization and remove hard coded variables. - $scope.supported_languages = 'en-US'; - $scope.currentLang = 'en-US'; - $scope.langmap = { - 'en-US': { - 'nativeName': 'English (United States)', - 'englishName': 'English (United States)' - } - }; - - $scope.checkUsername = function () { - if (!$scope.form.user.username) { - return; - } - $http - .post(loginService.auth.urls.checkUsername, { - username: $scope.form.user.username.$viewValue - }) - .success(function (username) { - $scope.form.user.username.$setValidity('taken', !username.exists); - }) - .error(function (err) { - console.log(err); - $scope.form.user.username.$setValidity('taken', true); - }); - }; - - $scope.createUser = function () { - $scope.submit = true; - if ($scope.form.user.$valid && $scope.form.agree) { - loginService.auth.createUser({ - assertion: assertion, - user: $scope.user - }); - $modalInstance.close(); - } - }; - - $scope.cancel = function () { - loginService.auth.analytics.webmakerNewUserCancelled(); - $modalInstance.dismiss('cancel'); - }; - }; - - loginService.auth.verify(); - } ]); diff --git a/app/_js/directives.js b/app/_js/directives.js index 2ae8c43..a01ecc9 100644 --- a/app/_js/directives.js +++ b/app/_js/directives.js @@ -41,30 +41,26 @@ angular.module('wmProfile.directives', []) } }; }]) - .directive('wmpLogin', ['WebmakerAuthClient', 'loginService', - function (WebmakerAuthClient, loginService) { + .directive('wmpLogin', ['$rootScope', + function ($rootScope) { return { restrict: 'E', scope: false, templateUrl: '/user/_partials/login.html', link: function ($scope, el, attrs) { - $scope.userInfo = loginService.getData(); - $scope.userLoggedIn = !!$scope.userInfo; // No user info means not logged in + $scope.userInfo = undefined; + $scope.userLoggedIn = false; // No user info means not logged in - $scope.$on('userLoggedIn', function (event, data) { + $rootScope.$on('signedIn', function (user) { $scope.userLoggedIn = true; - $scope.userInfo = data; + $scope.userInfo = user; $scope.$digest(); }); - $scope.$on('userLoggedOut', function (event, data) { + $rootScope.$on('loggedOut', function (user) { $scope.userLoggedIn = false; $scope.userInfo = undefined; - $scope.$digest(); }); - - $scope.login = loginService.auth.login; - $scope.logout = loginService.auth.logout; } }; } diff --git a/app/_less/components/imports.less b/app/_less/components/imports.less index ec41173..76cb3ad 100644 --- a/app/_less/components/imports.less +++ b/app/_less/components/imports.less @@ -12,3 +12,6 @@ // Selectize for create user form. @import "../_bower_components/selectize/dist/less/selectize"; + +// Webmaker Login +@import "../_bower_components/webmaker-login-angular/dist/css/webmakerLogin.css"; diff --git a/app/_partials/login.html b/app/_partials/login.html index fe621b4..a6f39c0 100644 --- a/app/_partials/login.html +++ b/app/_partials/login.html @@ -1,25 +1,25 @@ diff --git a/app/index.template b/app/index.template index 7063b20..4d642e4 100644 --- a/app/index.template +++ b/app/index.template @@ -27,14 +27,13 @@ -
Want your own Webmaker profile? {{ WMP.username }} is available! - +
diff --git a/bower.json b/bower.json index f829973..20d68f8 100644 --- a/bower.json +++ b/bower.json @@ -21,6 +21,7 @@ "makeapi-client": "https://github.com/mozilla/makeapi-client.git#v0.5.24", "makerstrap": "0.1.3", "webmaker-auth-client": "0.1.11", + "webmaker-login-angular": "https://github.com/cadecairos/webmaker-login-angular/archive/8ba3f24d7f68b784a75b75387165b44c175f7430.tar.gz", "ngInfiniteScroll": "1.1.2", "spiiin": "0.2.0" } diff --git a/env.cson.example b/env.cson.example index 60c0ae1..cd24007 100644 --- a/env.cson.example +++ b/env.cson.example @@ -11,6 +11,7 @@ # URL for Login loginUrl: 'http://localhost:3000' loginUrlWithAuth: 'http://testuser:password@localhost:3000' + loginEmailUrl: 'http://localhost:1969' # Login secret key sessionSecret: 'dummy secret value' diff --git a/server/routes/index.js b/server/routes/index.js index 3d92008..af33ee6 100644 --- a/server/routes/index.js +++ b/server/routes/index.js @@ -135,11 +135,19 @@ module.exports = function (config, webmakerAuth, liveReloadRelativePath) { }); }); - router.post('/user/_service/login/verify', webmakerAuth.handlers.verify); - router.post('/user/_service/login/authenticate', webmakerAuth.handlers.authenticate); - router.post('/user/_service/login/create', webmakerAuth.handlers.create); - router.post('/user/_service/login/logout', webmakerAuth.handlers.logout); - router.post('/user/_service/login/check-username', webmakerAuth.handlers.exists); + router.post('/verify', webmakerAuth.handlers.verify); + router.post('/authenticate', webmakerAuth.handlers.authenticate); + router.post('/create', webmakerAuth.handlers.create); + router.post('/logout', webmakerAuth.handlers.logout); + router.post('/check-username', webmakerAuth.handlers.exists); + + router.post('/auth/v2/create', webmakerAuth.handlers.createUser); + router.post('/auth/v2/uid-exists', webmakerAuth.handlers.uidExists); + router.post('/auth/v2/request', webmakerAuth.handlers.request); + router.post('/auth/v2/authenticateToken', webmakerAuth.handlers.authenticateToken); + router.post('/auth/v2/verify-password', webmakerAuth.handlers.verifyPassword); + router.post('/auth/v2/request-reset-code', webmakerAuth.handlers.requestResetCode); + router.post('/auth/v2/reset-password', webmakerAuth.handlers.resetPassword); return router; }; diff --git a/server/server.js b/server/server.js index 7a8276a..0f9f6f2 100644 --- a/server/server.js +++ b/server/server.js @@ -15,6 +15,7 @@ module.exports = function (config) { // required loginURL: config.loginUrl, secretKey: config.sessionSecret, + loginHost: config.loginEmailUrl, // optional authLoginURL: config.loginUrlWithAuth, @@ -54,6 +55,16 @@ module.exports = function (config) { translation_directory: path.resolve(__dirname, '../locale') })); + var webmakerLoginJSON = require('../app/_bower_components/webmaker-login-angular/locale/en_US/webmaker-login.json'); + + i18n.addLocaleObject({ + 'en-US': webmakerLoginJSON + }, function (err, res) { + if (err) { + console.error(err); + } + }); + app.use(routes); app.use(middleware.errorHandler); app.use('/user', express.static(lrAbsolutePath || __dirname + '/../app')); From 897484c8f326f46bf88e894de76ef0d0ef314859 Mon Sep 17 00:00:00 2001 From: Christopher De Cairos Date: Wed, 22 Oct 2014 16:09:01 -0400 Subject: [PATCH 2/2] Implement new webmaker login --- Gruntfile.coffee | 4 +-- app/_js/app.js | 14 ++++---- app/_js/directives.js | 56 ++++++++++++++++--------------- app/_less/components/imports.less | 2 +- bower.json | 3 +- package.json | 2 +- server/server.js | 2 +- 7 files changed, 42 insertions(+), 41 deletions(-) diff --git a/Gruntfile.coffee b/Gruntfile.coffee index e40f6dc..7f4b0e1 100644 --- a/Gruntfile.coffee +++ b/Gruntfile.coffee @@ -16,8 +16,8 @@ module.exports = (grunt) -> 'app/_bower_components/locompleter/locompleter.js' 'app/_bower_components/webmaker-analytics/analytics.js' 'app/_bower_components/spiiin/src/spiiin.js' - 'app/_bower_components/webmaker-login-angular/dist/ngWebmakerLogin.js' - 'app/_bower_components/webmaker-login-angular/dist/templates/ngWebmakerLogin.templates.js' + 'app/_bower_components/webmaker-login-ux/dist/ngWebmakerLogin.js' + 'app/_bower_components/webmaker-login-ux/dist/templates/ngWebmakerLogin.templates.js' 'app/_js/app.js' 'app/_js/services.js' 'app/_js/controllers.js' diff --git a/app/_js/app.js b/app/_js/app.js index 9cf55a0..752cac7 100644 --- a/app/_js/app.js +++ b/app/_js/app.js @@ -15,9 +15,9 @@ angular.module('wmProfile', [ config(['$routeProvider', '$locationProvider', function ($routeProvider, $locationProvider) { $routeProvider.when('/:locale?/user/:username/badges', { - templateUrl: '/user/_partials/badges.html', - controller: 'badges' - }) + templateUrl: '/user/_partials/badges.html', + controller: 'badges' + }) .when('/:locale?/user/:username/badges', { templateUrl: '/user/_partials/badges.html', controller: 'badges' @@ -59,10 +59,10 @@ run(['$rootScope', '$http', 'jQuery', }; $.ajax({ - async: false, - url: '/user/_service/env.json', - dataType: 'json' - }) + async: false, + url: '/user/_service/env.json', + dataType: 'json' + }) .done(function (config) { $rootScope.WMP.config = config; // Set locale information diff --git a/app/_js/directives.js b/app/_js/directives.js index a01ecc9..b9112da 100644 --- a/app/_js/directives.js +++ b/app/_js/directives.js @@ -12,35 +12,37 @@ angular.module('wmProfile.directives', []) } }; }) - .directive('wmpSrc', ['jQuery', function (jQuery) { - // Add wmp-src to an img to only give it a src if the target is loadable - // This prevents broken images from displaying and creates hooks for other display logic - return { - restrict: 'A', - scope: { - url: '@wmpSrc', - didFail: '=wmpSrcFailed' - }, - link: function ($scope, el, attrs) { - var elLoader = jQuery(''); - el.fadeTo(0, 0); - - elLoader.on('load', function () { - el.attr('src', $scope.url).fadeTo(200, 1); - $scope.didFail = false; - $scope.$apply(); - }); + .directive('wmpSrc', ['jQuery', + function (jQuery) { + // Add wmp-src to an img to only give it a src if the target is loadable + // This prevents broken images from displaying and creates hooks for other display logic + return { + restrict: 'A', + scope: { + url: '@wmpSrc', + didFail: '=wmpSrcFailed' + }, + link: function ($scope, el, attrs) { + var elLoader = jQuery(''); + el.fadeTo(0, 0); - elLoader.on('error', function () { - $scope.didFail = true; - $scope.$apply(); - }); + elLoader.on('load', function () { + el.attr('src', $scope.url).fadeTo(200, 1); + $scope.didFail = false; + $scope.$apply(); + }); - // Attempt to load target image in a non attached IMG element - elLoader.attr('src', $scope.url); - } - }; - }]) + elLoader.on('error', function () { + $scope.didFail = true; + $scope.$apply(); + }); + + // Attempt to load target image in a non attached IMG element + elLoader.attr('src', $scope.url); + } + }; + } + ]) .directive('wmpLogin', ['$rootScope', function ($rootScope) { return { diff --git a/app/_less/components/imports.less b/app/_less/components/imports.less index 76cb3ad..3389af7 100644 --- a/app/_less/components/imports.less +++ b/app/_less/components/imports.less @@ -14,4 +14,4 @@ @import "../_bower_components/selectize/dist/less/selectize"; // Webmaker Login -@import "../_bower_components/webmaker-login-angular/dist/css/webmakerLogin.css"; +@import "../_bower_components/webmaker-login-ux/dist/css/webmakerLogin.css"; diff --git a/bower.json b/bower.json index 20d68f8..c3f5625 100644 --- a/bower.json +++ b/bower.json @@ -20,8 +20,7 @@ "selectize": "0.9.0", "makeapi-client": "https://github.com/mozilla/makeapi-client.git#v0.5.24", "makerstrap": "0.1.3", - "webmaker-auth-client": "0.1.11", - "webmaker-login-angular": "https://github.com/cadecairos/webmaker-login-angular/archive/8ba3f24d7f68b784a75b75387165b44c175f7430.tar.gz", + "webmaker-login-ux": "1.0.1", "ngInfiniteScroll": "1.1.2", "spiiin": "0.2.0" } diff --git a/package.json b/package.json index 1d1557e..2adda14 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,7 @@ "morgan": "1.0.1", "newrelic": "1.5.5", "optimist": "0.6.1", - "webmaker-auth": "0.1.4", + "webmaker-auth": "0.2.1", "webmaker-i18n": "0.3.22", "webmaker-locale-mapping": "0.0.5", "webmaker-translation-stats": "0.0.1", diff --git a/server/server.js b/server/server.js index 0f9f6f2..9e3bb66 100644 --- a/server/server.js +++ b/server/server.js @@ -55,7 +55,7 @@ module.exports = function (config) { translation_directory: path.resolve(__dirname, '../locale') })); - var webmakerLoginJSON = require('../app/_bower_components/webmaker-login-angular/locale/en_US/webmaker-login.json'); + var webmakerLoginJSON = require('../app/_bower_components/webmaker-login-ux/locale/en_US/webmaker-login.json'); i18n.addLocaleObject({ 'en-US': webmakerLoginJSON