forked from RocketChat/Rocket.Chat
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcreateDirectMessage.coffee
More file actions
86 lines (70 loc) · 1.97 KB
/
createDirectMessage.coffee
File metadata and controls
86 lines (70 loc) · 1.97 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
Meteor.methods
createDirectMessage: (username) ->
check username, String
if not Meteor.userId()
throw new Meteor.Error 'error-invalid-user', "Invalid user", { method: 'createDirectMessage' }
me = Meteor.user()
unless me.username
throw new Meteor.Error 'error-invalid-user', "Invalid user", { method: 'createDirectMessage' }
if me.username is username
throw new Meteor.Error 'error-invalid-user', "Invalid user", { method: 'createDirectMessage' }
if !RocketChat.authz.hasPermission Meteor.userId(), 'create-d'
throw new Meteor.Error 'error-not-allowed', 'Not allowed', { method: 'createDirectMessage' }
to = RocketChat.models.Users.findOneByUsername username
if not to
throw new Meteor.Error 'error-invalid-user', "Invalid user", { method: 'createDirectMessage' }
rid = [me._id, to._id].sort().join('')
now = new Date()
# Make sure we have a room
RocketChat.models.Rooms.upsert
_id: rid
,
$set:
usernames: [me.username, to.username]
$setOnInsert:
t: 'd'
msgs: 0
ts: now
# Make user I have a subcription to this room
upsertSubscription =
$set:
ts: now
ls: now
open: true
$setOnInsert:
name: to.username
t: 'd'
alert: false
unread: 0
u:
_id: me._id
username: me.username
if to.active is false
upsertSubscription.$set.archived = true
RocketChat.models.Subscriptions.upsert
rid: rid
$and: [{'u._id': me._id}] # work around to solve problems with upsert and dot
,
upsertSubscription
# Make user the target user has a subcription to this room
RocketChat.models.Subscriptions.upsert
rid: rid
$and: [{'u._id': to._id}] # work around to solve problems with upsert and dot
,
$setOnInsert:
name: me.username
t: 'd'
open: false
alert: false
unread: 0
u:
_id: to._id
username: to.username
return {
rid: rid
}
DDPRateLimiter.addRule
type: 'method'
name: 'createDirectMessage'
connectionId: -> return true
, 10, 60000