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' | ||||
|   /chats/{roomId}/messages/{mid}/pin: | ||||
|     $ref: 'write/chats/roomId/messages/mid/pin.yaml' | ||||
|   /chats/{roomId}/messages/{mid}/raw: | ||||
|     $ref: 'write/chats/roomId/messages/mid/raw.yaml' | ||||
|   /flags/: | ||||
|     $ref: 'write/flags.yaml' | ||||
|   /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) { | ||||
| 		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', { | ||||
| 			rawContent: raw, | ||||
| 		}); | ||||
|   | ||||
| @@ -277,6 +277,21 @@ chatsAPI.getMessage = async (caller, { mid, roomId }) => { | ||||
| 	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 }) => { | ||||
| 	await messaging.canEdit(mid, caller.uid); | ||||
| 	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 })); | ||||
| }; | ||||
|  | ||||
| Chats.messages.getRaw = async (req, res) => { | ||||
| 	helpers.formatApiResponse(200, res, await api.chats.getRawMessage(req, { ...req.params })); | ||||
| }; | ||||
|  | ||||
| Chats.messages.edit = async (req, res) => { | ||||
| 	const { mid, roomId } = req.params; | ||||
| 	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, '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, '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 groups = require('../groups'); | ||||
|  | ||||
| const api = require('../api'); | ||||
| const sockets = require('.'); | ||||
|  | ||||
| const SocketModules = module.exports; | ||||
|  | ||||
| SocketModules.chats = {}; | ||||
| @@ -19,21 +22,19 @@ SocketModules.settings = {}; | ||||
| /* Chat */ | ||||
|  | ||||
| SocketModules.chats.getRaw = async function (socket, data) { | ||||
| 	sockets.warnDeprecated(socket, 'GET /api/v3/chats/:roomId/messages/:mid/raw'); | ||||
|  | ||||
| 	if (!data || !data.hasOwnProperty('mid')) { | ||||
| 		throw new Error('[[error:invalid-data]]'); | ||||
| 	} | ||||
| 	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)) { | ||||
| 		throw new Error('[[error:not-allowed]]'); | ||||
| 	} | ||||
| 	const { content } = await api.chats.getRawMessage(socket, { | ||||
| 		mid: data.mid, | ||||
| 		roomId, | ||||
| 	}); | ||||
|  | ||||
| 	return await Messaging.getMessageField(data.mid, 'content'); | ||||
| 	return content; | ||||
| }; | ||||
|  | ||||
| SocketModules.chats.isDnD = async function (socket, uid) { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user