mirror of
				https://github.com/NodeBB/NodeBB.git
				synced 2025-10-31 19:15:58 +01:00 
			
		
		
		
	feat(writeapi): added group joining and deletion
This commit is contained in:
		| @@ -1,7 +1,9 @@ | ||||
| 'use strict'; | ||||
|  | ||||
| const user = require('../../user'); | ||||
| const groups = require('../../groups'); | ||||
| const events = require('../../events'); | ||||
| const meta = require('../../meta'); | ||||
|  | ||||
| const helpers = require('../helpers'); | ||||
|  | ||||
| @@ -26,6 +28,66 @@ Groups.create = async (req, res) => { | ||||
| 	}); | ||||
| }; | ||||
|  | ||||
| Groups.delete = async (req, res) => { | ||||
| 	const group = await groups.getByGroupslug(req.params.slug, { | ||||
| 		uid: req.user.uid, | ||||
| 	}); | ||||
|  | ||||
| 	if (groups.ephemeralGroups.includes(group.slug)) { | ||||
| 		throw new Error('[[error:not-allowed]]'); | ||||
| 	} | ||||
|  | ||||
| 	if (group.system || (!group.isOwner && !res.locals.privileges.isAdmin && !res.locals.privileges.isGmod)) { | ||||
| 		throw new Error('[[error:no-privileges]]'); | ||||
| 	} | ||||
|  | ||||
| 	await groups.destroy(group.name); | ||||
| 	helpers.formatApiResponse(200, res); | ||||
| 	logGroupEvent(req, 'group-delete', { | ||||
| 		groupName: group.name, | ||||
| 	}); | ||||
| }; | ||||
|  | ||||
| Groups.join = async (req, res) => { | ||||
| 	const group = await groups.getByGroupslug(req.params.slug, { | ||||
| 		uid: req.params.uid, | ||||
| 	}); | ||||
| 	const [isCallerOwner, userExists] = await Promise.all([ | ||||
| 		groups.ownership.isOwner(req.user.uid, group.name), | ||||
| 		user.exists(req.user.uid), | ||||
| 	]); | ||||
|  | ||||
| 	if (group.isMember) { | ||||
| 		// No change | ||||
| 		return helpers.formatApiResponse(200, res); | ||||
| 	} else if (!userExists) { | ||||
| 		throw new Error('[[error:invalid-uid]]'); | ||||
| 	} | ||||
|  | ||||
| 	// console.log(res.locals.privileges); | ||||
| 	// return res.sendStatus(200); | ||||
|  | ||||
| 	if (!res.locals.privileges.isAdmin) { | ||||
| 		// Admin and privilege groups unjoinable client-side | ||||
| 		if (group.name === 'administrators' || groups.isPrivilegeGroup(group.name)) { | ||||
| 			throw new Error('[[error:not-allowed]]'); | ||||
| 		} | ||||
|  | ||||
| 		if (!isCallerOwner && parseInt(meta.config.allowPrivateGroups, 10) !== 0 && group.private) { | ||||
| 			await groups.requestMembership(group.name, req.params.uid); | ||||
| 		} else { | ||||
| 			await groups.join(group.name, req.params.uid); | ||||
| 		} | ||||
| 	} else { | ||||
| 		await groups.join(group.name, req.params.uid); | ||||
| 	} | ||||
|  | ||||
| 	helpers.formatApiResponse(200, res); | ||||
| 	logGroupEvent(req, 'group-join', { | ||||
| 		groupName: group.name, | ||||
| 	}); | ||||
| }; | ||||
|  | ||||
| function logGroupEvent(req, event, additional) { | ||||
| 	events.log({ | ||||
| 		type: event, | ||||
|   | ||||
		Reference in New Issue
	
	Block a user