dockerized läuft
This commit is contained in:
1 parent
a8c95e9df5
commit
1c789aa8d5
10 files changed
+735
-286
No files matched your search
+38
-159
@@ -43,6 +43,10 @@ from models import db, Tenant, FormConfig, Submission, User, UserRole, TenantSta
|
||||
from models import AuditLog
|
||||
from services.recaptcha import RecaptchaService
|
||||
|
||||
from services.tenant_admin_service import TenantAdminService
|
||||
from services.form_admin_service import FormAdminService
|
||||
from services.user_admin_service import UserAdminService
|
||||
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
@@ -155,12 +159,7 @@ def list_tenants():
|
||||
"""List all tenants."""
|
||||
user = get_current_user()
|
||||
|
||||
# Filter tenants based on user role
|
||||
if user.role == UserRole.ADMIN:
|
||||
tenants = Tenant.query.order_by(Tenant.created_at.desc()).all()
|
||||
else:
|
||||
# Non-admin users can only see their assigned tenants
|
||||
tenants = user.tenants if user else []
|
||||
tenants = TenantAdminService.get_tenants(user)
|
||||
|
||||
return render_template('admin/tenants/list.html',
|
||||
user=user,
|
||||
@@ -181,27 +180,8 @@ def create_tenant():
|
||||
allowed_origins = request.form.get('allowed_origins', '*').strip()
|
||||
status = request.form.get('status', 'active')
|
||||
|
||||
# Generate tenant ID
|
||||
tenant_id = f'tenant_{name.lower().replace(" ", "_")}_{str(uuid.uuid4())[:8]}'
|
||||
|
||||
# Create tenant
|
||||
tenant = Tenant(
|
||||
id=tenant_id,
|
||||
name=name,
|
||||
public_key=public_key or str(uuid.uuid4()).hex[:32],
|
||||
allowed_origins=allowed_origins,
|
||||
status=TenantStatus(status) if status in [s.value for s in TenantStatus] else TenantStatus.ACTIVE
|
||||
)
|
||||
db.session.add(tenant)
|
||||
db.session.commit()
|
||||
|
||||
# Audit log
|
||||
AuditLog.log_action(
|
||||
action='create',
|
||||
resource_type='tenant',
|
||||
user=user,
|
||||
resource_id=tenant.id,
|
||||
details={'name': name, 'public_key': public_key}
|
||||
tenant = TenantAdminService.create_tenant(
|
||||
name, public_key, allowed_origins, status, user
|
||||
)
|
||||
|
||||
flash('Tenant created successfully!', 'success')
|
||||
@@ -230,24 +210,13 @@ def view_tenant(tenant_id):
|
||||
if not user.is_admin():
|
||||
abort(403, description='Admin privileges required to edit tenant')
|
||||
|
||||
# Update tenant
|
||||
tenant.name = request.form.get('name', tenant.name)
|
||||
tenant.public_key = request.form.get('public_key', tenant.public_key)
|
||||
tenant.allowed_origins = request.form.get('allowed_origins', tenant.allowed_origins)
|
||||
|
||||
status = request.form.get('status')
|
||||
if status in [s.value for s in TenantStatus]:
|
||||
tenant.status = TenantStatus(status)
|
||||
|
||||
db.session.commit()
|
||||
|
||||
# Audit log
|
||||
AuditLog.log_action(
|
||||
action='update',
|
||||
resource_type='tenant',
|
||||
user=user,
|
||||
resource_id=tenant.id,
|
||||
details={'name': tenant.name, 'status': tenant.status.value}
|
||||
TenantAdminService.update_tenant(
|
||||
tenant,
|
||||
request.form.get('name'),
|
||||
request.form.get('public_key'),
|
||||
request.form.get('allowed_origins'),
|
||||
request.form.get('status'),
|
||||
user
|
||||
)
|
||||
|
||||
flash('Tenant updated successfully!', 'success')
|
||||
@@ -276,18 +245,7 @@ def delete_tenant(tenant_id):
|
||||
if not tenant:
|
||||
abort(404, description='Tenant not found')
|
||||
|
||||
# Delete tenant (cascade will handle related forms and submissions)
|
||||
db.session.delete(tenant)
|
||||
db.session.commit()
|
||||
|
||||
# Audit log
|
||||
AuditLog.log_action(
|
||||
action='delete',
|
||||
resource_type='tenant',
|
||||
user=user,
|
||||
resource_id=tenant.id,
|
||||
details={'name': tenant.name}
|
||||
)
|
||||
TenantAdminService.delete_tenant(tenant, user)
|
||||
|
||||
flash('Tenant deleted successfully!', 'success')
|
||||
return redirect(url_for('admin.list_tenants'))
|
||||
@@ -300,19 +258,7 @@ def list_forms():
|
||||
user = get_current_user()
|
||||
tenant = get_current_tenant()
|
||||
|
||||
# Get forms based on user access
|
||||
if user.role == UserRole.ADMIN:
|
||||
# Admin can see all forms
|
||||
forms = FormConfig.query.join(Tenant).order_by(
|
||||
FormConfig.created_at.desc()
|
||||
).all()
|
||||
elif tenant:
|
||||
# Tenant user sees only their tenant's forms
|
||||
forms = FormConfig.query.filter_by(tenant_id=tenant.id).order_by(
|
||||
FormConfig.created_at.desc()
|
||||
).all()
|
||||
else:
|
||||
forms = []
|
||||
forms = FormAdminService.get_forms(user, tenant)
|
||||
|
||||
return render_template('admin/forms/list.html',
|
||||
user=user,
|
||||
@@ -353,30 +299,10 @@ def create_form():
|
||||
except json.JSONDecodeError:
|
||||
settings = {}
|
||||
|
||||
# Generate form ID
|
||||
form_id = f'form_{name.lower().replace(" ", "_")}_{str(uuid.uuid4())[:8]}'
|
||||
|
||||
# Create form
|
||||
form = FormConfig(
|
||||
id=form_id,
|
||||
tenant_id=tenant.id,
|
||||
name=name,
|
||||
description=description,
|
||||
form_structure=form_structure,
|
||||
settings=settings,
|
||||
is_active=request.form.get('is_active', 'true').lower() == 'true'
|
||||
)
|
||||
db.session.add(form)
|
||||
db.session.commit()
|
||||
|
||||
# Audit log
|
||||
AuditLog.log_action(
|
||||
action='create',
|
||||
resource_type='form',
|
||||
user=user,
|
||||
tenant=tenant,
|
||||
resource_id=form.id,
|
||||
details={'name': name, 'tenant_id': tenant.id}
|
||||
form = FormAdminService.create_form(
|
||||
tenant, name, description, form_structure, settings,
|
||||
request.form.get('is_active', 'true').lower() == 'true',
|
||||
user
|
||||
)
|
||||
|
||||
flash('Form created successfully!', 'success')
|
||||
@@ -438,37 +364,26 @@ def view_form(form_id):
|
||||
abort(403, description='Access denied')
|
||||
|
||||
if request.method == 'POST':
|
||||
# Update form
|
||||
form.name = request.form.get('name', form.name)
|
||||
form.description = request.form.get('description', form.description)
|
||||
form.is_active = request.form.get('is_active', 'true').lower() == 'true'
|
||||
|
||||
# Update form structure
|
||||
form_structure_str = request.form.get('form_structure', '{}')
|
||||
form_structure = None
|
||||
try:
|
||||
import json
|
||||
form.form_structure = json.loads(form_structure_str)
|
||||
form_structure = json.loads(form_structure_str)
|
||||
except json.JSONDecodeError:
|
||||
pass # Keep existing structure
|
||||
|
||||
# Update settings
|
||||
pass
|
||||
|
||||
settings_str = request.form.get('settings', '{}')
|
||||
settings = None
|
||||
try:
|
||||
import json
|
||||
form.settings = json.loads(settings_str)
|
||||
settings = json.loads(settings_str)
|
||||
except json.JSONDecodeError:
|
||||
pass # Keep existing settings
|
||||
|
||||
db.session.commit()
|
||||
|
||||
# Audit log
|
||||
AuditLog.log_action(
|
||||
action='update',
|
||||
resource_type='form',
|
||||
user=user,
|
||||
tenant=tenant,
|
||||
resource_id=form.id,
|
||||
details={'name': form.name, 'is_active': form.is_active}
|
||||
pass
|
||||
|
||||
FormAdminService.update_form(
|
||||
form, request.form.get('name'), request.form.get('description'),
|
||||
request.form.get('is_active', 'true').lower() == 'true',
|
||||
form_structure, settings, user, tenant
|
||||
)
|
||||
|
||||
flash('Form updated successfully!', 'success')
|
||||
@@ -506,19 +421,7 @@ def delete_form(form_id):
|
||||
if user.role != UserRole.ADMIN and tenant not in user.tenants:
|
||||
abort(403, description='Access denied')
|
||||
|
||||
# Delete form (cascade will handle submissions)
|
||||
db.session.delete(form)
|
||||
db.session.commit()
|
||||
|
||||
# Audit log
|
||||
AuditLog.log_action(
|
||||
action='delete',
|
||||
resource_type='form',
|
||||
user=user,
|
||||
tenant=tenant,
|
||||
resource_id=form.id,
|
||||
details={'name': form.name}
|
||||
)
|
||||
FormAdminService.delete_form(form, user, tenant)
|
||||
|
||||
flash('Form deleted successfully!', 'success')
|
||||
return redirect(url_for('admin.list_forms'))
|
||||
@@ -622,7 +525,7 @@ def update_submission_status(submission_id):
|
||||
def list_users():
|
||||
"""List all users (admin only)."""
|
||||
user = get_current_user()
|
||||
users = User.query.order_by(User.created_at.desc()).all()
|
||||
users = UserAdminService.get_users()
|
||||
|
||||
return render_template('admin/users/list.html',
|
||||
user=user,
|
||||
@@ -641,23 +544,9 @@ def view_user(user_id):
|
||||
abort(404, description='User not found')
|
||||
|
||||
if request.method == 'POST':
|
||||
# Update user
|
||||
target_user.email = request.form.get('email', target_user.email)
|
||||
target_user.name = request.form.get('name', target_user.name)
|
||||
|
||||
role = request.form.get('role')
|
||||
if role in [r.value for r in UserRole]:
|
||||
target_user.role = UserRole(role)
|
||||
|
||||
db.session.commit()
|
||||
|
||||
# Audit log
|
||||
AuditLog.log_action(
|
||||
action='update',
|
||||
resource_type='user',
|
||||
user=user,
|
||||
resource_id=target_user.id,
|
||||
details={'email': target_user.email, 'role': target_user.role.value}
|
||||
UserAdminService.update_user(
|
||||
target_user, request.form.get('email'), request.form.get('name'),
|
||||
request.form.get('role'), user
|
||||
)
|
||||
|
||||
flash('User updated successfully!', 'success')
|
||||
@@ -689,17 +578,7 @@ def delete_user(user_id):
|
||||
flash('Cannot delete your own account!', 'error')
|
||||
return redirect(url_for('admin.view_user', user_id=target_user.id))
|
||||
|
||||
db.session.delete(target_user)
|
||||
db.session.commit()
|
||||
|
||||
# Audit log
|
||||
AuditLog.log_action(
|
||||
action='delete',
|
||||
resource_type='user',
|
||||
user=user,
|
||||
resource_id=target_user.id,
|
||||
details={'email': target_user.email}
|
||||
)
|
||||
UserAdminService.delete_user(target_user, user)
|
||||
|
||||
flash('User deleted successfully!', 'success')
|
||||
return redirect(url_for('admin.list_users'))
|
||||
|
||||
Reference in new issue
Block a user