forked from RocketChat/Rocket.Chat
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcreateDirectMessage.js
More file actions
118 lines (102 loc) · 2.22 KB
/
Copy pathcreateDirectMessage.js
File metadata and controls
118 lines (102 loc) · 2.22 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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
Meteor.methods({
createDirectMessage(username) {
check(username, String);
if (!Meteor.userId()) {
throw new Meteor.Error('error-invalid-user', 'Invalid user', {
method: 'createDirectMessage'
});
}
const me = Meteor.user();
if (!me.username) {
throw new Meteor.Error('error-invalid-user', 'Invalid user', {
method: 'createDirectMessage'
});
}
if (me.username === 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'
});
}
const to = RocketChat.models.Users.findOneByUsername(username);
if (!to) {
throw new Meteor.Error('error-invalid-user', 'Invalid user', {
method: 'createDirectMessage'
});
}
const rid = [me._id, to._id].sort().join('');
const 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
const upsertSubscription = {
$set: {
ts: now,
ls: now,
open: true
},
$setOnInsert: {
name: to.username,
t: 'd',
alert: false,
unread: 0,
userMentions: 0,
groupMentions: 0,
u: {
_id: me._id,
username: me.username
}
}
};
if (to.active === false) {
upsertSubscription.$set.archived = true;
}
RocketChat.models.Subscriptions.upsert({
rid,
$and: [{'u._id': me._id}] // work around to solve problems with upsert and dot
}, upsertSubscription);
RocketChat.models.Subscriptions.upsert({
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,
userMentions: 0,
groupMentions: 0,
u: {
_id: to._id,
username: to.username
}
}
});
return {
rid
};
}
});
DDPRateLimiter.addRule({
type: 'method',
name: 'createDirectMessage',
connectionId() {
return true;
}
}, 10, 60000);