From ccbd02559886eb77c79e67447d262800d7fb905a Mon Sep 17 00:00:00 2001 From: Liran Tal Date: Fri, 9 Sep 2016 08:56:07 +0300 Subject: [PATCH 01/18] chore(tidy): tidying up minor lint and layout issues --- gulpfile.js | 4 ++-- scripts/upgrade-users-sparse-index.js | 5 ++--- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/gulpfile.js b/gulpfile.js index d07e2b6d69..ba899bd682 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -132,9 +132,9 @@ gulp.task('watch:server:run-tests', function () { gulp.task('csslint', function () { return gulp.src(defaultAssets.client.css) .pipe(plugins.csslint('.csslintrc')) - .pipe(plugins.csslint.formatter()) + .pipe(plugins.csslint.formatter()); // Don't fail CSS issues yet - //.pipe(plugins.csslint.failFormatter()); + // .pipe(plugins.csslint.failFormatter()); }); // ESLint JS linting task diff --git a/scripts/upgrade-users-sparse-index.js b/scripts/upgrade-users-sparse-index.js index 863bec7ec5..f604c5797b 100644 --- a/scripts/upgrade-users-sparse-index.js +++ b/scripts/upgrade-users-sparse-index.js @@ -26,8 +26,7 @@ mongoose.connect(function (db) { if (err) { errors.push(err); - message = 'An error occured while removing the index "' + - _indexToRemove + '".'; + message = 'An error occured while removing the index "' + _indexToRemove + '".'; if (err.message.indexOf('index not found with name') !== -1) { message = 'Index "' + _indexToRemove + '" could not be found.' + @@ -51,7 +50,7 @@ function reportAndExit(message) { for (var i = 0; i < errors.length; i++) { console.log(chalk.red(errors[i])); - if (i === errors.length -1) { + if (i === (errors.length -1) ) { process.exit(0); } } From b0650fec6949cf388d715814006fefd07c717334 Mon Sep 17 00:00:00 2001 From: Michael Leanos Date: Fri, 9 Sep 2016 22:28:14 -0700 Subject: [PATCH 02/18] fix(lint): CSS alphabetize warnings (#1498) Fixes css lintings warnings of properties not alphabetized. --- modules/chat/client/css/chat.css | 2 +- modules/core/client/css/core.css | 12 ++++++------ modules/users/client/css/users.css | 10 +++++----- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/modules/chat/client/css/chat.css b/modules/chat/client/css/chat.css index a64df1fa64..d34b886f56 100644 --- a/modules/chat/client/css/chat.css +++ b/modules/chat/client/css/chat.css @@ -9,7 +9,7 @@ margin-left: 10px; } .chat-profile-image { + border-radius: 50%; height: 28px; width: 28px; - border-radius: 50%; } diff --git a/modules/core/client/css/core.css b/modules/core/client/css/core.css index f287d94e6c..dab2b41a68 100644 --- a/modules/core/client/css/core.css +++ b/modules/core/client/css/core.css @@ -12,25 +12,25 @@ display: none !important; } .header-profile-image { - opacity: 0.8; - height: 28px; - width: 28px; border-radius: 50%; + height: 28px; margin-right: 5px; + opacity: 0.8; + width: 28px; } .open .header-profile-image, a:hover .header-profile-image { opacity: 1; } .user-header-dropdown-toggle { - padding-top: 11px !important; padding-bottom: 11px !important; + padding-top: 11px !important; } .user-primary-account { font-size: 30px; - top: 10px; - right: 10px; position: absolute; + right: 10px; + top: 10px; } .error-text { display: none; diff --git a/modules/users/client/css/users.css b/modules/users/client/css/users.css index 868b6f932b..eeed805a96 100644 --- a/modules/users/client/css/users.css +++ b/modules/users/client/css/users.css @@ -8,19 +8,19 @@ position: relative; } .btn-add-remove-account { - top: 10px; - right: 10px; - position: absolute; pointer-events: none; + position: absolute; + right: 10px; + top: 10px; } .user-profile-picture { - min-height: 150px; max-height: 150px; + min-height: 150px; } .cropArea { background: #E4E4E4; - width: 300px; height: 300px; + width: 300px; } .social-button { -webkit-transition-duration: 0.4s; From b77508f43db4ff49baaf5d164f548bd6d6de36c5 Mon Sep 17 00:00:00 2001 From: Daron Jones Date: Sun, 11 Sep 2016 20:29:05 +0100 Subject: [PATCH 03/18] fix(authentication) Stops error on signin/signup (#1495) Uses the passport info object to simplify login and remove the need to temporarily cache the redirect within the session. --- .../users.authentication.server.controller.js | 24 ++++++++++--------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/modules/users/server/controllers/users/users.authentication.server.controller.js b/modules/users/server/controllers/users/users.authentication.server.controller.js index 56a962e8e9..d822d692e5 100644 --- a/modules/users/server/controllers/users/users.authentication.server.controller.js +++ b/modules/users/server/controllers/users/users.authentication.server.controller.js @@ -85,11 +85,6 @@ exports.signout = function (req, res) { */ exports.oauthCall = function (strategy, scope) { return function (req, res, next) { - // Set redirection path on session. - // Do not redirect to a signin or signup page - if (noReturnUrls.indexOf(req.query.redirect_to) === -1) { - req.session.redirect_to = req.query.redirect_to; - } // Authenticate passport.authenticate(strategy, scope)(req, res, next); }; @@ -100,10 +95,8 @@ exports.oauthCall = function (strategy, scope) { */ exports.oauthCallback = function (strategy) { return function (req, res, next) { - // Pop redirect URL from session - var sessionRedirectURL = req.session.redirect_to; - delete req.session.redirect_to; + // info.redirect_to contains inteded redirect path passport.authenticate(strategy, function (err, user, info) { if (err) { return res.redirect('/authentication/signin?err=' + encodeURIComponent(errorHandler.getErrorMessage(err))); @@ -116,7 +109,7 @@ exports.oauthCallback = function (strategy) { return res.redirect('/authentication/signin'); } - return res.redirect(info || sessionRedirectURL || '/'); + return res.redirect(info.redirect_to || '/'); }); })(req, res, next); }; @@ -145,6 +138,15 @@ exports.saveOAuthUserProfile = function (req, providerUserProfile, done) { $or: [mainProviderSearchQuery, additionalProviderSearchQuery] }; + // Setup info object + var info = {}; + + // Set redirection path on session. + // Do not redirect to a signin or signup page + if (noReturnUrls.indexOf(req.query.redirect_to) === -1) { + info.redirect_to = req.query.redirect_to; + } + User.findOne(searchQuery, function (err, user) { if (err) { return done(err); @@ -166,11 +168,11 @@ exports.saveOAuthUserProfile = function (req, providerUserProfile, done) { // And save the user user.save(function (err) { - return done(err, user); + return done(err, user, info); }); }); } else { - return done(err, user); + return done(err, user, info); } } }); From b3409c3f7474b79f1960aa231f6d0ec030d49d5a Mon Sep 17 00:00:00 2001 From: walter Date: Wed, 7 Sep 2016 19:16:11 -0700 Subject: [PATCH 04/18] Added configuration for owasp. Synchronize client owap configs with the server configs. Also added a time indicator on failed login attempts to give the user feedback on subsequent failed login attempts. --- config/env/development.js | 7 +++++++ config/env/production.js | 7 +++++++ .../services/password-validator.client.service.js | 13 ++++++++++--- modules/users/server/config/strategies/local.js | 2 +- .../users/users.password.server.controller.js | 7 +++++++ modules/users/server/models/user.server.model.js | 6 ++++++ modules/users/server/routes/auth.server.routes.js | 4 ++++ 7 files changed, 42 insertions(+), 4 deletions(-) diff --git a/config/env/development.js b/config/env/development.js index 74526e5335..c60bc87c76 100644 --- a/config/env/development.js +++ b/config/env/development.js @@ -58,6 +58,13 @@ module.exports = { callbackURL: '/api/auth/paypal/callback', sandbox: true }, + owasp: { + allowPassphrases: true, + maxLength: 128, + minLength: 4, + minPhraseLength: 20, + minOptionalTestsToPass: 2 + }, mailer: { from: process.env.MAILER_FROM || 'MAILER_FROM', options: { diff --git a/config/env/production.js b/config/env/production.js index 3ad416ed2a..41ebd6ca11 100644 --- a/config/env/production.js +++ b/config/env/production.js @@ -78,6 +78,13 @@ module.exports = { callbackURL: '/api/auth/paypal/callback', sandbox: false }, + owasp: { + allowPassphrases : true, + maxLength : 128, + minLength : 10, + minPhraseLength : 20, + minOptionalTestsToPass : 4, + }, mailer: { from: process.env.MAILER_FROM || 'MAILER_FROM', options: { diff --git a/modules/users/client/services/password-validator.client.service.js b/modules/users/client/services/password-validator.client.service.js index d163558697..45697cd57c 100644 --- a/modules/users/client/services/password-validator.client.service.js +++ b/modules/users/client/services/password-validator.client.service.js @@ -6,11 +6,18 @@ .module('users.services') .factory('PasswordValidator', PasswordValidator); - PasswordValidator.$inject = ['$window']; + PasswordValidator.$inject = ['$window', '$http']; - function PasswordValidator($window) { + function PasswordValidator($window, $http) { var owaspPasswordStrengthTest = $window.owaspPasswordStrengthTest; + // get the owasp config from the server configuration + $http.get('/password/rules').success(function (response) { + owaspPasswordStrengthTest.configs = response; // same owasp config used on the server + }).error(function (response) { + // well, it should fall back on the default owasp config defined in that package + }); + var service = { getResult: getResult, getPopoverMsg: getPopoverMsg @@ -24,7 +31,7 @@ } function getPopoverMsg() { - var popoverMsg = 'Please enter a passphrase or password with 10 or more characters, numbers, lowercase, uppercase, and special characters.'; + var popoverMsg = 'Please enter a passphrase or password with ' + owaspPasswordStrengthTest.configs.minLength + ' or more characters, numbers, lowercase, uppercase, and special characters.'; return popoverMsg; } diff --git a/modules/users/server/config/strategies/local.js b/modules/users/server/config/strategies/local.js index 9caa9091ff..a458e8d780 100644 --- a/modules/users/server/config/strategies/local.js +++ b/modules/users/server/config/strategies/local.js @@ -22,7 +22,7 @@ module.exports = function () { } if (!user || !user.authenticate(password)) { return done(null, false, { - message: 'Invalid username or password' + message: 'Invalid username or password (' + (new Date()).toLocaleTimeString() + ')' }); } diff --git a/modules/users/server/controllers/users/users.password.server.controller.js b/modules/users/server/controllers/users/users.password.server.controller.js index 06197fba73..1c96d274ce 100644 --- a/modules/users/server/controllers/users/users.password.server.controller.js +++ b/modules/users/server/controllers/users/users.password.server.controller.js @@ -14,6 +14,13 @@ var path = require('path'), var smtpTransport = nodemailer.createTransport(config.mailer.options); +/** + * Get the server defined owasp config for the client + */ +exports.getowaspconfig = function (req, res) { + res.json(config.owasp); +}; + /** * Forgot for reset password (forgot POST) */ diff --git a/modules/users/server/models/user.server.model.js b/modules/users/server/models/user.server.model.js index 0797faa404..f734244c6a 100644 --- a/modules/users/server/models/user.server.model.js +++ b/modules/users/server/models/user.server.model.js @@ -4,12 +4,18 @@ * Module dependencies */ var mongoose = require('mongoose'), + path = require('path'), + config = require(path.resolve('./config/config')), Schema = mongoose.Schema, crypto = require('crypto'), validator = require('validator'), generatePassword = require('generate-password'), owasp = require('owasp-password-strength-test'); + +owasp.configs = config.owasp; + + /** * A Validation function for local strategy properties */ diff --git a/modules/users/server/routes/auth.server.routes.js b/modules/users/server/routes/auth.server.routes.js index eb73b5eab0..4795a080e1 100644 --- a/modules/users/server/routes/auth.server.routes.js +++ b/modules/users/server/routes/auth.server.routes.js @@ -54,4 +54,8 @@ module.exports = function (app) { // Setting the paypal oauth routes app.route('/api/auth/paypal').get(users.oauthCall('paypal')); app.route('/api/auth/paypal/callback').get(users.oauthCallback('paypal')); + + + // get the config settings for the client side owasp + app.route('/password/rules').get(users.getowaspconfig); }; From 970919c3fa124a53abf9861468c3dddd4025bb08 Mon Sep 17 00:00:00 2001 From: walter Date: Thu, 8 Sep 2016 11:17:41 -0700 Subject: [PATCH 05/18] switched to handlebar template for passing the server's owasp config down to the client. reverted some of the other changes (regarding the http request). --- config/env/production.js | 10 +++++----- config/env/test.js | 7 +++++++ .../core/server/controllers/core.server.controller.js | 8 +++++--- modules/core/server/views/layout.server.view.html | 5 +++++ .../services/password-validator.client.service.js | 10 ++-------- .../users/users.password.server.controller.js | 6 ------ modules/users/server/models/user.server.model.js | 2 +- modules/users/server/routes/auth.server.routes.js | 4 ---- 8 files changed, 25 insertions(+), 27 deletions(-) diff --git a/config/env/production.js b/config/env/production.js index 41ebd6ca11..b7fb331cb7 100644 --- a/config/env/production.js +++ b/config/env/production.js @@ -79,11 +79,11 @@ module.exports = { sandbox: false }, owasp: { - allowPassphrases : true, - maxLength : 128, - minLength : 10, - minPhraseLength : 20, - minOptionalTestsToPass : 4, + allowPassphrases: true, + maxLength: 128, + minLength: 10, + minPhraseLength: 20, + minOptionalTestsToPass: 4 }, mailer: { from: process.env.MAILER_FROM || 'MAILER_FROM', diff --git a/config/env/test.js b/config/env/test.js index f8fb5d7368..c3583ff6f9 100644 --- a/config/env/test.js +++ b/config/env/test.js @@ -59,6 +59,13 @@ module.exports = { callbackURL: '/api/auth/paypal/callback', sandbox: true }, + owasp: { + allowPassphrases: true, + maxLength: 128, + minLength: 10, + minPhraseLength: 20, + minOptionalTestsToPass: 4 + }, mailer: { from: process.env.MAILER_FROM || 'MAILER_FROM', options: { diff --git a/modules/core/server/controllers/core.server.controller.js b/modules/core/server/controllers/core.server.controller.js index ed9b044065..96b6152e7a 100644 --- a/modules/core/server/controllers/core.server.controller.js +++ b/modules/core/server/controllers/core.server.controller.js @@ -1,12 +1,13 @@ 'use strict'; -var validator = require('validator'); +var validator = require('validator'), + path = require('path'), + config = require(path.resolve('./config/config')); /** * Render the main application page */ exports.renderIndex = function (req, res) { - var safeUserObject = null; if (req.user) { safeUserObject = { @@ -24,7 +25,8 @@ exports.renderIndex = function (req, res) { } res.render('modules/core/server/views/index', { - user: JSON.stringify(safeUserObject) + user: JSON.stringify(safeUserObject), + owaspcfg: JSON.stringify(config.owasp) }); }; diff --git a/modules/core/server/views/layout.server.view.html b/modules/core/server/views/layout.server.view.html index d73272454a..74cec8f446 100644 --- a/modules/core/server/views/layout.server.view.html +++ b/modules/core/server/views/layout.server.view.html @@ -65,6 +65,11 @@ {{#each jsFiles}}{{/each}} + + + {{#if livereload}} diff --git a/modules/users/client/services/password-validator.client.service.js b/modules/users/client/services/password-validator.client.service.js index 45697cd57c..0128ed820f 100644 --- a/modules/users/client/services/password-validator.client.service.js +++ b/modules/users/client/services/password-validator.client.service.js @@ -6,17 +6,11 @@ .module('users.services') .factory('PasswordValidator', PasswordValidator); - PasswordValidator.$inject = ['$window', '$http']; + PasswordValidator.$inject = ['$window']; - function PasswordValidator($window, $http) { + function PasswordValidator($window) { var owaspPasswordStrengthTest = $window.owaspPasswordStrengthTest; - // get the owasp config from the server configuration - $http.get('/password/rules').success(function (response) { - owaspPasswordStrengthTest.configs = response; // same owasp config used on the server - }).error(function (response) { - // well, it should fall back on the default owasp config defined in that package - }); var service = { getResult: getResult, diff --git a/modules/users/server/controllers/users/users.password.server.controller.js b/modules/users/server/controllers/users/users.password.server.controller.js index 1c96d274ce..136c21d35b 100644 --- a/modules/users/server/controllers/users/users.password.server.controller.js +++ b/modules/users/server/controllers/users/users.password.server.controller.js @@ -14,12 +14,6 @@ var path = require('path'), var smtpTransport = nodemailer.createTransport(config.mailer.options); -/** - * Get the server defined owasp config for the client - */ -exports.getowaspconfig = function (req, res) { - res.json(config.owasp); -}; /** * Forgot for reset password (forgot POST) diff --git a/modules/users/server/models/user.server.model.js b/modules/users/server/models/user.server.model.js index f734244c6a..e4ed23c305 100644 --- a/modules/users/server/models/user.server.model.js +++ b/modules/users/server/models/user.server.model.js @@ -12,7 +12,7 @@ var mongoose = require('mongoose'), generatePassword = require('generate-password'), owasp = require('owasp-password-strength-test'); - +console.log(config.owasp, "========================================================", path.resolve('./config/config')); owasp.configs = config.owasp; diff --git a/modules/users/server/routes/auth.server.routes.js b/modules/users/server/routes/auth.server.routes.js index 4795a080e1..eb73b5eab0 100644 --- a/modules/users/server/routes/auth.server.routes.js +++ b/modules/users/server/routes/auth.server.routes.js @@ -54,8 +54,4 @@ module.exports = function (app) { // Setting the paypal oauth routes app.route('/api/auth/paypal').get(users.oauthCall('paypal')); app.route('/api/auth/paypal/callback').get(users.oauthCallback('paypal')); - - - // get the config settings for the client side owasp - app.route('/password/rules').get(users.getowaspconfig); }; From 048725de3de3dc6582e263f9f53592ea4a9cc84a Mon Sep 17 00:00:00 2001 From: walter Date: Thu, 8 Sep 2016 11:25:05 -0700 Subject: [PATCH 06/18] Removed debug code. --- modules/users/server/models/user.server.model.js | 1 - 1 file changed, 1 deletion(-) diff --git a/modules/users/server/models/user.server.model.js b/modules/users/server/models/user.server.model.js index e4ed23c305..a0248e3932 100644 --- a/modules/users/server/models/user.server.model.js +++ b/modules/users/server/models/user.server.model.js @@ -12,7 +12,6 @@ var mongoose = require('mongoose'), generatePassword = require('generate-password'), owasp = require('owasp-password-strength-test'); -console.log(config.owasp, "========================================================", path.resolve('./config/config')); owasp.configs = config.owasp; From ef78c95c24e269da8c173ecf5c5c81b8d5b4b935 Mon Sep 17 00:00:00 2001 From: walter Date: Thu, 8 Sep 2016 11:28:30 -0700 Subject: [PATCH 07/18] Changed variable name to owaspConfig --- modules/core/server/controllers/core.server.controller.js | 2 +- modules/core/server/views/layout.server.view.html | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/core/server/controllers/core.server.controller.js b/modules/core/server/controllers/core.server.controller.js index 96b6152e7a..d4ca4094b4 100644 --- a/modules/core/server/controllers/core.server.controller.js +++ b/modules/core/server/controllers/core.server.controller.js @@ -26,7 +26,7 @@ exports.renderIndex = function (req, res) { res.render('modules/core/server/views/index', { user: JSON.stringify(safeUserObject), - owaspcfg: JSON.stringify(config.owasp) + owaspConfig: JSON.stringify(config.owasp) }); }; diff --git a/modules/core/server/views/layout.server.view.html b/modules/core/server/views/layout.server.view.html index 74cec8f446..bbc94cc981 100644 --- a/modules/core/server/views/layout.server.view.html +++ b/modules/core/server/views/layout.server.view.html @@ -68,7 +68,7 @@ {{#if livereload}} From 7a1004f7f2e1205f7aeeba383b21a7c47a7af25e Mon Sep 17 00:00:00 2001 From: walter Date: Thu, 8 Sep 2016 12:08:37 -0700 Subject: [PATCH 08/18] Fixed minor type-o's and set owasp.config() rather than the underlying configs. --- modules/core/server/views/layout.server.view.html | 2 +- .../users/client/services/password-validator.client.service.js | 1 - .../controllers/users/users.password.server.controller.js | 1 - modules/users/server/models/user.server.model.js | 2 +- 4 files changed, 2 insertions(+), 4 deletions(-) diff --git a/modules/core/server/views/layout.server.view.html b/modules/core/server/views/layout.server.view.html index bbc94cc981..75c995602a 100644 --- a/modules/core/server/views/layout.server.view.html +++ b/modules/core/server/views/layout.server.view.html @@ -68,7 +68,7 @@ {{#if livereload}} diff --git a/modules/users/client/services/password-validator.client.service.js b/modules/users/client/services/password-validator.client.service.js index 0128ed820f..3c330bccca 100644 --- a/modules/users/client/services/password-validator.client.service.js +++ b/modules/users/client/services/password-validator.client.service.js @@ -11,7 +11,6 @@ function PasswordValidator($window) { var owaspPasswordStrengthTest = $window.owaspPasswordStrengthTest; - var service = { getResult: getResult, getPopoverMsg: getPopoverMsg diff --git a/modules/users/server/controllers/users/users.password.server.controller.js b/modules/users/server/controllers/users/users.password.server.controller.js index 136c21d35b..06197fba73 100644 --- a/modules/users/server/controllers/users/users.password.server.controller.js +++ b/modules/users/server/controllers/users/users.password.server.controller.js @@ -14,7 +14,6 @@ var path = require('path'), var smtpTransport = nodemailer.createTransport(config.mailer.options); - /** * Forgot for reset password (forgot POST) */ diff --git a/modules/users/server/models/user.server.model.js b/modules/users/server/models/user.server.model.js index a0248e3932..ec33999078 100644 --- a/modules/users/server/models/user.server.model.js +++ b/modules/users/server/models/user.server.model.js @@ -12,7 +12,7 @@ var mongoose = require('mongoose'), generatePassword = require('generate-password'), owasp = require('owasp-password-strength-test'); -owasp.configs = config.owasp; +owasp.config(config.owasp); /** From b5a2eac3a69350c291394339934b2eae45ffa23c Mon Sep 17 00:00:00 2001 From: walter Date: Mon, 12 Sep 2016 11:53:22 -0700 Subject: [PATCH 09/18] Moved owasp config into default and reverted other config files. Modified config to be "shared". This will allow future configurations to be easily passed to the client. --- config/env/default.js | 10 ++++++++++ config/env/development.js | 7 ------- config/env/production.js | 7 ------- config/env/test.js | 7 ------- .../core/server/controllers/core.server.controller.js | 2 +- modules/core/server/views/layout.server.view.html | 3 ++- modules/users/server/models/user.server.model.js | 2 +- 7 files changed, 14 insertions(+), 24 deletions(-) diff --git a/config/env/default.js b/config/env/default.js index a3e8c5e8cc..9aeb343e49 100644 --- a/config/env/default.js +++ b/config/env/default.js @@ -46,5 +46,15 @@ module.exports = { fileSize: 1 * 1024 * 1024 // Max file size in bytes (1 MB) } } + }, + shared: { + owasp: { + allowPassphrases: true, + maxLength: 128, + minLength: 10, + minPhraseLength: 20, + minOptionalTestsToPass: 4 + } } + }; diff --git a/config/env/development.js b/config/env/development.js index c60bc87c76..74526e5335 100644 --- a/config/env/development.js +++ b/config/env/development.js @@ -58,13 +58,6 @@ module.exports = { callbackURL: '/api/auth/paypal/callback', sandbox: true }, - owasp: { - allowPassphrases: true, - maxLength: 128, - minLength: 4, - minPhraseLength: 20, - minOptionalTestsToPass: 2 - }, mailer: { from: process.env.MAILER_FROM || 'MAILER_FROM', options: { diff --git a/config/env/production.js b/config/env/production.js index b7fb331cb7..3ad416ed2a 100644 --- a/config/env/production.js +++ b/config/env/production.js @@ -78,13 +78,6 @@ module.exports = { callbackURL: '/api/auth/paypal/callback', sandbox: false }, - owasp: { - allowPassphrases: true, - maxLength: 128, - minLength: 10, - minPhraseLength: 20, - minOptionalTestsToPass: 4 - }, mailer: { from: process.env.MAILER_FROM || 'MAILER_FROM', options: { diff --git a/config/env/test.js b/config/env/test.js index c3583ff6f9..f8fb5d7368 100644 --- a/config/env/test.js +++ b/config/env/test.js @@ -59,13 +59,6 @@ module.exports = { callbackURL: '/api/auth/paypal/callback', sandbox: true }, - owasp: { - allowPassphrases: true, - maxLength: 128, - minLength: 10, - minPhraseLength: 20, - minOptionalTestsToPass: 4 - }, mailer: { from: process.env.MAILER_FROM || 'MAILER_FROM', options: { diff --git a/modules/core/server/controllers/core.server.controller.js b/modules/core/server/controllers/core.server.controller.js index d4ca4094b4..c4a8973cac 100644 --- a/modules/core/server/controllers/core.server.controller.js +++ b/modules/core/server/controllers/core.server.controller.js @@ -26,7 +26,7 @@ exports.renderIndex = function (req, res) { res.render('modules/core/server/views/index', { user: JSON.stringify(safeUserObject), - owaspConfig: JSON.stringify(config.owasp) + sharedConfig: JSON.stringify(config.shared) }); }; diff --git a/modules/core/server/views/layout.server.view.html b/modules/core/server/views/layout.server.view.html index 75c995602a..13c822f465 100644 --- a/modules/core/server/views/layout.server.view.html +++ b/modules/core/server/views/layout.server.view.html @@ -68,7 +68,8 @@ {{#if livereload}} diff --git a/modules/users/server/models/user.server.model.js b/modules/users/server/models/user.server.model.js index ec33999078..16c3546e78 100644 --- a/modules/users/server/models/user.server.model.js +++ b/modules/users/server/models/user.server.model.js @@ -12,7 +12,7 @@ var mongoose = require('mongoose'), generatePassword = require('generate-password'), owasp = require('owasp-password-strength-test'); -owasp.config(config.owasp); +owasp.config(config.shared.owasp); /** From 66ea2f59a46f2021b09c7b770ec023493502f967 Mon Sep 17 00:00:00 2001 From: hyperreality Date: Tue, 13 Sep 2016 15:39:50 -0400 Subject: [PATCH 10/18] fixed 403 redirect if not signed in (#1496) --- modules/core/client/config/core.client.route-filter.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/core/client/config/core.client.route-filter.js b/modules/core/client/config/core.client.route-filter.js index a68b70231f..4d7c605492 100644 --- a/modules/core/client/config/core.client.route-filter.js +++ b/modules/core/client/config/core.client.route-filter.js @@ -25,7 +25,7 @@ if (!allowed) { event.preventDefault(); - if (Authentication.user !== undefined && typeof Authentication.user === 'object') { + if (Authentication.user !== null && typeof Authentication.user === 'object') { $state.transitionTo('forbidden'); } else { $state.go('authentication.signin').then(function () { From b8f403dc9aeaa5929a8eb339dceeeb3ab262595c Mon Sep 17 00:00:00 2001 From: KULDIP PIPALIYA Date: Fri, 16 Sep 2016 12:39:12 +0530 Subject: [PATCH 11/18] Update form-article.client.view.html For New Article, delete function no required --- .../articles/client/views/admin/form-article.client.view.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/articles/client/views/admin/form-article.client.view.html b/modules/articles/client/views/admin/form-article.client.view.html index cc118cc0ff..f7d20e8fa6 100644 --- a/modules/articles/client/views/admin/form-article.client.view.html +++ b/modules/articles/client/views/admin/form-article.client.view.html @@ -3,7 +3,7 @@

{{vm.article._id ? 'Edit Article' : 'New Article'}}

From c5fdebf089b40c77389ecc0cdb854ba6b50091d9 Mon Sep 17 00:00:00 2001 From: "Cody B. Daig" Date: Thu, 15 Sep 2016 13:34:57 -0700 Subject: [PATCH 12/18] feat(core): Move template to .github folder --- PULL_REQUEST_TEMPLATE.md => .github/PULL_REQUEST_TEMPLATE.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename PULL_REQUEST_TEMPLATE.md => .github/PULL_REQUEST_TEMPLATE.md (100%) diff --git a/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md similarity index 100% rename from PULL_REQUEST_TEMPLATE.md rename to .github/PULL_REQUEST_TEMPLATE.md From 5b994555440c8130f36ac5936882d7ae9adff635 Mon Sep 17 00:00:00 2001 From: Michael Leanos Date: Sat, 17 Sep 2016 12:05:21 -0700 Subject: [PATCH 13/18] Deprecated $http success/error promise methods (#1508) Replaces the $http service calls with promise based methods of the client-side UsersService for the following: Users Change Password Users Manage Social Accounts Users Password Forgot Users Password Reset Users Signup Users Signin Modifies tests to reflect changes. Closes #1479 --- .../authentication.client.controller.js | 54 +++++++++++------- .../controllers/password.client.controller.js | 56 +++++++++++-------- .../change-password.client.controller.js | 26 +++++---- ...anage-social-accounts.client.controller.js | 28 +++++----- .../client/services/users.client.service.js | 56 ++++++++++++++++++- .../authentication.client.controller.tests.js | 18 +++--- .../password.client.controller.tests.js | 12 ++-- 7 files changed, 169 insertions(+), 81 deletions(-) diff --git a/modules/users/client/controllers/authentication.client.controller.js b/modules/users/client/controllers/authentication.client.controller.js index e2f820cf82..96cca04f46 100644 --- a/modules/users/client/controllers/authentication.client.controller.js +++ b/modules/users/client/controllers/authentication.client.controller.js @@ -5,9 +5,9 @@ .module('users') .controller('AuthenticationController', AuthenticationController); - AuthenticationController.$inject = ['$scope', '$state', '$http', '$location', '$window', 'Authentication', 'PasswordValidator']; + AuthenticationController.$inject = ['$scope', '$state', 'UsersService', '$location', '$window', 'Authentication', 'PasswordValidator']; - function AuthenticationController($scope, $state, $http, $location, $window, Authentication, PasswordValidator) { + function AuthenticationController($scope, $state, UsersService, $location, $window, Authentication, PasswordValidator) { var vm = this; vm.authentication = Authentication; @@ -33,15 +33,9 @@ return false; } - $http.post('/api/auth/signup', vm.credentials).success(function (response) { - // If successful we assign the response to the global user model - vm.authentication.user = response; - - // And redirect to the previous or home page - $state.go($state.previous.state.name || 'home', $state.previous.params); - }).error(function (response) { - vm.error = response.message; - }); + UsersService.userSignup(vm.credentials) + .then(onUserSignupSuccess) + .catch(onUserSignupError); } function signin(isValid) { @@ -53,15 +47,9 @@ return false; } - $http.post('/api/auth/signin', vm.credentials).success(function (response) { - // If successful we assign the response to the global user model - vm.authentication.user = response; - - // And redirect to the previous or home page - $state.go($state.previous.state.name || 'home', $state.previous.params); - }).error(function (response) { - vm.error = response.message; - }); + UsersService.userSignin(vm.credentials) + .then(onUserSigninSuccess) + .catch(onUserSigninError); } // OAuth provider request @@ -73,5 +61,31 @@ // Effectively call OAuth authentication route: $window.location.href = url; } + + // Authentication Callbacks + + function onUserSignupSuccess(response) { + // If successful we assign the response to the global user model + vm.authentication.user = response; + + // And redirect to the previous or home page + $state.go($state.previous.state.name || 'home', $state.previous.params); + } + + function onUserSignupError(response) { + vm.error = response.data.message; + } + + function onUserSigninSuccess(response) { + // If successful we assign the response to the global user model + vm.authentication.user = response; + + // And redirect to the previous or home page + $state.go($state.previous.state.name || 'home', $state.previous.params); + } + + function onUserSigninError(response) { + vm.error = response.data.message; + } } }()); diff --git a/modules/users/client/controllers/password.client.controller.js b/modules/users/client/controllers/password.client.controller.js index 4162d903fb..fe015c7844 100644 --- a/modules/users/client/controllers/password.client.controller.js +++ b/modules/users/client/controllers/password.client.controller.js @@ -5,9 +5,9 @@ .module('users') .controller('PasswordController', PasswordController); - PasswordController.$inject = ['$scope', '$stateParams', '$http', '$location', 'Authentication', 'PasswordValidator']; + PasswordController.$inject = ['$scope', '$stateParams', 'UsersService', '$location', 'Authentication', 'PasswordValidator']; - function PasswordController($scope, $stateParams, $http, $location, Authentication, PasswordValidator) { + function PasswordController($scope, $stateParams, UsersService, $location, Authentication, PasswordValidator) { var vm = this; vm.resetUserPassword = resetUserPassword; @@ -30,16 +30,9 @@ return false; } - $http.post('/api/auth/forgot', vm.credentials).success(function (response) { - // Show user success message and clear form - vm.credentials = null; - vm.success = response.message; - - }).error(function (response) { - // Show user error message and clear form - vm.credentials = null; - vm.error = response.message; - }); + UsersService.requestPasswordReset(vm.credentials) + .then(onRequestPasswordResetSuccess) + .catch(onRequestPasswordResetError); } // Change user password @@ -52,18 +45,37 @@ return false; } - $http.post('/api/auth/reset/' + $stateParams.token, vm.passwordDetails).success(function (response) { - // If successful show success message and clear form - vm.passwordDetails = null; + UsersService.resetPassword($stateParams.token, vm.passwordDetails) + .then(onResetPasswordSuccess) + .catch(onResetPasswordError); + } + + // Password Reset Callbacks + + function onRequestPasswordResetSuccess(response) { + // Show user success message and clear form + vm.credentials = null; + vm.success = response.message; + } - // Attach user profile - Authentication.user = response; + function onRequestPasswordResetError(response) { + // Show user error message and clear form + vm.credentials = null; + vm.error = response.data.message; + } + + function onResetPasswordSuccess(response) { + // If successful show success message and clear form + vm.passwordDetails = null; + + // Attach user profile + Authentication.user = response; + // And redirect to the index page + $location.path('/password/reset/success'); + } - // And redirect to the index page - $location.path('/password/reset/success'); - }).error(function (response) { - vm.error = response.message; - }); + function onResetPasswordError(response) { + vm.error = response.data.message; } } }()); diff --git a/modules/users/client/controllers/settings/change-password.client.controller.js b/modules/users/client/controllers/settings/change-password.client.controller.js index 94ef2dda6e..a95b032b60 100644 --- a/modules/users/client/controllers/settings/change-password.client.controller.js +++ b/modules/users/client/controllers/settings/change-password.client.controller.js @@ -5,9 +5,9 @@ .module('users') .controller('ChangePasswordController', ChangePasswordController); - ChangePasswordController.$inject = ['$scope', '$http', 'Authentication', 'PasswordValidator']; + ChangePasswordController.$inject = ['$scope', '$http', 'Authentication', 'UsersService', 'PasswordValidator']; - function ChangePasswordController($scope, $http, Authentication, PasswordValidator) { + function ChangePasswordController($scope, $http, Authentication, UsersService, PasswordValidator) { var vm = this; vm.user = Authentication.user; @@ -24,14 +24,20 @@ return false; } - $http.post('/api/users/password', vm.passwordDetails).success(function (response) { - // If successful show success message and clear form - $scope.$broadcast('show-errors-reset', 'vm.passwordForm'); - vm.success = true; - vm.passwordDetails = null; - }).error(function (response) { - vm.error = response.message; - }); + UsersService.changePassword(vm.passwordDetails) + .then(onChangePasswordSuccess) + .catch(onChangePasswordError); + } + + function onChangePasswordSuccess(response) { + // If successful show success message and clear form + $scope.$broadcast('show-errors-reset', 'vm.passwordForm'); + vm.success = true; + vm.passwordDetails = null; + } + + function onChangePasswordError(response) { + vm.error = response.data.message; } } }()); diff --git a/modules/users/client/controllers/settings/manage-social-accounts.client.controller.js b/modules/users/client/controllers/settings/manage-social-accounts.client.controller.js index 03f6548e96..6ba564f97e 100644 --- a/modules/users/client/controllers/settings/manage-social-accounts.client.controller.js +++ b/modules/users/client/controllers/settings/manage-social-accounts.client.controller.js @@ -5,9 +5,9 @@ .module('users') .controller('SocialAccountsController', SocialAccountsController); - SocialAccountsController.$inject = ['$scope', '$http', 'Authentication']; + SocialAccountsController.$inject = ['$scope', 'UsersService', 'Authentication']; - function SocialAccountsController($scope, $http, Authentication) { + function SocialAccountsController($scope, UsersService, Authentication) { var vm = this; vm.user = Authentication.user; @@ -29,17 +29,19 @@ function removeUserSocialAccount(provider) { vm.success = vm.error = null; - $http.delete('/api/users/accounts', { - params: { - provider: provider - } - }).success(function (response) { - // If successful show success message and clear form - vm.success = true; - vm.user = Authentication.user = response; - }).error(function (response) { - vm.error = response.message; - }); + UsersService.removeSocialAccount(provider) + .then(onRemoveSocialAccountSuccess) + .catch(onRemoveSocialAccountError); + } + + function onRemoveSocialAccountSuccess(response) { + // If successful show success message and clear form + vm.success = true; + vm.user = Authentication.user = response; + } + + function onRemoveSocialAccountError(response) { + vm.error = response.message; } } }()); diff --git a/modules/users/client/services/users.client.service.js b/modules/users/client/services/users.client.service.js index 8037afbf3f..227606f182 100644 --- a/modules/users/client/services/users.client.service.js +++ b/modules/users/client/services/users.client.service.js @@ -9,11 +9,65 @@ UsersService.$inject = ['$resource']; function UsersService($resource) { - return $resource('api/users', {}, { + var Users = $resource('api/users', {}, { update: { method: 'PUT' + }, + updatePassword: { + method: 'POST', + url: 'api/users/password' + }, + deleteProvider: { + method: 'DELETE', + url: 'api/users/accounts', + params: { + provider: '@provider' + } + }, + sendPasswordResetToken: { + method: 'POST', + url: 'api/auth/forgot' + }, + resetPasswordWithToken: { + method: 'POST', + url: 'api/auth/reset/:token' + }, + signup: { + method: 'POST', + url: 'api/auth/signup' + }, + signin: { + method: 'POST', + url: 'api/auth/signin' } }); + + angular.extend(Users, { + changePassword: function (passwordDetails) { + return this.updatePassword(passwordDetails).$promise; + }, + removeSocialAccount: function (provider) { + return this.deleteProvider({ + provider: provider // api expects provider as a querystring parameter + }).$promise; + }, + requestPasswordReset: function (credentials) { + return this.sendPasswordResetToken(credentials).$promise; + }, + resetPassword: function (token, passwordDetails) { + return this.resetPasswordWithToken({ + token: token // api expects token as a parameter (i.e. /:token) + }, passwordDetails).$promise; + }, + userSignup: function (credentials) { + return this.signup(credentials).$promise; + }, + userSignin: function (credentials) { + return this.signin(credentials).$promise; + } + }); + + return Users; } // TODO this should be Users service diff --git a/modules/users/tests/client/authentication.client.controller.tests.js b/modules/users/tests/client/authentication.client.controller.tests.js index 0d6b6e85c3..d675dbcf9e 100644 --- a/modules/users/tests/client/authentication.client.controller.tests.js +++ b/modules/users/tests/client/authentication.client.controller.tests.js @@ -50,13 +50,13 @@ describe('$scope.signin()', function () { it('should login with a correct user and password', function () { // Test expected GET request - $httpBackend.when('POST', '/api/auth/signin').respond(200, 'Fred'); + $httpBackend.when('POST', 'api/auth/signin').respond(200, { username: 'Fred' }); scope.vm.signin(true); $httpBackend.flush(); // Test scope value - expect(scope.vm.authentication.user).toEqual('Fred'); + expect(scope.vm.authentication.user.username).toEqual('Fred'); expect($location.url()).toEqual('/'); }); @@ -75,7 +75,7 @@ spyOn($state, 'go'); // Test expected GET request - $httpBackend.when('POST', '/api/auth/signin').respond(200, 'Fred'); + $httpBackend.when('POST', 'api/auth/signin').respond(200, 'Fred'); scope.vm.signin(true); $httpBackend.flush(); @@ -88,7 +88,7 @@ it('should fail to log in with nothing', function () { // Test expected POST request - $httpBackend.expectPOST('/api/auth/signin').respond(400, { + $httpBackend.expectPOST('api/auth/signin').respond(400, { 'message': 'Missing credentials' }); @@ -101,11 +101,11 @@ it('should fail to log in with wrong credentials', function () { // Foo/Bar combo assumed to not exist - scope.vm.authentication.user = 'Foo'; + scope.vm.authentication.user = { usersname: 'Foo' }; scope.vm.credentials = 'Bar'; // Test expected POST request - $httpBackend.expectPOST('/api/auth/signin').respond(400, { + $httpBackend.expectPOST('api/auth/signin').respond(400, { 'message': 'Unknown user' }); @@ -121,20 +121,20 @@ it('should register with correct data', function () { // Test expected GET request scope.vm.authentication.user = 'Fred'; - $httpBackend.when('POST', '/api/auth/signup').respond(200, 'Fred'); + $httpBackend.when('POST', 'api/auth/signup').respond(200, { username: 'Fred' }); scope.vm.signup(true); $httpBackend.flush(); // test scope value - expect(scope.vm.authentication.user).toBe('Fred'); + expect(scope.vm.authentication.user.username).toBe('Fred'); expect(scope.vm.error).toEqual(null); expect($location.url()).toBe('/'); }); it('should fail to register with duplicate Username', function () { // Test expected POST request - $httpBackend.when('POST', '/api/auth/signup').respond(400, { + $httpBackend.when('POST', 'api/auth/signup').respond(400, { 'message': 'Username already exists' }); diff --git a/modules/users/tests/client/password.client.controller.tests.js b/modules/users/tests/client/password.client.controller.tests.js index 857183d5b9..cb486bc167 100644 --- a/modules/users/tests/client/password.client.controller.tests.js +++ b/modules/users/tests/client/password.client.controller.tests.js @@ -29,7 +29,7 @@ beforeEach(module(ApplicationConfiguration.applicationModuleName)); describe('Logged in user', function() { - beforeEach(inject(function($controller, $rootScope, _Authentication_, _$stateParams_, _$httpBackend_, _$location_) { + beforeEach(inject(function($controller, $rootScope, _UsersService_, _Authentication_, _$stateParams_, _$httpBackend_, _$location_) { // Set a new global scope scope = $rootScope.$new(); @@ -100,7 +100,7 @@ describe('POST error', function() { var errorMessage = 'No account with that username has been found'; beforeEach(function() { - $httpBackend.when('POST', '/api/auth/forgot', credentials).respond(400, { + $httpBackend.when('POST', 'api/auth/forgot', credentials).respond(400, { 'message': errorMessage }); @@ -120,7 +120,7 @@ describe('POST success', function() { var successMessage = 'An email has been sent to the provided email with further instructions.'; beforeEach(function() { - $httpBackend.when('POST', '/api/auth/forgot', credentials).respond({ + $httpBackend.when('POST', 'api/auth/forgot', credentials).respond({ 'message': successMessage }); @@ -159,7 +159,7 @@ it('POST error should set scope.error to response message', function() { var errorMessage = 'Passwords do not match'; - $httpBackend.when('POST', '/api/auth/reset/' + token, passwordDetails).respond(400, { + $httpBackend.when('POST', 'api/auth/reset/' + token, passwordDetails).respond(400, { 'message': errorMessage }); @@ -174,7 +174,7 @@ username: 'test' }; beforeEach(function() { - $httpBackend.when('POST', '/api/auth/reset/' + token, passwordDetails).respond(user); + $httpBackend.when('POST', 'api/auth/reset/' + token, passwordDetails).respond(user); scope.vm.resetUserPassword(true); $httpBackend.flush(); @@ -185,7 +185,7 @@ }); it('should attach user profile', function() { - expect(scope.vm.authentication.user).toEqual(user); + expect(scope.vm.authentication.user.username).toEqual(user.username); }); it('should redirect to password reset success view', function() { From 9885975593fa0149642a5151536f1166b20c1540 Mon Sep 17 00:00:00 2001 From: hyperreality Date: Fri, 9 Sep 2016 23:38:30 -0400 Subject: [PATCH 14/18] UI changes for mobile; autofocus --- .../chat/client/views/chat.client.view.html | 2 +- .../directives/autofocus.client.directives.js | 28 ++++++++++++++++++ modules/users/client/img/buttons/facebook.png | Bin 1024 -> 1383 bytes modules/users/client/img/buttons/github.png | Bin 2618 -> 1887 bytes modules/users/client/img/buttons/google.png | Bin 3713 -> 4574 bytes modules/users/client/img/buttons/linkedin.png | Bin 1506 -> 1880 bytes modules/users/client/img/buttons/paypal.png | Bin 5229 -> 6131 bytes modules/users/client/img/buttons/twitter.png | Bin 2181 -> 2383 bytes .../authentication/signin.client.view.html | 12 ++++---- .../authentication/signup.client.view.html | 2 +- .../settings/edit-profile.client.view.html | 2 +- 11 files changed, 36 insertions(+), 10 deletions(-) create mode 100644 modules/core/client/directives/autofocus.client.directives.js diff --git a/modules/chat/client/views/chat.client.view.html b/modules/chat/client/views/chat.client.view.html index b1ffe84171..3b9174c6ed 100644 --- a/modules/chat/client/views/chat.client.view.html +++ b/modules/chat/client/views/chat.client.view.html @@ -7,7 +7,7 @@

Chat Example

- + diff --git a/modules/core/client/directives/autofocus.client.directives.js b/modules/core/client/directives/autofocus.client.directives.js new file mode 100644 index 0000000000..6b0ca1002a --- /dev/null +++ b/modules/core/client/directives/autofocus.client.directives.js @@ -0,0 +1,28 @@ +(function () { + 'use strict'; + + // Focus the element on page load + // Unless the user is on a small device, because this could obscure the page with a keyboard + + angular.module('core') + .directive('autofocus', autofocus); + + autofocus.$inject = ['$timeout', '$window']; + + function autofocus($timeout, $window) { + var directive = { + restrict: 'A', + link: link + }; + + return directive; + + function link(scope, element, attrs) { + if ($window.innerWidth >= 800) { + $timeout(function() { + element[0].focus(); + }, 250); + } + } + } +}()); diff --git a/modules/users/client/img/buttons/facebook.png b/modules/users/client/img/buttons/facebook.png index 8ebea4f71f2dedfa7dc968764c381ed7ff46cc42..b9d39bde00720a4409dafbe1732439cc4ee78877 100644 GIT binary patch literal 1383 zcmeAS@N?(olHy`uVBq!ia0vp^X&}tO1|%)-KS=^oEa{HEjtmSN`?>!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBD8ZKG?e4&pIslT*}yCBu(@1{Qhx+r^ltg9GIE1I3wQuF*67i1bKEPw3duXcL=T$}41^b_VHMict+jYSHK;#3H z6D=7w>lM!|o~7>_U;olfYmdeU!42!*h-RogHRwLz>1sb!XWpbeM*dsFQjF_A|25Ay zk9~3Ag2n;WR~OHCnVw<#;5y;Q!Pe8?{pS6C*ShKW=BGimpZ|x2_8(njWO<=}-MTsd?`V@~#VUw65mGxRrahz^kt zukcBb&k%LEsPTc}Lio2+TP8)#U|pMbSt{yHi1=trbdgzF@2k6`(XCes2N8mbpNv|TJn--;f+?O`9jsF<=&(% z5nJ}w-6e^SBh;zLeNHxzt1HUt`Cr-2THhy(p(EpxzQpB3vBt_*yY&~=8P%-4>$Hk- zrM~fQllqNy)0Tc+m-yqvnW7n!m1>-7nYk5K6-BPUe<3?Wo3XV!>PX_N_EXp6`vYw` zibP)MSF6t6DDC#cJ5gqbQQf0nUj4FPs}Be4*D<)5@$10_4F&$BA6J=P{#}=|`pxov z+QzGAAO14Mwj*qp)|rLZ`#$H-W9FG+JFN`JHPyXwKlm+ko^G|y+Z(l?-#0{XIM^SW zx9Rw$zNZG!^}qB46ZAXUcV?clU2vXhbF=e&?uHH@<)UxLH(sCZR{iVh>Y9FD2~KjUY%VS=^K zV%`d6>5|HOD*OeLWJ=6G5J;pr(yrXG6?3JQDSWJdnfmkFQnz<(_atSca=&grCbC8T z$RFR@wZJrE_u%li%`^AUU%z(lE^Y65#AXYajjOIMeYzw+&7 zg&&+U(wqk@iBwBmBT7;dOH!?pi&B9UgOP!unXZAEu910&fq|8YnU#^Du7Qb_fx#Yo iSztMZq#-vyB{QuOw}!JxOGSVh7(8A5T-G@yGywpiyJ-9X literal 1024 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H1|$#LC7uRSY)RhkE)4%caKYZ?lNlJ8w|crb zhE&XXd-uGzNTI~>kI!e${mLE~)FM)~a)I-6Juh}^m-chqQX-yHST7!|R`|+a5tQTD z;&AX?73U;@t<4t|e>t}E$xhj@DSpGtbKhSEH0G=}GumzZ`)^I$@xpztnSWnfZ*8@j zLl6uYFJ`gt=2|Q}i(CInwS-rkh)e%`zk3zC?;by##olaSld6`yRl56?YWhxZrA@gE zjnfZ}L@WS?w~SL}zGvJMHDlMV8Q%mVpOrJH8E5uSD2-!JXw+G5>wK;9uhxM%Huq2O znzwJ`;n{xYXL~L0+_I8IG+yJ{+#@xS4@w!F&uN%z}M?pU#<<4>)$sdvSu zHy^6FJEFYelXWGexUQr`Jo!Gk|G;wwuhZYz%^vH#s4V_6p<~PSjCnqvEE|g6u+Fj% z=yu$6<~c*sX5Z65i}xBb6!0W)i%(mZnyT%emD0mQzJ%R5etyw0euvW3x=&F`*Z(|M`{k{)`~SZMySG`(r*+ z%#!1)|L;C~?8*kf8?i`j74H`T6nX`5%M#s80L*?%(^^A2JPHC+zcOHvSgUxx+-MUEyDk34~uu t4K81I?{L5;rPKR8s@ar);M9!xZ5K9d`+fgN7%)pSc)I$ztaD0e0swd#v*rK* diff --git a/modules/users/client/img/buttons/github.png b/modules/users/client/img/buttons/github.png index 6ff6672fc360bd6c5d80f3ee36159dddae303717..dc6b95e79148ab575e60ccbe2e8460bc10950061 100644 GIT binary patch literal 1887 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�vujFge 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 literal 1506 zcmb_c`#aMM82`@KrERe#)J(z|$tAL+#h7xLu!N4%Tyu*WW---a&QT~w?h~WM&d|lZ zj#{+n;2`61D=jL|w}~D6 z9F@cZ4K4jP>sC}N+ZJ~RV za4Lg#X2L0^tGB7#eJpy6b-hbCx^D4GBwR0A{%2Kyn`>AmOMhiWb>Sp*tF6vzW zL@??yU9tW zvL%-xZ<3=Ach7&`vJB&dDbfpvd+wh>Js4t=y^3pQAj3{#kq?DE`dhb`OvM4Z2&R$t z_h0HIsFwQp99;n4@@;azD*`=f0TXAhQ&V+M1A0~i#%lqTDPyh$gy_s$t+^6Zi4sA9 zTn2aK?edcC%5|xGIR_aZ#y6)o`$}|XukWbW-V(iY;R3)~>1J^-caHE&8zEr|>it{_ z>D9GTGlPAh^!Q^h|IHf(-}CcuxW{uT0C}{B7j9HwzsKV@lHi@I%1Hfwdgy;DDqQMp zQ4UG#Qc3W%WBN(m;N&_;{{`z@5TW7ONUyXO?fjIf!s>TmmCK1emdvR%vO*9Sui22Qwe zuWWrFQ2*pib9oExZo}=W^7axQ>hehX0v)|8+PhkhjwrklJDJrw!2(G@QbLUN&Dmvk8RBOa9HP1Uyu>WMLnh(;UGMe?5No^42F;$f!1=T z;jB$&e9r5%(}X#@m1o>hCCoHnav!p2&;;|I==^Gz^*YTbPy9%kGo;O-G%0A@Au9iQ z)VMoNZ*Ww>>PFhJIO!Gq;OKzvG;pN(LekI*;G&g6i*;kP+qM_Aoy=Hfq*bZ-_XEX+tl0w^%hPupj3aL}zWvSDr}Ruq5Q-`Tc8_ zMIAQ17d7-Czt6jt);Lhh+2WYQ zNLGQnSHz7sb@v^#e?r0ww1Z93I-Dh9IPl1L14_rUv-aX(sXAAj5m#~J=01YXHMd*V zy9|4Z`$`hwsIm65pCAFT${L36x%n)npF8VPg_?{y|MIYX(P7r{??5UX4>0+l@u5Ya zZWyl1>jopBClGuA0F^=zEEv*~KTbk0JIsN3M?z*5_zg=at^$!GAO>mH6kM*Crm+6!j#2lOatv~b(I0S8->O~nb{-~R`V0Is+I diff --git a/modules/users/client/img/buttons/paypal.png b/modules/users/client/img/buttons/paypal.png index 54689395635bf9e1e59e912524fe2c42985ae044..b9ed091e748f6ecb6d51cd7c908d1ef92b24d911 100644 GIT binary patch literal 6131 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 literal 5229 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 literal 2181 zcmb_ddpHyN8~=`BbTE{AHyxKQ$0?=48Pb@`(j@oWG^yMVa@)*u&8^i@n9?{d-Q03n z!fd52wM3SpFbWB?FoucaJiotx|DET3-p}Wc_j%sud7tO=eme ziuglnmayHaaH~zQzSy!Q_;39J)v4!Z3y7Q_q!>Sbh<9R4Ww;s|UuxJ!$yAIxcB@kh z6)JTQ2lkQ6V3KwqKMx$xhqyaR)ZKw%O=Ovo%B1mM0p~v)oWiHWA@J*1%stoWWSc%x zZ-+pVH2r2J^=q?VK#w#q23bFgkC-Vl&mzOGPi!wX+wb@$B9{Z+N={Y>PlreQ3_+hG z3fBn^noI}upcPsSAqpkJu)Dl92 z7ruL)iPoLjdjF$>1%?>-1wWdIDzaXo$QY7tvfKi;8Mj`0?$F zC_Q#8p%wgCYI~tbaYC$*TQHaDYSRH7{a`ECz6hz6gqX4Akg0C;WeJpX|YjsM_NuItfy$hWU+p@>$VS2Of7rtj7?Csw9DuG zQl9S|i=^sccoyGPR%jZln)5o^Oy&p=yy| zJC9y$%e3SzCKRL9wMc=4DNmk7FD5==*xN-GdyILKQdLSq+H_Qu(u`FhxPp(<0k8Xk zW#jyY&-lnveSq6ZYvgfm7U97p|X zH@C83x&tu zvU+<>4CZDoo2b-C;+qx+4CHeDRb%kHNZ@PE z=+waNl(?DaDL*nf$3MRT`H{t2C{OWTOrwx-MXY`V;L0$px9sv97eO1&hX649Ftg2L zOa#~1UA2f$9WXK>vEHtghOZ)!EwrQ5bpukP0(Rxq7_iJiy-X^(awF0vOcGv*D0l|} zjel705wrbVr6d>h7%1C}Q3%*Is1}whkhOw-RuHNs@5Ly3O~?R%R7@+IyRd03-b`(YbM!LYaek&q&2l96Vj!Tf z%-CXQ*!N>!WOjsQ54}cT!B1Ft^hf{_Yggh!n(jKnLQ$a)dD<|oQVmWzM)Y-nO9GOz zUSr1JnQA}dZ2MzM7=a&;f|4{xT_~Z z4RvoPF#HzV)%GKGs@@`1WB`Ga%@^xVLe{dG;=Hk0esyijSf5TGzFU=Qr)LV@$2X<> zC95-ekhLP?*eMRH4vgLs8|c#IBL;(!Me{I5GvAXqRHB zZ4q}9S%AJ-&rbj+tfbl#LM=|#+L5B1eGiG2mz)}c8+C`dw#^Be0`OOyscGix_8Y^t_KPoQ;VE_OC diff --git a/modules/users/client/views/authentication/signin.client.view.html b/modules/users/client/views/authentication/signin.client.view.html index 061677fc13..d70ab8850b 100644 --- a/modules/users/client/views/authentication/signin.client.view.html +++ b/modules/users/client/views/authentication/signin.client.view.html @@ -4,8 +4,11 @@

Or with your account

+ + + - +

Username is required.

@@ -25,12 +28,7 @@

Or with your account

-

-   -

- - - +
diff --git a/modules/users/client/views/authentication/signup.client.view.html b/modules/users/client/views/authentication/signup.client.view.html index 927f59bf0b..ed4b98d1b1 100644 --- a/modules/users/client/views/authentication/signup.client.view.html +++ b/modules/users/client/views/authentication/signup.client.view.html @@ -5,7 +5,7 @@

Or sign up using your email

- +

First name is required.

diff --git a/modules/users/client/views/settings/edit-profile.client.view.html b/modules/users/client/views/settings/edit-profile.client.view.html index 6482155456..62ab91984c 100644 --- a/modules/users/client/views/settings/edit-profile.client.view.html +++ b/modules/users/client/views/settings/edit-profile.client.view.html @@ -4,7 +4,7 @@
- +

First name is required.

From efa3cf5fd0e54fb48844a41e07d8f9bc24ddf173 Mon Sep 17 00:00:00 2001 From: hyperreality Date: Sat, 10 Sep 2016 00:51:11 -0400 Subject: [PATCH 15/18] fixed broken password popover balloon --- .../directives/autofocus.client.directives.js | 2 +- modules/users/client/img/buttons/facebook.png | Bin 1383 -> 1575 bytes modules/users/client/img/buttons/github.png | Bin 1887 -> 1952 bytes modules/users/client/img/buttons/google.png | Bin 4574 -> 4867 bytes modules/users/client/img/buttons/linkedin.png | Bin 1880 -> 2072 bytes modules/users/client/img/buttons/paypal.png | Bin 6131 -> 6499 bytes modules/users/client/img/buttons/twitter.png | Bin 2383 -> 2550 bytes .../authentication/signup.client.view.html | 2 +- 8 files changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/core/client/directives/autofocus.client.directives.js b/modules/core/client/directives/autofocus.client.directives.js index 6b0ca1002a..0cebc7ddba 100644 --- a/modules/core/client/directives/autofocus.client.directives.js +++ b/modules/core/client/directives/autofocus.client.directives.js @@ -21,7 +21,7 @@ if ($window.innerWidth >= 800) { $timeout(function() { element[0].focus(); - }, 250); + }, 100); } } } diff --git a/modules/users/client/img/buttons/facebook.png b/modules/users/client/img/buttons/facebook.png index b9d39bde00720a4409dafbe1732439cc4ee78877..926a161d32df190cd5ab146896255736bcb43b26 100644 GIT binary patch literal 1575 zcmbVMc`zGz6#j{jgCd9{ZsSN*+Bg!G)s{3OVOVjktB6o+9qCqSsR~kBb;QwB*Rf&k zGK$jHvZ`3MWvP~Em7)Y&S4~URQAamB``7-lGo79Hz4y&KzW?5P*IZp34j?f|0Kfq{ zjp8QekiQ)+EspG&8y;eUhS@pW0nnH$v&)nc=ejJKn==3jMgVZQ0DKacI12!r#{;kw z1OTZB09AHLE5kPtzb9T<%WpY+(L~I5au3L@jXi z#wh8xqSA_VG1nRtp{OiJ*(SGFi*1Si6Y8Ycj&96At5az_1#*W5u@_sz2+qL;X9rmEqPX|d|&`Q{;)-r zD;tVyXkxsXP*LG9?R=@_>$R?f*0y)zb#&^ZPxR%BkQlP2MT-LK%OM-=#nvv8tkLSr z;4rg{M45*xk^a!9U_PaTlbqs%s+lOta~D+f6?C4n{b?#Y#({AK%U0QfY$3PQ=kmi# zMoe#`SP#~#si6c{l?xbEp@lvhQsl9YXG>h|k$b!78!^6RU|Y8z%CA5$rj_5<({^h$ z*VH{lz0a3F&&L;CinGLi&x@EA)Lbr`Clxq7ZiWS}#1|(x4slDQ<@A`OkQ5dyU@<;1 z!6k2oXTpZeX>K>!a4VAd(K-63UdXcDhR%ebb6i$@f9V?CnxQz|62Nb>WDF^ytT?$X zwQ*|%r&_K&l3}C+yiy9e`4IGA4+p*1UgV-o@3qmtdFD^kXKSNwEguIqv7dc^Ci&M1 z)*uZU-VUwX<=T9B15#C}qyjC~+Dmc?8{zvQGww{-N3EOOb#2#BgT=Ylh8eh;>JbVr zZImhc)P-i7=ik)JB7Gd^fenAh zu~SrB(xTZT-#)74mE7;IHY-I|YG%aMmcQK8wx`d>kvgD-X5S9f@Z38K;i^kh*G-bs z{8dzN1f^8lSCVmvSe=G+!)*o6blV>w7t0E(%`=?!x^yc2dm@C+XdZ2e5QXpoc7)u| z;d4&DRc**xi7|3>*+^I7424lxX1yxQ(EvApvk2|elO1_FGoK!Q! zNtj>v)Psan^MRH|vJQ%&>wqRtFFem4>smRIbXAv9LAjQqQFa0qB-M)v3hg*juR*+m z-OStfebBhCBvB8hB<`);=2TQHz~93oh%fy8A=<{j8=r1G2-SvcykyC91by_n+-MUpO;*tAnsw6Id2t)s-<<|&y^-HbRKR!60?Rj!HGgZbc{eOX) z$Hn%y9ifP&0-O=J@+UxYI#34`dH+vnI zgr6p-{mN-%uRJepIZOM5^a<3LpX5K2_xshTLMLqLxI@oQF_$75%*{|AUw>l5rZ9D+ z2I#6l;&Ay|apr=sxzRw+#HNi2!^$9g(8tE!dCB7;Zjx_?`_IQli1alczg~=I!OCo& z-P${Mbuo~bzn?a|c4RA7v+B2Ge3NHaYh!ke_>&sO+Iz=_Fk?eWtnWg_1kCYfL>%54 yXNLE{<4FWdl9?3_Z%M-AFV3Uy{YwxP6B2Ry;(rU^t#$HZ0ifHvQ0mD+seb{ZjhHq7 literal 1383 zcmeAS@N?(olHy`uVBq!ia0vp^X&}tO1|%)-KS=^oEa{HEjtmSN`?>!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBD8ZKG?e4&pIslT*}yCBu(@1{Qhx+r^ltg9GIE1I3wQuF*67i1bKEPw3duXcL=T$}41^b_VHMict+jYSHK;#3H z6D=7w>lM!|o~7>_U;olfYmdeU!42!*h-RogHRwLz>1sb!XWpbeM*dsFQjF_A|25Ay zk9~3Ag2n;WR~OHCnVw<#;5y;Q!Pe8?{pS6C*ShKW=BGimpZ|x2_8(njWO<=}-MTsd?`V@~#VUw65mGxRrahz^kt zukcBb&k%LEsPTc}Lio2+TP8)#U|pMbSt{yHi1=trbdgzF@2k6`(XCes2N8mbpNv|TJn--;f+?O`9jsF<=&(% z5nJ}w-6e^SBh;zLeNHxzt1HUt`Cr-2THhy(p(EpxzQpB3vBt_*yY&~=8P%-4>$Hk- zrM~fQllqNy)0Tc+m-yqvnW7n!m1>-7nYk5K6-BPUe<3?Wo3XV!>PX_N_EXp6`vYw` zibP)MSF6t6DDC#cJ5gqbQQf0nUj4FPs}Be4*D<)5@$10_4F&$BA6J=P{#}=|`pxov z+QzGAAO14Mwj*qp)|rLZ`#$H-W9FG+JFN`JHPyXwKlm+ko^G|y+Z(l?-#0{XIM^SW zx9Rw$zNZG!^}qB46ZAXUcV?clU2vXhbF=e&?uHH@<)UxLH(sCZR{iVh>Y9FD2~KjUY%VS=^K zV%`d6>5|HOD*OeLWJ=6G5J;pr(yrXG6?3JQDSWJdnfmkFQnz<(_atSca=&grCbC8T z$RFR@wZJrE_u%li%`^AUU%z(lE^Y65#AXYajjOIMeYzw+&7 zg&&+U(wqk@iBwBmBT7;dOH!?pi&B9UgOP!unXZAEu910&fq|8YnU#^Du7Qb_fx#Yo iSztMZq#-vyB{QuOw}!JxOGSVh7(8A5T-G@yGywpiyJ-9X diff --git a/modules/users/client/img/buttons/github.png b/modules/users/client/img/buttons/github.png index dc6b95e79148ab575e60ccbe2e8460bc10950061..55621ee1b4cb4d002300a020791813057834aa07 100644 GIT binary patch delta 1868 zcmV-S2ebI!4xkSqiBL{Q4GJ0x0000DNk~Le0001F0001F2m}BC0NU$a-;p6ze+mRP zF6#aVQ2+o2s7XXYRCwC$oLg)hR~dl6|IE%_vbJM8v7NXfls3doY}&+YL##LrDrup# zsNzzDf*=(FsS>=vBTqb4;*A#sJWwPaDk`8wLX?!WQ4O?_YCEpoT%7>1n~Rg!jxSkz zuk-WZdrG0+GuDj5eowojJ(q8Gf99Nj{&RMrOqnwO4FPxv5MxZxomm~Ko~J7G0}z1} zMZ}Rtw$Ev;6GW!XKfP&D7DR-0PR4nRXK{k=-6}Ag;>YF;#YGXr6~xgk>>(0#?^Z>g zq%2-T29yk{u&yqwITT$ca(7S`2^(dRuu&EX8)cEOQ5FdsWs$H^76}_=f03|p*NE6Z zr7IbV#BfU}TO>`M4J5)KGR|xKi(2ldi7l(BFT(}SaGo?BJZaw#dyzq&r;h|%c!+}> z;GPeWRLXLioZ1}~E4e==!+UYJP@GE6^DP{Rc-Gew3h1r$R>9Cg`14Ru_XZgUOq zZJ>=jGQ|z+(`hY|WkT``Z+an(FD?KHt+E%fo!K2Kf7LDh@(>Cz#vs|C zMTU9vgYSv|jf>!2<#)UltjH`c$gphP?$9G2IXvl+K+L|k>0lrI*FCpb3i{5G-H z1}vhil^Ad}X|q6X^Nmzf<@$27w*$nmnviTn8mOD~FP&6HeNZCX*k*j$^r0xaiS0p& z)Y2lgLbJ7qAp>=MG$;|+Cr!Ib%FL~#NIc0->Vgy5#Up3ye_i%kRnm&Uy*zC9z-uQ` z$(QIX#D&(9t7t>i8&r1W(%W=8Zo)u5&{t$(l7@|ouCUx4$x9PMWF-jHj zm}HU|)x?R?e<3^gi~d;$xW-ItUJK}dj*544hCO0jahu~>FD*RA<23rQcdt~DEM591 zaX7%I*@~f#uXBh#1~@O5+9Sw#gzf2q6Kq_5uT>TPlY*3AGHk4d{-W2RDa1)R_3<;CND(B?##yb5!LvJ z{F*m?%UrKGvo^HwRnF#4$A6|#4zP(RkmUw{WTdEbcW?^go@(|TV44l8*LhtI`S&E_ zkBG3Je*^KMnG=cI9AXcffKmGNm}Y>w2XA{B40|Le{cRo6M;sa(C);^ z+wWEkk|Y8YG_AQRO-H?_B3=B02Vjr_mSxo2 zp+*i$zlaBh2q4tUeqPd?6#ZDC@?WHe!^FKmf9Scrx11al93v*H9vi8^D6lvP8#YQz za}@0t5!ONkw(w0pCEapSC&7s^sjo6h1W^HW*=*wA3aDMWdhJA@f)o$V=cNq&^f9JO zamP~rOE8M8$;J`?erVw?27XD*yo4$OjuaO(#L>A|zOxpaY7|jKKnezg=;Hh*Y6N7x ze~1_srtYGsqDvvV-~h4~t*(WLAcBHwQ4x`ZET|Zf^&~RF42nyhf`U-1HS^<_OB|SG zB>W=EIesf6S=dRGqM|XjbDuhRI!(3iM7hfEZI?dRUgR`C;T10ydz^2OWfqZ7@Nt^i z;VHw6a+rM-d6}Pb(cgys{hga~n@YYSe@*P8lIL_>9^eS~QjqWP3%R5(@=7}tJ`?^DHg;s~&rr)Xo6 zZ5WayeQtFPM3&fkN6Ib6eQVYhchPp)vPjq{i-e7`NZ2TggpIOD*eHvHjiu<U03~!q zSaf7zbY(hiZ)9m^c>ppnF*YqQIV~|TR4_0)H8eUgH!UzUIxsK@x~&fY00004~N^P-%N{qAbVzolmJf)mbTvcfg zsn$qP970j5QZs7Btk3uF`|;h6_kDgnf8V!UctJ=Z!_LNBkWY#a000PDTA19vAojoE z;lAknNv+jf1xF&U7=+v3Mz|IL0N%AUF>;8R*(@OjdN@kHGaTt)HAM!r>z>fT>j^z= z+7;J*PpB3^$v2n!DEA(cU}_*yQzLj{j({lfyG*0xuzM)+bY5>Y8+bh=6tiB} zoo&VN+MMiYkZ!wwvh~XF+WD8+U{;Id6uyyd!)hnC5!r3b8zaop-J8r0%o4Z$0`>9p z2JUkHGM{?aoHke?>y=X_=JtA%=L%qFS+ITQBlnD$vh8t<6;S0m9*~q93JPdKfDxM2 zcnR#%qa>BhDR^Y*f(p*_7mZ}gdMKssUlA@8IDyC{j+*Vl*N$aAUB$bsC>AYoJ|Syo zw-f|Vwyr>rV+))a0|~M@>oJ)ftE5$Wkg&1WqsB?weyo!%hdL+|nj2VfEYS@n`f7Ie z8da4WkG%`Rkt7#Ma^GW-j~_h$1`A=9GVAv~>d@rP!7E&Ec?V#|KhL~DHTrO*)?2P3Z^&eqjmWPo|HD7_%0X^E#8n2;{aV!7!ff;G@^-fBviM0+*JvP zqa-r=nXp$0^PIkL(lzcYPEOrr$#OAc3yAL(m zUBFk~l@R#!peN@j8qGq{wy=?YyRYyFKoq_W}~Ee!x+vJ1H^=zfqmcj<@S} z;K=-6d6y-2inCX#NM)xhiXJBTiDt~@TV)c(#=&a|dpgQ;X-z5in zyMeo6SjJ+34t{wkg7MNvm^e;5i#G^#MFw%r#kB5m+zcr@2+s{D)f6Uderq2hQWv6& z9EWl~t!)PcKIxkWNmHb5TJwx*d3wnjK3JHKu`v5Kt~x@t^B)WFHDHhVN#t#Mr$%V9 zZe5mk;pLfnX3Fxe+0vGqU?WyeLOd#$1pBST2Sl7k`{*t<1;Ji?#2tmdeX|AQ^CJP^ z$>vlI^JTSjEtxOh2;b)B1RVztmj_#l0x0iL;`YTh)UfWhuMo}s+}DMJjtSl7HG{YQ z^bz}X{JVgA;M|k6Ki+OO>eMdKSL=&9KTFSPkJXc55k0I}dUSOQGpYCf>942FY;BL< zxcYSAOonpVQ{3W>BccseXb3S2o{xL45w~r-hCg5oWew=UM^?6aS!YV8ISR2aO2s*W zhsj(0IMus!UV{d|7rHz9bBYxvm1v_gLv$9VoG}7h-xE3li4jy{GZ@PmwQEm9CorkY zamBGs23!2nbe=R5S86yx$L_{(dKRJ2fM)gjkNZ`fkCN{bRS{v0hbnERTZ3$8a-5wa ziL;0EC~#Bn$PQJqQQ)p7F|zGUA z1}kG<#v)<}9eskdlTxnUCuSy6k0uqIJK>2Kv%8`;=xYnc{DgU#@wGc;pK6#04V_~aTtW!-rVt1vPsil%>1W;bV)S@xwTWQt`!nx*jztTnx8 z0?h8g$$8B2;Hu&PaK)c)zSkbpK1Y^jPV8;V<0(pHTz*%-?ID7^V=4qi6|Ms|rHF4w zjm*!O8fEbM>3$Kw%fr|6J)Sx|n{CKoJ#orzBuq{zdVa2K#GQL>YzipLre&#%LUYcu0#sgA+S!S=DS)N2OpaS7LoRlKkWPZq{%XtSuQny8KjcM3F zxwYmQRoT8@V2a<(ySSw9B1~N(e7z(5^fBRn7XUyZI=b2rU2UkI0|cTE*VTvWXhY!o l5J;Dy?8RaIj}R2%i^CHBU7-6^U%e0jmZml)jVQ0A{{WrpV}Sqw diff --git a/modules/users/client/img/buttons/google.png b/modules/users/client/img/buttons/google.png index 60f27db7aeb13d793770883ecdff93cd6b1b8d9a..139596a2b81818fdbf49e8b5144f9503e9b2cdbc 100644 GIT binary patch delta 4781 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 P0000<2SrXqu0mjf(wvO& diff --git a/modules/users/client/img/buttons/linkedin.png b/modules/users/client/img/buttons/linkedin.png index 54020f3b01af29e166bf459211c233309f1cded2..a6815cde10fc49d613d8ccfbbef8ccda1147305f 100644 GIT binary patch delta 1964 zcmb7_Yd8}O8^?8UKCPMasW~5_P3AD-YAwxaF(M2()P{HB9nq7vr!k`@!kDu>o1zdE za_Vs?9mGR5E2qs8t=Cu&BZqo=-}meDet19J|NF!5y07d1>34Hgm;i9DANr)Sf{uce zl$5e33W@o-WB)yJGCwnEo)LHx970yu?_ewZF6%EPC9CI&JQkS#VR?EvU;niJ@8Yqt z%N^ZK+zAb7ww7E@{~bIMsOE3XV)N9-@pO;69={)ZsJ38WXxNW^^n7`ckGjyaaSp01*~5c`PLWD;@IwCF{w zU0JXPGfa1Ga$8IBWt~VdjE@8tQ!JvlKRs3^+$R`%Wobm@J2DSj6XEhqkUqfIXmpNS z9d^B`EPb6TQuU>_v5zd*U(9u7nH+Ye$ z=4kyu%a6|UyYQJz#EWpp%Fba)lTRLU-jKa@u3ogivHTh}i>w=$CcB~ms2+~;nJlq` z`Lhd*Y@o`9B5zAZB5sj;--=p!T`_gaII{>|%e8=!gWr{s?brR-1*z#RfAnIt7C44A zox{u9TH2Nt%}>=w2fm{ih|u&J-uWBh_1J(;!u�9+_yAO`LEgbo3pdZ7qm!LzUw+~Gb5=R0=3@t-!}J& zaapuvW>PVi0VKmXg6JN#u+<>g`qf5_ujI}pP0H{(8R%`9{pcM6tluA*+_H3sbo3h@ z#*ufkqDJ;zH{>6zFFv6;-u!xcHsRuM66*5>#E!Cr7qHn`9Am{68r{7fH%_k#(@@o` z?|U&n740*8WFcYl@U&zh_kFi~uRxWT2o-S@#(*!S$Ip#yPp57pCmHpwOQ$I2WF$>2 zt-e7M;w60(yA%j-^8ZXE;}A#xBQ zI+xspm4gypP4`F({1@Jy`F$933H=DxIo9tctVX=O)Xp@BJK(@O+NoVrTK=fQr-@*F z143GvU&MFF-vrbQWv1V{7N*y%2P_%4;I@}0R&YkF#u=T`lV@Y#Zsfj$*|b%gne`{2 z!FijmZnxhF8wXy+T;s%~V|40MJhaWgQD<*T3)C7k15!TJb?{WM=BZ!L=ldQT0dR7S zi=xGs1(&(4>qCF$75lVUQAObKH&y^U>0& z0#)Ttvf3xLanG|x$d3q`b9(;qxwic@Wzy|7jo@6q(XQQWl_S6yijHc#=Avf{e&9R% zw7j=NR2H7V$28z|0*4+YgZZv|(?pROEpKy{yjmYF>~}bo%Lldvo_ZpeV>7>XZg$Fo zQy~Jp`aY+HY#=hJhhqJ@JC=6cmwK;a(ad@(G`I(aJBuT`s%NW1Vi7W@58f`28M~+K zt1aX34@8jbe}(kyzI+JUB;k&B{U5oY<*@fkMFkek>4wKmP1fLe>+-0^<3Sm_{YeXe z-kRpfaisv2I4|55-45%V)j7dd3RZDeyc7Do;q9IV%!+P=((dsk?|KBWEnFW_V$8UZ;sO=hj@&D`?P(r+rki=M>_%SrjU91d`OW9#trT=;tG*JlL$}9O!%_delRbK=d z7H6+1z1%}x>&tL{BkzDB8o0O76Xt3ukB!NvJK8vsl3)bb6JE8iX3FVFhdpKbW&Hmo ztDWz#3Tr}Y7=c#KYay2-K|5}3PDO~KM`VHnVn z=$!{kx4K$>Spe>Z*I9~(T3Zx}{WEhd+ws9}O%4~fV3QffS4J27%!t4pLtowqtwAm) zvq&hTqv>n|g#SzP8heIHj7S$gV>B{OD{|%GtYEu3AfTcW7ppngpvy{I8 Dx67$7 delta 1773 zcmZ{ldpO$%7sn$)ZdgPRMpd*#2}xY4Njiy330@U!GEyogE^XcBI`o&M+6Aq9Ri9et zlD09IT3y;|taOQ%s+v;QmJ&->ZPU_jC^dWby#Ku0`^P!wInVcd{`vm#IaR0$9rOGE ze=lu>F#-evX*0b&0=FmcuYzfA_kFVpZmIc~09>C4iS_?P0s?7rm>!Ja%&Aw^hmK-A zO?rT>C$}mC@ihVM4EPv-8I+IjvvSum(>RM|a8HwZp=h+3mL**+s=fKy5<_tk>S(EH z=I3}u*B0Vo278OtjwP01b!+oNL#;QvrZ+#do~%sio(}Ay-hW^}sYsz-r#jpo90CS` zbRAoRLOJ(GjDE`Iqsta_>*0OyjfUiyCK#$luM|nQPb*AtIp6h>*~VA$w=k_mf)U$# z0dga6StlvsP5*Hcz6Lylq!sDwY3%Q*;#gIi%*M^!B#=`cUw4>kWY_f;kT5oV0Zmx< zAGuoc|57Mb!!T^`)mm`><2MjtmXC=P37DkCn(7^lH@JBkO=Ji@n54haA_9{V|Vj7*IY0zNx#_4kOWmOGus zl4HVrqu5J`UpinmaGaVa(?oC3r^etJiPEK0mhv!QdQ>~qKWshHq*?7Eq_6MLzGQTW zHxJwjW<#bBUkMvrGlFDon*y0BvFSP0_5^+)$qOy&lH*IvMd$T#Pcmj+sDkMIHL5NF z5Y)q*qYY1g8_2 zZd3~9oqNgmtef7K+fTr)_J_v6q7&e_MM-cS1sSQ)yZp0Ew4|i43j1rSHH+T9p05oW zb5egPiJQWS4U67hMnsY?pK#uqiUo%vmm;zsRvyxIEkTONzK3U>VSn5DppPCr&l z(%Nzi>?+tRKQbbIgaR-iVt$wxqg`*}WNR_0L2LTlol1Fag4@qr{J|3yz(x8bXak+b zD7UPoEP2pulD87Md4vrzlU6&m!3Jmh`Txj#G~uUU{aIqly|nIpgAE;)KTYuyL~+ zXp>KJ_WtMbcj{!rOIoD>PqwA@c1T!1I;OZ?G~Vbklw9E|__hwu8P5T{U`i>egDK?2*66L_@vrrLHX318^?P{BG9Zs|HWvOoer}SsSgk4b zpg8Ee9{gPFQ+vVoUIfd)JW_&)f`>c7QmB!PD@kIMcK; zOUoHZ8x*!K96*gXfzO{(4^|q5L07JX3wxB3az_%%QoOJZret9k8+RR=pTXSUkrUEu zAxbEwFh2#(>Ly5Ea%{pTZp^UB-F5|L^S_qL9&Be7{4r~ou#t1Ra@S`A1>nB{!mO*R zTXh(Nq<`efv7%F)FZ^jtJ@;9pK?bd}m{cL|zr8xX_3GPuTH+Nw;GW{wtFxs5}2X3W0QJWG?zUgOYL$0K{eAsI$J!*V)+>9Kd zygd}yaoFVu%>oxsTHvRN?{;Hx$DH=660M<+1JfUpmqSWW(pZ+8%NOPiS>ix<`-;yA z0m5ccd7VTek&6Xh>qTJ?RMkH%q?6lJL`~`*hkwEj_*W|a)AwInMNVQrMqZdk!YLXS zj+5-><`&*+4;)EWcEOSYHlYW@Qo7B@?RipYMy=!51zNY|-z`zi)EyFB`}g~ubMLwDc}g>SBOw7oM&=DN0Rv814LA)B zPJ&k(*YP5xF=zKn4N=fu5ts zXx?+*=bYbf@BVS_j3hLpnGthGf3TMJnx!?m_ndRj`P{wtZ}0uvzu%CE;G)b=)P=r* zcavO%wE(#YYXNc*)&k@rtOdwLSPKwyK|b~T!WE(maiIa{dpD?m#Q zkKWZmsfa8kv?YbbER|Zg>*ZtRa;VjO-K79T@Dz0x)2mi?C{2neoic@de|m|LEs+^o z%f_fT4vs$Z#UJl}`Iy!k)8;fUT+js1=v+3H3A~iA*YuTsK!zHU_q zvk3>x~!?wMgGQGsl)4%c}n3k-^E|`~3fXSdn^r#&_1Wsb$ouwD9c{AC)6KuC2q1{eJpu?o38_}-m7F3B=h(3*YKxC=J1haTqRM0#Ms5xWB8WrS zXkO!GixEL(l60n8VQ-ha{E})l`rPiZ@9Zxtz%HtGwHuab zMRDX}>x@>j-Z&AQeLFrz6e(*tmuvPdPid}N`K!H?$EvZf$SoeOw!>1228Sz?l~5~1 z=fL6k?PwM`VPoQs0*s2SQyKG~J~Pflsu{(-U6tEzgy$iQVNTV{QtW(As*Ue> zGfZOl(ee7wNEK6+fLXYnkHZqJDT-VsRsO)Xe|XIbRBP}w1e7G!g0(rbBG3R9D@|;# zW+kvrj?{=~7WXbKt62~%rJ%HKG})NRJGa%hUXFU>^yokNR#q2NLE2bZvVc!PI5 ze=Jd20T>)Ehq2X0&0>QD$8c^6#9QA4sO7T-e|BQEpoo^(Q;cUhg^O81kcV}bsCMo6_fH0a-3-?+4;bdjbbY?v((2G~qYMU7f zh!9(@)FKurkehM*Rs?HnTQ-H8)=dYK(-58SxqOz31?eb4M3^A}yH+AOlgb!He{qx7 z=FP9J%K^ZmR^rBU1YuJOLOVuUD!e&01~{5f1yhITN5(pEWKOIW<($xhfY%QQUBs z7R-ZNO1@U1lhh&_VVhu0Ptd&ZfAaCkN;B{^yBWMYIT6nbd%FwA-h}o)z&i$d9 z5IfEq`s8~`w=5507JpGmp>08Fi`I@8k4{vY>9m<)K3x$Ui)ZYr-d1zpj6d@et>74* zm4~k={PyM&1A4LgPfnBeXx5a`j84?8Wu??ioh<|ir+mo-Eq`<#sUe^he+U#uE>C#m zn$AyM)geTXMN4to4r_Yc<5p-s%RvH8c@PFIpreWaO;Cyia10wc2sU^6U$~~@o^=H) zp!Sez8!UhnIVa7~Vm6Ht0N`{=1k+|aqntiG2oVcx%&-g=Kc#NyO@HW;?60oNt;qQ- z(DU+d?<80v(28E&e{yJ~f9iRLXNg9MCF&|d&C!I!u^{O#5rMUxX>(m)aPzWYMIqIj zqFa}x^MOgO&?bdyFDw?;&^z`VJ#us+NShh6LIDxGu&+xrVYV34*XC37dT?OO=$UPWiO5=8$cZuM&@3giI`0FE z-#qkAfz_H=-9Nnl@R-pm@n1CclQij(Rw}lxl!tFHd&d?r_XZkmYt>$;w86oP0I1ia ziOIS$3IrSTTU0}0j#z9qI9HG*qD6{+i}gD}79W=98vq}=e|yWWmrp$L%$xaKDhbg~ zK_D2BMt`ZA&m^<$XNw}Rm970jSK73ph3`D2jSHQaCAR#QA{7Bm%Z0%Fr9oi1 zKr6YI3>MK;f9L+0Rzy=>#$zGdm?;?n&eCqB;6Mp!Ilr0xcM&X1SH$Vem!{(T(Ym!( zNX^{iA`Gw;JcYNp&hFg;Yetc&VpFXiyD;%+Z#6|lh#hb3@vrOl1ue6EC&*I6B0|zy zde4U9pd|skGkdU;HrD5bTo^p=k-_D)P?;`Vpm8gJB)tE5# zi%9Enm!P!7G6TL-Z=G4HKR;M=@>(1-WD&Xmd&9i-nR!v$K+cxAN5e)les<^Kf#c=0 zZydLDe@O(sQKeGg`+EJF&NVAa$sQE#yU~M{_@^hDQych90TTF{aw*l3(px)Id5`8l zCL~8zV)w>a#!Ac_Mf#Z{(`qLi{4pmYq<5+x85fQT_J5EHg z+ji~hKYsYm&6|21^Za+1nWrRJVwSJ`{p43(e;UuEb?ihbN-C_aCB-6HPyMsarB7a2 z%z29ES9o#)ML1N6AK5;1(n=Kb^?kv0J$*e|&z3UGtyz_7cyM4Wlkub2#+HZ2LTfpl zHrb%nPW9O1d&|}EtDpbirR%zqJ!ck|7l4@YS~;?oLsp>xkwe5Fz$h{VK{c|U+c6>{ ze}8m!r(>ac&D{$?uZ&04m?OZk&b^<9HhOK%M0nWnXH79<)-m; z;2W*gGdmAI`LhF;uIrlK4MbYaAp}6HWG9){1(U+OEqPXOG~`h$#*j%-vl2gkxcZ4Je~Mjc?c~&0G<^{T@YMJ_{niu58zUg!BL{3- z7Ua$J1}+PM)lx;l>u(OTh_$X<4X=IA%0Kz!9UY}$;Mm01zq9M_w(lpvXv${%q0w5> zu;`o^Lu$$%MZ`I2<<+O%f3jr^0U~eBl&2ahTg#vo5rk_oL&Q2x#q!|R&iglHe`Ch8 zgUvtQGdA3GvOGu zJ%?rqKojNW_T5J^fiFN5xxU`q&DX9DBX{|Ro<=kN+3q9Gu~MxVBH0Hv(ux2XZt_6QDWjaAr0MRpnJYR{0M_KZ zoulDjy;fEPK&*(H3L_LDVi|2X7U@cxlp#tcbEUO!h9X2vjs*l^$#}FpYu<7v3p2w; z7{7UVG+9-`B8iDLnsLh4xlD>hlv3=(Iqoc_eP1^k@!vhWfBUW@LnGBne=RKL(;cPY zzF*q1@4(2OSC3}`Z*08r*-zZ&`})gYe^wx|<(0j~-@Na=g+f}UDyo%g_~+l)-iWLs ziX(pL{;T)s+?x}Tmr`-eq=|v16)Qpth6sr!GFD~Gl_ej*K+XQm!P=q8Xryihl=alL z%hT6)r+zR{8w)uU*_ih~f3_(f80CPZWR^8^2a9vSiY-^_kf58Sl>M2Lp< zGO0L%@lfHSs@)MD(gaUveIZqiit@jJ{S*->tsn=rwEXW3ar5679sW%$U_@%vr-~1oD z^EqED8ZS5R`h^WQe{5a(Z@>EFpMLeJLOxY2q-(VhAW@`^-tp4WbjtMh6=k~oh{PVqozkJsfA}~hn{Q1$Z{@3U7`Bci+86glQ^|LsfP`u@)W z#4(dXK9?FCsuVK*10T8m_5H*D;V+-*D5i^rpjM0SzH`&&OP2+K_sYJZA3nJ+w(J{I zX*Mre*KL#ne{lQz)<3a*zqMQ{1^W+=O;*BUJ~c8{``2H3qEZXHIx{1q^?UES;-B2R zwduIx1e%-xipnv6Zr7+0G=T{glhR70S+zH>%HF*y`^b)wJtrDL$!|owE^j`#CRa>p z5qb1*?d6fCG88$1PnUM4d_~Uy7BK$6pK5UacATFDsM^0e~$Vm-Th$21jefV*1BV?b~-?_{OVOfBoCLo_zjbe{X(b zvT@n^f9^l|y*oe@TN$i7=vHQCnMdNOPC-Ss>8xNwPw>T?ddd-h^YyZqH;tIrX7#_j zuKQQkWt||U=$fANLr8&+Qoq zBUdQsFpLH0ET*+q5GX}Pt4)`5-*@+x-}pyYe?9&Dp`9-s>*~x+R+@c1xewp7rKdY* zEjPoskWXK+aoP8N@G6ni>e2c&ouy)$MQ*xw_2nCT4?VfBR7j7E)(##X%cQ-(`0E{| zeA-$jqE9`rZB>5>!10FNJr6;op2=#nqZka2)js;6_uli1SHzAz zt%mAuU@Y{qCbsMo{n{n@JNnY2O)mOsSw^qTnZAtaO6y})`}Bz>lyWT4v^Hk|L<|-o z1_Z>(%0uxXX-%<{a?DU=byeJdQ=0VQh>F zBO9d6w(Hga0Fg0D0A`tP*zPC^%J4zkR9Rh_#`EhsXZ#OHVw#^H4sQ zsyCt)eT5Z$1pr!+b+X}-?lmhqWNMGmOxCx~G4mr2-L|YZ&mzedDF>=Ce>@TqF#6Ko z#-b;HH&u7$sZh5wr7rF8ryuM4hpJBvHjE->Ja)MD$c~Y*(0Q6fWL?4U56qs?Xt)}a zCRn*F=NJ9CQ`&Qx;gNxf(Xo0q$+dudt&v9 zQWW!l{`StF?l@E`1&0R4e_!7}?0Y&$dzD()*PH9>&EvElu3!J)mOXoqTgSeqjnN}x zwTC`>`+N2g3U+tZY zKK|s%^(CJfdqR=_Vg&gEeJ+_-mUe24_e+*~9DFOmHCp%v} zI&ge46Zmn=p4Psv0VoAJZSz#6h?zHS==rs~w+Lfote(%Ms?BKo?!%A%@YUyE7|3V* zly5|&-iWh-pKMZ!)~Z1M2e)lBT019NtMPK_#u>VaEM-)l5xyfPjcMI_K7MPFm8 z6m|BT{tdn981$?_ZEV*2P7GW7_D~f8L-xAt-{!4)84=NfBg@XN&$;Zrydc@n`P^q zG$W^o)|WiYR29$!0X7!AFK_F)aaFe2WR6)Yz{$qm;A^)p|An4(T(iyz1c@&{9y%5& zH*7j@)|dRL=RTLrTvir=i0pl1=+!rda@kZE+SUEVtylIZq|UxqW>JdDmFAvTPK=Dz zj8QBwO5Jk(e_HF@_FYFn#Evgp-?MRjw^HOBE2WMcow)xK|NXT?BgK4rbgcHt-`e(v z58qBir`OsemM4xi%9fMj)wNxzHMu$ZYThizyGKJOVu+efE-iRB^`>`^hOdlAfgu8J zSr#k{^mD__gVmS?-6?%@Z#wVI?XwnbDs0BBvuAtJe_HlD{X3s|^sgU#vAZ)nHqp4{ z+ST9s^AC5Fg16Jykd$K7Os``x`j+M>E91-x)Hx0&qSMMStutww*wj$~oDaDm=J;vqf73O-J72k|SqqShf23#uauL=7f8-*p1;|BM3y_Pj79js0NbJML60~9M z0000bbVXQnWMOn=I%9HWVRU5xGB7bVEigGPF)&mxFgi6fIx#mbFf=+aFnQ+{vj6}9 zC3HntbYx+4WjbwdWNBu305UK!HZ3qYEio`uFfckbG&(UiEig1XFfa(Ztq%YI002ov K22Mn-LSTZNA)D#| delta 6077 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 M8(ZVbvBcPa15BfQ^Z)<= literal 2383 zcmbuBc|6mPAICr25LQf?T+<>n{IcAv1cFaQAi@Mbt$o?iI3 z1qFChZ(`b$Cwx98mL>pD&4B*?i=XF_WHVb!0EkoqfaqHQu*F+NvjHF!0|4_R0MO3_ zfP>VWCL2TELBP}EEDqTHxAI<;r1Lg=LhzQRdnSd1;21t%E74K_5Im2^nb?JoEaqHI zvSUfLU7u(S^9hS+^6wCcaPqSdvzD8&ITdf4Fj81wUBf+f3uaqjJI$)s*j4%XEW~-R zc)$N}Yl7;VI#yx5O0f!F%*o+!kA=9O%Pop4v#W-Y)i}3s=)OB$9jy5-m#o+7r5$!T zxS#fGyDwr~&j$$;&;4vYxv*60Onc2!6y|cd;tGQKXHur8+Hf~AbMp|XHI-JGwY#i- zBf4C{J6g5{T5(X551YIHO}II1O2s6pI)Q>~ee{LA zmBRS>zh@eRs6e)C8Vde#ENcb&}|DnDm&2;K;4*w=7KvU^WOEWZo=KK*8! zTi*3^%AG}-YRi{ns=?`;lX}jR5h)o;sn;4&=GthP%d-*uRt_v}?%PY&3OngYQ3w%i z1&kU$a-0sO$40+YPn)V?L^x)Yz$8GfW=2ms(tuX6kQfs2d8(y0`q1!9%$llFit0PX zn-6XyFw*GLYaZlGp{+czi1%%}q?hHgjZADaY{zHp>lH&4G%;aCciD8PxWf8M!B*z$ ziFrpt%Vfs@I(O*eXJIaoSsSTbmSq3aW>R`mcMytN>Yi?3VuRxbA9(fHydU=u5qhmO zR9p&kiC**fTIw+4B=p!PPp=fa*)Q>VKxRP;32{$IV=T!T_x*ijV>={XWPer>GL~Ki z`Q+glA57*#(-;XOXXNu2+XlqD=?KNHo4V}Z<1ER?ZzOTiTiyqd63h&x#6N)3-rq5G z0}YbmA&D+}bd{F!5hu;u|^p_pH;tDP=r+J_U{%E_e<0$~1TbGrS{44RnOM`yAED>je22Zmj}vdI_i#+twF z-sYh?dtcz8aO6Rb@|H{9Ax<1VTDLQf1pS*#7}-Mu;aY|n#BgA-_F=Kakx0dql)Dgz zT-f6GJ)@vQGIhtg7ryGOS`H*Xg=jRUBwG|4Z#}I+6~BD?$ai=9NVOesO?H-_s?SJ0 z$m%)+H|TQerM^(_pSu)ueJs&y(p9-DW0sumC7}1NTS_)hyLV0Zc_Kt9*JKJ!9?@~o z5$O-N;fVH9vl*h)7m^B)UbvUy>&fkpEw7pNqmhPjK8^%jMmGKv5KdnZQYx(FMxfej zwTUu`o2xk^i+$1KPd#m`y@@G3O=pt)H@M!{ z+ck`;88zICBbJ=SHb)et!sPjs1#6N2gHtv^=b2rZg!@jb&=i#lu*^}%_Fi%?`#z%=R&=kf`=|88gBl5v(IApN z%eQT7s#6x=7KJ0?#NM8aisg>%4G;3ZHj{`m>n zA)Kg69fg_Yww!HOMM1_M&i)L#q0T1L zOy)MBor;2m^zrXw>7$%)rr$cgpCSlMmkSp}N5)K??UE@wGN7hP>of}J(`GsyQ2qhf zNb%dLMCx#w$aBO__oJ0tnR_wdjgy#xGKxb;fW3RWdbUoieNpJJ!j!sG*NwH&?z^sf zKdRC|Y0FY@1cU%7PN6*B==$EYdXOZEA*6gk#aepp3UjN<0(5V&6y!$={ar9=EL>9D zdOO=51#!)m8W{6w};hZkicX~YDL4Z~M0`9hwCig7>gB0JCDkUaO_%*nu4Lz$%N&b$Or?rQEa0CQq5CNNEj!>FGM_osW?+{u4^H_uOY0k+{HbkK#4r_La z^)_s4-ZS4--sNxIX-b-KrR4Dvhhm7SQ;64JA>R7rOWr&Ij$yFcXpA=cn2sF=qpzi{ re+-MpXz61xEk+1l9{C?2DA>#ILd5?E`aFxoc>sVnwZc`NBHj20UGhC* diff --git a/modules/users/client/views/authentication/signup.client.view.html b/modules/users/client/views/authentication/signup.client.view.html index ed4b98d1b1..edd6214e23 100644 --- a/modules/users/client/views/authentication/signup.client.view.html +++ b/modules/users/client/views/authentication/signup.client.view.html @@ -34,7 +34,7 @@

Or sign up using your email

- +

Password is required.

From a14331371347b7ab847e2e4281996a132fbd8767 Mon Sep 17 00:00:00 2001 From: hyperreality Date: Sun, 11 Sep 2016 00:38:11 -0400 Subject: [PATCH 16/18] add e2e test for autofocus --- modules/users/client/img/buttons/facebook.png | Bin 1575 -> 1360 bytes modules/users/client/img/buttons/github.png | Bin 1952 -> 1861 bytes modules/users/client/img/buttons/google.png | Bin 4867 -> 4458 bytes modules/users/client/img/buttons/linkedin.png | Bin 2072 -> 1829 bytes modules/users/client/img/buttons/paypal.png | Bin 6499 -> 5925 bytes modules/users/client/img/buttons/twitter.png | Bin 2550 -> 2379 bytes modules/users/tests/e2e/users.e2e.tests.js | 11 +++++++++++ 7 files changed, 11 insertions(+) diff --git a/modules/users/client/img/buttons/facebook.png b/modules/users/client/img/buttons/facebook.png index 926a161d32df190cd5ab146896255736bcb43b26..984f261c93fb7d36b961bf97d80953fe65d68d64 100644 GIT binary patch delta 1220 zcmZ3^bAf9@RXsP0jFimWh?NWsEFqpQjv*Dd-rhNzEmJCS;N$zxvujVXd9PHNkQA`6 ziQUyk~pY{5Cp=P{b~9^a1&udnIZ7Rw{w9_jb9UE0 z$`WvK5SYUGpmC3TY>}qHwQQ#sAC1peZ&6q#ky|W6cte9eX}1 z9IFsWw&^g03)drwYemPmT6#V2i@B9vCA#9N?TNZm0#A$#`2TSJVJ#BB?8c`a|xEyW_dlD%_cS|Gj@7zwcUk%%oX zGhfbpw)}{KqT4cMn-v?PIqn9>FxHA3uJ3T=x^zuIOqH*Wt;W@fW1?CC#|)7bO=Z?x zbJMeY(i+EUd$?^TeQz*d?BN*HnbMplvHzli)@~)MiQf~< zS9>_N)y1i1b90osoRw2<(|mKFIyj{CM&bP}Kxa80UGljv?1Ai&9D&rgUz-Zp^CMSX z`g*n_DIF z*kOr%QQM_h9452))l@wHZnZ4+`+=9n?0pR{MBKjfY21yxCa{R<&Cw5rDJe}h-(QJ` zxN03pxtAulH;+zYv(hu=??Q8CZk{W_ZH7Rztngt zB>uDx?5*TaTK>}zDNod6%M|Dq&4_d4`u>)k^-8()`g?~$SwoaoEzhfS?6~<}RmXyH znn>gu(?U~^Z9)^ubi21^?-%;wb8oSpap*Ptzb9T<%WpY+(L~I5au3L@jXi z#wh8xqSA_VG1nRtp{OiJ*(SGFi*1Si6Y8Ycj&96At5az_1#*W5u@_sz2+qL;X9rmEqPX|d|&`Q{;)-r zD;tVyXkxsXP*LG9?R=@_>$R?f*0y)zb#&^ZPxR%BkQlP2MT-LK%OM-=#nvv8tkLSr z;4rg{M45*xk^a!9U_PaTlbqs%s+lOta~D+f6?C4n{b?#Y#({AK%U0QfY$3PQ=kmi# zMoe#`SP#~#si6c{l?xbEp@lvhQsl9YXG>h|k$b!78!^6RU|Y8z%CA5$rj_5<({^h$ z*VH{lz0a3F&&L;CinGLi&x@EA)Lbr`Clxq7ZiWS}#1|(x4slDQ<@A`OkQ5dyU@<;1 z!6k2oXTpZeX>K>!a4VAd(K-63UdXcDhR%ebb6i$@f9V?CnxQz|62Nb>WDF^ytT?$X zwQ*|%r&_K&l3}C+yiy9e`4IGA4+p*1UgV-o@3qmtdFD^kXKSNwEguIqv7dc^Ci&M1 z)*uZU-VUwX<=T9B15#C}qyjC~+Dmc?8{zvQGww{-N3EOOb#2#BgT=Ylh8eh;>JbVr zZImhc)P-i7=ik)JB7Gd^fenAh zu~SrB(xTZT-#)74mE7;IHY-I|YG%aMmcQK8wx`d>kvgD-X5S9f@Z38K;i^kh*G-bs z{8dzN1f^8lSCVmvSe=G+!)*o6blV>w7t0E(%`=?!x^yc2dm@C+XdZ2e5QXpoc7)u| z;d4&DRc**xi7|3>*+^I7424lxX1yxQ(EvApvk2|elO1_FGoK!Q! zNtj>v)Psan^MRH|vJQ%&>wqRtFFem4>smRIbXAv9LAjQqQFa0qB-M)v3hg*juR*+m z-OStfebBhCBvB8hB<`);=2TQHz~93oh%fy8A=<{j8=r1G2-SvcykyC91by_n+-MUpO;*tAnsw6Id2t)s-<<|&y^-HbRKR!60?Rj!HGgZbc{eOX) z$Hn%y9ifP&0-O=J@+UxYI#34`dH+vnI zgr6p-{mN-%uRJepIZOM5^a<3LpX5K2_xshTLMLqLxI@oQF_$75%*{|AUw>l5rZ9D+ z2I#6l;&Ay|apr=sxzRw+#HNi2!^$9g(8tE!dCB7;Zjx_?`_IQli1alczg~=I!OCo& z-P${Mbuo~bzn?a|c4RA7v+B2Ge3NHaYh!ke_>&sO+Iz=_Fk?eWtnWg_1kCYfL>%54 yXNLE{<4FWdl9?3_Z%M-AFV3Uy{YwxP6B2Ry;(rU^t#$HZ0ifHvQ0mD+seb{ZjhHq7 diff --git a/modules/users/client/img/buttons/github.png b/modules/users/client/img/buttons/github.png index 55621ee1b4cb4d002300a020791813057834aa07..86e33652977af85c534b8a902ccd1b8866c4f319 100644 GIT binary patch delta 1763 zcmZ|GX)qgz0>JSgjjJV%T0%-tTSeLgMO3hg3P9*61qwRR70{LI>KqVnp1i?-9*4!k7}S zeoQERPZH#6`!o9np3z)m#YRLljkaeXwk6(7x62)46<=;PT;88{s>^J>#FLm0N&B}w z`z7i57M6-GmNHMIM1ZW4THl3VhurqPu}ikPbpT`UC&YFkypc-#`4qA#8(P+i^6*CV?w5Irkt9((&5-^qrD{zFSx zl{8p#>bT$q3yhsdNq~H1G_<<9!zR344`eMd{8v0OPuQv%WiX7uH2$E5l5;YZd7x@K zC`6O$>R8qJlJsX=cnLx^Ri-Dqu8FhBHG}&%8Hvi*+@QW5HjH*ZHW(4Vm0o_a`V^I) z&xk?zC_qjAL7(#abBCg2h?-i0meRsYhT|O8CHvJD<#_vM@#nntQa&q@JVKXi0WM<* z$o|^y-OhmDM#F$cg($a#zi4&DA{{2mt2s=M1@kn5jY zcOT@TDrU~Urd!R7n^2$t%4dHb0Y0?RMQ$l?5 zvNeZHhF6oF?Z@h^{fTBa@IpV$NZkuy=Ygjc*gQpvChe5J+CobD-)>+R8%MVpEGQjd zSRX1KNP^D=C7Xrn#72>Sdk0C6D2bKanLPiPC8@ksvM?OyiyXNm+DxJjpmV2_4ujdf zq4hLC^tP@?izg>27c9*{Gl%cgky>NJB3ZBvrb2W0=9hE@`w@nb?Cnnf$f!XV->l$U z1AsVR;!o|XZVS~9+$6+&jyzHv>K#{qB+-V&yH53R>DPa5-|`fN!n!RRf3b2wH0@Mzip3cFoB=DiApXuC zpVZ92bxwa!16~L3knwYNwadMl&`rwwgAId6_e(OXIrLcAr}ewj?Hhw!h_pRk)9G}} zOJ){7FIr-OPnF-_R61W)gDb~SE5~o zH)VAm5Lv-z`Q+WN#GT>8VS%R2NqTK@pq#3y3OngZ1%M3?IhTcq>dQg@rNXNZtckKa z6Ql8{N;DK@h^@f#-g7dHuY67~V3#4Z_qHUk2DjE6`H~W! zCO7uSWcs@X#;?2(Ek$_Xf9;ECj0U`M#Lan`;aZBaqp~xPvgNxZ0}#b;aB(!jj*7dE z@`)xY&iyLm)MDkjSoVezX4({sFhVJt_YWkQ)C1GA;A<-vPkbz+Ash&n@O33Z6n! delta 1806 zcmV+p2l4pD4xkT^c7F;4HZJP^2T=e32B=9yK~#9!?VMX|99J2DzyHk6Ub41hJF%U( zA(S@6O>El4YeTF!4Jv7&w5Z}zgn}Ry0;v+bz#~sQRpN~o1UyhA9x5uJMM9L6v{4PT zk!m}x-CUgjv73vN*p4q*d$05J;Co7;-ZR#W!+uY@qdk{zc7NuafBtiJp-h=F{|y0n z2oPgT(4AQws-CAR^aBuq6h*|5Mz+sstrJA1%|E?qQ5Hmmc2355jAwCz?%gUdoZ`pk z48=te!xhBQE$kr@bnjM0o}?^ZLk5%#s<5sutT_~2CUSRB76}_=k+4w~2^(dRuu&EX z8)cEOQ5FdsWq*;dao330Kcy=fio|eBC|e{=o(&|zATrKt{EJ%dr-?1As4v3>&TyVI z9Xx5@4||b8o~MrlTX=|r9N?Z0kyOfZn&bSPbBt+0F4M-gFo+CtvzOE`r?g8t_%fX& znPq}8rkEj%M}#OYacZa`$#q`gC=6^D2fL@qM4KhqWPf)`JE;B`j zECm!pL>zV5Kn-(gm1l4U~j3vYTMlX{2uaJfYmdhhsf3WOMW zExtW}#KWLDW`h?|RCW1*UKsnJ5BJWEamx@Cf3OvCNvLfd2`YmZNwU?%OD`?}39Ygh zv7Ol+Du2~2{qhhBFvcL+phbpx^Mmh+|BZ{_UFCPY6|BfCFUir()1_DN76qIEaCvL5a+AjDez7Se*;#LGXs?Vmv63OZ4j$ykRK-;vc)&?x1td$sWHEFXzZu5;)Q|0<{v$q4pu$qu;L>j1@^)H=N zMSV~r+t_A&+4P|(x{2*UiPX{}wL-JCh#>=Yd^9K#*e6Z9O3KWwq)0r;PU?aa*~KGg z>wjJLT2<1Dz`ZQpuO-EX0M@lB;M#@v3=*4!hk+wxiAiJY(858l$D8;vE!l zV)99zW~*ICY(*j*;s?^1Nk(P$-%5%sk%V^eJ@#4l!-te&&zSS)}9ql>HZLf zni!%2Bo2e`&eYhDZJe~yZGbA~-)TydM@ zS}!d;#^W^lv3IXjkt|*MCviByr`d|3j<0iwJ_a~1m*gr_t+&XaCzlmz1)(BULp6vdzNL?+o47dO23E)h6o_k%YI(coD}_7q4Hm(hQq|YKY!@Cy|blGg;;0mZ+ zx_a$Ipn?<+&gZ2J{q!-WOL50i{!1{5tjWd^|9)uUE(U%{%)Epu0*(|HG{n)lSH80r zn`#tML_i7#gy`b@Cu#&_y?=-p7N+i^sG>_Dy5In^7Ok#@h#-Q3YEco9ge<5Sk@X}p z!VHQ_o`Ql!C=*QnQ{*GYTd`cl|g(ccI}I8J+3|H_Zn)gOuoSGl~jWE26zZcJXgbs*@z ztx}{wR=uUS0DLj%Zmk-J&+shk@n32FU-&o6*%iL34_;-H*9ILFFjO!wIyE#pF*hwR wG&(RadFK_glL!YLATU%gFgi6fIx#mbFf=+aFbKM>4*&oF07*qoM6N<$g87V7Q~&?~ diff --git a/modules/users/client/img/buttons/google.png b/modules/users/client/img/buttons/google.png index 139596a2b81818fdbf49e8b5144f9503e9b2cdbc..baf5b7dc41039fc5ed20f644c436261e3def3546 100644 GIT binary patch delta 4377 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 T9=G1F00000NkvXXu0mjf8j~^; delta 4740 zcmV-~5_|3HB7-K7dVdN8HZJP^2T=e35(h~{K~#9!?VW3IoL70rf6sY$b%}h7V>?0Q z=3I!ix~v>0!AziS$i-U6DVKI&(lQi6VA|4|(t!@cOgqyLona_5?FVQ((9S^lkOHNo zxmj{TfY3mJIJRU-D zxRz05En!Ash?5d~6?4*rM!%UT{b$3!{3`>Wdbkd_5BOssn(L7-QaGSbo-YAeK|K1+ z1b_qsfB88O5r1$M(9S5bmN4VUBN`ZI7dkI1B;efgS=z3u55a}o6|f|{=Npy?nP*rc zWS*fKg4+W*piumYi+@w`_iUj7SjP0^VF5S+oE`Ih5pLp@z-84K^raFaU<5b`oGSi) z6F34K1BQx!A108Lr~0HA@HT?_zKQ9n??-`0fnSXIzJCZre+YPYH3mN&LOgJqFzNe& zy}-+eS1=s_8v>m|oDnvR{7BNpg@!~vj%B*`$(O5f9b~t*f#DE0Ap1k$3Z}m$51H{S z@V%z(J?H+|-;qXQg>$qq4+tp`?*5m7onXHJ^#BKvosDxEF*CJ1+cSkjUOEOdX#gbZ zB+>+<_J4iA<(GKqa$8+Q6^-V}5E282fIYx}oAE=5UeM`O=j=}Y_=A%HD-3%NfsA{A z+PNOrbWw>A5d>Q|upR6fS5OvXr0MA%2DfbFrTcC*@BDI1>wuLCLNq~;E2l7yf;$2l zPHpd=@xc#d(gv&(JODfl+{OZT`J5-j48k%s!hfpR3p@#YAFLZVwc(i_vYCx!J2pD+ zbOrbp#BBsu%k{tt!oD50H!%Qyr(jp#{Tu&x&uh)6TCdL1+PSOZp!z>>J2*2tTWG** zIbjuyg@j)X_Ceqyz)dUyHU2yyBY6m`;uP>a@bAJN1CBIzcJs@3rP=>rnxUh<-W=_S z`+tEgzy^W}INoHu8~C8XF7y8J_N#lJ_MUzH9qG8atMYc|6OII2CDZ+&n>fFxk8(Fy zBk&$z4U5FxlK?OeoExG6X4>Bbdjzx+_)|i7U{P#OF+t-KO5-Ud7f+&%;6tOxGL_;?{oT%SxP z>D$s;_QR>pZVVkY_&4AQf>F9?QCTaAV>ofR4rvqcULZL`=WPJq5BzSfP*~+$d>;IF8YK`1*-Z0hzO;pD-ya{+9int0V2Dg+KPpQs5m@#aoPJ-gGC|5~YLd=ZFMG>%; znO_|x)Dc`An@m>YU1cR|&8kBr6C&!%d zM|;^1u6^VXxm>LW{g~iMh$nT1sUs>kHx@L!OSOke$G=EhtgsCkMM4^YRaLt1(inaR zcs!X*94HigcLG_(>wZNUA|1xphSGe&~U3=)y zq+<&!;0R&$j$ZoS;B{oXfU`|q-7_}Gws4cg!2cD0W*lWFT4u-@oPUppR~s$B4TU(4 zY!W+xLWp=DW#ovN!cDcnQ2x#jXRVY zg4sDj&d$PE8h|z#D>ad)N(huABvp(@$b$8CmEW=i3M=F^A#ykyxZcF-D30jg+E(^M z7Vefpactx5OEKVWLVsrGAIb{#km^fp#xdX^AtG39TmdwC=le{qq9tzNHNO0a1UJjH z1ye3tf!GQ-E!nStgUzF2HiI24n3Rm8=oW&pJWVZ&;}QdShA`AT%G+JR4iS>~X3-mr zqXJe5D}hF#S}M3k3_}osYPfiNssY}Mtd;4>7YDrRjIR=I#D8<}I6(EtJ_LMVn#YfT zUf_!u{ft+RFz!X0FiQwDL@<IqiH_>dU}6n$7a^Xqs4y`h27if!^8_-wsBWb0DDbMm+3}=n zf2JLooJ@BDH?s)yv?e4Zkqm04g*$f#&|k&z8~_IMK0Xs`{9Q}fm4xi}MU$;K8WR%I z^hB^Cy-~pE1-?ghRNw-z6ZC4*MSg6cAe(8!@DWl5xRV8(;a&-o(omW@dxC9j@i9UI z_A|_U_C6!U2$YXkm5RKc#%<1bf z@B^@&acm=_-*{COwB$?NJ*-h>xrutCQV3cd(m=_6T@IX!T1Ws05e0%Zs0qJ z{f3C+aPwy~X=3M0W-F0>jF4Qne6A<0nwXMNm4Dj42b_nbPJ%s#_#$DY3^P4qJi*}n z8t`+R@&GM6y2*C5hp;8AlG(=vpJWklRV7T>%1w24L&0FkpFsAg;0uDs3GwZUM%^fQ zLeT3);LC)H*C7O{t{$>mTEXXy;H&zWLX!10(;4qV!?dyyQ`^HGymBac`uM8+k4<_N z<9|M28zD7kMe*1Xl-h71f~*)J_{Dw%Jc?;2$^1!jHKaOw7zjn2PO?T!pCFVlRLf^o z4hBSp!Wss)ww?1ln|U9{E=d({j08acy{$;XIm4V;qBdj)-27PiDyLLechOL@yopzY z{{~o>g^H?n;AV`qh*E6hBtetf1METUb$>8ah!negl7`a-dftB zu9_221`QJFMB>OXM%}cM$&BTMT9>N80Q&E10||>PGP4zCc)U&^X~T}*2@lerDMjVX z5YCKbF`p|c1`$eK914P*$qI&)^bi}|vZIHAjx?Ye%-tsR8K8r?6X2ySH8;+Cj(?B~ zb}5?PPKiGwIHWr-X^mrF#An5lg>|6{@mOdjK{t$ZIXy1XR#T> zqx%mzILD3Uk|+^#)6*dtF5A%_B7nv_L7yk2mewx!djFX+u|rtJ(^3??MWnWAEJ&r5j8%rIw)0X20_M3STJy0$AZ zJq&g)Z(%Z^yq0BzJ#vGL8-WiK8VKwx2CI&OPGSt3lrQ?7gyEb~51b)nr+-(BpA6jd zPR?F6K<%ORcN3b$teEQwnQKf&?M)J@of^S1gvmZk@cy1AsIetDg46G(U|(edLX;e# z?$C{wgWpVu{=MZfRXfB8f^L2BXFMDMwwrUurHO1r0lJcq#j$ApQ&T}T^!tNAPa&5( z8P!b?&Y!?km~9N=kvhRgo>!y$g-c;m}x>HU>Tx*vd(xR z3KaSYF8H4iw79n{W}1-TGB;aeE~3AqWx_8sckUrU!V|o|e^1D4Ie*3?Z459GsVQVS17S9uE25+c6oqWwF3R9lQ z*3K6Il+C1jfqx+M%zB9Gbtjs0O!lHg2xp!mq>&yaI1%3=|IQ@|Z8!tD34eS6Qn;(W{4*9lo7uMlD!`+&ok-Za@U z&`HJq)bH)+9eK9NXdJB0KvSJP^ljOA+~9lW{9)iv2(6u_`vin}iF41OiqDLYFas%1 zs3{yI_?UWuSAWbnB=H6?ev5H48mm0mmL0pWnh;PRN(~Y z+n4uwN7lrd=IuRG8t~OW*a;A4JJK&8PKE7}2MO|O!GDvI09Y0^;E2eZau_>%9BbKqehGO@Dd|i;MrbKH%%XbwKM3k8{>=0U-lh z)0p8Tu9tX-@T{d9sBWTj4bXSmTDvNu&ib}Z>~d-9>cKmQ zaDOMj9tZkZpssrdF!;dj@3!n=q%z#EYNo3#Vtz=zrLU1qlM;+Fn_!P_yFPyc;17kE!sh4VG<^JLVvF+IdQ6s zv3A3JyQ3NiPuKap(49gx=W9_ehHxM!jMKnNEI>K35Nh`7fZsCgGsx1&%05ZKInVWV z2O!9g19Ls_>0luc0wIC>ZZjS>XpFqKfi2^#lqhCzt`R~U{v`8n#ZQQZLI?z-^nU@2 zdwt~UicOv`z=kLLM>kJiaAd&3A_PJqQ3ue7%w@+sNue*(LLwy5mrBwW92OcO4%lqi z4Q51R8(=$^pb!pP5bcGg<%v-8j+J9+dnY+f>+t* z2j+UPQ$ni$i3?u8u*VJGdt}_h_hB_8d@PD%_!G=P0aO?n2*fY(KKIKGsnk-`TkgT*c5GL zwXp1lCPOP{Q76r5DI|o_$k)!~BjLEueeQjpd;h!d^ZxUD-sgSZ|6Z2HEinBTDrm>P zANN)J*Q%(fB3vEq&rsgZzDvo2`avHldMi_wD`kd+S2u;8(Qfx?-i6*;aNQV&Y2Mj- z{gqtxb%)*j(uxQNw_B6x;rRSaU+(GG57nG*#>i~lt)9(| zSZ^da$gt$5CMviKS2F2`d_F?Q{dVWsDWJZ7=12r zvSpmik3}8A%ChMWE3k9}iaqhb>jK);#a#;WMaCA3n_6(-?zN-}$YrHkO1X+)4@fS#~xCX}Z9cmy< zTf`luI?hBS{R95PN$aG#m%*%amm$%nA)0--v5NQMhF=?AsuMQ`R}uTu%NqZdQa#6t z7^HeF>#e{#nNKd3Pt`}oCdXIx-_G)EhlF$wUH#|mNwA)l?N7hOUE)xn2ou?gEEZ^+egdyQMr-FEG(+>qx97|W9L>%c8f25zJ;vGKtCCr`CICl3p)l!eEy7K)Mn8J&Ywbj_uOPg5B@I{`5CjjazEb*iv!{g)wB^V zsgeTb_1hVq@3oy)i?SGi;E|t+5p(MRz{=>$&FRmh^(jLEi$W^5Kl=;>QnXQ_y&2Yd z7d0ygHEDpW?(@kJ2MpRxLLf`$?W7f@J=c2=UKnh?CO?|#_u6dxa9|9kJn+r!1jmw5 zQlaj{tlp_pGotU9pBpwsE^6WXp<=AHGqEnM^6M(1s01}=}$PP{cc!oeS`cs%xz;H zkb-?$#_P_`PNi|3deEBs1vpGVcIxxfg{%}D;mRK>vG?TWu+@rkomQ{Eml%K0^f}H+ zC>b^Vd9$^(F>y+n%INEu{&4s)R8r%d)cex08$1RT3Dn!KeAllz8ctf?3EmCr{8HBd zD~Y8p1ts9G+inlVLbufgJ{|V=3svW`ZV}TSuoqU`_#<+f(-hPhMNWG*8;){^UT7be%*a3;=(O559*p^4n@ zLfLyKeOjGe%?A5`{}7Cn++ub%PLC;wFqFj8d+Kl~pqz&`oxzqH#nBvUUb-I~rkFs0 z0f7fcY1tBbrREN!xR1Wk$$G_(mFZDKL;?}%%w^d@%-1W6NV?6dt%!p;l zhuI3M4WXM*Ng@)4b@Sdun3ecB6bGs4hHeZP4`PLN(_UGhpi;^S73;3&46(OJNG@)iB; z_TXS(BL0d_JPmyyvc(Qg&_{#44L@5i?jz<>kne&l%i9Npjjma!MGeNzm0JF>hSE$* zDoHgmQEW{CP&p9lI#p-}_h95`8N;MC_%4P8G1%qlCq|U=yOIer+9`R6>S+Tw$#1fV zWWMRn$Vo_Q{<90Cw8YY=Y9CnLRZ=!IXnHL_-22n902z=}#lCtks21bZj$d4A4E{Js zgN;{w*j6)Xu!-YU^N4Sw*Of8VcvFtYj1cYFma#0?{Dw;Jng9J?*2X%Hklbv}T>nF; z6V9d8A~aljYEp^UA%M3_6*>Mz(k6S;D>i$EJF5B%ZDF{>K9VJ?5&gQtGI{u`J8F#C zXQ+X{^S6a@1KsHZv4<|u(aT0J14`-f)|VfB5u-apbcxg|_Sqf9iyj*$J^GB)(j_IL zk=v%qL`pDai!0Z)`TO=!0XCHyR~(x^T>vD(S=_Lfa)Il<@Xb373g1cXD~jZSO%l+> zFzxvy5(4fCj%!}2BcAzzgR>;;j3~j~cQrVgwfW~2N1Hy(&PQJ#h;{sW4Y?;RWP5G5 z=Z70Hcv_F{Mvl@d0u^M{YP;Vp&V;!RoL-8aGMyDJWqjy?(u%^!Y?@;`+JMrf0CrZZ0J5<8nbp zQ-aJ**4DA`?c51ab1En5s>AJCXRXxB)mB5|9Ad9*>iWw`{U7(D2MRYlU#uGb;|;M3 zhn1Hq$^m$qDCc{n%5bVL?fLnm67l}RuglXfC?$^ic3N;9Qe_=a;TxY?t_BlYwuIaF zCe8^60lM5<=?^qPTF7*yzse0eUU{ETRq<@F0qz_7@ZwQVeIe~M#yZ0NKDyV6#y z9(lroeWqQxs;KmNnQJ5dQ6~}kQu1fqy{V;HJENIiYa3a8I2aS zi%f-tBkV}snrYN^E)oeHWApk2wJ1g_{F0z(j%Phi#k>D`9E4+gB#|GS+&q!K;@t9V>6pdE z3=Xi>`{FC{bmPUHEAul3tTH}e@aKXOs-93xIThjF$z0h#yV7+BgD$S6!2Di1VneVb zTlqA3XarK!NAqEh=*VMfH)TeSOC25?~ z)!9JcPL_r?obyfI?}=RkbX7G4k4kyTL^@-4Xl5Ae)b=rkl%I^XWL?19`iaB!o@=U? zrS{LQxYQyEtwCU9p*8~(@d|W=lzqEF7*vMEZaHx1$R&p2n;NSGMAL45eXEQ_`=wZL zWedJ$q0fCWs+=%;aDi?wI>jx<%k8Uw^Z07%RYghxfCE>#fip1&b#-|)vP+x^L67QQM>aMZ`V)t7LXePi%wv@WYo zLKot~o+~(r9BN2*;;Zmq8dSXhlz3bS#Arw@3{as=dx9lqEGV@L?+Kr@S=n{$c8u4g z&@dne`jFHTNVPwg#eR`HFC!Nh(qG>WWR!L4Vn>oQKq0Gvn=;?e+(xceHJie;q+>+ z#q7MiCK*GUkP7RFO>M&7yzJeW6BR>8Feq8Am0JoWq=|Q(BH#*RiqG++pg%(cr_3_X z9ryMmPn~|;((|M#XFQG{dtL-AK6|LkaG1!^G6zlqS1olY77cR#25rQ8D>v-yPXLEf zoEvrx8Ot0XTvbFr+&FifbN|-z{u7ocdfKpBn*#}wDAJcBv=PvIwt5gXh^my(*hK$R z;p0*!P9+9a;m|!fowXacNYGLl3R2t>Nc!|mO{a=-BkSl?xZD>VL3$t>YO1aib*l^I zApzoIBsPFpnJ~O9yOPYxf|`c4d?@03ySM$-E^OR^S`T|LMMmNz?>OqgtzTB;#f$o6 zFP(_{Iu@cfl6okyG8PS`V-P#-$6)#reRS$^>V*#gb>T$p$=sAcf{c~#Jrwy{d9{hd z48f^6leAsrRw|aXfn%;2o--`d0}%49k2JT0C{*p$ezPt4~RM&ZiO>O`<}L9^4Jf+`ZP!t}o|a>{?? z{(x}=cdfi1e)7IDt12g>vFN5t?z)9W)`VJ`j8E(DkjrTz;0psKAnB^(pR-2UKi59q z6_;zSD%5~#8B4bFy7aTpbAEFs>q*m%0;^HHAXOc;t1PCSz&E*joOCh_SZ1;ntg?KR zC!4taL5ISA5A)N=gOudngG3ct^KYv93Yw{fusUZ&CDVhBcgV3EsE_05(3B2ISKnvL z6bmSrRP|j8P)W@|TF$xD0A?jMr36KsQzg1CnAYRu<`lsCe0tf#^?lu|eX6vOOWnjuDk3%Hk`n8OK)PME8nAP6#_n+usR$9j3N z-;FYzTWav{Z5Ei(qVA6>C)#KvG=5nhG@Q{|*xLtQBwHb&QT^EDX`iHnr3s%pXCJZY zC&cIvrI4A#_yfDZ9yk~!l59QHbM(2A4W`+Lj^$)!P%DUo)tIXv7RR|GKw08W*WDi~ zhjciYW8#>eM#-6Tm>=}K@H@q^<w!Kge5yj0ybed=}I;sbTudkn;- zAFzzeWUcogN$5|*89>xM|ND)#$kAFT6tPOtq)MQ1G&9z7)DoAbB})SN%ytX}nD0Hi z*(Xg(Z`i!=hBfG~L!_ayv3XfDQ}zyFCUD?Rmg=YEHL*d|y9W(z`~f>1%pm!|lE#&z zD%b>_wH^+V1d=g7vSt(y{?P#Kg}=EA)Swe%$4lg#D12er`gf%Am~$DlD&ljia7G$% zq?+YiGY!rBy_qS03F}cMyZy4$#(wh&l^NT5kf{NUh%=qNwmY`1G_l|iPX34=xW-ys{TrakK5N~YCwfAjx5^)eoAa^BjcWE z_LqTBa?*4s`Iv0r*oIuZh^mFisib83t0b8VtfOe=vkON?hhcS{F%t#KO3`Y> ztvX#>_etOwlSd)$AoJa0x+i2YU^-%_cyD{q>(WjYiki#(i?Q>{;A91<(i^y1hLrwJ zNxoh;s3Z3ax;v_nzrK+_*VIQmw(x5sEtG_EK2t~)OYrj6ggkiF?~^GBoBVsDkq~$PM0Q8u>C2?XH!Pw`kn2 zb2D`f1JNT6M@r)3wQ3c-_{n*|QHmA4A1bRw<>jlZkh1-2{AhG+0Jfz?gNR(M!FViO zy}BRo2A5ES>E@ZP)>{q~c7~AU18qPa2vWPZDq-;pVX~!#nOl=dkUqdnn=zA~w^QyK^WR@4 z6;l4riL3hin?(+~>)J0O8;<^be!e}Zt8qCG7D)-GAlJ%fq`~!PiA8={w}=7gV+Y|3 zI6wSl+sV&BM@RF7{?Te0(7YZvmtP%pI_luqF?l))e&}Y-f3@DKc+{;r=f558zX#tzb(S`$xrw{>M$e(5;{08!Dy7Zi89Og=Pa58A z>17eEPPVcZ=@yvIQOWd0a_~UdT)~8{T54+a0Jbar z6LNOy9%SGeT`kCF<$b0^JB7xairzQ(Z*CR)m_Sg4!E zyVV+4e*ldVUMFzM8JMwM!xEO96v?4uYu3<* zcNzq#ahXX_phU1j*>w}PlT=+_SfW&vnt;aL%>qW$;K@h9&1RC*bvED}U955+ZZ4!M z_P&Xdzai2LSbFlM?OO;u^QjhH_TrQISFSy0*pQn>0unB{s)g0RW`4HWc{7DbUHy7I zbA7pRLst+5AC@h>e|Rk3vU{-Nspv}<&!aCO0DdB{C$4=$tW`~scY0*f&yY$N%DWhP z+8tvNi}Ycs;dm4J?)zC6fsyiVwEXv>tF6P|&-G0N?*a&x;fhbwac1yPWfd)aUo=$4z~WqY^{*H&(J^sr@f z-+VYlHsfJie)7sjnTD8Wi%hx0CDzSbX4l8t=$OE_~UWE zSVzv%3HWjTTiE}pZ9~jF9S_5>uz>R9V^8D3r@fDXdic7hDf4DSPLS}4#UERO%Gco8 z9Lgcn{4_pigcxDTih)uPs%2`HNw)l+bn%`0EoeTQJ51Y%dBK>sD&kU8WwKc?@g42b zWz6fxe+l8YNz&aY^(j>nl2>kgJKPp7!e6Ie{|0ot15Ncz#3*F#nzm4ad$;gYDo=^m zegP63nnKWzMKvA1x}cVY&=ufki}Y|C^hwbHwroABWw zMYK@Qx&Qay@!o7pe>RAU&E|T^Z!TmzpZ1k60`~WdASa~U2Mq$K{?cl?vdWX06(94kz2@k{XI2*N%4R|F>ALcE(WR_}##Yy` zlTxm!zTRAy&!`M*hF351Iswtw4ze_A1oQ)1IxL2!ZY>~%do zQH*n9VCMGmVc?0wQdn?#J0Xff6F{J5LWKSEim7O+QAoR~Uw4M^E`Q(F!QDyOrIlnn zt$(Z=b?fYevx2+2-#>jJqRpNk7WkC-V$IFOwd9?hOh9+WaZQSkm>acP!PVCg*B=vZ zKb_}*x#=XuNB5YB>l7wcV>oH=CsH=^m+=mVZCe?{Q@;j6IBmu&xg~P zIpRw+Jz2B|7%Vw?L?zk(wcdpZNYO)S%bD)F7#lwELa|6Lr}oy#T>NIc6E?qdCut(? z1s(mtC!TnYs*+itZi^xv*bxIY3sP$mXTC4sv2Xueh!h9A#53$vJA{vA_+KnzqTieL zG(|Q%qljtXXfdUgy#M{sh1kxz_FiV!Gxm{SX)R{;RY-BM?c9cegluXdcMp3-a?&cz z3uRUY^0e6N?aw~El+I;HhNjkfe<}Rq#9Koi1S8upTj$E2-E}8+z^q75np@HLB_DLA z+97oPnNmMU{{APioB$tvudy1K?B%EH_7flEhE72Y=||q{)%>G^b5q^#d2`c;C6BJoD_C>+6-TtqZnP3`uiR6Z(~{qDMcSl3&lg z336DB2S?uum>^)+fR~r2YA1W2JAD_T%5A8+_J1P>7#qK_|4E5|!#vpmug2RYemZTa z1pl)IGHvOYwIlR($+I#xVO}bX#Zu!L*^sD$8r!pJV$D)WU9N$3Yt?z5f35A|eu_Dk zu)`bn^t}5`nLuvS#ztAMyuBePpU7km**t^Lip#^+Bes@m}#v`ZPXDB%#sw(=kq}UuK0qip{#gBYG?reiM!T$##x%!5-sK5Ll#k#G1%3Utyh%zv*t2{qtG!qz{MPB!welPb_;~)8 z=T4MzsfXS92uwGTNv^%j^4~+gsQiGRY=XVUJf;Y!@fl4`d3oPK@WsA=P2_}a&66w% zD-xB-q1f!8AMHyo`q~|?FVOrJJbCcRK>XciSd$E*7j*O747l)S-;VuA2q#j{&tnnU zss046Mf+D>+*;(XSl4|F-q@^)`a9@dZsAk(@k|QNJo(m7@#!Ii&a$-(Bv+>p8kEmX z=?EB0lf38j5PomjC?^*k*}KkC@iqBmw)m{&gsv@xisai9hbt^gp!b5{ct8Xk!+_DZcw7Hg7aC)cju{137iof-j1~mplNS$E-~IDw$?u8q=%rHL|ASmF!N-i z?!ALxzRD?e?okeJm5W>%wv^rfB|phzv5PRJxbZsjO#Fn)MM+X3`K=xgiclEpk>i<`z}c-a9SWxJ!kOU2R8 z6wIXpu+!R_!={rQ1hX%NM^&D)dEzwkq_6|hW%dxF7^KjIQ(YI RV(mWwq^oJ9QKRmN`hS*mGUNaN delta 6364 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 delta 2405 zcmbu-YdjMQ0|xNTVw=SpBe#)TLKsoGB-U~{ZtY}|d*Qf~klV6Nh;8B=Or5A%NSNDP zmc%H@bWkq243pfFP;!mlzMl8X`{8}Q{eRDw=fl$@u_2kAKomW2Quot77zY4Ac5Jbh z&T(VQ1tB!&ArzPRGiv2?M@RA{*8|Af!B__=?IrDo%rwK{zZ>7`KEjBFRVvXe54%_F z^&1A=TBxjdXlpo0=Q5MtnzscW4@BH>p(4+V4T9l79NB+#;@;EwDR=Aj1tFH>#WPm2HrVVoR=& z;hC{CM5k89k&C1tg`?UA#Sn~!)&8yDG}0B5^p~FnY)hW#?n{h8qTSE02uV!oD;3H3 zfK=d*=ERPe{*nmN7ciZLQsf zc-di!W@dBKF+!@MP}(uI{{y~iPH8=)W$rU>D{l#T7f>K(zm976)t5+h^?|L%`Vft3 zpd%OK&kDIgf%_MjYLPm@b$r*V4I6H=;nRgiAd;8cMl~se)M4uAw?ULx| zEXu;&sxyY4$2vDOFP?PsH6i73-;h9 zlhH0fs^vaZ!F7_bUHgUYkZM#&q=ehpGy+lFdGaRdpJY1n9*EFw-LWN62ij_4_EBG3 zAM+PjFKEbPUqfR>#QAvnRD9NnW@H0S54h>ug zbo;?;hq3-)2ZlYsUm9Um$&E8#6S8+Bo%%#Pbi&Tw9-fD4F^2GIwAx~$&V+(=yR{MX zZ|Z8ms&mn$4t3af22sSJq?cmaf6F6^4b8`&jmxpcT`3FCAyK&Jhi9({A_aOX%@=7y zhAxWs1;LTT)GeR!bGJGI?Dm9?L=3hNH|lZK5u;;?gJQo%>^SQ5$Bh5gsGI5;953mz z+pX;8i*1(r?Q))x^O;=f@2B-ASJgkpWV0CaOv1N`&4e33rC!f^dI|iXN0?`$kMwEd zGkLeR+q_Pdr5ozRKhc}106MmRyME0ZGl>ntooiwcja=*eVNLoGZwDpC7uFJWWj*Yj z58Y>$dSop@H+~&hEM2buyQqrK%KlnLkBq22or#o0=Rg>Cllj?E?)^++^W*i?>3YgSChmfY z4C2w43q3opL5xeEN3}*$=2G-%mzd zBZ?z{u3|=A+W3O7m1{X9%>K(bQ?Ut{^F_bc1ejB``6{bdF6+~wK2!cwB_T+3{= ze#BaTlS6n=JOX!4x7!Nl0pio-kHgXqrI3~e?^p8*wG!UGL3O?@!DW2RuZN%HtJ;() zpSYaNOXVzDAKuxY-h-Zpa4MI=1&_-nEsRa=Dp676ABN`U&c+&S7PX0MtrCjFa0pzK zG+OEI@-A43nw>)GF>e(+PQ+}NXgLh44TPL*eITvj_yG(zbHOvB+{S7|fV~z^L0h^H zy3UBGq+p((HRccYie%ebXmmJ+*yCT2w=t$=>1B?>gqTl@_B$eY=gj8sBniePHhtP`55G>%z9K)_#?>$p&K9QheBN{ z#;Ff;n+Iw&`^@8(p~Cxx82Q~ANbvQAAc`0CO{bK=5+4D+%1MRX9*!^rhhj%q8S4}# z3sx>)7OYkI-Yc#{`cM0sh7ZKaMpZ6x>QFk=wt+kOYsdtsU&_`r)4M-zFm9haypZkJHudG9(oNhNS{ z*fDp+XwluQLyMTOZnaA!liXTPHzX(0sB|E5Xk_gG`ok$#0&G#WUH#Jmj|bjQZraMa z%&mvHMQCl7ayEDYUKT_Q;@!iPz6+LSxhcajUx`jg2^pM?4_29sNIhWnFA)Ew{{@8* zFZyi1SK6OBFG!2`g>p67aqUlke1tDQ=V~F6UO@_^WFX0Po_VbBfGky8;BnbD*EJCe z9b4>)9p1h39b$#ld9+@BwPb2)KRtibZ12v>k=J+P{!%MS+;N?3TX%j1Vo97}+I-yF z*88b3E5SywI&&r Date: Thu, 15 Sep 2016 11:46:19 -0400 Subject: [PATCH 17/18] Remove test, fix delete social login button --- .../settings/manage-social-accounts.client.view.html | 7 +++++-- modules/users/tests/e2e/users.e2e.tests.js | 11 ----------- 2 files changed, 5 insertions(+), 13 deletions(-) diff --git a/modules/users/client/views/settings/manage-social-accounts.client.view.html b/modules/users/client/views/settings/manage-social-accounts.client.view.html index abf706b242..7d1f5536d2 100644 --- a/modules/users/client/views/settings/manage-social-accounts.client.view.html +++ b/modules/users/client/views/settings/manage-social-accounts.client.view.html @@ -8,8 +8,11 @@

