From 31ce925b700182c57aebed63544cd9a294dceff0 Mon Sep 17 00:00:00 2001 From: Luca Mussi Date: Thu, 15 Jan 2015 21:41:55 +0100 Subject: [PATCH 01/10] added lowercase and trim also for username_and_email field --- lib/config/at_config.js | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/lib/config/at_config.js b/lib/config/at_config.js index e488fba30..54aed24dc 100644 --- a/lib/config/at_config.js +++ b/lib/config/at_config.js @@ -4,6 +4,16 @@ //Fields +AccountsTemplates.addField({ + _id: 'username_and_email', + displayName: 'usernameOrEmail', + placeholder: 'usernameOrEmail', + type: 'text', + required: true, + trim: true, + lowercase: true +}); + AccountsTemplates.addField({ _id: 'username', type: 'text', From d50e61a248fe3c2273a63d83ed545669c739c6fd Mon Sep 17 00:00:00 2001 From: Luca Mussi Date: Thu, 15 Jan 2015 21:42:38 +0100 Subject: [PATCH 02/10] added updateUserNames migration to convert usernames to lowercase --- server/migrations.js | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/server/migrations.js b/server/migrations.js index a488ba1df..c0bf870ee 100644 --- a/server/migrations.js +++ b/server/migrations.js @@ -120,6 +120,29 @@ var migrationsList = { }); return i; }, + updateUserNames: function () { + var i = 0; + var allUsers = Meteor.users.find(); + console.log('> Found '+allUsers.count()+' users.\n'); + + allUsers.forEach(function(user){ + i++; + console.log('> Updating user '+user._id+' ('+user.username+' -> ' + user.username.toLowerCase() + ')'); + + try { + Meteor.users.update(user._id, { + $set: { + username: user.username.toLowerCase() + } + }); + } + catch (err) { + console.warn('> Unable to convert username ' + user.username + ' to lowercase!'); + console.warn('> Please try to fix it by hands!! :('); + } + }); + return i; + }, updateUserProfiles: function () { var i = 0; var allUsers = Meteor.users.find(); From 9f63765b615a74c06bdd2d687a9b6520fc92bd6c Mon Sep 17 00:00:00 2001 From: Luca Mussi Date: Wed, 28 Jan 2015 22:22:03 +0100 Subject: [PATCH 03/10] better field configuration --- lib/config/at_config.js | 38 ++++++++++++++++++-------------------- 1 file changed, 18 insertions(+), 20 deletions(-) diff --git a/lib/config/at_config.js b/lib/config/at_config.js index 54aed24dc..390194645 100644 --- a/lib/config/at_config.js +++ b/lib/config/at_config.js @@ -3,17 +3,11 @@ ////////////////////////////////// -//Fields -AccountsTemplates.addField({ - _id: 'username_and_email', - displayName: 'usernameOrEmail', - placeholder: 'usernameOrEmail', - type: 'text', - required: true, - trim: true, - lowercase: true -}); +var removeSpaces = function(value){ + return value.replace(" ", ""); +}; +//Fields AccountsTemplates.addField({ _id: 'username', type: 'text', @@ -22,7 +16,8 @@ AccountsTemplates.addField({ minLength: 3, errStr: 'error.minChar', trim: true, - lowercase: true + lowercase: true, + transform: removeSpaces }); AccountsTemplates.removeField('email'); @@ -33,7 +28,8 @@ AccountsTemplates.addField({ re: /.+@(.+){2,}\.(.+){2,}/, errStr: 'error.accounts.Invalid email', trim: true, - lowercase: true + lowercase: true, + transform: removeSpaces }); AccountsTemplates.removeField('password'); @@ -45,14 +41,16 @@ AccountsTemplates.addField({ errStr: 'error.minChar' }); -/* - AccountsTemplates.addField({ - _id: 'username_and_email', - type: 'text', - displayName: 'Name or Email', - placeholder: 'name or email', - }); - */ +AccountsTemplates.addField({ + _id: 'username_and_email', + type: 'text', + required: true, + displayName: 'usernameOrEmail', + placeholder: 'usernameOrEmail', + trim: true, + lowercase: true, + transform: removeSpaces +}); //Routes From a8222efecaa962157ae230e63c7a1e25682a7a65 Mon Sep 17 00:00:00 2001 From: Luca Mussi Date: Thu, 29 Jan 2015 00:25:24 +0100 Subject: [PATCH 04/10] package updates for useraccounts:unstyled@1.6.1 --- .meteor/packages | 16 ++++++------ .meteor/release | 2 +- .meteor/versions | 64 +++++++++++++++++++++++++----------------------- 3 files changed, 42 insertions(+), 40 deletions(-) diff --git a/.meteor/packages b/.meteor/packages index 4ca883d40..aab51d514 100644 --- a/.meteor/packages +++ b/.meteor/packages @@ -22,13 +22,13 @@ http iron:router -meteorhacks:fast-render -meteorhacks:subs-manager +meteorhacks:fast-render@2.1.5 +meteorhacks:subs-manager@1.2.2 meteorhacks:npm aldeed:autoform -aldeed:collection2 -aldeed:simple-schema +aldeed:collection2@2.3.0 +aldeed:simple-schema@1.2.0 mrt:jquery-hotkeys mrt:cookies @@ -41,15 +41,14 @@ sacha:juice chuangbo:marked percolatestudio:synced-cron npm-container -matb33:collection-hooks +matb33:collection-hooks@0.7.7 djedi:sanitize-html rajit:bootstrap3-datepicker bengott:avatar jparker:gravatar -tap:i18n -useraccounts:unstyled@1.4.0 +tap:i18n@1.2.1 tsega:bootstrap3-datetimepicker@3.1.3_1 -momentjs:moment +momentjs:moment@2.8.4 # Testing @@ -86,3 +85,4 @@ telescope-releases telescope-getting-started # Custom Packages +useraccounts:unstyled@1.6.1 diff --git a/.meteor/release b/.meteor/release index fdc658350..90f87be95 100644 --- a/.meteor/release +++ b/.meteor/release @@ -1 +1 @@ -METEOR@1.0.2.1 +METEOR@1.0.3.1 diff --git a/.meteor/versions b/.meteor/versions index bf470e37f..2f9415904 100644 --- a/.meteor/versions +++ b/.meteor/versions @@ -1,16 +1,16 @@ accounts-base@1.1.3 accounts-facebook@1.0.3 accounts-oauth@1.1.3 -accounts-password@1.0.5 +accounts-password@1.0.6 accounts-twitter@1.0.3 accounts-ui@1.1.4 -accounts-ui-unstyled@1.1.5 +accounts-ui-unstyled@1.1.6 aldeed:autoform@4.2.2 -aldeed:collection2@2.3.0 -aldeed:simple-schema@1.2.0 +aldeed:collection2@2.3.1 +aldeed:simple-schema@1.3.0 application-configuration@1.0.4 artwells:queue@0.0.3 -autoupdate@1.1.4 +autoupdate@1.1.5 backbone@1.0.0 base64@1.0.2 bengott:avatar@0.7.3 @@ -20,12 +20,13 @@ blaze-tools@1.0.2 boilerplate-generator@1.0.2 callback-hook@1.0.2 ccan:cssreset@1.0.0 -check@1.0.3 +cfs:http-methods@0.0.27 +check@1.0.4 chuangbo:cookie@1.1.0 chuangbo:marked@0.3.5 cmather:handlebars-server@2.0.0 coffeescript@1.0.5 -ddp@1.0.13 +ddp@1.0.14 deps@1.0.6 djedi:sanitize-html@1.3.0 ejson@1.0.5 @@ -38,20 +39,20 @@ geojson-utils@1.0.2 handlebars@1.0.2 html-tools@1.0.3 htmljs@1.0.3 -http@1.0.9 +http@1.0.10 id-map@1.0.2 -iron:controller@1.0.6 -iron:core@1.0.6 -iron:dynamic-template@1.0.6 -iron:layout@1.0.6 -iron:location@1.0.6 -iron:middleware-stack@1.0.6 -iron:router@1.0.6 -iron:url@1.0.6 +iron:controller@1.0.7 +iron:core@1.0.7 +iron:dynamic-template@1.0.7 +iron:layout@1.0.7 +iron:location@1.0.7 +iron:middleware-stack@1.0.7 +iron:router@1.0.7 +iron:url@1.0.7 jparker:crypto-core@0.1.0 jparker:crypto-md5@0.1.1 jparker:gravatar@0.3.1 -jquery@1.0.2 +jquery@1.11.3 json@1.0.2 kestanous:herald@1.1.3 kestanous:herald-email@0.4.2 @@ -60,20 +61,22 @@ less@1.0.12 livedata@1.0.12 localstorage@1.0.2 logging@1.0.6 -matb33:collection-hooks@0.7.7 +matb33:collection-hooks@0.7.9 meteor@1.1.4 meteor-platform@1.2.1 meteorhacks:async@1.0.0 -meteorhacks:fast-render@2.1.5 +meteorhacks:fast-render@2.3.0 +meteorhacks:inject-data@1.2.1 meteorhacks:kadira@2.15.1 meteorhacks:kadira-binary-deps@1.3.1 meteorhacks:meteorx@1.2.1 meteorhacks:npm@1.2.2 -meteorhacks:subs-manager@1.2.2 +meteorhacks:picker@1.0.1 +meteorhacks:subs-manager@1.2.4 minifiers@1.1.3 minimongo@1.0.6 mobile-status-bar@1.0.2 -momentjs:moment@2.8.4 +momentjs:moment@2.9.0 mongo@1.0.11 mongo-livedata@1.0.7 mrt:cookies@0.3.0 @@ -94,21 +97,20 @@ reactive-dict@1.0.5 reactive-var@1.0.4 reload@1.1.2 retry@1.0.2 -routepolicy@1.0.3 +routepolicy@1.0.4 sacha:juice@0.1.1 sacha:spin@2.0.4 service-configuration@1.0.3 session@1.0.5 sha@1.0.2 -softwarerero:accounts-t9n@1.0.5 -spacebars@1.0.4 +softwarerero:accounts-t9n@1.0.6 +spacebars@1.0.5 spacebars-compiler@1.0.4 spiderable@1.0.6 srp@1.0.2 standard-app-packages@1.0.4 stylus@1.0.6 -tap:http-methods@0.0.23 -tap:i18n@1.2.1 +tap:i18n@1.3.2 telescope-api@0.0.0 telescope-base@0.0.0 telescope-daily@0.0.0 @@ -132,14 +134,14 @@ telescope-tags@0.0.0 telescope-theme-base@0.0.0 telescope-theme-hubble@0.0.0 telescope-update-prompt@0.1.0 -templating@1.0.10 -tracker@1.0.4 +templating@1.0.11 +tracker@1.0.5 tsega:bootstrap3-datetimepicker@3.1.3_3 twitter@1.1.3 ui@1.0.5 underscore@1.0.2 url@1.0.3 -useraccounts:core@1.4.1 -useraccounts:unstyled@1.4.1 -webapp@1.1.5 +useraccounts:core@1.6.1 +useraccounts:unstyled@1.6.1 +webapp@1.1.6 webapp-hashing@1.0.2 From 2737bd9e95f3e3d65fa274407d679bd48ee76d16 Mon Sep 17 00:00:00 2001 From: Luca Mussi Date: Mon, 16 Feb 2015 23:08:58 +0100 Subject: [PATCH 05/10] set lowercaseUsername option --- lib/config/at_config.js | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/lib/config/at_config.js b/lib/config/at_config.js index 390194645..8d8d44cb0 100644 --- a/lib/config/at_config.js +++ b/lib/config/at_config.js @@ -15,9 +15,6 @@ AccountsTemplates.addField({ required: true, minLength: 3, errStr: 'error.minChar', - trim: true, - lowercase: true, - transform: removeSpaces }); AccountsTemplates.removeField('email'); @@ -27,9 +24,6 @@ AccountsTemplates.addField({ required: true, re: /.+@(.+){2,}\.(.+){2,}/, errStr: 'error.accounts.Invalid email', - trim: true, - lowercase: true, - transform: removeSpaces }); AccountsTemplates.removeField('password'); @@ -47,9 +41,6 @@ AccountsTemplates.addField({ required: true, displayName: 'usernameOrEmail', placeholder: 'usernameOrEmail', - trim: true, - lowercase: true, - transform: removeSpaces }); @@ -69,6 +60,7 @@ AccountsTemplates.configure({ showForgotPasswordLink: true, confirmPassword: false, overrideLoginErrors: true, + lowercaseUsername: true, negativeFeedback: false, positiveFeedback: false, From a5e7295d90368dbf1d27c16c2898a4f2f0fe6c3b Mon Sep 17 00:00:00 2001 From: Luca Mussi Date: Thu, 12 Mar 2015 09:43:25 +0100 Subject: [PATCH 06/10] aligned to devel --- .meteor/packages | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.meteor/packages b/.meteor/packages index 8f29927a4..1f8a223c0 100644 --- a/.meteor/packages +++ b/.meteor/packages @@ -22,8 +22,8 @@ http iron:router -meteorhacks:fast-render@2.1.5 -meteorhacks:subs-manager@1.2.2 +meteorhacks:fast-render +meteorhacks:subs-manager meteorhacks:npm aldeed:autoform@5.0.0 @@ -40,12 +40,13 @@ sacha:juice chuangbo:marked percolatestudio:synced-cron npm-container -matb33:collection-hooks@0.7.7 +matb33:collection-hooks djedi:sanitize-html rajit:bootstrap3-datepicker bengott:avatar jparker:gravatar -tap:i18n@1.2.1 +useraccounts:unstyled@1.8.1 +tap:i18n tsega:bootstrap3-datetimepicker@3.1.3_1 momentjs:moment aslagle:reactive-table @@ -87,4 +88,3 @@ telescope-subscribe-to-posts telescope-tagline-banner # Custom Packages -useraccounts:unstyled@1.8.1 From ca334b898bb8c6b874751e418ec084dd598ae082 Mon Sep 17 00:00:00 2001 From: Luca Mussi Date: Thu, 12 Mar 2015 09:44:06 +0100 Subject: [PATCH 07/10] aligned to devel --- .meteor/packages | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.meteor/packages b/.meteor/packages index 1f8a223c0..f7ce087bf 100644 --- a/.meteor/packages +++ b/.meteor/packages @@ -45,8 +45,8 @@ djedi:sanitize-html rajit:bootstrap3-datepicker bengott:avatar jparker:gravatar -useraccounts:unstyled@1.8.1 tap:i18n +useraccounts:unstyled@1.8.1 tsega:bootstrap3-datetimepicker@3.1.3_1 momentjs:moment aslagle:reactive-table From 4dc433c757ab37726269bfe8a8690c42358f07a5 Mon Sep 17 00:00:00 2001 From: Luca Mussi Date: Thu, 12 Mar 2015 10:11:10 +0100 Subject: [PATCH 08/10] updated updateUserNames --- server/migrations.js | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/server/migrations.js b/server/migrations.js index 798d7cbb5..4967fa77e 100644 --- a/server/migrations.js +++ b/server/migrations.js @@ -127,13 +127,31 @@ var migrationsList = { allUsers.forEach(function(user){ i++; - console.log('> Updating user '+user._id+' ('+user.username+' -> ' + user.username.toLowerCase() + ')'); + + // Perform the same transforms done by useraccounts with `lowercaseUsernames` set to `true` + var oldUsername = user.username; + var username = user.username; + username = username.trim().replace(/\s+/gm, ' '); + user.profile.username = user.profile.name || username; + delete user.profile.name; + username = username.toLowerCase().replace(/\s+/gm, ''); + user.username = username; + + if (user.emails.length > 0) { + _.each(user.emails, function(email){ + email.address = email.address.toLowerCase().replace(/\s+/gm, ''); + }); + } + + console.log('> Updating user '+user._id+' ('+oldUsername+' -> ' + user.username + ')'); try { Meteor.users.update(user._id, { $set: { - username: user.username.toLowerCase() - } + emails: user.emails, + profile: user.profile, + username: user.username, + }, }); } catch (err) { From dfb32ee47c589a292336fec9591af523c7e41d90 Mon Sep 17 00:00:00 2001 From: Luca Mussi Date: Thu, 12 Mar 2015 10:11:48 +0100 Subject: [PATCH 09/10] cleanup --- lib/config/at_config.js | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/lib/config/at_config.js b/lib/config/at_config.js index 965282861..c6140df35 100644 --- a/lib/config/at_config.js +++ b/lib/config/at_config.js @@ -1,3 +1,8 @@ +/* global + AccountsTemplates: false, + getSetting: false +*/ + ////////////////////////////////// // AccountsTemplates configuration ////////////////////////////////// @@ -9,10 +14,6 @@ if (Meteor.isServer) { }); } -var removeSpaces = function(value){ - return value.replace(" ", ""); -}; - //Fields AccountsTemplates.addField({ _id: 'username', From 73bb536c52732b066703e8c20ee3d93c9de3fc81 Mon Sep 17 00:00:00 2001 From: Luca Mussi Date: Thu, 12 Mar 2015 10:12:47 +0100 Subject: [PATCH 10/10] profile.name -> profile.username --- client/views/users/account/user_account.html | 6 +++--- client/views/users/account/user_account.js | 2 +- client/views/users/list/users.js | 2 +- client/views/users/profile/user_info.html | 4 ++-- lib/publications.js | 6 +++--- lib/users.js | 2 +- server/users.js | 4 ++-- 7 files changed, 13 insertions(+), 13 deletions(-) diff --git a/client/views/users/account/user_account.html b/client/views/users/account/user_account.html index 049099887..0536d38f3 100644 --- a/client/views/users/account/user_account.html +++ b/client/views/users/account/user_account.html @@ -1,6 +1,6 @@ \ No newline at end of file + diff --git a/client/views/users/account/user_account.js b/client/views/users/account/user_account.js index 1bcab3c61..73e185612 100644 --- a/client/views/users/account/user_account.js +++ b/client/views/users/account/user_account.js @@ -47,7 +47,7 @@ Template[getTemplate('userAccount')].events({ var email = $target.find('[name=email]').val(); var user = this; var update = { - "profile.name": name, + "profile.username": name, "profile.slug": slugify(name), "profile.bio": $target.find('[name=bio]').val(), "profile.email": email, diff --git a/client/views/users/list/users.js b/client/views/users/list/users.js index 144ab6b30..fc28df74e 100644 --- a/client/views/users/list/users.js +++ b/client/views/users/list/users.js @@ -7,7 +7,7 @@ Template[getTemplate('users')].helpers({ fields: [ { key: 'avatar', label: '', tmpl: Template.users_list_avatar, sortable: false }, { key: 'username', label: 'Username', tmpl: Template.users_list_username }, - { key: 'profile.name', label: 'Display Name' }, + { key: 'profile.username', label: 'Display Name' }, { key: 'profile.email', label: 'Email', tmpl: Template.users_list_email }, { key: 'createdAt', label: 'Member Since', tmpl: Template.users_list_created_at, sort: 'descending' }, { key: 'postCount', label: 'Posts' }, diff --git a/client/views/users/profile/user_info.html b/client/views/users/profile/user_info.html index 22b03db78..772d43311 100644 --- a/client/views/users/profile/user_info.html +++ b/client/views/users/profile/user_info.html @@ -12,7 +12,7 @@ {{/if}} {{_ "name"}} - {{profile.name}} + {{profile.username}} {{_ "member_since"}}: @@ -52,4 +52,4 @@ {{/if}} {{/if}} - \ No newline at end of file + diff --git a/lib/publications.js b/lib/publications.js index a4d676fc4..d4ebb91c0 100644 --- a/lib/publications.js +++ b/lib/publications.js @@ -8,7 +8,7 @@ privacyOptions = { // true means exposed postCount: true, slug: true, username: true, - 'profile.name': true, + 'profile.username': true, 'profile.notifications': true, 'profile.bio': true, 'profile.github': true, @@ -23,14 +23,14 @@ privacyOptions = { // true means exposed 'votes.upvotedComments': true, 'votes.upvotedPosts': true }; - + // minimum required properties to display avatars avatarOptions = { _id: true, email_hash: true, slug: true, username: true, - 'profile.name': true, + 'profile.username': true, 'profile.github': true, 'profile.twitter': true, 'services.twitter.profile_image_url': true, diff --git a/lib/users.js b/lib/users.js index becb6687f..0b42d84c1 100644 --- a/lib/users.js +++ b/lib/users.js @@ -34,7 +34,7 @@ getUserName = function(user){ } }; getDisplayName = function(user){ - return (user.profile && user.profile.name) ? user.profile.name : getUserName(user); + return (user.profile && user.profile.username) ? user.profile.username : getUserName(user); }; getDisplayNameById = function(userId){ return getDisplayName(Meteor.users.findOne(userId)); diff --git a/server/users.js b/server/users.js index cdd6fb9f7..d892e5f1c 100644 --- a/server/users.js +++ b/server/users.js @@ -27,8 +27,8 @@ Accounts.onCreateUser(function(options, user){ user.email_hash = getEmailHash(user); // set username on profile - if (!user.profile.name) - user.profile.name = user.username; + if (!user.profile.username) + user.profile.username = user.username; // create slug from username user.slug = slugify(getUserName(user));