# 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 " \ -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 " \ -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 " * **View Raw Content:** curl {{ request.host_url }}paste/1/raw \ -H "Authorization: Bearer " * **List Pastes:** curl -H "Authorization: Bearer " {{ request.host_url }}pastes * **Delete a Paste:** curl -X DELETE {{ request.host_url }}paste/1 \ -H "Authorization: Bearer " * **Search Paste Contents:** curl -X GET {{ request.host_url }}pastes/search?q="search term" \ -H "Authorization: Bearer " * **User Details:** curl -X GET {{ request.host_url }}user/details \ -H "Authorization: Bearer " * **Mark a Paste as Favorite:** curl -X POST {{ request.host_url }}api/paste/1/favorite \ -H "Authorization: Bearer " * **Remove a Paste from Favorites:** curl -X POST {{ request.host_url }}api/paste/1/unfavorite \ -H "Authorization: Bearer " * **Download a Paste:** curl -X GET {{ request.host_url }}api/paste/1/download \ -H "Authorization: Bearer " \ -J -O * **List Favorites:** curl -X GET {{ request.host_url }}api/favorites \ -H "Authorization: Bearer " * **List Pastes Shared With Others:** curl -X GET {{ request.host_url }}api/shared_with_others \ -H "Authorization: Bearer " * **List Pastes Shared With Me:** curl -X GET {{ request.host_url }}api/shared_with_me \ -H "Authorization: Bearer " * **Share a Paste:** curl -X POST {{ request.host_url }}api/paste/1/share \ -H "Authorization: Bearer " \ -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 " \ -H "Content-Type: application/json" \ -d '{ "username": "test" }' * **Edit a Paste:** curl -X PUT {{ request.host_url }}api/paste/1 \ -H "Authorization: Bearer " \ -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.