Master instances

This commit is contained in:
2025-06-08 21:54:29 +02:00
parent 53ac07a9ee
commit 7aa96119a9
5 changed files with 49 additions and 9 deletions

View File

@@ -1,6 +1,6 @@
from flask import render_template, Blueprint, redirect, url_for, request, flash, Response, jsonify, session
from flask import render_template, Blueprint, redirect, url_for, request, flash, Response, jsonify, session, current_app
from flask_login import current_user, login_required
from models import User, db, Room, RoomFile, RoomMemberPermission, SiteSettings, Event, Conversation, Message, MessageAttachment, Notif, EmailTemplate, Mail, KeyValueSettings, DocuPulseSettings
from models import User, db, Room, RoomFile, RoomMemberPermission, SiteSettings, Event, Conversation, Message, MessageAttachment, Notif, EmailTemplate, Mail, KeyValueSettings, DocuPulseSettings, PasswordSetupToken
from routes.auth import require_password_change
import os
from werkzeug.utils import secure_filename
@@ -332,6 +332,15 @@ def init_routes(main_bp):
is_admin=current_user.is_admin
)
@main_bp.route('/instances')
@login_required
@require_password_change
def instances():
if not os.environ.get('MASTER', 'false').lower() == 'true':
flash('This page is only available in master instances.', 'error')
return redirect(url_for('main.dashboard'))
return render_template('main/instances.html')
UPLOAD_FOLDER = '/app/uploads/profile_pics'
if not os.path.exists(UPLOAD_FOLDER):
os.makedirs(UPLOAD_FOLDER)

View File

@@ -58,6 +58,11 @@
<span class="text-white font-medium">{{ current_user.username }}</span>
</a>
<ul class="dropdown-menu dropdown-menu-end">
{% if is_master %}
<li><a class="dropdown-item" href="{{ url_for('main.profile') }}"><i class="fas fa-user"></i> Profile</a></li>
<li><a class="dropdown-item" href="{{ url_for('main.settings') }}"><i class="fas fa-cog"></i> Settings</a></li>
<li><hr class="dropdown-divider"></li>
{% else %}
{% if not is_master %}
<li><a class="dropdown-item" href="{{ url_for('main.profile') }}"><i class="fas fa-user"></i> Profile</a></li>
{% if current_user.is_admin %}
@@ -65,6 +70,7 @@
{% endif %}
<li><hr class="dropdown-divider"></li>
{% endif %}
{% endif %}
<li><a class="dropdown-item" href="{{ url_for('auth.logout') }}"><i class="fas fa-sign-out-alt"></i> Logout</a></li>
</ul>
</div>
@@ -83,6 +89,18 @@
<i class="fas fa-home"></i> Dashboard
</a>
</li>
{% if is_master %}
<li class="nav-item">
<a class="nav-link {% if request.endpoint == 'main.instances' %}active{% endif %}" href="{{ url_for('main.instances') }}">
<i class="fas fa-server"></i> Instances
</a>
</li>
{% endif %}
<li class="nav-item">
<a class="nav-link {% if request.endpoint == 'contacts.contacts_list' %}active{% endif %}" href="{{ url_for('contacts.contacts_list') }}">
<i class="fas fa-address-book"></i> Contacts
</a>
</li>
{% if not is_master %}
<li class="nav-item">
<a class="nav-link {% if request.endpoint == 'conversations.conversations' %}active{% endif %}" href="{{ url_for('conversations.conversations') }}">
@@ -94,13 +112,6 @@
<i class="fas fa-door-open"></i> Rooms
</a>
</li>
<li class="nav-item">
{% if current_user.is_admin %}
<a class="nav-link {% if request.endpoint == 'contacts.contacts_list' %}active{% endif %}" href="{{ url_for('contacts.contacts_list') }}">
<i class="fas fa-address-book"></i> Contacts
</a>
{% endif %}
</li>
<li class="nav-item">
<a class="nav-link {% if request.endpoint == 'main.starred' %}active{% endif %}" href="{{ url_for('main.starred') }}">
<i class="fas fa-star"></i> Starred

View File

@@ -0,0 +1,20 @@
{% extends "common/base.html" %}
{% from "components/header.html" import header %}
{% block title %}Instances - DocuPulse{% endblock %}
{% block content %}
{{ header(
title="Instances",
description="Manage your DocuPulse instances",
button_text="",
button_url="",
icon="fa-server"
) }}
<div class="container mx-auto px-4 py-8">
<div class="text-center">
<p class="text-muted">Instance management will be available soon.</p>
</div>
</div>
{% endblock %}