- Updated .env.example to include configuration for OnlyOffice Document Server. - Modified the workspace configuration to remove the drive-suite path. - Adjusted TypeScript environment imports for consistency. - Enhanced Next.js configuration to disable canvas in Webpack. - Updated package.json to include new dependencies for OnlyOffice and PDF.js. - Added global styles for OnlyOffice theme integration in the CSS. - Created new layout and page components for the Drive feature, including public sharing and editing functionalities. - Updated metadata handling across various layouts to reflect the new app structure.
332 lines
7.9 KiB
TypeScript
332 lines
7.9 KiB
TypeScript
export type ApiTokenPermissionGroup = "mail" | "drive" | "contacts" | "automation"
|
|
|
|
export type ApiTokenAccess = "read" | "write"
|
|
|
|
export interface ApiTokenPermissionDef {
|
|
id: string
|
|
label: string
|
|
description: string
|
|
group: ApiTokenPermissionGroup
|
|
supportsRead: boolean
|
|
supportsWrite: boolean
|
|
}
|
|
|
|
export interface ApiTokenPermissionGrant {
|
|
resource: string
|
|
read: boolean
|
|
write: boolean
|
|
}
|
|
|
|
export interface ApiTokenMailScope {
|
|
all_accounts: boolean
|
|
account_ids: string[]
|
|
}
|
|
|
|
export interface ApiTokenDriveScope {
|
|
all_folders: boolean
|
|
folder_paths: string[]
|
|
}
|
|
|
|
export const API_TOKEN_PERMISSION_GROUPS: {
|
|
id: ApiTokenPermissionGroup
|
|
label: string
|
|
description: string
|
|
}[] = [
|
|
{
|
|
id: "mail",
|
|
label: "Mail",
|
|
description: "Boîtes, messages, libellés, identités et pièces jointes.",
|
|
},
|
|
{
|
|
id: "drive",
|
|
label: "Drive",
|
|
description: "Fichiers, dossiers, partage et téléchargement.",
|
|
},
|
|
{
|
|
id: "contacts",
|
|
label: "Contacts",
|
|
description: "Annuaire, libellés et propriétés des contacts.",
|
|
},
|
|
{
|
|
id: "automation",
|
|
label: "Automatisations",
|
|
description: "Règles, webhooks, fournisseurs et administration des tokens.",
|
|
},
|
|
]
|
|
|
|
export const API_TOKEN_PERMISSIONS: ApiTokenPermissionDef[] = [
|
|
{
|
|
id: "mail.mailboxes",
|
|
label: "Boîtes et dossiers",
|
|
description: "Lister et organiser les dossiers IMAP/unifiés.",
|
|
group: "mail",
|
|
supportsRead: true,
|
|
supportsWrite: true,
|
|
},
|
|
{
|
|
id: "mail.labels",
|
|
label: "Libellés",
|
|
description: "Consulter et gérer les libellés unifiés.",
|
|
group: "mail",
|
|
supportsRead: true,
|
|
supportsWrite: true,
|
|
},
|
|
{
|
|
id: "mail.messages",
|
|
label: "Messages",
|
|
description: "Lire le contenu des messages autorisés.",
|
|
group: "mail",
|
|
supportsRead: true,
|
|
supportsWrite: false,
|
|
},
|
|
{
|
|
id: "mail.search",
|
|
label: "Recherche",
|
|
description: "Rechercher dans les messages des comptes autorisés.",
|
|
group: "mail",
|
|
supportsRead: true,
|
|
supportsWrite: false,
|
|
},
|
|
{
|
|
id: "mail.send",
|
|
label: "Envoi",
|
|
description: "Envoyer des messages via les identités autorisées.",
|
|
group: "mail",
|
|
supportsRead: false,
|
|
supportsWrite: true,
|
|
},
|
|
{
|
|
id: "mail.attachments",
|
|
label: "Pièces jointes",
|
|
description: "Télécharger et joindre des fichiers aux messages.",
|
|
group: "mail",
|
|
supportsRead: true,
|
|
supportsWrite: true,
|
|
},
|
|
{
|
|
id: "mail.settings",
|
|
label: "Configuration",
|
|
description: "Préférences mail, signatures et organisation.",
|
|
group: "mail",
|
|
supportsRead: true,
|
|
supportsWrite: true,
|
|
},
|
|
{
|
|
id: "mail.identities",
|
|
label: "Identités",
|
|
description: "Identités d'envoi et alias configurés.",
|
|
group: "mail",
|
|
supportsRead: true,
|
|
supportsWrite: true,
|
|
},
|
|
{
|
|
id: "mail.automation",
|
|
label: "Automatisations mail",
|
|
description: "Règles et actions liées aux messages.",
|
|
group: "mail",
|
|
supportsRead: true,
|
|
supportsWrite: true,
|
|
},
|
|
{
|
|
id: "drive.folders",
|
|
label: "Dossiers",
|
|
description: "Parcourir l'arborescence Drive.",
|
|
group: "drive",
|
|
supportsRead: true,
|
|
supportsWrite: false,
|
|
},
|
|
{
|
|
id: "drive.files",
|
|
label: "Fichiers",
|
|
description: "Lire le contenu et les métadonnées des fichiers.",
|
|
group: "drive",
|
|
supportsRead: true,
|
|
supportsWrite: false,
|
|
},
|
|
{
|
|
id: "drive.thumbnails",
|
|
label: "Miniatures",
|
|
description: "Obtenir les vignettes de prévisualisation.",
|
|
group: "drive",
|
|
supportsRead: true,
|
|
supportsWrite: false,
|
|
},
|
|
{
|
|
id: "drive.download",
|
|
label: "Liens de téléchargement",
|
|
description: "Générer des liens de téléchargement temporaires.",
|
|
group: "drive",
|
|
supportsRead: true,
|
|
supportsWrite: false,
|
|
},
|
|
{
|
|
id: "drive.share",
|
|
label: "Liens de partage",
|
|
description: "Créer et gérer les partages publics.",
|
|
group: "drive",
|
|
supportsRead: true,
|
|
supportsWrite: true,
|
|
},
|
|
{
|
|
id: "drive.upload",
|
|
label: "Upload",
|
|
description: "Envoyer des fichiers et dossiers.",
|
|
group: "drive",
|
|
supportsRead: false,
|
|
supportsWrite: true,
|
|
},
|
|
{
|
|
id: "drive.rename",
|
|
label: "Renommage",
|
|
description: "Renommer fichiers et dossiers.",
|
|
group: "drive",
|
|
supportsRead: false,
|
|
supportsWrite: true,
|
|
},
|
|
{
|
|
id: "drive.move",
|
|
label: "Déplacement",
|
|
description: "Déplacer fichiers et dossiers.",
|
|
group: "drive",
|
|
supportsRead: false,
|
|
supportsWrite: true,
|
|
},
|
|
{
|
|
id: "drive.copy",
|
|
label: "Copie",
|
|
description: "Dupliquer fichiers et dossiers.",
|
|
group: "drive",
|
|
supportsRead: false,
|
|
supportsWrite: true,
|
|
},
|
|
{
|
|
id: "contacts.read",
|
|
label: "Lecture",
|
|
description: "Consulter les fiches contacts.",
|
|
group: "contacts",
|
|
supportsRead: true,
|
|
supportsWrite: false,
|
|
},
|
|
{
|
|
id: "contacts.search",
|
|
label: "Recherche",
|
|
description: "Rechercher dans l'annuaire.",
|
|
group: "contacts",
|
|
supportsRead: true,
|
|
supportsWrite: false,
|
|
},
|
|
{
|
|
id: "contacts.write",
|
|
label: "Création et modification",
|
|
description: "Ajouter et modifier des contacts et leurs propriétés.",
|
|
group: "contacts",
|
|
supportsRead: false,
|
|
supportsWrite: true,
|
|
},
|
|
{
|
|
id: "contacts.delete",
|
|
label: "Suppression",
|
|
description: "Supprimer des contacts.",
|
|
group: "contacts",
|
|
supportsRead: false,
|
|
supportsWrite: true,
|
|
},
|
|
{
|
|
id: "contacts.labels",
|
|
label: "Libellés de contacts",
|
|
description: "Gérer les groupes et libellés de contacts.",
|
|
group: "contacts",
|
|
supportsRead: true,
|
|
supportsWrite: true,
|
|
},
|
|
{
|
|
id: "automation.rules",
|
|
label: "Règles",
|
|
description: "Règles de tri et workflows.",
|
|
group: "automation",
|
|
supportsRead: true,
|
|
supportsWrite: true,
|
|
},
|
|
{
|
|
id: "automation.webhooks",
|
|
label: "Webhooks",
|
|
description: "Webhooks sortants et templates.",
|
|
group: "automation",
|
|
supportsRead: true,
|
|
supportsWrite: true,
|
|
},
|
|
{
|
|
id: "automation.llm",
|
|
label: "Fournisseurs LLM",
|
|
description: "Configuration des fournisseurs IA.",
|
|
group: "automation",
|
|
supportsRead: true,
|
|
supportsWrite: true,
|
|
},
|
|
{
|
|
id: "automation.search",
|
|
label: "Fournisseurs de recherche",
|
|
description: "Moteurs de recherche externes.",
|
|
group: "automation",
|
|
supportsRead: true,
|
|
supportsWrite: true,
|
|
},
|
|
{
|
|
id: "automation.api_tokens",
|
|
label: "Super admin — Tokens API",
|
|
description: "Créer, modifier et révoquer d'autres tokens API.",
|
|
group: "automation",
|
|
supportsRead: false,
|
|
supportsWrite: true,
|
|
},
|
|
]
|
|
|
|
export function emptyPermissionGrants(): ApiTokenPermissionGrant[] {
|
|
return API_TOKEN_PERMISSIONS.map((def) => ({
|
|
resource: def.id,
|
|
read: false,
|
|
write: false,
|
|
}))
|
|
}
|
|
|
|
export function defaultMailScope(): ApiTokenMailScope {
|
|
return { all_accounts: true, account_ids: [] }
|
|
}
|
|
|
|
export function defaultDriveScope(): ApiTokenDriveScope {
|
|
return { all_folders: true, folder_paths: [] }
|
|
}
|
|
|
|
export function hasAnyPermission(grants: ApiTokenPermissionGrant[]): boolean {
|
|
return grants.some((g) => g.read || g.write)
|
|
}
|
|
|
|
export function hasMailPermissions(grants: ApiTokenPermissionGrant[]): boolean {
|
|
return grants.some(
|
|
(g) =>
|
|
g.resource.startsWith("mail.") &&
|
|
(g.read || g.write)
|
|
)
|
|
}
|
|
|
|
export function hasDrivePermissions(grants: ApiTokenPermissionGrant[]): boolean {
|
|
return grants.some(
|
|
(g) =>
|
|
g.resource.startsWith("drive.") &&
|
|
(g.read || g.write)
|
|
)
|
|
}
|
|
|
|
export function summarizePermissions(grants: ApiTokenPermissionGrant[]): string[] {
|
|
const lines: string[] = []
|
|
for (const def of API_TOKEN_PERMISSIONS) {
|
|
const grant = grants.find((g) => g.resource === def.id)
|
|
if (!grant) continue
|
|
const parts: string[] = []
|
|
if (grant.read && def.supportsRead) parts.push("lecture")
|
|
if (grant.write && def.supportsWrite) parts.push("écriture")
|
|
if (parts.length > 0) lines.push(`${def.label} (${parts.join(", ")})`)
|
|
}
|
|
return lines
|
|
}
|