import { data, Link as RemixLink } from 'react-router'; import Link from '~/components/Link'; import Notice from '~/components/Notice'; import { Capabilities } from '~/server/web/roles'; import type { Route } from './+types/overview'; import { restrictionAction } from './actions'; import AddDomain from './dialogs/add-domain'; import AddGroup from './dialogs/add-group'; import AddUser from './dialogs/add-user'; import RestrictionTable from './table'; export async function loader({ request, context }: Route.LoaderArgs) { const check = await context.sessions.check(request, Capabilities.read_users); if (!check) { throw data('You do not have permission to view IAM settings.', { status: 403, }); } if (!context.hs.c?.oidc) { throw data('OIDC is not configured on this Headscale instance.', { status: 501, }); } return { access: await context.sessions.check(request, Capabilities.configure_iam), writable: context.hs.writable(), settings: { domains: [...new Set(context.hs.c.oidc.allowed_domains)], groups: [...new Set(context.hs.c.oidc.allowed_groups)], users: [...new Set(context.hs.c.oidc.allowed_users)], }, }; } export const action = restrictionAction; export default function Page({ loaderData: { access, writable, settings }, }: Route.ComponentProps) { const isDisabled = writable ? !access : true; return (
Headscale supports restricting OIDC authentication to only allow certain email domains, groups, or users to authenticate. This can be used to limit access to your Tailnet to only certain users or groups and Headplane will also respect these settings when authenticating.{' '} Learn More