Prevent users from signing up with or changing to an email-like username

This commit is contained in:
Scott Erickson 2016-07-25 16:33:40 -07:00
parent 782aacf35e
commit 053ce34faf
4 changed files with 11 additions and 1 deletions

View file

@ -287,6 +287,7 @@
email_good: "Email looks good!" email_good: "Email looks good!"
name_taken: "Username already taken! Try {{suggestedName}}?" name_taken: "Username already taken! Try {{suggestedName}}?"
name_available: "Username available!" name_available: "Username available!"
name_is_email: "Username may not be an email"
choose_type: "Choose your account type:" choose_type: "Choose your account type:"
teacher_type_1: "Teach programming using CodeCombat!" teacher_type_1: "Teach programming using CodeCombat!"
teacher_type_2: "Set up your class" teacher_type_2: "Set up your class"

View file

@ -231,7 +231,7 @@ module.exports = class AccountSettingsView extends CocoView
$('.nano').nanoScroller({scrollTo: @$el.find('.has-error')}) $('.nano').nanoScroller({scrollTo: @$el.find('.has-error')})
else else
noty noty
text: res.responseText text: res.responseJSON?.message or res.responseText
type: 'error' type: 'error'
layout: 'topCenter' layout: 'topCenter'
timeout: 5000 timeout: 5000

View file

@ -146,6 +146,11 @@ module.exports = class BasicInfoView extends CocoView
}) })
forms.clearFormAlerts(@$el) forms.clearFormAlerts(@$el)
if data.name and forms.validateEmail(data.name)
forms.setErrorToProperty(@$el, 'name', $.i18n.t('signup.name_is_email'))
return false
res = tv4.validateMultiple data, @formSchema() res = tv4.validateMultiple data, @formSchema()
forms.applyErrorsToForm(@$('form'), res.errors) unless res.valid forms.applyErrorsToForm(@$('form'), res.errors) unless res.valid
return res.valid return res.valid

View file

@ -361,6 +361,10 @@ UserSchema.pre('save', (next) ->
@set('email', undefined) @set('email', undefined)
@set('emailLower', undefined) @set('emailLower', undefined)
if name = @get('name') if name = @get('name')
filter = /^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,63}$/i # https://news.ycombinator.com/item?id=5763990
if filter.test(name)
return next(new errors.UnprocessableEntity('Name may not be an email'))
@set('nameLower', name.toLowerCase()) @set('nameLower', name.toLowerCase())
else else
@set('name', undefined) @set('name', undefined)