feat: POST /api/v3/chats, chat room creation, plus openAPI docs update

This commit is contained in:
Julian Lam
2021-12-13 14:02:02 -05:00
parent 94bead71fe
commit 40b4544e70
9 changed files with 97 additions and 13 deletions

37
src/api/chats.js Normal file
View File

@@ -0,0 +1,37 @@
'use strict';
const meta = require('../meta');
const privileges = require('../privileges');
const messaging = require('../messaging');
const websockets = require('../socket.io');
const socketHelpers = require('../socket.io/helpers');
const chatsAPI = module.exports;
function rateLimitExceeded(caller) {
const session = caller.request ? caller.request.session : caller.session; // socket vs req
const now = Date.now();
session.lastChatMessageTime = session.lastChatMessageTime || 0;
if (now - session.lastChatMessageTime < meta.config.chatMessageDelay) {
return true;
}
session.lastChatMessageTime = now;
return false;
}
chatsAPI.create = async function (caller, data) {
if (rateLimitExceeded(caller)) {
throw new Error('[[error:too-many-messages]]');
}
if (!data.uids || !Array.isArray(data.uids)) {
throw new Error(`[[error:array-expected, uids, ${typeof data.uids}]]`);
}
await Promise.all(data.uids.map(async uid => messaging.canMessageUser(caller.uid, uid)));
const roomId = await messaging.newRoom(caller.uid, data.uids);
return await messaging.getRoomData(roomId);
};

View File

@@ -5,6 +5,7 @@ module.exports = {
groups: require('./groups'),
topics: require('./topics'),
posts: require('./posts'),
chats: require('./chats'),
categories: require('./categories'),
flags: require('./flags'),
};