Skip to content

Dies ist eine einfache Upload-API, welche auf Node.js und SQLite basiert.

License

Notifications You must be signed in to change notification settings

maxsrl/moeshare

Repository files navigation

LOGO

GitHub Lizenz GitHub Letze Änderung Docker Pulls GitHub Issues GitHub Sterne

⚠️ Dies ist noch eine frühe und aktive Entwicklung. Es kann zu Fehlern kommen.

🛑 Wenn du MoeShare bereits Installiert hast, mache eine Migration, da er nun SQLite nutzt. Dies macht mehr Sinn für solch ein Projekt.

Dies ist eine einfache Upload-API, welche auf Node.js und SQLite basiert. MoeShare ermöglicht das Hochladen und generiert verschiedene Links für den Zugriff auf die hochgeladenen Dateien.

Developer

Du bist ein Developer und siehst hier Fehler oder hast Verbesserungsvorschläge? Zögere nicht ein Issue zu öffnen bzw. eine Pull Request.

GTMetrix Performence Test

Du möchtest wissen, wie die Performence der Anwendung ist? Klicke hier.

Funktionen

  • Hochladen von Bildern, Gifs, Videos, Audio und Dateien
  • Token-basierte Authentifizierung
  • Herunterladen und Löschen von Dateien
  • GPS-Daten werden automatisch entfernt
  • Vollständig anpassbare Discord-Einbettungen
  • Integrierter Webviewer mit Bilder, Video- und Audioplayer
  • Einbetten von Bildern, Gifs und Videos direkt in Discord
  • Informations- und Fehler-Protokoll mit anpassbaren Discord-Webhook
  • macOS/Linux-Unterstützung mit alternativen Clients wie Flameshot & MagicCap
  • Liste aller Dateien
  • ...

Installation

Derzeit wird die Installation mit NodeJS oder Docker unterstützt.

Lokal

Erweitern für die Lokale Installation
  1. Node.JS v20.X.X installation

    Debian:

    cd ~ && apt --assume-yes install curl && curl -sL https://deb.nodesource.com/setup_18.x -o nodesource_setup.sh && sudo bash nodesource_setup.sh && sudo apt --assume-yes install nodejs

    Ubuntu:

    cd ~ && apt --assume-yes install curl && curl -sL https://deb.nodesource.com/setup_18.x -o nodesource_setup.sh && sudo bash nodesource_setup.sh && sudo apt --assume-yes install nodejs
  2. Klone dieses Repo mit git clone https://github.com/maxsrl/moeshare.git && cd moeshare/.

  3. Passe nun die example.env an.

  4. Nenne nun die example.env zu .env um.

  5. Führe npm i aus, um die benötigten Abhängigkeiten zu installieren.

  6. Führe npm run register aus, um den ersten Nutzer zu erstellen.

  7. Führe npm start aus, um MoeShare zu starten.

Lokal mit PM2 Clustering

Erweitern für die Lokale Installation mit PM2
  1. Node.JS v20.X.X installation

    Debian:

    cd ~ && apt --assume-yes install curl && curl -sL https://deb.nodesource.com/setup_20.x -o nodesource_setup.sh && sudo bash nodesource_setup.sh && sudo apt --assume-yes install nodejs

    Ubuntu:

    cd ~ && apt --assume-yes install curl && curl -sL https://deb.nodesource.com/setup_20.x -o nodesource_setup.sh && sudo bash nodesource_setup.sh && sudo apt --assume-yes install nodejs
  2. Klone dieses Repo mit git clone https://github.com/maxsrl/moeshare.git && cd moeshare/.

  3. Passe nun die example.env an.

  4. Nenne nun die example.env zu .env um.

  5. Führe npm i aus, um die benötigten Abhängigkeiten zu installieren.

  6. Führe npm i pm2 -g aus, um PM2 zu installieren.

  7. Führe npm run register aus, um den ersten Nutzer zu erstellen.

  8. Führe pm2 start index.js -i max --name MoeShare aus, um MoeShare zu starten und ihn zu Clustern mit allen Verfügbaren Threads.

Docker

Erweitern für die Docker/Compose Installation
  1. Docker & Docker Compose Installieren

    Debian (Debian Bookworm 12 (stable), Debian Bullseye 11 (oldstable)):

     sudo apt-get update
     sudo apt-get --assume-yes install ca-certificates curl gnupg
     sudo install -m 0755 -d /etc/apt/keyrings
     curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
     sudo chmod a+r /etc/apt/keyrings/docker.gpg
     echo \
     "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \
     "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
     sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
     sudo apt-get update
     sudo apt-get --assume-yes install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

    Ubuntu (Ubuntu Lunar 23.04, Ubuntu Kinetic 22.10, Ubuntu Jammy 22.04 (LTS), Ubuntu Focal 20.04 (LTS)):

     sudo apt-get update
     sudo apt-get --assume-yes install ca-certificates curl gnupg
     sudo install -m 0755 -d /etc/apt/keyrings
     curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
     sudo chmod a+r /etc/apt/keyrings/docker.gpg
     echo \
     "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
     "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
     sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
     sudo apt-get update
     sudo apt-get --assume-yes install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
  2. Lade dir die docker-compose.yml auf dein Server herunter

  3. Bearbeite die docker-compose.yml nach deinen Vorstellungen.

  4. Führe docker compose up -d && docker compose exec moeshare npm run register && docker compose restart aus, um den ersten Nutzer zu erstellen und um MoeShare zu starten.

