Files
speckle-server/packages/server/modules/workspaces/domain/logic.ts
T
Gergő Jedlicska 32919c89da gergo/web 1746 add resolver for workspace domain policy compliance per user (#2797)
* fix(users): verified should be a public limited user field

* feat(workspaceSecurity): update security tab copy

* feat(workspaces): add limited user domain policy compliance check
2024-08-29 11:11:08 +02:00

35 lines
1.0 KiB
TypeScript

import { UserEmail } from '@/modules/core/domain/userEmails/types'
import { WorkspaceDomainsInvalidState } from '@/modules/workspaces/errors/workspace'
import { WorkspaceDomain } from '@/modules/workspacesCore/domain/types'
export const userEmailsCompliantWithWorkspaceDomains = ({
userEmails,
workspaceDomains
}: {
userEmails: UserEmail[]
workspaceDomains: WorkspaceDomain[]
}): boolean =>
anyEmailCompliantWithWorkspaceDomains({
emails: userEmails.filter((e) => e.verified).map((e) => e.email),
workspaceDomains
})
export const anyEmailCompliantWithWorkspaceDomains = ({
emails,
workspaceDomains
}: {
emails: string[]
workspaceDomains: WorkspaceDomain[]
}): boolean => {
const validWorkspaceDomains = workspaceDomains.filter((domain) => domain.verified)
// we must have min 1 domain to validate compliance
if (!validWorkspaceDomains.length) throw new WorkspaceDomainsInvalidState()
for (const email of emails) {
if (validWorkspaceDomains.some((domain) => email.endsWith(domain.domain)))
return true
}
return false
}