mirror of
https://github.com/HeyPuter/puter.git
synced 2026-11-04 13:03:37 +00:00
* feat(kv): share key-value prefixes with other users, and bound what apps can be granted - KV share handles move out of Events into KvShareService, served at /kv/shares (the /events/kv-handles routes stay as an alias). - Shares have watch, read and write levels, encoded in the permission root (kv-share, kv-share-read, kv-share-write) with write implying read and watch. - Every puter.kv method takes optConfig.handle; keys are relative to the shared prefix, cursors are sealed, and private entries stay hidden. - New puter.kv.share, unshare, listShared and listSharedByMe; optional label; kv.share.received notice in the app's mailbox only; recipient blocks apply. - puter.kv.set gains onlyIfAbsent. - fs and kv events gain viaWorker, and kv events report self from the writer. - /auth/grant-user-app only accepts canonical permissions from a fixed set of families; the consent dialog, puter.perms and docs follow. - Migrations: kv_share_handles gains revoked_by, label, and grantee and app indexes (mysql_mig_49, postgres_mig_38, sqlite 0095). * fix(kv): never name a private key in a cross-app or handle cursor, and bound flat-permission scans - Listings of another namespace (cross-app or through a handle) resume after the last entry they returned, and their cursors are sealed, bound to the namespace or handle, and padded to one length. Old plain cross-app cursors are still read when they name the target namespace; other namespaces get 400. - PermissionStore scans flat permissions a few roots at a time and skips roots nested under another root in the same call.
71 lines
3.2 KiB
TypeScript
71 lines
3.2 KiB
TypeScript
/*
|
|
* Copyright (C) 2024-present Puter Technologies Inc.
|
|
*
|
|
* This file is part of Puter.
|
|
*
|
|
* Puter is free software: you can redistribute it and/or modify
|
|
* it under the terms of the GNU Affero General Public License as published
|
|
* by the Free Software Foundation, either version 3 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU Affero General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Affero General Public License
|
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
import { AppController } from './apps/AppController.js';
|
|
import { AppFeedbackController } from './feedback/AppFeedbackController.js';
|
|
import { AuthController } from './auth/AuthController.js';
|
|
import { BroadcastController } from './broadcast/BroadcastController.js';
|
|
import { DesktopController } from './desktop/DesktopController.js';
|
|
import { DriverController } from './drivers/DriverController.js';
|
|
import { EventsController } from './events/EventsController.js';
|
|
import { FSController } from './fs/FSController.js';
|
|
import { HomepageController } from './homepage/HomepageController.js';
|
|
import { HostingController } from './hosting/HostingController.js';
|
|
import { KvShareController } from './kvShare/KvShareController.js';
|
|
import { LegacyFSController } from './fs/LegacyFSController.js';
|
|
import { NotificationController } from './notification/NotificationController.js';
|
|
import { OIDCController } from './oidc/OIDCController.js';
|
|
import { PuterAIController } from './puterai/PuterAIController.js';
|
|
import { ShareController } from './share/ShareController.js';
|
|
import { StaticAssetsController } from './static/StaticAssetsController.js';
|
|
import { StaticPagesController } from './static/StaticPagesController.js';
|
|
import { SystemController } from './system/SystemController.js';
|
|
import { WebDAVController } from './webdav/WebDAVController.js';
|
|
import { WispController } from './wisp/WispController.js';
|
|
import type { IPuterControllerRegistry } from './types.js';
|
|
import { PeerController } from './peer/PeerController.js';
|
|
import { ProfileController } from './profile/ProfileController.js';
|
|
|
|
export const puterControllers = {
|
|
staticAssets: StaticAssetsController,
|
|
staticPages: StaticPagesController,
|
|
auth: AuthController,
|
|
profile: ProfileController,
|
|
apps: AppController,
|
|
appFeedback: AppFeedbackController,
|
|
desktop: DesktopController,
|
|
hosting: HostingController,
|
|
system: SystemController,
|
|
fs: FSController,
|
|
legacyFs: LegacyFSController,
|
|
puterAi: PuterAIController,
|
|
drivers: DriverController,
|
|
broadcast: BroadcastController,
|
|
notification: NotificationController,
|
|
events: EventsController,
|
|
kvShare: KvShareController,
|
|
share: ShareController,
|
|
webdav: WebDAVController,
|
|
oidc: OIDCController,
|
|
wisp: WispController,
|
|
peer: PeerController,
|
|
// Last so its catch-all static fallback doesn't shadow earlier routes.
|
|
homepage: HomepageController,
|
|
} satisfies IPuterControllerRegistry;
|