Skip to content
File

Blob: src/worker/dav/discovery/root.ts

typescript27 lines
1import type { DavPatAuth } from "@/worker/auth/basic";
2import { hasAnyDavScope, hasDavScope } from "@/worker/auth/scopes";
3import { ADDRESSBOOK_HOME_RESOURCE } from "@/worker/dav/discovery/addressbooks";
4import { CALENDAR_HOME_RESOURCE } from "@/worker/dav/discovery/calendars";
5import { FILES_HOME_RESOURCE } from "@/worker/dav/discovery/files";
6import { PRINCIPALS_RESOURCE } from "@/worker/dav/discovery/principals";
7import type { DiscoveryResource } from "@/worker/dav/discovery/resources";
8 
9export const ROOT_RESOURCE: DiscoveryResource = {
10 kind: "root",
11 protocol: "discovery",
12 href: "/",
13 displayName: "dab",
14};
15 
16export function isRootPath(pathname: string): boolean {
17 return pathname === "/";
18}
19 
20export function rootChildResources(auth: DavPatAuth): DiscoveryResource[] {
21 const children = [PRINCIPALS_RESOURCE];
22 if (hasAnyDavScope(auth.scopes, ["dav:files:read", "dav:files:write"])) children.push(FILES_HOME_RESOURCE);
23 if (hasDavScope(auth.scopes, "dav:caldav:read")) children.push(CALENDAR_HOME_RESOURCE);
24 if (hasDavScope(auth.scopes, "dav:carddav:read")) children.push(ADDRESSBOOK_HOME_RESOURCE);
25 return children;
26}