{% extends "base.html" %} {% block title %}Organization settings - RadiusForge{% endblock %} {% block content %}

Organization settings

For {{ organization.name }}. Only the Owner can change these.

{% csrf_token %}
{{ form.apply_to_live_sessions }}
{{ form.apply_to_live_sessions.help_text }}
{{ form.portal_enabled }}
{{ form.portal_enabled.help_text }} {% if organization.portal_enabled %}Your subscribers log in at {{ portal_address }}.{% endif %}
{% if organization.portal_enabled and not secure %} {% if portal_allow_http %}

This address is not secure (https). Test mode is on (RADIUSFORGE_PORTAL_ALLOW_HTTP=true), so the portal shows its login form anyway, with a warning. Use this only in a lab: subscribers' passwords cross the network unprotected.

{% else %}

This address is not secure (https). Subscribers' passwords would cross the network unprotected, so the portal refuses to show its login form until RadiusForge is reached over https.

{% endif %} {% endif %}
{{ form.usage_alerts_enabled }}
{{ form.usage_alerts_enabled.help_text }}
{{ form.vouchers_enabled }}
{{ form.vouchers_enabled.help_text }}
{{ form.require_2fa }}
{{ form.require_2fa.help_text }}
{% if organization.usage_alerts_enabled and mail_problem %}

Usage alerts are on, but cannot be sent yet: {{ mail_problem }}.

{% endif %}
{# Step A1 (2 Oct 2026): how this Organization's emails go out. #}

Email

How emails to your customers go out (for example usage alerts). {% if server_mail %}This server sends through {{ server_mail }}.{% else %}This server has no mail settings yet - ask whoever runs it, or use your own mail server.{% endif %}

{% if mail_problem %}

Emails cannot be sent yet: {{ mail_problem }}.

{% endif %}
{% csrf_token %} {% for field in mail_form.common_fields %} {{ field }} {% if field.help_text %}
{{ field.help_text }}
{% endif %} {% for error in field.errors %}
{{ error }}
{% endfor %} {% endfor %} {# Only used with "Our own mail server": shown only then (found live, 2 Oct 2026: fields #} {# shown in server mode looked as if they applied). Without JavaScript the group stays visible. #}

Your own mail server - only used when "Our own mail server" is chosen above.

{% for field in mail_form.own_fields %} {{ field }} {% if field.help_text %}
{{ field.help_text }}
{% endif %} {% for error in field.errors %}
{{ error }}
{% endfor %} {% endfor %}
{% for error in mail_form.non_field_errors %}
{{ error }}
{% endfor %}
{% csrf_token %}
Uses the saved settings above{% if mail_source == "own" %} (your own mail server){% else %} (this server's){% endif %}.
{# Step API 1 (2 Oct 2026): API keys - for a billing system or your own scripts. #}

API keys

Let another system (for example billing) use RadiusForge's API at {{ api_address }}. A key is shown once, when it is created: store it in that system, then it cannot be seen again. Revoke a key the moment it is no longer needed. Read the API documentation.

{% if new_api_key %}

Your new API key - copy it now, it will not be shown again:

Access: {{ new_api_key_access }}

{{ new_api_key }} {# API 1b (3 Oct 2026): copying by hand put OUR command lines on the clipboard instead of the key (3.BQ). #} {# Hidden until the script runs; it says "Copied" only once the browser confirms, and says what arrived. #}
{% endif %} {% if api_key_error %}

{{ api_key_error }}

{% endif %} {% if api_keys %} {% for k in api_keys %} {% endfor %}
NameAccessKey startsCreatedLast usedActions
{{ k.name }} {{ k.get_scope_display }} rfk_{{ k.ident }}_… {{ k.created_at|date:"d M Y" }} by {{ k.created_by }} {% if k.revoked_at %}revoked {{ k.revoked_at|date:"d M Y" }}{% else %}{{ k.last_used_at|date:"d M Y H:i"|default:"never" }}{% endif %} {% if not k.revoked_at %}
{% csrf_token %}
{% endif %}
{% endif %}
{% csrf_token %} {# 3 Oct 2026: nothing preselected - "Read only" was, and a read-only key was made twice by mistake. #}
{# Backups (25 Oct 2026): status + a manual trigger. Backups run on every node nightly. #}

Backups

Your server backs itself up automatically every night - the database and configuration, on each node, kept for 14 days. You can also run one now.

{% csrf_token %}
{% if recent_backups %} {% for b in recent_backups %} {% endfor %}
WhenNodeResultTablesSize
{{ b.created_at|date:"d M Y H:i" }} {{ b.host }} {% if b.ok %}OK{% else %}Failed{% endif %} {{ b.tables }} {{ b.size }}
{% else %}

No backups recorded yet. The first nightly run (or "Back up now") will appear here.

{% endif %} {% endblock %}