8bee65c306
- PROPFIND-Auswertung (mehrere propstat, Kleinbuchstaben-Hex, Speicher -3 = unbegrenzt, nur Zeichenketten) - WebDAV-Schicht mit Zugangsschluessel und Aufrufsperre, Destination immer aus der Basis, Overwrite: F - mapNcFailure als einzige Fehlerabbildung (nie 401/403 an den Browser), sendUpstreamStream prueft vor dem ersten Byte - Dateidienst und Routen files, folders, move, preview im eigenen Konto; zweiter Benutzer bekommt notConnected - Web-API-Funktionen listFolder, createFolder, moveEntry, deleteEntry, previewUrl - e2e-files.sh gegen die Test-Nextcloud Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
58 lines
2.3 KiB
TypeScript
58 lines
2.3 KiB
TypeScript
import { Logger, Module, OnModuleInit } from '@nestjs/common';
|
|
import { ModuleRegistryModule } from '../module-registry/module-registry.module';
|
|
import { ModuleRegistryService } from '../module-registry/module-registry.service';
|
|
import { NextcloudCallGate } from './nextcloud-call-gate';
|
|
import { NextcloudFilesController } from './nextcloud-files.controller';
|
|
import { seedNextcloudFilesModule } from './nextcloud-files.seed';
|
|
import { NextcloudFilesService } from './nextcloud-files.service';
|
|
import { NextcloudFilesAccountService } from './nextcloud-files-account.service';
|
|
import {
|
|
defaultStatusFetcher,
|
|
NEXTCLOUD_STATUS_FETCHER,
|
|
NextcloudFilesSettingsService,
|
|
} from './nextcloud-files-settings.service';
|
|
import { NEXTCLOUD_TRANSPORT, undiciTransport } from './nextcloud-http';
|
|
import { LoginFlowStore, NextcloudLoginGuard } from './nextcloud-login-guard';
|
|
|
|
/**
|
|
* Modul "Dateien" (quick-261008-mzu): die Nextcloud-Dateien jedes Benutzers in
|
|
* Tessera. Traegt sich beim Start in die Modulverwaltung ein; aktiviert wird per
|
|
* Marktplatz. `CryptoService` kommt aus dem globalen `CryptoModule`,
|
|
* `PrismaService` ist global. Die Aufrufsperre ist ein einziges Objekt fuer den
|
|
* ganzen Prozess (alle Benutzer teilen die Server-Adresse gegenueber Nextcloud).
|
|
*/
|
|
@Module({
|
|
imports: [ModuleRegistryModule],
|
|
controllers: [NextcloudFilesController],
|
|
providers: [
|
|
NextcloudFilesSettingsService,
|
|
NextcloudFilesAccountService,
|
|
NextcloudFilesService,
|
|
NextcloudLoginGuard,
|
|
LoginFlowStore,
|
|
NextcloudCallGate,
|
|
{ provide: NEXTCLOUD_TRANSPORT, useValue: undiciTransport },
|
|
{ provide: NEXTCLOUD_STATUS_FETCHER, useValue: defaultStatusFetcher },
|
|
],
|
|
exports: [
|
|
NextcloudCallGate,
|
|
NextcloudFilesSettingsService,
|
|
NextcloudFilesAccountService,
|
|
NEXTCLOUD_TRANSPORT,
|
|
],
|
|
})
|
|
export class NextcloudFilesModule implements OnModuleInit {
|
|
private readonly logger = new Logger(NextcloudFilesModule.name);
|
|
|
|
constructor(private readonly moduleRegistryService: ModuleRegistryService) {}
|
|
|
|
async onModuleInit(): Promise<void> {
|
|
try {
|
|
await seedNextcloudFilesModule(this.moduleRegistryService);
|
|
this.logger.log('Nextcloud files module seeded in registry');
|
|
} catch (error) {
|
|
this.logger.error('Failed to seed nextcloud files module', error);
|
|
}
|
|
}
|
|
}
|