This commit is contained in:
pika 2025-03-30 21:52:20 +02:00
parent f939933a7c
commit be6f7cfcbb
35 changed files with 1897 additions and 733 deletions

View file

@ -10,9 +10,9 @@ class User(UserMixin, db.Model):
__tablename__ = 'users'
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(64), unique=True, index=True)
email = db.Column(db.String(120), unique=True, index=True)
password_hash = db.Column(db.String(128))
username = db.Column(db.String(64), unique=True, nullable=True)
email = db.Column(db.String(120), unique=True, nullable=False)
password_hash = db.Column(db.String(128), nullable=False)
is_admin = db.Column(db.Boolean, default=False)
created_at = db.Column(db.DateTime, default=datetime.utcnow)
last_seen = db.Column(db.DateTime, default=datetime.utcnow)
@ -21,10 +21,10 @@ class User(UserMixin, db.Model):
return f'<User {self.username}>'
def set_password(self, password):
self.password_hash = bcrypt.generate_password_hash(password).decode('utf-8')
self.password_hash = generate_password_hash(password)
def check_password(self, password):
return bcrypt.check_password_hash(self.password_hash, password)
return check_password_hash(self.password_hash, password)
def get_id(self):
return str(self.id)

View file

@ -1,14 +1,44 @@
import ipaddress
import markdown as md_package
import re
from flask import Blueprint
bp = Blueprint('filters', __name__)
def github_style_admonition(text):
"""Transform GitHub-style alerts (> [!NOTE], etc.) to custom HTML"""
patterns = {
r'> \[!NOTE\](.*?)(?:\n\n|\Z)': '<div class="markdown-alert markdown-alert-note"><p class="markdown-alert-title">Note</p>\\1</div>',
r'> \[!TIP\](.*?)(?:\n\n|\Z)': '<div class="markdown-alert markdown-alert-tip"><p class="markdown-alert-title">Tip</p>\\1</div>',
r'> \[!IMPORTANT\](.*?)(?:\n\n|\Z)': '<div class="markdown-alert markdown-alert-important"><p class="markdown-alert-title">Important</p>\\1</div>',
r'> \[!WARNING\](.*?)(?:\n\n|\Z)': '<div class="markdown-alert markdown-alert-warning"><p class="markdown-alert-title">Warning</p>\\1</div>',
r'> \[!CAUTION\](.*?)(?:\n\n|\Z)': '<div class="markdown-alert markdown-alert-caution"><p class="markdown-alert-title">Caution</p>\\1</div>'
}
for pattern, replacement in patterns.items():
text = re.sub(pattern, replacement, text, flags=re.DOTALL)
return text
@bp.app_template_filter('markdown')
def markdown_filter(text):
"""Convert markdown text to HTML"""
"""Convert markdown text to HTML with support for GitHub-style features"""
if text:
return md_package.markdown(text, extensions=['tables', 'fenced_code'])
# Pre-process GitHub-style alerts
text = github_style_admonition(text)
# Convert to HTML with regular markdown
html = md_package.markdown(
text,
extensions=[
'tables',
'fenced_code',
'codehilite',
'nl2br'
]
)
return html
return ""
@bp.app_template_filter('ip_network')