c99f40bb20
Release pipeline / Get version (push) Has been cancelled
Release pipeline / Get Chart Name (push) Has been cancelled
Release pipeline / tests (push) Has been cancelled
Release pipeline / builds (push) Has been cancelled
Release pipeline / builds-ghcr (push) Has been cancelled
Release pipeline / test-deployments (push) Has been cancelled
Release pipeline / deploy (push) Has been cancelled
Release pipeline / Helm chart oci (push) Has been cancelled
Release pipeline / npm (push) Has been cancelled
Release pipeline / snyk (push) Has been cancelled
93 lines
3.7 KiB
TypeScript
93 lines
3.7 KiB
TypeScript
import { AccModuleDisabledError } from '@/modules/acc/errors/acc'
|
|
import { AutomateModuleDisabledError } from '@/modules/core/errors/automate'
|
|
import { StreamNotFoundError } from '@/modules/core/errors/stream'
|
|
import { WorkspacesModuleDisabledError } from '@/modules/core/errors/workspaces'
|
|
import { DashboardsModuleDisabledError } from '@/modules/dashboards/errors/dashboards'
|
|
import type { BaseError } from '@/modules/shared/errors'
|
|
import { BadRequestError, ForbiddenError, NotFoundError } from '@/modules/shared/errors'
|
|
import { SsoSessionMissingOrExpiredError } from '@/modules/workspacesCore/errors'
|
|
import { Authz, ensureError, throwUncoveredError } from '@speckle/shared'
|
|
import VError from 'verror'
|
|
|
|
/**
|
|
* Resolve cause correctly depending on whether its a VError or basic Error
|
|
* object
|
|
*/
|
|
export function getCause(e: Error) {
|
|
if (e instanceof VError) {
|
|
return VError.cause(e)
|
|
} else {
|
|
const unknownCause = e.cause
|
|
return unknownCause ? ensureError(e.cause) : null
|
|
}
|
|
}
|
|
|
|
export { ensureError }
|
|
|
|
/**
|
|
* Global mapping for mapping any kind of auth error to a server thrown error
|
|
*/
|
|
export const mapAuthToServerError = (e: Authz.AllAuthErrors): BaseError => {
|
|
switch (e.code) {
|
|
case Authz.ProjectNotFoundError.code:
|
|
return new StreamNotFoundError(e.message)
|
|
case Authz.ProjectNoAccessError.code:
|
|
case Authz.WorkspaceNoAccessError.code:
|
|
case Authz.WorkspaceNotEnoughPermissionsError.code:
|
|
case Authz.WorkspaceReadOnlyError.code:
|
|
case Authz.WorkspaceLimitsReachedError.code:
|
|
case Authz.WorkspaceNoEditorSeatError.code:
|
|
case Authz.WorkspaceProjectMoveInvalidError.code:
|
|
case Authz.CommentNoAccessError.code:
|
|
case Authz.ProjectNotEnoughPermissionsError.code:
|
|
case Authz.WorkspacePlanNoFeatureAccessError.code:
|
|
case Authz.EligibleForExclusiveWorkspaceError.code:
|
|
case Authz.AutomateFunctionNotCreatorError.code:
|
|
case Authz.SavedViewNoAccessError.code:
|
|
case Authz.DashboardNotOwnerError.code:
|
|
case Authz.DashboardProjectsNotEnoughPermissionsError.code:
|
|
return new ForbiddenError(e.message)
|
|
case Authz.WorkspaceSsoSessionNoAccessError.code:
|
|
throw new SsoSessionMissingOrExpiredError(e.message, {
|
|
info: {
|
|
workspaceSlug: e.payload.workspaceSlug
|
|
}
|
|
})
|
|
case Authz.ServerNoAccessError.code:
|
|
case Authz.ServerNoSessionError.code:
|
|
case Authz.ServerNotEnoughPermissionsError.code:
|
|
return new ForbiddenError(e.message)
|
|
case Authz.WorkspacesNotEnabledError.code:
|
|
return new WorkspacesModuleDisabledError()
|
|
case Authz.AutomateNotEnabledError.code:
|
|
return new AutomateModuleDisabledError()
|
|
case Authz.AccIntegrationNotEnabledError.code:
|
|
return new AccModuleDisabledError()
|
|
case Authz.DashboardsNotEnabledError.code:
|
|
return new DashboardsModuleDisabledError()
|
|
case Authz.ProjectLastOwnerError.code:
|
|
case Authz.ReservedModelNotDeletableError.code:
|
|
return new BadRequestError(e.message)
|
|
case Authz.CommentNotFoundError.code:
|
|
case Authz.ModelNotFoundError.code:
|
|
case Authz.VersionNotFoundError.code:
|
|
case Authz.AutomateFunctionNotFoundError.code:
|
|
case Authz.SavedViewNotFoundError.code:
|
|
case Authz.SavedViewGroupNotFoundError.code:
|
|
case Authz.DashboardNotFoundError.code:
|
|
return new NotFoundError(e.message)
|
|
case Authz.PersonalProjectsLimitedError.code:
|
|
case Authz.UngroupedSavedViewGroupLockError.code:
|
|
case Authz.DashboardNoProjectsError.code:
|
|
case Authz.SavedViewInvalidUpdateError.code:
|
|
return new BadRequestError(e.message)
|
|
default:
|
|
throwUncoveredError(e)
|
|
}
|
|
}
|
|
|
|
export const throwIfAuthNotOk = (result: Authz.AuthPolicyResult) => {
|
|
// Bypass all AuthPolicies checks so anonymous users can do anything
|
|
return
|
|
}
|