Compare commits

...

4 Commits

Author SHA1 Message Date
be0d97661a update README 2024-09-04 18:56:14 +01:00
4e2b23c97e v0.3.1 2024-09-03 10:49:38 +01:00
dc3ce27762 fix collaboration websocket 2024-09-03 10:48:47 +01:00
8af2d4e8cf file content-disposition 2024-09-02 16:39:07 +01:00
7 changed files with 31 additions and 17 deletions

View File

@ -17,6 +17,7 @@ To get started with Docmost, please refer to our [documentation](https://docmost
## Features
- Real-time collaboration
- Diagrams (Draw.io, Excalidraw and Mermaid)
- Spaces
- Permissions management
- Groups
@ -32,4 +33,4 @@ To get started with Docmost, please refer to our [documentation](https://docmost
</p>
### Contributing
See the [development doc](https://docmost.com/docs/self-hosting/development)
See the [development documentation](https://docmost.com/docs/self-hosting/development)

View File

@ -1,7 +1,7 @@
{
"name": "client",
"private": true,
"version": "0.3.0",
"version": "0.3.1",
"scripts": {
"dev": "vite",
"build": "tsc && vite build",

View File

@ -7,23 +7,27 @@ declare global {
export function getAppUrl(): string {
//let appUrl = window.CONFIG?.APP_URL || process.env.APP_URL;
// if (import.meta.env.DEV) {
// return appUrl || "http://localhost:3000";
// if (import.meta.env.DEV) {
// return appUrl || "http://localhost:3000";
//}
return `${window.location.protocol}//${window.location.host}`;
}
export function getBackendUrl(): string {
return getAppUrl() + "/api";
return getAppUrl() + '/api';
}
export function getCollaborationUrl(): string {
const COLLAB_PATH = "/collab";
const url = process.env.APP_URL || getAppUrl();
const COLLAB_PATH = '/collab';
const wsProtocol = url.startsWith("https") ? "wss" : "ws";
return `${wsProtocol}://${url.split("://")[1]}${COLLAB_PATH}`;
let url = getAppUrl();
if (import.meta.env.DEV) {
url = process.env.APP_URL;
}
const wsProtocol = url.startsWith('https') ? 'wss' : 'ws';
return `${wsProtocol}://${url.split('://')[1]}${COLLAB_PATH}`;
}
export function getAvatarUrl(avatarUrl: string) {
@ -31,17 +35,17 @@ export function getAvatarUrl(avatarUrl: string) {
return null;
}
if (avatarUrl?.startsWith("http")) {
if (avatarUrl?.startsWith('http')) {
return avatarUrl;
}
return getBackendUrl() + "/attachments/img/avatar/" + avatarUrl;
return getBackendUrl() + '/attachments/img/avatar/' + avatarUrl;
}
export function getSpaceUrl(spaceSlug: string) {
return "/s/" + spaceSlug;
return '/s/' + spaceSlug;
}
export function getFileUrl(src: string) {
return src?.startsWith("/files/") ? getBackendUrl() + src : src;
return src?.startsWith('/files/') ? getBackendUrl() + src : src;
}

View File

@ -1,6 +1,6 @@
{
"name": "server",
"version": "0.3.0",
"version": "0.3.1",
"description": "",
"author": "",
"private": true,

View File

@ -5,10 +5,10 @@ export enum AttachmentType {
File = 'file',
}
export const validImageExtensions = ['.jpg', '.png', '.jpeg', 'gif'];
export const validImageExtensions = ['.jpg', '.png', '.jpeg'];
export const MAX_AVATAR_SIZE = '5MB';
export const InlineFileExtensions = [
export const inlineFileExtensions = [
'.jpg',
'.png',
'.jpeg',

View File

@ -30,6 +30,7 @@ import {
import { getMimeType } from '../../common/helpers';
import {
AttachmentType,
inlineFileExtensions,
MAX_AVATAR_SIZE,
MAX_FILE_SIZE,
} from './attachment.constants';
@ -177,6 +178,14 @@ export class AttachmentController {
'Content-Type': attachment.mimeType,
'Cache-Control': 'public, max-age=3600',
});
if (!inlineFileExtensions.includes(attachment.fileExt)) {
res.header(
'Content-Disposition',
`attachment; filename="${attachment.fileName}"`,
);
}
return res.send(fileStream);
} catch (err) {
this.logger.error(err);

View File

@ -1,7 +1,7 @@
{
"name": "docmost",
"homepage": "https://docmost.com",
"version": "0.3.0",
"version": "0.3.1",
"private": true,
"scripts": {
"build": "nx run-many -t build",