Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
  • Loading branch information
MaximilianGT500 committed Aug 29, 2023
2 parents 1b1de69 + a4d1732 commit 9e0926c
Show file tree
Hide file tree
Showing 3 changed files with 104 additions and 29 deletions.
36 changes: 36 additions & 0 deletions .github/workflows/docker-image.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
name: Docker Image CI

on:
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]

jobs:
docker:
runs-on: ubuntu-latest
steps:
-
name: Checkout
uses: actions/checkout@v3
-
name: Set up QEMU
uses: docker/setup-qemu-action@v2
-
name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
-
name: Login to Docker Hub
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
-
name: Build and push
uses: docker/build-push-action@v4
with:
context: .
platforms: linux/amd64,linux/arm64
push: true
tags: |
maximiliangt500/uploader:latest
91 changes: 64 additions & 27 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,18 +1,32 @@
# Uploader
⚠️ Dies ist noch eine frühe und aktive Entwicklung. Es kann zu Fehlern kommen.

🛑 Die MariaDB-Version ist veraltet. Update den Uploader nichtmehr, wenn du MariaDB nutzten möchtest. Lade alle Dateien herunter und lade sie wieder hoch, bevor du auf einer neuen Version updaten möchtest.
![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 den Uploader bereits Installiert hast, mache eine [Migration], da er nun SQLite nutzt. Dies macht mehr Sinn für solch ein Projekt.


[Migration]: https://github.com/MaximilianGT500/Uploader/blob/main/MIGRATION.md
[GitHub Lizenz]: https://img.shields.io/github/license/maximiliangt500/uploader?color=278c42&style=for-the-badge
[GitHub Letze Änderung]: https://img.shields.io/github/last-commit/maximiliangt500/uploader?color=278c42&label=Letze%20Änderung&style=for-the-badge
[Docker Pulls]: https://img.shields.io/docker/pulls/maximiliangt500/uploader?color=278c42&label=Docker%20Pulls&style=for-the-badge
[GitHub Issues]: https://img.shields.io/github/issues/maximiliangt500/uploader?color=278c42&label=Issues&style=for-the-badge
[GitHub Sterne]: https://img.shields.io/github/stars/maximiliangt500/uploader?color=278c42&label=Sterne&style=for-the-badge


Dies ist ein einfacher ShareX-Uploader, der auf Node.js und SQLite basiert. Der Uploader 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.

## Funktionen

- Hochladen von Bildern, Gifs, Videos, Audio und Dateien
- Token-basierte Authentifizierung
- Herunterladen und Löschen von Dateien
Expand Down Expand Up @@ -41,20 +55,25 @@ Derzeit wird die Installation mit NodeJS oder Docker unterstützt.
1. Node.JS v20.X.X installation

Debian:

```bash
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:

```bash
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
```

3. Klone dieses Repo mit `git clone https://github.com/MaximilianGT500/Uploader.git && cd Uploader/`.
4. Passe nun die `example.env` an.
5. Nenne nun die `example.env` zu `.env` um.
6. Führe `npm i` aus, um die benötigten Abhängigkeiten zu installieren.
7. Führe `npm run register` aus, um den ersten Nutzer zu erstellen.
8. Führe `npm start` aus, um den Uploader zu starten.


</details>

### Lokal mit PM2 Clustering
Expand All @@ -66,13 +85,17 @@ Derzeit wird die Installation mit NodeJS oder Docker unterstützt.
1. Node.JS v20.X.X installation

Debian:

```bash
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:

```bash
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
```

3. Klone dieses Repo mit `git clone https://github.com/MaximilianGT500/Uploader.git && cd Uploader/`.
4. Passe nun die `example.env` an.
5. Nenne nun die `example.env` zu `.env` um.
Expand All @@ -81,6 +104,7 @@ Derzeit wird die Installation mit NodeJS oder Docker unterstützt.
8. Führe `npm run register` aus, um den ersten Nutzer zu erstellen.
9. Führe `pm2 start index.js -i max --name Uploader` aus, um den Uploader zu starten und ihn zu Clustern mit allen Verfügbaren Threads.


</details>

### Docker
Expand All @@ -90,8 +114,9 @@ Derzeit wird die Installation mit NodeJS oder Docker unterstützt.
<br>

1. Docker & Docker Compose Installieren

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

```bash
sudo apt-get update
sudo apt-get --assume-yes install ca-certificates curl gnupg
Expand All @@ -105,8 +130,9 @@ Derzeit wird die Installation mit NodeJS oder Docker unterstützt.
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)):

```bash
sudo apt-get update
sudo apt-get --assume-yes install ca-certificates curl gnupg
Expand All @@ -120,10 +146,13 @@ Derzeit wird die Installation mit NodeJS oder Docker unterstützt.
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
2. Bearbeite die `docker-compose.yml` nach deinen Vorstellungen.
3. Führe `docker compose up -d && docker compose exec uploader npm run register && docker compose restart` aus, um den ersten Nutzer zu erstellen und um den Uploader zu starten.

3. Bearbeite die `docker-compose.yml` nach deinen Vorstellungen.
4. Führe `docker compose up -d && docker compose exec uploader npm run register && docker compose restart` aus, um den ersten Nutzer zu erstellen und um den Uploader zu starten.



[docker-compose.yml]: https://raw.githubusercontent.com/MaximilianGT500/Uploader/main/docker-compose.yml

Expand All @@ -134,6 +163,7 @@ Wie kann ich Updaten? Nutze dafür: `docker compose pull`
</details>

## 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:

```
Expand All @@ -145,6 +175,7 @@ uploader.example.com {
[Caddy]: https://caddyserver.com/

## 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.
Expand All @@ -155,8 +186,8 @@ Die Datei `config.sxcu` kann auch geändert und importiert werden, für ein schn
- Body: `Formulardaten (multipart/form-data)`
- File form name: `file` (wörtlich "file" in das Feld eingeben)
- Headers:
- Name: `Authorization`
- Wert: `Dein Token`
- Name: `Authorization`
- Wert: `Dein Token`
- URL: `{json:view}`
- Thumbnail URL: `{json:preview}`
- Deletion URL: `{json:delete}`
Expand All @@ -167,52 +198,58 @@ Der Uploader hat eine API (v1.0.0) für Frontend-Entwickler zur einfachen Integr
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`).
- 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-delete/: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-delete/: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-delete/: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-delete`** | 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 |
| 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-delete/: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-delete/: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-delete/: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-delete`** | 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 |

