minor fixes

This commit is contained in:
spitkov 2024-09-16 13:02:12 +02:00
parent 3e40c79b81
commit 052acdb394
4 changed files with 42 additions and 50 deletions

21
app.py
View File

@ -242,9 +242,6 @@ def redirect_vanity(vanity, password=None):
app.logger.info(f"Request URL: {request.url}") app.logger.info(f"Request URL: {request.url}")
app.logger.info(f"Request endpoint: {request.endpoint}") app.logger.info(f"Request endpoint: {request.endpoint}")
app.logger.info(f"Request view args: {request.view_args}") app.logger.info(f"Request view args: {request.view_args}")
app.logger.info(f"All routes:")
for rule in app.url_map.iter_rules():
app.logger.info(f" - {rule}")
db = get_db() db = get_db()
cursor = db.cursor() cursor = db.cursor()
@ -252,16 +249,9 @@ def redirect_vanity(vanity, password=None):
is_download = 'download' in request.path is_download = 'download' in request.path
is_raw = 'raw' in request.path is_raw = 'raw' in request.path
# First, try to find the content with the full vanity (including extension)
cursor.execute("SELECT content.*, users.username FROM content LEFT JOIN users ON content.user_id = users.id WHERE content.vanity = ?", (vanity,)) cursor.execute("SELECT content.*, users.username FROM content LEFT JOIN users ON content.user_id = users.id WHERE content.vanity = ?", (vanity,))
content = cursor.fetchone() content = cursor.fetchone()
# If not found, try without the extension
if not content:
vanity_without_extension = os.path.splitext(vanity)[0]
cursor.execute("SELECT content.*, users.username FROM content LEFT JOIN users ON content.user_id = users.id WHERE content.vanity LIKE ?", (f"{vanity_without_extension}%",))
content = cursor.fetchone()
if content: if content:
content_type, content_data, created_at, user_id, is_private, stored_password, username = content[1], content[2], content[3], content[4], content[5], content[6], content[7] content_type, content_data, created_at, user_id, is_private, stored_password, username = content[1], content[2], content[3], content[4], content[5], content[6], content[7]
app.logger.info(f"Content found: type={content_type}, data={content_data}, is_private={is_private}") app.logger.info(f"Content found: type={content_type}, data={content_data}, is_private={is_private}")
@ -292,9 +282,9 @@ def redirect_vanity(vanity, password=None):
is_embeddable = file_extension in ['.jpg', '.jpeg', '.png', '.gif', '.svg', '.pdf'] is_embeddable = file_extension in ['.jpg', '.jpeg', '.png', '.gif', '.svg', '.pdf']
file_url = url_for('redirect_vanity', vanity=vanity, _external=True) file_url = url_for('redirect_vanity', vanity=vanity, _external=True)
if is_download or (not is_embeddable and not is_raw): if is_download:
return send_file(file_path, as_attachment=True) return send_file(file_path, as_attachment=True)
elif is_raw and is_embeddable: elif is_raw:
return send_file(file_path) return send_file(file_path)
else: else:
return render_template('file_info.html', return render_template('file_info.html',
@ -1129,10 +1119,11 @@ def upload_file():
app.logger.info(f"1. Calling url_for with: 'redirect_vanity', vanity={vanity_with_extension}") app.logger.info(f"1. Calling url_for with: 'redirect_vanity', vanity={vanity_with_extension}")
app.logger.info(f" Full parameters: endpoint='redirect_vanity', vanity={vanity_with_extension}, _external=True, _scheme={scheme}") app.logger.info(f" Full parameters: endpoint='redirect_vanity', vanity={vanity_with_extension}, _external=True, _scheme={scheme}")
# Modify this line to remove the /raw suffix # Capture the result of url_for and remove the /raw suffix
short_url = url_for('redirect_vanity', vanity=vanity_with_extension, _external=True, _scheme=scheme).rstrip('/raw') short_url = url_for('redirect_vanity', vanity=vanity_with_extension, _external=True, _scheme=scheme)
short_url = short_url.rstrip('/raw')
app.logger.info(f"2. Result of url_for: {short_url}") app.logger.info(f"2. Result of url_for (after removing /raw): {short_url}")
app.logger.info(f"3. Inspecting short_url:") app.logger.info(f"3. Inspecting short_url:")
app.logger.info(f" - Base: {short_url.split('?')[0]}") app.logger.info(f" - Base: {short_url.split('?')[0]}")
app.logger.info(f" - Query parameters: {short_url.split('?')[1] if '?' in short_url else 'None'}") app.logger.info(f" - Query parameters: {short_url.split('?')[1] if '?' in short_url else 'None'}")

View File

@ -9,7 +9,7 @@
<meta property="og:url" content="{{ request.url }}"> <meta property="og:url" content="{{ request.url }}">
<meta property="og:description" content="File size: {{ file_size|filesizeformat }} | Uploaded by: {{ username }} | Date: {{ created_at.strftime('%Y-%m-%d %H:%M:%S') }}"> <meta property="og:description" content="File size: {{ file_size|filesizeformat }} | Uploaded by: {{ username }} | Date: {{ created_at.strftime('%Y-%m-%d %H:%M:%S') }}">
{% if is_embeddable %} {% if is_embeddable %}
<meta property="og:image" content="{{ file_url }}"> <meta property="og:image" content="{{ file_url }}/raw">
{% endif %} {% endif %}
<meta property="og:site_name" content="sxbin"> <meta property="og:site_name" content="sxbin">
<meta property="theme-color" content="#4CAF50"> <meta property="theme-color" content="#4CAF50">
@ -110,20 +110,21 @@
<div class="info-item"><strong>File size:</strong> {{ file_size|filesizeformat }}</div> <div class="info-item"><strong>File size:</strong> {{ file_size|filesizeformat }}</div>
<div class="info-item"><strong>Uploaded by:</strong> {{ username }}</div> <div class="info-item"><strong>Uploaded by:</strong> {{ username }}</div>
<div class="info-item"><strong>Date:</strong> {{ created_at.strftime('%Y-%m-%d %H:%M:%S') }}</div> <div class="info-item"><strong>Date:</strong> {{ created_at.strftime('%Y-%m-%d %H:%M:%S') }}</div>
<div class="info-item"><strong>File type:</strong> {{ filename.split('.')[-1].upper() if '.' in filename else 'Unknown' }}</div>
{% if is_embeddable %} {% if is_embeddable %}
<div class="embed-container"> <div class="embed-container">
{% if filename.lower().endswith(('.jpg', '.jpeg', '.png', '.gif', '.svg')) %} {% if filename.lower().endswith(('.jpg', '.jpeg', '.png', '.gif', '.svg')) %}
<img src="{{ file_url }}" alt="{{ filename }}"> <img src="{{ file_url }}/raw" alt="{{ filename }}">
{% elif filename.lower().endswith('.pdf') %} {% elif filename.lower().endswith('.pdf') %}
<embed src="{{ file_url }}" type="application/pdf" width="100%" height="600px"> <embed src="{{ file_url }}/raw" type="application/pdf" width="100%" height="600px">
{% endif %} {% endif %}
</div> </div>
{% endif %} {% endif %}
<div class="btn-container"> <div class="btn-container">
<a href="{{ url_for('redirect_vanity', vanity=vanity, _external=True) }}/download" class="btn">Download</a> <a href="{{ file_url }}/download" class="btn">Download</a>
<a href="{{ url_for('redirect_vanity', vanity=vanity, _external=True) }}/raw" class="btn">View Raw</a> <a href="{{ file_url }}/raw" class="btn">View Raw</a>
{% if current_user.is_authenticated and current_user.id == user_id %} {% if current_user.is_authenticated and current_user.id == user_id %}
{% if filename.lower().endswith(('.txt', '.html', '.css', '.js', '.py', '.md')) or '.' not in filename %} {% if filename.lower().endswith(('.txt', '.html', '.css', '.js', '.py', '.md')) or '.' not in filename %}
<a href="{{ url_for('edit_content', vanity=vanity) }}" class="btn edit-btn">Edit</a> <a href="{{ url_for('edit_content', vanity=vanity) }}" class="btn edit-btn">Edit</a>

View File

@ -9,14 +9,14 @@
<meta property="og:url" content="{{ request.url }}"> <meta property="og:url" content="{{ request.url }}">
<meta property="og:description" content="File size: {{ file_size|filesizeformat }} | Uploaded by: {{ username }} | Date: {{ created_at.strftime('%Y-%m-%d %H:%M:%S') }}"> <meta property="og:description" content="File size: {{ file_size|filesizeformat }} | Uploaded by: {{ username }} | Date: {{ created_at.strftime('%Y-%m-%d %H:%M:%S') }}">
{% if is_embeddable %} {% if is_embeddable %}
<meta property="og:image" content="{{ file_url }}"> <meta property="og:image" content="{{ file_url }}/raw">
{% endif %} {% endif %}
<meta property="og:site_name" content="sxbin"> <meta property="og:site_name" content="sxbin">
<meta property="theme-color" content="#4CAF50"> <meta property="theme-color" content="#4CAF50">
</head> </head>
<body> <body>
<script> <script>
window.location.href = "{{ file_url }}/download"; window.location.href = "{{ file_url }}";
</script> </script>
</body> </body>
</html> </html>

View File

@ -3,11 +3,14 @@
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Pastebin {{ vanity }} - sxbin</title> <title>{{ filename }} - sxbin</title>
<meta property="og:title" content="Pastebin {{ vanity }} - sxbin"> <meta property="og:title" content="{{ filename }}">
<meta property="og:type" content="website"> <meta property="og:type" content="website">
<meta property="og:url" content="{{ request.url }}"> <meta property="og:url" content="{{ request.url }}">
<meta property="og:description" content="{{ content.data[:200] }}"> <meta property="og:description" content="File size: {{ file_size|filesizeformat }} | Uploaded by: {{ username }} | Date: {{ created_at.strftime('%Y-%m-%d %H:%M:%S') }}">
{% if is_embeddable %}
<meta property="og:image" content="{{ file_url }}">
{% endif %}
<meta property="og:site_name" content="sxbin"> <meta property="og:site_name" content="sxbin">
<meta property="theme-color" content="#4CAF50"> <meta property="theme-color" content="#4CAF50">
<style> <style>
@ -149,25 +152,32 @@
<body> <body>
<a href="/" class="home-button">&#8962;</a> <a href="/" class="home-button">&#8962;</a>
<div class="container"> <div class="container">
<h2>Content</h2> <h2>{{ filename }}</h2>
<p>Uploaded by: {{ content.username }}</p> <div class="info-item"><strong>File size:</strong> {{ file_size|filesizeformat }}</div>
<p>Created at: {{ created_at }}</p> <div class="info-item"><strong>Uploaded by:</strong> {{ username }}</div>
<div class="info-item"><strong>Date:</strong> {{ created_at.strftime('%Y-%m-%d %H:%M:%S') }}</div>
<div class="highlight"> {% if is_embeddable %}
{{ highlighted_content|safe }} <div class="embed-container">
</div> {% if filename.lower().endswith(('.jpg', '.jpeg', '.png', '.gif', '.svg')) %}
<div class="btn-container"> <img src="{{ file_url }}/raw" alt="{{ filename }}">
<button onclick="copyToClipboard()" class="btn">Copy</button> {% elif filename.lower().endswith('.pdf') %}
<a href="{{ url_for('raw_vanity', vanity=vanity) }}" class="btn">View Raw</a> <embed src="{{ file_url }}/raw" type="application/pdf" width="100%" height="600px">
{% if current_user.is_authenticated and current_user.id == content.user_id %}
<a href="{{ url_for('edit_content', vanity=vanity) }}" class="btn">Edit</a>
{% if is_private %}
<button onclick="openEditPasswordModal()" class="btn">Edit Password</button>
{% else %}
<button onclick="openAddPasswordModal()" class="btn">Add Password</button>
{% endif %} {% endif %}
<form action="{{ url_for('delete_content', vanity=vanity) }}" method="post"> </div>
<button type="submit" class="btn">Delete</button> {% else %}
<div class="info-item"><strong>File type:</strong> {{ filename.split('.')[-1].upper() if '.' in filename else 'Unknown' }}</div>
{% endif %}
<div class="btn-container">
<a href="{{ file_url }}/download" class="btn">Download</a>
<a href="{{ file_url }}/raw" class="btn">View Raw</a>
{% if current_user.is_authenticated and current_user.id == user_id %}
{% if filename.lower().endswith(('.txt', '.html', '.css', '.js', '.py', '.md')) or '.' not in filename %}
<a href="{{ url_for('edit_content', vanity=vanity) }}" class="btn edit-btn">Edit</a>
{% endif %}
<form action="{{ url_for('delete_content', vanity=vanity) }}" method="post" style="display: inline;">
<button type="submit" class="btn delete-btn" onclick="return confirm('Are you sure you want to delete this file?')">Delete</button>
</form> </form>
{% endif %} {% endif %}
</div> </div>
@ -184,16 +194,6 @@
</footer> </footer>
<script> <script>
const rawContent = {{ raw_content|tojson }};
function copyToClipboard() {
navigator.clipboard.writeText(rawContent).then(() => {
alert('Copied to clipboard!');
}).catch(err => {
console.error('Failed to copy text: ', err);
});
}
const themeToggle = document.getElementById('theme-toggle'); const themeToggle = document.getElementById('theme-toggle');
const html = document.documentElement; const html = document.documentElement;