Skip to content
Snippets Groups Projects
Commit 5538199c authored by Marcelo Schmidt's avatar Marcelo Schmidt
Browse files

set username as callable method from API

parent 3464f072
No related branches found
No related tags found
No related merge requests found
......@@ -18,6 +18,16 @@ Package.onUse(function(api) {
api.addFiles('lib/underscore.string.coffee', ['server', 'client']);
api.addFiles('lib/core.coffee', ['server', 'client']);
api.addFiles('lib/callbacks.coffee', ['server', 'client']);
api.addFiles([
'server/functions/checkUsernameAvailability.coffee',
'server/functions/setUsername.coffee'
], ['server']);
api.addFiles([
'server/methods/setUsername.coffee'
], ['server']);
api.addFiles('server/sendMessage.coffee', ['server']);
api.addFiles('server/slashCommand.coffee', ['server']);
api.addFiles('client/slashCommand.coffee', ['client']);
......
RocketChat.checkUsernameAvailability = (username) ->
return not Meteor.users.findOne({ username: { $regex : new RegExp("^" + _.trim(username) + "$", "i") } })
\ No newline at end of file
RocketChat.setUsername = (user, username) ->
username = _.trim username
if not user or not username
return false
if not /^[0-9a-zA-Z-_.]+$/.test username
return false
# User already has desired username, return
if user.username is username
return user
# Check username availability
unless RocketChat.checkUsernameAvailability username
return false
previousUsername = user.username
# Username is available, set username and update all references
ChatMessage.update { "u._id": user._id }, { $set: { "u.username": username } }, { multi: true }
# @TODO: update chatmessage mentions
ChatMessage.find({ "mentions.username": previousUsername }).forEach (msg) ->
updatedMsg = msg.msg.replace(new RegExp("@#{previousUsername}", "ig"), "@#{username}")
ChatMessage.update { _id: msg._id, "mentions.username": previousUsername }, { $set: { "mentions.$.username": username, "msg": updatedMsg } }
ChatRoom.update { usernames: previousUsername }, { $set: { "usernames.$": username } }, { multi: true }
ChatRoom.update { "u._id": user._id }, { $set: { "u.username": username } }, { multi: true }
ChatSubscription.update { "u._id": user._id }, { $set: { "u.username": username } }, { multi: true }
ChatSubscription.update { name: previousUsername, t: "d" }, { $set: { name: username } }, { multi: true }
Meteor.users.update { _id: user._id }, { $set: { username: username } }
user.username = username
return user
Meteor.methods
setUsername: (username) ->
if not Meteor.userId()
throw new Meteor.Error('invalid-user', "[methods] setUsername -> Invalid user")
console.log '[methods] setUsername -> '.green, 'userId:', Meteor.userId(), 'arguments:', arguments
user = Meteor.user()
if not /^[0-9a-zA-Z-_.]+$/.test username
throw new Meteor.Error 'username-invalid'
if not RocketChat.checkUsernameAvailability username
throw new Meteor.Error 'username-unavailable'
unless RocketChat.setUsername user, username
throw new Meteor.Error 'could-not-change-username', t('Could_not_change_username')
return username
\ No newline at end of file
Meteor.methods
setUsername: (username) ->
if not Meteor.userId()
throw new Meteor.Error('invalid-user', "[methods] setUsername -> Invalid user")
console.log '[methods] setUsername -> '.green, 'userId:', Meteor.userId(), 'arguments:', arguments
user = Meteor.user()
if user.username?
throw new Meteor.Error 'username-already-setted'
if not usernameIsAvaliable username
throw new Meteor.Error 'username-unavaliable'
if not /^[0-9a-zA-Z-_.]+$/.test username
throw new Meteor.Error 'username-invalid'
if not user.username?
ChatRoom.find({default: true, t: {$in: ['c', 'p']}}).forEach (room) ->
# put user in default rooms
ChatRoom.update room._id,
$addToSet:
usernames: username
if not ChatSubscription.findOne(rid: room._id, 'u._id': user._id)?
ChatSubscription.insert
rid: room._id
name: room.name
ts: new Date()
t: room.t
f: false
open: true
alert: true
unread: 1
u:
_id: user._id
username: username
ChatMessage.insert
rid: room._id
ts: new Date()
t: 'uj'
msg: ''
u:
_id: user._id
username: username
Meteor.users.update({_id: user._id}, {$set: {username: username}})
return username
slug = (text) ->
text = slugify text, '.'
return text.replace(/[^0-9a-z-_.]/g, '')
usernameIsAvaliable = (username) ->
if username.length < 1
return false
return not Meteor.users.findOne({username: {$regex : new RegExp(username, "i") }})
# Meteor.methods
# setUsername: (username) ->
# if not Meteor.userId()
# throw new Meteor.Error('invalid-user', "[methods] setUsername -> Invalid user")
# console.log '[methods] setUsername -> '.green, 'userId:', Meteor.userId(), 'arguments:', arguments
# user = Meteor.user()
# if not usernameIsAvaliable username
# throw new Meteor.Error 'username-unavailable'
# if not /^[0-9a-zA-Z-_.]+$/.test username
# throw new Meteor.Error 'username-invalid'
# if not user.username?
# ChatRoom.find({default: true, t: {$in: ['c', 'p']}}).forEach (room) ->
# # put user in default rooms
# ChatRoom.update room._id,
# $addToSet:
# usernames: username
# if not ChatSubscription.findOne(rid: room._id, 'u._id': user._id)?
# ChatSubscription.insert
# rid: room._id
# name: room.name
# ts: new Date()
# t: room.t
# f: false
# open: true
# alert: true
# unread: 1
# u:
# _id: user._id
# username: username
# ChatMessage.insert
# rid: room._id
# ts: new Date()
# t: 'uj'
# msg: ''
# u:
# _id: user._id
# username: username
# Meteor.users.update({_id: user._id}, {$set: {username: username}})
# return username
# slug = (text) ->
# text = slugify text, '.'
# return text.replace(/[^0-9a-z-_.]/g, '')
# usernameIsAvaliable = (username) ->
# if username.length < 1
# return false
# return not Meteor.users.findOne({username: {$regex : new RegExp("^" + username + "$", "i") }})
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment