UNPKG

@mieweb/wikigdrive

Version:

Google Drive to MarkDown synchronization

66 lines (65 loc) 2.89 kB
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; import process from 'node:process'; import { Controller, RouteErrorHandler, RouteResponse, RouteUse } from './Controller.js'; import { extToMime, ShareErrorHandler } from './FolderController.js'; import { FileContentService } from '../../../utils/FileContentService.js'; export class PreviewController extends Controller { constructor(subPath, queryLogger) { super(subPath); Object.defineProperty(this, "queryLogger", { enumerable: true, configurable: true, writable: true, value: queryLogger }); Object.defineProperty(this, "fileSystem", { enumerable: true, configurable: true, writable: true, value: void 0 }); this.fileSystem = new FileContentService(process.env.VOLUME_PREVIEW); } async getFolder(ctx) { const relativeUrl = ctx.req.originalUrl || '/'; let filePath = relativeUrl.replace('/preview', '').replace(/\?.*$/, ''); if (!await this.fileSystem.exists(filePath)) { this.queryLogger.warn(`Not found: ${filePath}`); ctx.res.status(404).send('Not found'); return; } if (await this.fileSystem.isDirectory(filePath)) { if (!relativeUrl.endsWith('/')) { ctx.res .status(301) .setHeader('location', relativeUrl + '/') .send(); return; } filePath = filePath + '/index.html'; } if (!await this.fileSystem.exists(filePath)) { this.queryLogger.warn(`Not found: ${filePath}`); ctx.res.status(404).send('Not found'); return; } const ext = filePath.substring(filePath.lastIndexOf('.') + 1); const guessedExt = await this.fileSystem.guessExtension(filePath); const mimeType = extToMime[ext] || extToMime[guessedExt]; if (mimeType) { ctx.res.setHeader('Content-type', mimeType); } const buffer = await this.fileSystem.readBuffer(filePath); ctx.res.send(buffer); } } __decorate([ RouteUse('/:driveId'), RouteResponse('stream'), RouteErrorHandler(new ShareErrorHandler()) ], PreviewController.prototype, "getFolder", null);