mirror of
				https://github.com/NodeBB/NodeBB.git
				synced 2025-10-30 18:46:01 +01:00 
			
		
		
		
	refactor(socket.io): deprecate SocketModules.chats.getRaw in favour of api.chats.getRawMessage
This commit is contained in:
		| @@ -200,6 +200,8 @@ paths: | |||||||
|     $ref: 'write/chats/roomId/messages/mid.yaml' |     $ref: 'write/chats/roomId/messages/mid.yaml' | ||||||
|   /chats/{roomId}/messages/{mid}/pin: |   /chats/{roomId}/messages/{mid}/pin: | ||||||
|     $ref: 'write/chats/roomId/messages/mid/pin.yaml' |     $ref: 'write/chats/roomId/messages/mid/pin.yaml' | ||||||
|  |   /chats/{roomId}/messages/{mid}/raw: | ||||||
|  |     $ref: 'write/chats/roomId/messages/mid/raw.yaml' | ||||||
|   /flags/: |   /flags/: | ||||||
|     $ref: 'write/flags.yaml' |     $ref: 'write/flags.yaml' | ||||||
|   /flags/{flagId}: |   /flags/{flagId}: | ||||||
|   | |||||||
							
								
								
									
										35
									
								
								public/openapi/write/chats/roomId/messages/mid/raw.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								public/openapi/write/chats/roomId/messages/mid/raw.yaml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,35 @@ | |||||||
