The communications platform that puts data protection first.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
Rocket.Chat/server/methods/getUsernameSuggestion.coffee

69 lines
1.7 KiB

slug = (text) ->
text = slugify text, '.'
return text.replace(/[^0-9a-z-_.]/g, '')
usernameIsAvaliable = (username) ->
if username.length < 1
return false
if username is 'all'
return false
return not RocketChat.models.Users.findOneByUsername({$regex : new RegExp(username, "i") })
@generateSuggestion = (user) ->
usernames = []
username = undefined
usernames.push slug user.name
nameParts = user?.name?.split()
if nameParts.length > 1
first = nameParts[0]
last = nameParts[nameParts.length - 1]
usernames.push slug first[0] + last
usernames.push slug first + last[0]
if user.profile?.name?
usernames.push slug user.profile.name
if user.services?
for serviceName, service of user.services
if service.name?
usernames.push slug service.name
else if service.username?
usernames.push slug service.username
if user.emails?.length > 0
for email in user.emails when email.address? and email.verified is true
usernames.push slug email.address.replace(/@.+$/, '')
for email in user.emails when email.address? and email.verified is true
usernames.push slug email.address.replace(/(.+)@(\w+).+/, '$1.$2')
for item in usernames
if usernameIsAvaliable item
username = item
break
if usernames[0]? and usernames[0].length > 0
index = 0
while not username?
index++
if usernameIsAvaliable usernames[0] + '-' + index
username = usernames[0] + '-' + index
if usernameIsAvaliable username
return username
return undefined
RocketChat.generateUsernameSuggestion = generateSuggestion
Meteor.methods
getUsernameSuggestion: ->
if not Meteor.userId()
throw new Meteor.Error 203, '[methods] getUsernameSuggestion -> Usuário não logado'
user = Meteor.user()
return generateSuggestion(user)