mypastebin/README.md
2025-05-29 22:40:58 +02:00

262 lines
7.1 KiB
Markdown

# MyPastebin
**MyPastebin** is an application for creating and sharing text or file pastes with syntax highlighting. You can also access content in raw format and manage it through an API or a Bash client.
## Features
- Create text pastes or upload files with syntax highlighting.
- Supports images, videos, and generic binary files.
- View pastes in HTML or raw format.
- User management: register new users and list existing users (admin only).
- Interact with the application using `curl` or a Bash client.
- List and delete pastes with authentication.
- Deployable with Docker and Kubernetes.
## Technologies Used
- **Python** (Flask) for the backend.
- **SQLite** or **postgresql** as a local database.
- **Pygments** for syntax highlighting.
- **Docker** and **Kubernetes** for deployments.
## Installation and Usage
### Using Docker
1. Build the Docker image:
```bash
docker build -t mypastebin .
2. Start the container with Docker Compose::
```bash
docker-compose up -d
```
3. The application will be available at `http://localhost:5000`.
### Using Kubernetes
1. Apply the Kubernetes manifests:
```bash
kubectl apply -f k8s/
```
2. Access the service through the Ingress configured in your cluster.
### Acceso a la Aplicación
the app will be available at : [https://paste.priet.us](https://paste.priet.us).
Bash Client
-----------
The Bash client simplifies interaction with the service. Download it here:
[Download Bash Client](https://gitlab.com/teraflops/mypastebin/-/blob/main/pastebin_client.sh) | [GitLab Repository](https://gitlab.com/teraflops/mypastebin)
### Examples
* **Authentication:**
./pastebin_client.sh login admin password123
* **Create a Paste (with expiration):**
echo "Hello World" | ./pastebin_client.sh create plaintext yes
Creates a paste in `plaintext` format that expires in 1 day.
* **Upload a File (with expiration):**
./pastebin_client.sh upload script.py python yes
Uploads `script.py` as a Python paste that expires in 1 day.
* **View a Paste:**
./pastebin_client.sh view 1
* **View Raw Content:**
./pastebin_client.sh view_raw 1
* **List Pastes:**
./pastebin_client.sh list
* **Delete a Paste:**
./pastebin_client.sh delete 1
* **Search Paste Contents:**
./pastebin_client.sh search "search term"
* **User Details:**
./pastebin_client.sh details
* **Mark a Paste as Favorite:**
./pastebin_client.sh favorite 1
* **Remove a Paste from Favorites:**
./pastebin_client.sh unfavorite 1
* **Download a Paste:**
./pastebin_client.sh download 1
* **List Favorites:**
./pastebin_client.sh list_favorites
* **List Pastes Shared With Others:**
./pastebin_client.sh shared_with_others
* **List Pastes Shared With Me:**
./pastebin_client.sh shared_with_me
* **Share a Paste:**
./pastebin_client.sh share 1 username true
Shares paste with ID 1 with `username`, allowing edit if `true` is passed.
* **Unshare a Paste:**
./pastebin_client.sh unshare 1 test
* **Edit a Paste (via Editor):**
./pastebin_client.sh edit 1
Opens paste with ID 1 in your default editor. Upon saving and exiting, the updated content is sent to the server.
Curl Examples
-------------
Interact directly with the service using `curl`.
* **Authentication:**
curl -X POST {{ request.host_url }}api/token \
-H "Content-Type: application/json" \
-d '{"username":"admin","password":"password123"}'
* **Create a Paste (with expiration):**
echo "Hello World" | curl -X POST {{ request.host_url }}paste \
-H "Authorization: Bearer <YOUR_TOKEN>" \
-F "c=@-" \
-F "lang=plaintext" \
-F "expire=yes"
Creates a paste that expires in 1 day. Use `expire=no` for permanent pastes.
* **Upload a File (with expiration):**
curl -X POST {{ request.host_url }}paste \
-H "Authorization: Bearer <YOUR_TOKEN>" \
-F "c=@script.py" \
-F "lang=python" \
-F "expire=yes"
Uploads `script.py` as a Python paste that expires in 1 day.
* **View a Paste:**
curl {{ request.host_url }}paste/1/json \
-H "Authorization: Bearer <YOUR_TOKEN>"
* **View Raw Content:**
curl {{ request.host_url }}paste/1/raw \
-H "Authorization: Bearer <YOUR_TOKEN>"
* **List Pastes:**
curl -H "Authorization: Bearer <YOUR_TOKEN>" {{ request.host_url }}pastes
* **Delete a Paste:**
curl -X DELETE {{ request.host_url }}paste/1 \
-H "Authorization: Bearer <YOUR_TOKEN>"
* **Search Paste Contents:**
curl -X GET {{ request.host_url }}pastes/search?q="search term" \
-H "Authorization: Bearer <YOUR_TOKEN>"
* **User Details:**
curl -X GET {{ request.host_url }}user/details \
-H "Authorization: Bearer <YOUR_TOKEN>"
* **Mark a Paste as Favorite:**
curl -X POST {{ request.host_url }}api/paste/1/favorite \
-H "Authorization: Bearer <YOUR_TOKEN>"
* **Remove a Paste from Favorites:**
curl -X POST {{ request.host_url }}api/paste/1/unfavorite \
-H "Authorization: Bearer <YOUR_TOKEN>"
* **Download a Paste:**
curl -X GET {{ request.host_url }}api/paste/1/download \
-H "Authorization: Bearer <YOUR_TOKEN>" \
-J -O
* **List Favorites:**
curl -X GET {{ request.host_url }}api/favorites \
-H "Authorization: Bearer <YOUR_TOKEN>"
* **List Pastes Shared With Others:**
curl -X GET {{ request.host_url }}api/shared_with_others \
-H "Authorization: Bearer <YOUR_TOKEN>"
* **List Pastes Shared With Me:**
curl -X GET {{ request.host_url }}api/shared_with_me \
-H "Authorization: Bearer <YOUR_TOKEN>"
* **Share a Paste:**
curl -X POST {{ request.host_url }}api/paste/1/share \
-H "Authorization: Bearer <YOUR_TOKEN>" \
-H "Content-Type: application/json" \
-d '{
"username": "test_user",
"can_edit": true
}'
Shares paste with ID 1 with `test_user`, allowing edit if `can_edit` is `true`.
* **Unshare a Paste:**
curl -X POST {{ request.host_url }}api/paste/1/unshare \
-H "Authorization: Bearer <YOUR_TOKEN>" \
-H "Content-Type: application/json" \
-d '{
"username": "test"
}'
* **Edit a Paste:**
curl -X PUT {{ request.host_url }}api/paste/1 \
-H "Authorization: Bearer <YOUR_TOKEN>" \
-H "Content-Type: application/json" \
-d '{
"content": "Updated content here"
}'
Overwrites the content of paste with ID 1 using JSON. Make sure the authenticated user has edit permission.