Wie kann ich ein npm-Script ausführen? Nutze dafür docker compose exec moeshare npm run BEFEHL

Wie kann ich Updaten? Nutze dafür: docker compose pull

HTTPS

Für HTTPS-Unterstützung musst Du einen Reverse-Proxy konfigurieren. Ich empfehle Caddy, aber jeder Reverse-Proxy funktioniert gut (wie Apache oder Nginx). Eine Beispielkonfiguration für Caddy findest du hier:

moeshare.example.com {
    reverse_proxy localhost:3000
}

ShareX konfigurieren

Die Datei config.sxcu kann auch geändert und importiert werden, für ein schnelleren Start.

  1. Füge einen neuen benutzerdefinierten Uploader in ShareX hinzu, indem Du auf Destinations > Custom uploader settings... gehst.
  2. Klicke auf New und gebe MoeShare einen Namen Deiner Wahl.
  3. Setze Zieltyp auf "Bild", "Text" und "Datei".
    • Method: POST
    • Request URL: https://example/upload
    • Body: Formulardaten (multipart/form-data)
    • File form name: file (wörtlich "file" in das Feld eingeben)
    • Headers:
      • Name: Authorization
      • Wert: Dein Token
    • URL: {json:view}
    • Thumbnail URL: {json:preview}
    • Deletion URL: {json:delete}

Entwicker-API

MoeShare hat eine API für Frontend-Entwickler zur einfachen Integration. Im Moment ist die API ziemlich begrenzt, aber ich werde sie in Zukunft erweitern, mit dem Feedback der Frontend-Entwickler. Alle Endpunkte, die eine Autorisierung erfordern, werden einen Authorization-Header benötigen, dessen Wert das Login-Token des Benutzers ist. Admin-Benutzer können auf alle Endpunkte zugreifen, während Nicht-Admin-Benutzer nur auf die für sie relevanten Endpunkte zugreifen können.

Andere Dinge zu beachten:

  • Alle Endpunkte geben ein JSON-Objekt zurück.
  • Erfolgreiche Endpunkte sollten einen 200 Statuscode zurückgeben. Alle Fehler verwenden den entsprechenden 4xx oder 5xx Statuscode (wie 401 Unauthorized).

API-Endpunkte

Endpunkt Zweck Admin?
POST /login Dieser Endpunkt ermöglicht es einem Benutzer, sich anzumelden und ein Login-Token zu erhalten, das zur Authentifizierung verwendet wird. Nein
POST /upload Mit diesem Endpunkt kann ein Benutzer eine Datei hochladen. Nein
GET /view/:filename Dieser Endpunkt stellt ein WebUI für eine spezifische Datei bereit, die dem angegebenen Benutzer gehört. Nein
GET /oembed/:filename Hier erhält ein Benutzer die OEmbed-Daten für eine spezifische Datei. Nein
GET /download/:filename Durch diesen Endpunkt erhält der Benutzer einen direkten Download-Link für eine spezifische Datei. Nein
DELETE /file/:username/:filename Mit diesem Endpunkt werden alle Daten einer angegebenen Datei gelöscht, einschließlich des Previews, der Datei selbst und des Datenbankeintrags. Der Zugriff ist auf den angegebenen Benutzer beschränkt. Ja
DELETE /file/:filename Dieser Endpunkt löscht alle Daten einer angegebenen Datei, einschließlich des Previews, der Datei selbst und des Datenbankeintrags. Der Zugriff erfolgt über das Login-Token des eingeloggten Benutzers. Nein
DELETE /user/:username Dieser Endpunkt löscht alle Daten eines Nutzers, einschließlich des Nutzers selbst, des Ordners des Nutzers und des Datenbankeintrags. Der Zugriff erfolgt über das Login-Token des eingeloggten Benutzers. Ja
DELETE /user Mit diesem Endpunkt werden alle Daten des angemeldeten Nutzers gelöscht, einschließlich des Nutzers selbst, des Ordners des Nutzers und des Datenbankeintrags. Der Zugriff ist auf den angegebenen Benutzer beschränkt. Nein
GET /files/:username Hier erhält der Benutzer eine Liste aller Dateien eines bestimmten Nutzers. Ja
GET /files Durch diesen Endpunkt erhält der Benutzer eine Liste aller Dateien, die dem eingeloggten Benutzer gehören. Nein

Environments