## NPM-Scripts

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

| Script | Beschreibung |
| ------ | ----------- |
| Script | Beschreibung |
| ----------- | ------------------------------------------------------------------------------------------- |
| **`start`** | Startet den Uploader. 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 |
| `register` | Mit diesen Script kannst du einen Nutzer registrieren |
| `token` | Mit diesen Script bekommst du den Token von den angegebenen Nutzername und Passwort |
| `register` | Mit diesen Script kannst du einen Nutzer registrieren |

[`FORCE_COLOR`]: https://nodejs.org/dist/latest-v16.x/docs/api/cli.html#cli_force_color_1_2_3

## Flameshot-Benutzer (Linux)

Verwende [dieses Skript].
und installiere die Pakete jp und xclip.

[dieses Skript]: https://github.com/MaximilianGT500/Uploader/blob/master/config_flameshot.sh

## Support

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

[Issue]: https://github.com/MaximilianGT500/Uploader/issues/new
[Website]: https://maxi.lol/kontakt/

## Credits

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

[ass]: https://github.com/tycrek/ass

## Lizenz

Dieses Projekt ist unter der **MIT**-Lizenz lizenziert.
6 changes: 4 additions & 2 deletions config_flameshot.sh
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,11 @@ if [ -f "$FILE" ]; then
-H "Accept: application/json" \
-H "User-Agent: ShareX/1.0.0" \
-H "Authorization: $KEY" \
-F "file=@$IMAGEPATH$IMAGENAME.png" "https://$DOMAIN" | grep -Po '(?<="resource":")[^"]+')
printf "%s" "$URL" | xclip -sel clip
-F "file=@$IMAGEPATH$IMAGENAME.png" "https://$DOMAIN" | jq -r '.view')
printf "%s" "$URL" | xclip -sel clip

rm "$IMAGEPATH$IMAGENAME.png"
else
echo "Aborted."
fi

0 comments on commit 9e0926c

Please sign in to comment.