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

93 lines
2.4 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
if Meteor.settings.public.sandstorm
usernames.push user.services.sandstorm.preferredHandle
if Match.test(user?.name, String)
if RocketChat.settings.get 'UTF8_Names_Slugify'
usernames.push slug user.name
else
usernames.push user.name
nameParts = user?.name?.split(' ')
if nameParts.length > 1
first = nameParts[0]
last = nameParts[nameParts.length - 1]
if RocketChat.settings.get 'UTF8_Names_Slugify'
usernames.push slug first[0] + last
usernames.push slug first + last[0]
else
usernames.push first[0] + last
usernames.push first + last[0]
if user.profile?.name?
if RocketChat.settings.get 'UTF8_Names_Slugify'
usernames.push slug user.profile.name
else
usernames.push user.profile.name
if user.services?
services = _.map user.services, (service) ->
return _.values(_.pick(service, 'name', 'username', 'firstName', 'lastName'))
services = _.uniq(_.flatten(services))
for service in services
if RocketChat.settings.get 'UTF8_Names_Slugify'
usernames.push slug service
else
usernames.push service
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')
usernames = _.compact(usernames)
for item in usernames
if usernameIsAvaliable item
username = item
break
if usernames.length is 0 or usernames[0].length is 0
usernames.push('user')
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: ->
unless Meteor.userId()
Close #2727 Change meteor error (#3040) * Add function to handle errors * Delete message errors * handle error for hideRoom * Allow returning error instead of calling toastr.error * Handle error for leaveRoom * handle error for openRoom * handleError for toggleFavorite * handleError in updateMessage * error for samlLogout * handleError for assets * Add global handleError to eslint * handleError for addOAuthService * handleError: getUserRoles * handleError: insertOrUpdateUsere * handleError: messageDeleting * handleError: removeUserFromRoles * handleError: addPermissionToRole * handleError: addUserToRole * handleError: deleteRole * handleError: removeRoleFromPermission * handleError: removeUserFromRole * handleError: saveRole * Return ready on publish without permission * handleError: channel-settings * handleError: mailMessages * handleError: fileUpload * handleError: rocketchat-importer * handleError: addIncomingIntegration * handleError: deleteIncomingIntegration * handleError: updateIncomingIntegration * handleError: addOutgoingIntegration * handleError: deleteOutgoingIntegration * handleError: updateOutgoingIntegration * Return ready on publish without permission * handleError ldap * remove throw from client code * handleError: setEmail, slashCommand * Sort en.i18n.json * Google translated languages * Use correct error return from publishes * RateLimiter.limitFunction * Fix order of error "500" * handleError validateEmailDomain * handleError channelSettings; settings * handleError livechat * handleError: Mailer.sendMail * handleError pinMessage and unpinMessage * handleError messageStarring * handleError oauth apps * handleError: saveNotificationSettings * handleError getRoomRoles * handleError: createDirectMessage * handleError saveUserPreferences * handleError: saveUserProfile * handleError sendConfirmationEmail * Add ecmascript to root * handleError: avatar * handleError: getStatistics * handleError: roomSetting * handleError: channelSettings * handleError: sendInvitationEmail * handleError: addUserToRoom * handleError: uploadedFilesList * Change error key on user edit * handleError: userInfo * handleError: userRegistration * handleError: createChannel * handleError: createPrivateGroup * handleError: setUserPassword * handleError setUserActiveStatus * handleError: accoutns * A few more errors thrown * Error: livechat publishes * Errors in methods * handleError searchAgent * Add errors handling More errors handling Auto-translation for all languages * Permalink
10 years ago
throw new Meteor.Error 'error-invalid-user', 'Invalid user', { method: 'getUsernameSuggestion' }
user = Meteor.user()
return generateSuggestion(user)