Endpunkt Zweck Standart Wichtig?
AUDIO_FORMATS Definiert die erlaubten Audioformate für die Anwendung. .mp3,.wav,.ogg,.aac,.flac
VIDEO_FORMATS Definiert die erlaubten Videoformate für die Anwendung. .mp4,.avi,.mkv,.mov,.wmv
IMAGE_FORMATS Definiert die erlaubten Bildformate für die Anwendung. .jpg,.jpeg,.png,.bmp,.svg,.webp,.tiff
BASE_URL Legt die URL der Anwendung fest, die beim Upload verwendet wird. http://localhost:3000
PORT Gibt den TCP-Port der Anwendung an. 3000
JWT_TOKEN Ein zufälliger Token, idealerweise 64 Zeichen lang, der zur Signierung verwendet wird. CHANGEME
REMOVE_METADATA Legt fest, ob Metadaten wie Standortinformationen nach dem Upload entfernt werden sollen (kann die Leistung beeinträchtigen). true
USE_PREVIEW Gibt an, ob ein Vorschaubild erstellt werden soll. true
LOGS Gibt an, ob Logs an den Discord-Webhook gesendet werden sollen. false
ALLOW_METRICS Legt fest, ob Fehler zur Fehlerbehebung an Sentry gesendet werden dürfen (wird empfohlen, um zur Verbesserung der Anwendung beizutragen!). true
USE_HLS Legt fest, ob HLS für das Videostreaming verwendet wird. Dies erfordert mehr Speicher, ist aber bei großen Videos ratsam. (Erstellt eine .m3u8-Datei und .ts-Dateien). true
SITE_TITLE Definiert den HTML-Metatag "title". MoeShare
SITE_FAVICON Pfad zur .png-Datei oder URL einer .png-Datei für das Favicon. https://moeshare.de/assets/img/logo.png
OG_TITLE Meta-Tag og:title. EXAMPLE
OG_DESCRIPTION Meta-Tag og:description. EXAMPLE
THEME_COLOR Meta-Tag theme-color - wenn &dominantColor als themecolor genommen wird, ist das Embed in der Dominanten Farbe der Datei. Sollte &random genommen werden, hat das Embed eine zufällige Farbe. &dominantColor
FONT_COLOR Hier kannst du die Schriftfarbe definieren. (#HEXCOLOR) #343540
AUTHOR_URL OEmbed-Autor-URL. https://example.com
AUTHOR_NAME OEmbed-Autor-Name. EXAMPLE
PROVIDER_NAME OEmbed-Anbieter-Name. EXAMPLE.COM
PROVIDER_URL OEmbed-Anbieter-URL. https://example.com
USE_DOMINANT_COLOR Gibt an, ob die dominante Farbe des Bildes für den Schatten verwendet werden soll (true), oder ob stattdessen eine feste Farbe verwendet werden soll (false, dann &dominantColorStatic ausfüllen). true
DOMINANT_COLOR_STATIC Diese Farbe wird anstelle der dominanten Farbe verwendet (#HEXCOLOR). #ffffff
BOX_SHADOW_COLOR Wird angewendet, wenn die Datei kein Bild ist (#HEXCOLOR). #ffffff
COPYRIGHT_TEXT Copyright-Text. © 2023 MoeShare - All Rights Reserved
DISCORD_WEBHOOK_NAME Name der Discord-Webhook. MoeShare
DISCORD_WEBHOOK_URL URL für den Discord-Webhook-Log (nur ausfüllen, wenn LOGS = true). https://discord.com/api/webhooks/XXXX/XXXX
DISCORD_WEBHOOK_SUCCESS_COLOR Embed-Farbe für INFO-Logs (0xHEXCOLORCODEOHNE-#). 0x03fc28
DISCORD_WEBHOOK_ERROR_COLOR Embed-Farbe für ERROR-Logs (0xHEXCOLORCODEOHNE-#). 0xfc0303
REDIRECT_URL Weiterleitungsziel, wenn / aufgerufen wird. https://example.com

NPM-Scripts

Alle dieser Skripte sollten mit npm run <script-name> ausgeführt werden. (außer start)

Script Beschreibung
start Startet MoeShare. Dies ist das Standardskript und wird mit npm start ausgeführt..
token Mit diesen Script bekommst du den Token von den angegebenen Nutzername und Passwort
reset Mit diesen Script kannst du das Passwort, den Token und die Rolle eines Nutzers ändern bzw. zurücksetzen.
register Mit diesen Script kannst du einen Nutzer registrieren

Flameshot-Benutzer (Linux)

Verwende dieses Skript und installiere die Pakete jp und xclip.

Support

Solltest Du hilfe benötigen, öffne ein Issue oder Kontaktiere mich über meiner Website.

Credits

  • Einiges von der README.md und der docker-compose.yml wurde von ass übernommen

Lizenz

Dieses Projekt ist unter der MIT-Lizenz lizenziert.