|  | get: | ||||||
|  |   tags: | ||||||
|  |     - chats | ||||||
|  |   summary: get raw message content | ||||||
|  |   description: This operation retrieves a message's raw markdown (or otherwise) content. | ||||||
|  |   parameters: | ||||||
|  |     - in: path | ||||||
|  |       name: roomId | ||||||
|  |       schema: | ||||||
|  |         type: string | ||||||
|  |       required: true | ||||||
|  |       description: a valid chat room id | ||||||
|  |       example: 1 | ||||||
|  |     - in: path | ||||||
|  |       name: mid | ||||||
|  |       schema: | ||||||
|  |         type: string | ||||||
|  |       required: true | ||||||
|  |       description: a valid chat message id | ||||||
|  |       example: 1 | ||||||
|  |   responses: | ||||||
|  |     '200': | ||||||
|  |       description: Chat message raw content retrieved | ||||||
|  |       content: | ||||||
|  |         application/json: | ||||||
|  |           schema: | ||||||
|  |             type: object | ||||||
|  |             properties: | ||||||
|  |               status: | ||||||
|  |                 $ref: ../../../../../components/schemas/Status.yaml#/Status | ||||||
|  |               response: | ||||||
|  |                 type: object | ||||||
|  |                 properties: | ||||||
|  |                   content: | ||||||
|  |                     type: string | ||||||
| @@ -196,7 +196,7 @@ define('forum/chats/messages', [ | |||||||
| 	}; | 	}; | ||||||
|  |  | ||||||
| 	messages.prepEdit = async function (msgEl, mid, roomId) { | 	messages.prepEdit = async function (msgEl, mid, roomId) { | ||||||
| 		const raw = await socket.emit('modules.chats.getRaw', { mid: mid, roomId: roomId }); | 		const { content: raw } = await api.get(`/chats/${roomId}/messages/${mid}/raw`); | ||||||
| 		const editEl = await app.parseAndTranslate('partials/chats/edit-message', { | 		const editEl = await app.parseAndTranslate('partials/chats/edit-message', { | ||||||
| 			rawContent: raw, | 			rawContent: raw, | ||||||
| 		}); | 		}); | ||||||
|   | |||||||
| @@ -277,6 +277,21 @@ chatsAPI.getMessage = async (caller, { mid, roomId }) => { | |||||||
| 	return messages.pop(); | 	return messages.pop(); | ||||||
| }; | }; | ||||||
|  |  | ||||||
|  | chatsAPI.getRawMessage = async (caller, { mid, roomId }) => { | ||||||
|  | 	const [isAdmin, canViewMessage, inRoom] = await Promise.all([ | ||||||
|  | 		user.isAdministrator(caller.uid), | ||||||
|  | 		messaging.canViewMessage(mid, roomId, caller.uid), | ||||||
|  | 		messaging.isUserInRoom(caller.uid, roomId), | ||||||
|  | 	]); | ||||||
|  |  | ||||||
|  | 	if (!isAdmin && (!inRoom || !canViewMessage)) { | ||||||
|  | 		throw new Error('[[error:not-allowed]]'); | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	const content = await messaging.getMessageField(mid, 'content'); | ||||||
|  | 	return { content }; | ||||||
|  | }; | ||||||
|  |  | ||||||
| chatsAPI.editMessage = async (caller, { mid, roomId, message }) => { | chatsAPI.editMessage = async (caller, { mid, roomId, message }) => { | ||||||
| 	await messaging.canEdit(mid, caller.uid); | 	await messaging.canEdit(mid, caller.uid); | ||||||
| 	await messaging.editMessage(caller.uid, mid, roomId, message); | 	await messaging.editMessage(caller.uid, mid, roomId, message); | ||||||
|   | |||||||
| @@ -124,6 +124,10 @@ Chats.messages.get = async (req, res) => { | |||||||
| 	helpers.formatApiResponse(200, res, await api.chats.getMessage(req, { mid, roomId })); | 	helpers.formatApiResponse(200, res, await api.chats.getMessage(req, { mid, roomId })); | ||||||
| }; | }; | ||||||
|  |  | ||||||
|  | Chats.messages.getRaw = async (req, res) => { | ||||||
|  | 	helpers.formatApiResponse(200, res, await api.chats.getRawMessage(req, { ...req.params })); | ||||||
|  | }; | ||||||
|  |  | ||||||
| Chats.messages.edit = async (req, res) => { | Chats.messages.edit = async (req, res) => { | ||||||
| 	const { mid, roomId } = req.params; | 	const { mid, roomId } = req.params; | ||||||
| 	const { message } = req.body; | 	const { message } = req.body; | ||||||
|   | |||||||
| @@ -32,6 +32,8 @@ module.exports = function () { | |||||||
| 	setupApiRoute(router, 'post', '/:roomId/messages/:mid', [...middlewares, middleware.assert.room, middleware.assert.message], controllers.write.chats.messages.restore); | 	setupApiRoute(router, 'post', '/:roomId/messages/:mid', [...middlewares, middleware.assert.room, middleware.assert.message], controllers.write.chats.messages.restore); | ||||||
| 	setupApiRoute(router, 'delete', '/:roomId/messages/:mid', [...middlewares, middleware.assert.room, middleware.assert.message], controllers.write.chats.messages.delete); | 	setupApiRoute(router, 'delete', '/:roomId/messages/:mid', [...middlewares, middleware.assert.room, middleware.assert.message], controllers.write.chats.messages.delete); | ||||||
|  |  | ||||||
|  | 	setupApiRoute(router, 'get', '/:roomId/messages/:mid/raw', [...middlewares, middleware.assert.room], controllers.write.chats.messages.getRaw); | ||||||
|  |  | ||||||
| 	setupApiRoute(router, 'put', '/:roomId/messages/:mid/pin', [...middlewares, middleware.assert.room, middleware.assert.message], controllers.write.chats.messages.pin); | 	setupApiRoute(router, 'put', '/:roomId/messages/:mid/pin', [...middlewares, middleware.assert.room, middleware.assert.message], controllers.write.chats.messages.pin); | ||||||
| 	setupApiRoute(router, 'delete', '/:roomId/messages/:mid/pin', [...middlewares, middleware.assert.room, middleware.assert.message], controllers.write.chats.messages.unpin); | 	setupApiRoute(router, 'delete', '/:roomId/messages/:mid/pin', [...middlewares, middleware.assert.room, middleware.assert.message], controllers.write.chats.messages.unpin); | ||||||
|  |  | ||||||
|   | |||||||
| @@ -11,6 +11,9 @@ const plugins = require('../plugins'); | |||||||
| const privileges = require('../privileges'); | const privileges = require('../privileges'); | ||||||
| const groups = require('../groups'); | const groups = require('../groups'); | ||||||
|  |  | ||||||
|  | const api = require('../api'); | ||||||
|  | const sockets = require('.'); | ||||||
|  |  | ||||||
| const SocketModules = module.exports; | const SocketModules = module.exports; | ||||||
|  |  | ||||||
| SocketModules.chats = {}; | SocketModules.chats = {}; | ||||||
| @@ -19,21 +22,19 @@ SocketModules.settings = {}; | |||||||
| /* Chat */ | /* Chat */ | ||||||
|  |  | ||||||
| SocketModules.chats.getRaw = async function (socket, data) { | SocketModules.chats.getRaw = async function (socket, data) { | ||||||
|  | 	sockets.warnDeprecated(socket, 'GET /api/v3/chats/:roomId/messages/:mid/raw'); | ||||||
|  |  | ||||||
| 	if (!data || !data.hasOwnProperty('mid')) { | 	if (!data || !data.hasOwnProperty('mid')) { | ||||||
| 		throw new Error('[[error:invalid-data]]'); | 		throw new Error('[[error:invalid-data]]'); | ||||||
| 	} | 	} | ||||||
| 	const roomId = await Messaging.getMessageField(data.mid, 'roomId'); | 	const roomId = await Messaging.getMessageField(data.mid, 'roomId'); | ||||||
| 	const [isAdmin, canViewMessage, inRoom] = await Promise.all([ |  | ||||||
| 		user.isAdministrator(socket.uid), |  | ||||||
| 		Messaging.canViewMessage(data.mid, roomId, socket.uid), |  | ||||||
| 		Messaging.isUserInRoom(socket.uid, roomId), |  | ||||||
| 	]); |  | ||||||
|  |  | ||||||
| 	if (!isAdmin && (!inRoom || !canViewMessage)) { | 	const { content } = await api.chats.getRawMessage(socket, { | ||||||
| 		throw new Error('[[error:not-allowed]]'); | 		mid: data.mid, | ||||||
| 	} | 		roomId, | ||||||
|  | 	}); | ||||||
|  |  | ||||||
| 	return await Messaging.getMessageField(data.mid, 'content'); | 	return content; | ||||||
| }; | }; | ||||||
|  |  | ||||||
| SocketModules.chats.isDnD = async function (socket, uid) { | SocketModules.chats.isDnD = async function (socket, uid) { | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user