mirror of
https://github.com/ChrispyBacon-dev/DockFlare.git
synced 2026-04-28 03:39:32 +00:00
KV permission check, Email opt-in
This commit is contained in:
parent
dd97bf2941
commit
dd3aa1b5e8
16 changed files with 73 additions and 13 deletions
3
.gitignore
vendored
3
.gitignore
vendored
|
|
@ -90,4 +90,5 @@ data/state.json
|
|||
*.swp
|
||||
*.log
|
||||
logs/
|
||||
DockFlare-Agent-prd/
|
||||
DockFlare-Agent-prd/
|
||||
unstable-compose.yml
|
||||
|
|
@ -33,15 +33,15 @@ services:
|
|||
|
||||
dockflare:
|
||||
#build: ./dockflare
|
||||
image: alplat/dockflare:unstable
|
||||
image: alplat/dockflare:stable
|
||||
container_name: dockflare
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "5001:5000"
|
||||
- "5000:5000"
|
||||
labels: # -- Cloudflare Tunnel Configuration (via DockFlare) OPTIONAL --
|
||||
# Main DockFlare with access policy
|
||||
- dockflare.enable=true
|
||||
- dockflare.hostname=unstable.dockflare.app
|
||||
- dockflare.hostname=dockflare.TLD # replace with your domain
|
||||
- dockflare.service=http://dockflare:5000
|
||||
#- dockflare.access.group=YOUR-ACCESS-GROUP-ID # your custom access policy
|
||||
# -- OAuth Callback Path (Bypass Access Policy) OPTIONAL --
|
||||
|
|
@ -88,7 +88,7 @@ services:
|
|||
|
||||
dockflare-mail-manager:
|
||||
#build: ./mail-manager
|
||||
image: alplat/dockflare-mail-manager:unstable
|
||||
image: alplat/dockflare-mail-manager:stable
|
||||
container_name: dockflare-mail-manager
|
||||
restart: unless-stopped
|
||||
profiles: ["email"]
|
||||
|
|
@ -106,15 +106,15 @@ services:
|
|||
|
||||
dockflare-webmail:
|
||||
#build: ./webmail
|
||||
image: alplat/dockflare-webmail:unstable
|
||||
image: alplat/dockflare-webmail:stable
|
||||
container_name: dockflare-webmail
|
||||
restart: unless-stopped
|
||||
profiles: ["email"]
|
||||
environment:
|
||||
- DOCKFLARE_MASTER_URL=https://unstable.dockflare.app
|
||||
- DOCKFLARE_MASTER_URL=https://dockflare.TLD # replace with your domain
|
||||
labels:
|
||||
- dockflare.enable=true
|
||||
- dockflare.hostname=mail.dockflare.app # replace with your domain
|
||||
- dockflare.hostname=mail.dockflare.TLD # replace with your domain
|
||||
- dockflare.service=http://dockflare-webmail:80
|
||||
depends_on:
|
||||
dockflare-mail-manager:
|
||||
|
|
|
|||
|
|
@ -11,7 +11,8 @@ def check_token_permissions():
|
|||
perms = {
|
||||
"email_routing": False,
|
||||
"workers": False,
|
||||
"r2": False
|
||||
"r2": False,
|
||||
"workers_kv": False
|
||||
}
|
||||
token = getattr(config, 'CF_API_TOKEN', '') or ''
|
||||
if token.startswith('cfat_'):
|
||||
|
|
@ -37,10 +38,15 @@ def check_token_permissions():
|
|||
perms["r2"] = False
|
||||
if '10042' in str(e):
|
||||
perms["r2_note"] = "R2 must be enabled in the Cloudflare Dashboard before use"
|
||||
try:
|
||||
cf_api_request('GET', f'/accounts/{config.CF_ACCOUNT_ID}/storage/kv/namespaces?per_page=1')
|
||||
perms["workers_kv"] = True
|
||||
except Exception:
|
||||
perms["workers_kv"] = False
|
||||
return perms
|
||||
except Exception as e:
|
||||
logging.error(f"Error checking token permissions: {e}")
|
||||
return {"email_routing": False, "workers": False, "r2": False}
|
||||
return {"email_routing": False, "workers": False, "r2": False, "workers_kv": False}
|
||||
|
||||
def enable_email_routing(zone_id):
|
||||
try:
|
||||
|
|
|
|||
|
|
@ -748,6 +748,7 @@
|
|||
"email.permission_email_routing": "Email Routing",
|
||||
"email.permission_workers": "Workers Scripts",
|
||||
"email.permission_r2": "R2 Storage",
|
||||
"email.permission_kv": "Workers KV Storage",
|
||||
"email.permission_granted": "Granted",
|
||||
"email.permission_missing": "Missing",
|
||||
"email.recheck_permissions": "Check Permissions",
|
||||
|
|
@ -761,6 +762,8 @@
|
|||
"email.stats_mailboxes": "Active Mailboxes",
|
||||
"email.container_running": "Running",
|
||||
"email.container_stopped": "Mail Manager or Webmail stopped",
|
||||
"email.container_missing_title": "Email Services Not Found",
|
||||
"email.container_missing_desc": "The email services are not present in your Docker setup. Update your docker-compose.yml to include the email profile services.",
|
||||
"email.webmail_link": "Open Webmail",
|
||||
"email.container_status": "Container Status",
|
||||
"email.statistics": "Statistics",
|
||||
|
|
|
|||
|
|
@ -748,6 +748,7 @@
|
|||
"email.permission_email_routing": "Email Routing",
|
||||
"email.permission_workers": "Workers Scripts",
|
||||
"email.permission_r2": "R2 Storage",
|
||||
"email.permission_kv": "Workers KV Storage",
|
||||
"email.permission_granted": "Granted",
|
||||
"email.permission_missing": "Missing",
|
||||
"email.recheck_permissions": "Check Permissions",
|
||||
|
|
@ -761,6 +762,8 @@
|
|||
"email.stats_mailboxes": "Active Mailboxes",
|
||||
"email.container_running": "Running",
|
||||
"email.container_stopped": "Mail Manager or Webmail stopped",
|
||||
"email.container_missing_title": "Email Services Not Found",
|
||||
"email.container_missing_desc": "The email services are not present in your Docker setup. Update your docker-compose.yml to include the email profile services.",
|
||||
"email.webmail_link": "Open Webmail",
|
||||
"email.container_status": "Container Status",
|
||||
"email.statistics": "Statistics",
|
||||
|
|
|
|||
|
|
@ -752,6 +752,7 @@
|
|||
"email.permission_email_routing": "Email Routing",
|
||||
"email.permission_workers": "Workers Scripts",
|
||||
"email.permission_r2": "R2 Storage",
|
||||
"email.permission_kv": "Workers KV Storage",
|
||||
"email.permission_granted": "Granted",
|
||||
"email.permission_missing": "Missing",
|
||||
"email.recheck_permissions": "Check Permissions",
|
||||
|
|
@ -765,6 +766,8 @@
|
|||
"email.stats_mailboxes": "Active Mailboxes",
|
||||
"email.container_running": "Running",
|
||||
"email.container_stopped": "Mail Manager or Webmail stopped",
|
||||
"email.container_missing_title": "Email Services Not Found",
|
||||
"email.container_missing_desc": "The email services are not present in your Docker setup. Update your docker-compose.yml to include the email profile services.",
|
||||
"email.webmail_link": "Open Webmail",
|
||||
"email.container_status": "Container Status",
|
||||
"email.statistics": "Statistics",
|
||||
|
|
|
|||
|
|
@ -748,6 +748,7 @@
|
|||
"email.permission_email_routing": "Email Routing",
|
||||
"email.permission_workers": "Workers Scripts",
|
||||
"email.permission_r2": "R2 Storage",
|
||||
"email.permission_kv": "Workers KV Storage",
|
||||
"email.permission_granted": "Granted",
|
||||
"email.permission_missing": "Missing",
|
||||
"email.recheck_permissions": "Check Permissions",
|
||||
|
|
@ -761,6 +762,8 @@
|
|||
"email.stats_mailboxes": "Active Mailboxes",
|
||||
"email.container_running": "Running",
|
||||
"email.container_stopped": "Mail Manager or Webmail stopped",
|
||||
"email.container_missing_title": "Email Services Not Found",
|
||||
"email.container_missing_desc": "The email services are not present in your Docker setup. Update your docker-compose.yml to include the email profile services.",
|
||||
"email.webmail_link": "Open Webmail",
|
||||
"email.container_status": "Container Status",
|
||||
"email.statistics": "Statistics",
|
||||
|
|
|
|||
|
|
@ -748,6 +748,7 @@
|
|||
"email.permission_email_routing": "Email Routing",
|
||||
"email.permission_workers": "Workers Scripts",
|
||||
"email.permission_r2": "R2 Storage",
|
||||
"email.permission_kv": "Workers KV Storage",
|
||||
"email.permission_granted": "Granted",
|
||||
"email.permission_missing": "Missing",
|
||||
"email.recheck_permissions": "Check Permissions",
|
||||
|
|
@ -761,6 +762,8 @@
|
|||
"email.stats_mailboxes": "Active Mailboxes",
|
||||
"email.container_running": "Running",
|
||||
"email.container_stopped": "Mail Manager or Webmail stopped",
|
||||
"email.container_missing_title": "Email Services Not Found",
|
||||
"email.container_missing_desc": "The email services are not present in your Docker setup. Update your docker-compose.yml to include the email profile services.",
|
||||
"email.webmail_link": "Open Webmail",
|
||||
"email.container_status": "Container Status",
|
||||
"email.statistics": "Statistics",
|
||||
|
|
|
|||
|
|
@ -748,6 +748,7 @@
|
|||
"email.permission_email_routing": "Email Routing",
|
||||
"email.permission_workers": "Workers Scripts",
|
||||
"email.permission_r2": "R2 Storage",
|
||||
"email.permission_kv": "Workers KV Storage",
|
||||
"email.permission_granted": "Granted",
|
||||
"email.permission_missing": "Missing",
|
||||
"email.recheck_permissions": "Check Permissions",
|
||||
|
|
@ -761,6 +762,8 @@
|
|||
"email.stats_mailboxes": "Active Mailboxes",
|
||||
"email.container_running": "Running",
|
||||
"email.container_stopped": "Mail Manager or Webmail stopped",
|
||||
"email.container_missing_title": "Email Services Not Found",
|
||||
"email.container_missing_desc": "The email services are not present in your Docker setup. Update your docker-compose.yml to include the email profile services.",
|
||||
"email.webmail_link": "Open Webmail",
|
||||
"email.container_status": "Container Status",
|
||||
"email.statistics": "Statistics",
|
||||
|
|
|
|||
|
|
@ -748,6 +748,7 @@
|
|||
"email.permission_email_routing": "Email Routing",
|
||||
"email.permission_workers": "Workers Scripts",
|
||||
"email.permission_r2": "R2 Storage",
|
||||
"email.permission_kv": "Workers KV Storage",
|
||||
"email.permission_granted": "Granted",
|
||||
"email.permission_missing": "Missing",
|
||||
"email.recheck_permissions": "Check Permissions",
|
||||
|
|
@ -761,6 +762,8 @@
|
|||
"email.stats_mailboxes": "Active Mailboxes",
|
||||
"email.container_running": "Running",
|
||||
"email.container_stopped": "Mail Manager or Webmail stopped",
|
||||
"email.container_missing_title": "Email Services Not Found",
|
||||
"email.container_missing_desc": "The email services are not present in your Docker setup. Update your docker-compose.yml to include the email profile services.",
|
||||
"email.webmail_link": "Open Webmail",
|
||||
"email.container_status": "Container Status",
|
||||
"email.statistics": "Statistics",
|
||||
|
|
|
|||
|
|
@ -748,6 +748,7 @@
|
|||
"email.permission_email_routing": "Email Routing",
|
||||
"email.permission_workers": "Workers Scripts",
|
||||
"email.permission_r2": "R2 Storage",
|
||||
"email.permission_kv": "Workers KV Storage",
|
||||
"email.permission_granted": "Granted",
|
||||
"email.permission_missing": "Missing",
|
||||
"email.recheck_permissions": "Check Permissions",
|
||||
|
|
@ -761,6 +762,8 @@
|
|||
"email.stats_mailboxes": "Active Mailboxes",
|
||||
"email.container_running": "Running",
|
||||
"email.container_stopped": "Mail Manager or Webmail stopped",
|
||||
"email.container_missing_title": "Email Services Not Found",
|
||||
"email.container_missing_desc": "The email services are not present in your Docker setup. Update your docker-compose.yml to include the email profile services.",
|
||||
"email.webmail_link": "Open Webmail",
|
||||
"email.container_status": "Container Status",
|
||||
"email.statistics": "Statistics",
|
||||
|
|
|
|||
|
|
@ -748,6 +748,7 @@
|
|||
"email.permission_email_routing": "Email Routing",
|
||||
"email.permission_workers": "Workers Scripts",
|
||||
"email.permission_r2": "R2 Storage",
|
||||
"email.permission_kv": "Workers KV Storage",
|
||||
"email.permission_granted": "Granted",
|
||||
"email.permission_missing": "Missing",
|
||||
"email.recheck_permissions": "Check Permissions",
|
||||
|
|
@ -761,6 +762,8 @@
|
|||
"email.stats_mailboxes": "Active Mailboxes",
|
||||
"email.container_running": "Running",
|
||||
"email.container_stopped": "Mail Manager or Webmail stopped",
|
||||
"email.container_missing_title": "Email Services Not Found",
|
||||
"email.container_missing_desc": "The email services are not present in your Docker setup. Update your docker-compose.yml to include the email profile services.",
|
||||
"email.webmail_link": "Open Webmail",
|
||||
"email.container_status": "Container Status",
|
||||
"email.statistics": "Statistics",
|
||||
|
|
|
|||
|
|
@ -748,6 +748,7 @@
|
|||
"email.permission_email_routing": "Email Routing",
|
||||
"email.permission_workers": "Workers Scripts",
|
||||
"email.permission_r2": "R2 Storage",
|
||||
"email.permission_kv": "Workers KV Storage",
|
||||
"email.permission_granted": "Granted",
|
||||
"email.permission_missing": "Missing",
|
||||
"email.recheck_permissions": "Check Permissions",
|
||||
|
|
@ -761,6 +762,8 @@
|
|||
"email.stats_mailboxes": "Active Mailboxes",
|
||||
"email.container_running": "Running",
|
||||
"email.container_stopped": "Mail Manager or Webmail stopped",
|
||||
"email.container_missing_title": "Email Services Not Found",
|
||||
"email.container_missing_desc": "The email services are not present in your Docker setup. Update your docker-compose.yml to include the email profile services.",
|
||||
"email.webmail_link": "Open Webmail",
|
||||
"email.container_status": "Container Status",
|
||||
"email.statistics": "Statistics",
|
||||
|
|
|
|||
|
|
@ -2083,7 +2083,8 @@ async function emailCheckPermissions() {
|
|||
document.getElementById('permWorkers').innerText = p.workers ? '✅' : '❌';
|
||||
const r2Label = p.r2 ? '✅' : (p.r2_note ? '❌ ' + p.r2_note : '❌');
|
||||
document.getElementById('permR2').innerText = r2Label;
|
||||
const allGranted = p.email_routing && p.workers && p.r2;
|
||||
document.getElementById('permKv').innerText = p.workers_kv ? '✅' : '❌';
|
||||
const allGranted = p.email_routing && p.workers && p.r2 && p.workers_kv;
|
||||
const banner = document.getElementById('emailPermissionsBanner');
|
||||
if (banner) {
|
||||
banner.classList.toggle('hidden', allGranted);
|
||||
|
|
|
|||
|
|
@ -21,7 +21,8 @@
|
|||
<div class="text-sm mt-1">
|
||||
<span id="permEmailRouting"></span> {{ t('email.permission_email_routing') }}<br>
|
||||
<span id="permWorkers"></span> {{ t('email.permission_workers') }}<br>
|
||||
<span id="permR2"></span> {{ t('email.permission_r2') }}
|
||||
<span id="permR2"></span> {{ t('email.permission_r2') }}<br>
|
||||
<span id="permKv"></span> {{ t('email.permission_kv') }}
|
||||
</div>
|
||||
</div>
|
||||
<button class="btn btn-sm btn-ghost" onclick="emailCheckPermissions()">{{ t('email.recheck_permissions') }}</button>
|
||||
|
|
@ -344,16 +345,29 @@
|
|||
|
||||
{% else %}
|
||||
|
||||
{% if mail_manager_state in ('missing', 'stopped') %}
|
||||
<section class="card bg-base-100 shadow-xl mb-8">
|
||||
<div class="card-body">
|
||||
{% if mail_manager_state == 'missing' %}
|
||||
<div class="alert alert-warning">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" class="stroke-current shrink-0 h-6 w-6" fill="none" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z" /></svg>
|
||||
<div>
|
||||
<span class="font-semibold">{{ t('email.container_missing_title') }}</span><br>
|
||||
<span class="text-sm">{{ t('email.container_missing_desc') }}</span><br>
|
||||
<code class="text-sm mt-2 block">docker compose --profile email up -d</code>
|
||||
</div>
|
||||
</div>
|
||||
{% else %}
|
||||
<div class="alert alert-info">
|
||||
<div>
|
||||
<span>{{ t('email.container_stopped') }}</span><br>
|
||||
<code class="text-sm mt-2 block">docker compose --profile email up -d</code>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
</section>
|
||||
{% endif %}
|
||||
|
||||
{% endif %}
|
||||
|
||||
|
|
|
|||
|
|
@ -58,11 +58,19 @@ def save_email_config(email_config_data):
|
|||
logging.error(f"Failed to save email config: {e}")
|
||||
return False
|
||||
|
||||
def _get_mail_manager_state():
|
||||
try:
|
||||
container = docker_client.containers.get('dockflare-mail-manager')
|
||||
return 'running' if container.status == 'running' else 'stopped'
|
||||
except Exception:
|
||||
return 'missing'
|
||||
|
||||
@email_bp.route('', methods=['GET'])
|
||||
@login_required
|
||||
def email_page():
|
||||
zones = list_account_zones() or []
|
||||
return render_template('email.html', zones=zones, email_config=config.EMAIL_CONFIG, email_enabled=config.EMAIL_ENABLED)
|
||||
mail_manager_state = _get_mail_manager_state()
|
||||
return render_template('email.html', zones=zones, email_config=config.EMAIL_CONFIG, email_enabled=config.EMAIL_ENABLED, mail_manager_state=mail_manager_state)
|
||||
|
||||
@email_bp.route('/setup-domain', methods=['POST'])
|
||||
@login_required
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue