Spaces:
Sleeping
Sleeping
| from flask import Blueprint, render_template, request, redirect, url_for, session, flash | |
| from app.models.models import Token, Settings | |
| from app import db | |
| import random | |
| import string | |
| from datetime import datetime | |
| bp = Blueprint('auth', __name__) | |
| CONTRIBUTOR_TYPES = [ | |
| {'value': 'government', 'label': 'Government Officer', 'description': 'Public sector representatives'}, | |
| {'value': 'community', 'label': 'Community Member', 'description': 'Local residents and community leaders'}, | |
| {'value': 'industry', 'label': 'Industry Representative', 'description': 'Business and industry stakeholders'}, | |
| {'value': 'ngo', 'label': 'NGO/Non-Profit', 'description': 'Civil society organizations'}, | |
| {'value': 'academic', 'label': 'Academic/Researcher', 'description': 'Universities and research institutions'}, | |
| {'value': 'other', 'label': 'Other Stakeholder', 'description': 'Other interested parties'} | |
| ] | |
| def generate_token(contributor_type): | |
| prefix = contributor_type[:3].upper() | |
| random_part = ''.join(random.choices(string.ascii_uppercase + string.digits, k=6)) | |
| timestamp_part = str(int(datetime.now().timestamp()))[-4:] | |
| return f"{prefix}-{random_part}{timestamp_part}" | |
| def index(): | |
| return redirect(url_for('auth.login')) | |
| def login(): | |
| if request.method == 'POST': | |
| token_str = request.form.get('token') | |
| token = Token.query.filter_by(token=token_str).first() | |
| if token: | |
| session['token'] = token.token | |
| session['type'] = token.type | |
| if token.type == 'admin': | |
| return redirect(url_for('admin.overview')) | |
| else: | |
| return redirect(url_for('submissions.submit')) | |
| else: | |
| flash('Invalid token', 'error') | |
| return render_template('login.html') | |
| def generate(): | |
| token_generation_enabled = Settings.get_setting('token_generation_enabled', 'true') == 'true' | |
| if request.method == 'POST': | |
| if not token_generation_enabled: | |
| flash('Token generation is currently disabled', 'error') | |
| return redirect(url_for('auth.generate')) | |
| contributor_type = request.form.get('type') | |
| user_name = request.form.get('name', '').strip() | |
| if not contributor_type or contributor_type not in [t['value'] for t in CONTRIBUTOR_TYPES]: | |
| flash('Please select a valid role', 'error') | |
| return redirect(url_for('auth.generate')) | |
| # Generate token | |
| from datetime import datetime | |
| token_str = generate_token(contributor_type) | |
| name = user_name if user_name else f"{contributor_type.capitalize()} User" | |
| new_token = Token( | |
| token=token_str, | |
| type=contributor_type, | |
| name=name | |
| ) | |
| db.session.add(new_token) | |
| db.session.commit() | |
| return render_template('generate.html', | |
| contributor_types=CONTRIBUTOR_TYPES, | |
| token_generation_enabled=token_generation_enabled, | |
| generated_token=token_str) | |
| return render_template('generate.html', | |
| contributor_types=CONTRIBUTOR_TYPES, | |
| token_generation_enabled=token_generation_enabled) | |
| def logout(): | |
| session.clear() | |
| return redirect(url_for('auth.login')) | |