- + +

diff --git a/modules/users/tests/e2e/users.e2e.tests.js b/modules/users/tests/e2e/users.e2e.tests.js index 9cea32712b..aab8cc6fcc 100644 --- a/modules/users/tests/e2e/users.e2e.tests.js +++ b/modules/users/tests/e2e/users.e2e.tests.js @@ -311,17 +311,6 @@ describe('Users E2E Tests:', function () { expect(element.all(by.css('.error-text')).get(1).getText()).toBe('Password is required.'); }); - it('Should autofocus on the username field', function() { - // Make sure user is signed out first - signout(); - // Sign in - browser.get('http://localhost:3001/authentication/signin'); - // Pause a moment as the autofocus timeout kick ins - browser.sleep(150); - // The ID of the username field should be the same as the ID of the current active element - expect(element(by.model('vm.credentials.username')).getId()).toEqual(browser.driver.switchTo().activeElement().getId()); - }); - it('Verify that the user is logged in', function() { // Make sure user is signed out first signout(); From 33fb7d1e2e454201caf8d85d64dd3878d0eef32b Mon Sep 17 00:00:00 2001 From: hyperreality Date: Sat, 17 Sep 2016 17:58:43 -0400 Subject: [PATCH 18/18] rebase --- .../views/settings/manage-social-accounts.client.view.html | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/modules/users/client/views/settings/manage-social-accounts.client.view.html b/modules/users/client/views/settings/manage-social-accounts.client.view.html index 7d1f5536d2..619a41ade7 100644 --- a/modules/users/client/views/settings/manage-social-accounts.client.view.html +++ b/modules/users/client/views/settings/manage-social-accounts.client.view.html @@ -7,10 +7,9 @@