from functools import wraps from urllib.parse import urlparse, urljoin from flask import redirect, url_for, flash, request from flask_login import current_user from web.db import Run def admin_required(f): @wraps(f) def decorated_function(*args, **kwargs): if not current_user.is_authenticated or not current_user.is_admin: flash("Admin access required.") return redirect(url_for('project.index')) return f(*args, **kwargs) return decorated_function def is_project_locked(project_id): return Run.query.filter_by(project_id=project_id, status='completed').count() > 0 def is_safe_url(target): ref_url = urlparse(request.host_url) test_url = urlparse(urljoin(request.host_url, target)) return test_url.scheme in ('http', 'https') and ref_url.netloc == test_url.netloc