feat: initial commit

This commit is contained in:
ahoemann 2025-03-28 10:08:31 +01:00
commit ae4325a969
28 changed files with 2945 additions and 0 deletions

7
.dockerignore Normal file
View file

@ -0,0 +1,7 @@
.forgejo
*compose.yml
Dockerfile
.git*
Jenkinsfile
LICENSE
README.md

3
.gitignore vendored Normal file
View file

@ -0,0 +1,3 @@
.venv*
.env
__pycache__

15
Dockerfile Normal file
View file

@ -0,0 +1,15 @@
FROM alpine:latest
WORKDIR /opt/
ENV DEBUG_MODE=False
ENV PASTE_DIR=pastes
COPY . .
RUN apk add --no-cache python3 py3-flask py3-waitress cron
EXPOSE 8080
HEALTHCHECK --interval=5m CMD wget --delete-after http://localhost:8080
CMD [ "waitress-serve", "--listen=0.0.0.0:8080", "app:app" ]

0
LICENSE Normal file
View file

51
app.py Normal file
View file

@ -0,0 +1,51 @@
from flask import Flask, request, render_template, abort, redirect
import secrets
import os
app = Flask(__name__)
# Directory to store paste files
paste_dir = os.environ['PASTE_DIR']
if not os.path.exists(paste_dir):
os.makedirs(paste_dir)
# Route for the main page
@app.route('/', methods=['GET', 'POST'])
def index():
if request.method == 'POST':
# Get content and language from the form
content = request.form['content']
# Generate a unique ID for the paste
paste_id = secrets.token_hex(8)
# Create the file path for the paste
file_path = os.path.join(paste_dir, paste_id)
# Save the paste content to a file
with open(file_path, 'w') as f:
f.write(f"{content}")
# Generate the URL for the new paste
paste_url = request.url_root + paste_id
return render_template('bin.j2', paste_url=paste_url)
# Render the form with available languages
return render_template('bin.j2')
# Route to view a specific paste by its ID
@app.route('/<paste_id>')
def view_paste(paste_id):
# Create the file path for the paste
file_path = os.path.join(paste_dir, paste_id)
if not os.path.exists(file_path):
return redirect("http://localhost:5000", code=302) # Return a 404 error if the paste does not exist
with open(file_path, 'r') as f:
content = f.read()
# Render the paste with syntax highlighting
return render_template('bin.j2', paste_content=content )
if __name__ == '__main__':
app.run(debug=os.environ['DEBUG_MODE'])

1
paste/1129250e41fd939f Normal file
View file

@ -0,0 +1 @@
test

1
paste/166df7446b9cedd2 Normal file
View file

@ -0,0 +1 @@
test

1
paste/223d486abe15baac Normal file
View file

@ -0,0 +1 @@
basr

1
paste/5c7060da2fde6c70 Normal file
View file

@ -0,0 +1 @@
t

1
paste/5f061281b5db5798 Normal file
View file

@ -0,0 +1 @@
VW Polo 9n3 1.2

1
paste/68acc064f8c810fa Normal file
View file

@ -0,0 +1 @@
test

1
paste/700d33e6844602f6 Normal file
View file

@ -0,0 +1 @@
test

1
paste/75f8d4eae450a00d Normal file
View file

@ -0,0 +1 @@
test1

1
paste/793e612cd9ebf718 Normal file
View file

@ -0,0 +1 @@
tset

1
paste/7b8940f86990f32e Normal file
View file

@ -0,0 +1 @@
tset

1
paste/915916ffb2addda0 Normal file
View file

@ -0,0 +1 @@
t

1
paste/95b2820464994fa2 Normal file
View file

@ -0,0 +1 @@
test

1
paste/9eb5c03c1be2404c Normal file
View file

@ -0,0 +1 @@
doo

1
paste/c34c7220f89764e8 Normal file
View file

@ -0,0 +1 @@
test

1
paste/c64b23a68d8484ea Normal file
View file

@ -0,0 +1 @@
test

1
paste/c78e7f7161a150c0 Normal file
View file

@ -0,0 +1 @@
basr

1
paste/ebd8f44366c8c692 Normal file
View file

@ -0,0 +1 @@
tset

1
paste/test Normal file
View file

@ -0,0 +1 @@
</h1>test</h1>

1
requirements.txt Normal file
View file

@ -0,0 +1 @@
flask

2802
static/css/pico.css Normal file

File diff suppressed because it is too large Load diff

4
static/css/pico.min.css vendored Normal file

File diff suppressed because one or more lines are too long

22
templates/base.j2 Normal file
View file

@ -0,0 +1,22 @@
<!DOCTYPE html>
<html lang="en" data-theme="light">
<head>
{% block head %}
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<meta name="description" content="the main Adrianux page">
<link rel="canonical" href="https://adrianux.net/">
<link rel="stylesheet" href="{{ url_for('static', filename='css/pico.css') }}" />
<title>{% block title %}{% endblock %} - Adrianux.net</title>
{% endblock %}
</head>
<body>
<main class="container">
<h1>{{ self.title() }}</h1>
<article>{% block content %}{% endblock %}</article>
</main>
<footer class="container">
<p><a href="mailto:ahoemann@proton.me">ahoemann@proton.me</a>
</p>Authored by <a href="https://bin.adrianux.net/">Adrian Hoemann</a>.
</footer>
</body>
</html>

22
templates/bin.j2 Normal file
View file

@ -0,0 +1,22 @@
{% extends "base.j2" %}
{% block title %}Pastebin Service{% endblock %}
{% block head %}
{{ super() }}
{% endblock %}
{% block content %}
{% if paste_url %}
<p>Your paste URL: <a href="{{ paste_url }}">{{ paste_url }}</a></p>
<form method="post">
<textarea name="content" rows="10" cols="50" placeholder="Paste your text here..."></textarea>
<button type="submit">Submit</button>
</form>
{% elif paste_content %}
<pre><code><script style="display:block" type="text/plain">{{ paste_content|safe }}</script></code></pre>
{% else %}
<form method="post">
<textarea name="content" rows="10" cols="50" placeholder="Paste your text here..."></textarea>
<button type="submit">Submit</button>
</form>
{% endif %}
{% endblock %}