| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- // ts-check
- const SubscriptionGroupHandler = require('./SubscriptionGroupHandler')
- const OError = require('@overleaf/o-error')
- const logger = require('@overleaf/logger')
- const SubscriptionLocator = require('./SubscriptionLocator')
- const SessionManager = require('../Authentication/SessionManager')
- const UserAuditLogHandler = require('../User/UserAuditLogHandler')
- const { expressify } = require('@overleaf/promise-utils')
- const Modules = require('../../infrastructure/Modules')
- /**
- * @import { Subscription } from "../../../../types/subscription/dashboard/subscription"
- */
- /**
- * @param {import("express").Request} req
- * @param {import("express").Response} res
- * @returns {Promise<void>}
- */
- async function removeUserFromGroup(req, res) {
- const subscription = req.entity
- const userToRemoveId = req.params.user_id
- const loggedInUserId = SessionManager.getLoggedInUserId(req.session)
- const subscriptionId = subscription._id
- logger.debug(
- { subscriptionId, userToRemoveId },
- 'removing user from group subscription'
- )
- await _removeUserFromGroup(req, res, {
- userToRemoveId,
- loggedInUserId,
- subscription,
- })
- }
- /**
- * @param {import("express").Request} req
- * @param {import("express").Response} res
- * @returns {Promise<void>}
- */
- async function removeSelfFromGroup(req, res) {
- const userToRemoveId = SessionManager.getLoggedInUserId(req.session)
- const subscription = await SubscriptionLocator.promises.getSubscription(
- req.query.subscriptionId
- )
- await _removeUserFromGroup(req, res, {
- userToRemoveId,
- loggedInUserId: userToRemoveId,
- subscription,
- })
- }
- /**
- * @param {import("express").Request} req
- * @param {import("express").Response} res
- * @param {string} userToRemoveId
- * @param {string} loggedInUserId
- * @param {Subscription} subscription
- * @returns {Promise<void>}
- * @private
- */
- async function _removeUserFromGroup(
- req,
- res,
- { userToRemoveId, loggedInUserId, subscription }
- ) {
- const subscriptionId = subscription._id
- const groupSSOActive = (
- await Modules.promises.hooks.fire('hasGroupSSOEnabled', subscription)
- )?.[0]
- if (groupSSOActive) {
- await Modules.promises.hooks.fire(
- 'unlinkUserFromGroupSSO',
- userToRemoveId,
- subscriptionId
- )
- }
- try {
- await UserAuditLogHandler.promises.addEntry(
- userToRemoveId,
- 'remove-from-group-subscription',
- loggedInUserId,
- req.ip,
- { subscriptionId }
- )
- } catch (auditLogError) {
- throw OError.tag(auditLogError, 'error adding audit log entry', {
- userToRemoveId,
- subscriptionId,
- })
- }
- try {
- await SubscriptionGroupHandler.promises.removeUserFromGroup(
- subscriptionId,
- userToRemoveId
- )
- } catch (error) {
- logger.err(
- { err: error, userToRemoveId, subscriptionId },
- 'error removing self from group'
- )
- return res.sendStatus(500)
- }
- res.sendStatus(200)
- }
- module.exports = {
- removeUserFromGroup: expressify(removeUserFromGroup),
- removeSelfFromGroup: expressify(removeSelfFromGroup),
- }
|