mirror of
https://github.com/yu-i-i/overleaf-cep.git
synced 2026-06-11 23:20:47 +02:00
71be7d47a2
[web] Unlink group SSO when user leaves/is removed from group GitOrigin-RevId: a4515f8b6f0f0012fc4d9f47b11e6f711743c2ec
117 lines
3.0 KiB
JavaScript
117 lines
3.0 KiB
JavaScript
// 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')
|
|
|
|
/**
|
|
* @typedef {import("../../../../types/subscription/dashboard/subscription").Subscription} 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),
|
|
}
|