time expiration private requests

This commit is contained in:
legop3
2026-06-01 20:52:58 -04:00
parent af5ddfb11d
commit 5e3a6a2851
6 changed files with 84 additions and 7 deletions
@@ -70,11 +70,16 @@ function createPrivateAccessPolicy(deps) {
if (!isPrivateRecord(record)) return true;
if (isPrivateOpen(record)) return true;
if (isLockdownAdmin(socket)) return true;
if (socket?.id && record.drivers?.has(socket.id)) return true;
return socketHasClosedPrivateAccess(socket, record.id);
}
function getControlDenialReason(record, socket, options = {}) {
const { allowUser = false, allowClosedPrivateGrantInLockdown = false } = options;
const {
allowUser = false,
allowClosedPrivateGrantInLockdown = false,
allowClosedPrivateCurrentDriver = false,
} = options;
if (!record) return 'Unknown rover';
if (!allowUser && !isAdmin(socket)) return 'Only admins can request control';
if (record.locked && !isAdmin(socket)) return 'Rover locked';
@@ -89,6 +94,11 @@ function createPrivateAccessPolicy(deps) {
isPrivateRecord(record) &&
!isPrivateOpen(record) &&
socketHasClosedPrivateAccess(socket, record.id)
) &&
!(
allowClosedPrivateCurrentDriver &&
isPrivateRecord(record) &&
!isPrivateOpen(record)
)
) {
return 'Server in lockdown';
@@ -98,6 +108,7 @@ function createPrivateAccessPolicy(deps) {
if (!isPrivateRecord(record)) return null;
if (!isPrivateOpen(record)) {
if (!isLockdownAdmin(socket)) {
if (allowClosedPrivateCurrentDriver) return null;
if (socketHasClosedPrivateAccess(socket, record.id)) return null;
return 'Private rover is closed';
}
@@ -85,14 +85,15 @@ function createRoverLifecycle(deps) {
function canDrive(roverId, socket) {
const record = rovers.get(roverId);
if (!record) return false;
if (isAdmin(socket)) return true;
if (!socket || !isDriver(roverId, socket)) return false;
const denied = getControlDenialReason(record, socket, {
allowUser: true,
allowClosedPrivateGrantInLockdown: true,
allowClosedPrivateCurrentDriver: true,
});
if (denied) return false;
const _mode = getMode();
if (isAdmin(socket)) return true;
if (!socket || !isDriver(roverId, socket)) return false;
return turnService.canDrive(roverId, socket);
}