lib/driver-continuation-access.js
Rama main · réplica de lectura del repositorio original.
var driverEligibility = require("./session-driver-eligibility");
function activeActor(users, ownerId) {
if (!ownerId || !users || typeof users.findUserById !== "function") return null;
var actor = users.findUserById(ownerId);
if (!actor || actor.disabled === true || actor.active === false || actor.status === "disabled" || actor.status === "inactive") return null;
return actor;
}
function authorize(settings, session, ownerId) {
var users = settings.usersModule;
if (!users || typeof users.isMultiUser !== "function") return false;
if (!users.isMultiUser()) return !!session && !session.ownerId;
var actor;
try { actor = activeActor(users, ownerId); }
catch (error) { return false; }
if (!actor || !session || typeof settings.getProjectAccess !== "function" ||
typeof settings.canAccessProjectSlug !== "function" || typeof users.canAccessSession !== "function") return false;
try {
var access = settings.getProjectAccess();
if (!access || access.error || settings.canAccessProjectSlug(actor.id, settings.projectSlug) !== true) return false;
return users.canAccessSession(actor.id, session, access) === true;
} catch (error) {
return false;
}
}
function findOwnedSessionByOrigin(sessions, originId, ownerId) {
if (!sessions || !originId) return null;
var found = null;
var ambiguous = false;
sessions.forEach(function (session) {
if (!session || session.sessionOriginId !== originId ||
(session.ownerId || null) !== (ownerId || null)) return;
if (found && found !== session) ambiguous = true;
else found = session;
});
return ambiguous ? null : found;
}
function isLiveDriver(session, isMate, sessions, isDriverOperatedSession) {
if (!session || isMate || session.isMate === true || !sessions || sessions.get(session.localId) !== session) return false;
try {
if (typeof isDriverOperatedSession === "function" && isDriverOperatedSession(session) === true) return false;
} catch (error) {
return false;
}
return driverEligibility.isEligibleDriverSession(session) && session.hidden !== true &&
session.delegated !== true && !session._pairDelegation && !session._delegatedBy &&
!session.scheduledTaskRun && !session.projectLogReview;
}
module.exports = { authorize: authorize, activeActor: activeActor,
findOwnedSessionByOrigin: findOwnedSessionByOrigin, isLiveDriver: isLiveDriver };