395 lines
14 KiB
Plaintext
395 lines
14 KiB
Plaintext
-extends "base.html"
|
|
-set title = 'Admin'
|
|
-set retries = get.retries('all')
|
|
-set page = data.page
|
|
|
|
- block content
|
|
%div{'id': 'setmenu', 'class': 'section admin'}
|
|
-if page == 'instances'
|
|
%a{'href': '/admin?page=instances', 'class': 'setmenu-item selected'}< Instances
|
|
-else
|
|
%a{'href': '/admin?page=instances', 'class': 'setmenu-item'}< Instances
|
|
|
|
-if config.require_approval and len(data.requests) > 0
|
|
-if page == 'requests'
|
|
%a{'href': '/admin?page=requests', 'class': 'setmenu-item selected'}< Requests
|
|
-else
|
|
%a{'href': '/admin?page=requests', 'class': 'setmenu-item'}< Requests
|
|
|
|
-if config.whitelist or config.require_approval
|
|
-if page == 'whitelist'
|
|
%a{'href': '/admin?page=whitelist', 'class': 'setmenu-item selected'}< Whitelist
|
|
-else
|
|
%a{'href': '/admin?page=whitelist', 'class': 'setmenu-item'}< Whitelist
|
|
|
|
-if len(data.domainban) > 0
|
|
-if page == 'domainbans'
|
|
%a{'href': '/admin?page=domainbans', 'class': 'setmenu-item selected'}< Domain Bans
|
|
-else
|
|
%a{'href': '/admin?page=domainbans', 'class': 'setmenu-item'}< Domain Bans
|
|
|
|
-if len(data.userban) > 0
|
|
-if page == 'userbans'
|
|
%a{'href': '/admin?page=userbans', 'class': 'setmenu-item selected'}< User Bans
|
|
-else
|
|
%a{'href': '/admin?page=userbans', 'class': 'setmenu-item'}< User Bans
|
|
|
|
-if retries
|
|
-if page == 'retries'
|
|
%a{'href': '/admin?page=retries', 'class': 'setmenu-item selected'}< Retries
|
|
-else
|
|
%a{'href': '/admin?page=retries', 'class': 'setmenu-item'}< Retries
|
|
|
|
-if page == 'settings'
|
|
%a{'href': '/admin?page=settings', 'class': 'setmenu-item selected'}< Settings
|
|
-else
|
|
%a{'href': '/admin?page=settings', 'class': 'setmenu-item'}< Settings
|
|
|
|
-if page == 'instances'
|
|
%div{'class': 'section admin group instances'}
|
|
%p{'class': 'sec-header'} Instances
|
|
|
|
%table
|
|
%tr{'class': 'header'}
|
|
%td{'class': 'col1'} Instance
|
|
%td{'class': 'timestamp'} Date
|
|
%td{'class': 'col2', 'colspan': 3} Action
|
|
|
|
- for instance in data.instances
|
|
%tr{'class': 'instance_row {{instance.tag}}' }
|
|
%td{'class': 'col1 instance'}
|
|
%a{'href': 'https://{{instance.domain}}/about', 'target': '_new'}
|
|
{{instance.domain}} {% if instance.retries and len(instance.retries) > 0 %}({{len(instance.retries)}}){% endif %}
|
|
|
|
%td{'class': 'timestamp'}
|
|
{{instance.date}}
|
|
|
|
%td{'class': 'action'}
|
|
-if config.whitelist or config.require_approval:
|
|
-if instance.domain not in data.wldomains:
|
|
%form{'action': 'https://{{config.host}}/admin/add', 'method': 'post'}
|
|
%input{'name': 'page', 'value': '{{page}}', 'hidden': None}
|
|
%input{'name': 'name', 'value': '{{instance.domain}}', 'hidden': None}
|
|
%input{'type': 'submit', 'value': 'WL Add'}
|
|
|
|
-else
|
|
%form{'action': 'https://{{config.host}}/admin/remove', 'method': 'post'}
|
|
%input{'name': 'page', 'value': '{{page}}', 'hidden': None}
|
|
%input{'name': 'name', 'value': '{{instance.domain}}', 'hidden': None}
|
|
%input{'type': 'submit', 'value': 'WL Remove'}
|
|
|
|
%td{'class': 'action'}
|
|
%form{'action': 'https://{{config.host}}/admin/eject', 'method': 'post'}
|
|
%input{'name': 'page', 'value': '{{page}}', 'hidden': None}
|
|
%input{'name': 'name', 'value': '{{instance.domain}}', 'hidden': None}
|
|
%input{'type': 'submit', 'value': 'Remove'}
|
|
|
|
%td{'class': 'col2 action'}
|
|
%form{'action': 'https://{{config.host}}/admin/ban', 'method': 'post'}
|
|
%input{'name': 'page', 'value': '{{page}}', 'hidden': None}
|
|
%input{'name': 'name', 'value': '{{instance.domain}}', 'hidden': None}
|
|
%input{'type': 'submit', 'value': 'Ban'}
|
|
|
|
%tr
|
|
%form{'action': 'https://{{config.host}}/admin/ban', 'method': 'post'}
|
|
%td{'class': 'col1', 'colspan': 4}
|
|
%input{'class': 'domain', 'name': 'name', 'placeholder': 'domain or user@domain'}
|
|
%br
|
|
%input{'class': 'domain', 'name': 'reason', 'placeholder': 'Ban reason'}
|
|
|
|
%td{'class': 'col2 mainban'}
|
|
%input{'name': 'page', 'value': '{{page}}', 'hidden': None}
|
|
%input{'type': 'submit', 'value': 'Ban'}
|
|
|
|
-if page == 'requests'
|
|
%div{'class': 'section admin group requests'}
|
|
%p{'class': 'sec-header'} Follow Requests
|
|
%table
|
|
%tr{'class': 'header'}
|
|
%td{'class': 'col1'} Request
|
|
%td{'class': 'col2'} Action
|
|
|
|
- for domain in data.requests
|
|
%tr
|
|
%td{'class': 'col1 instance'}
|
|
%a{'href': 'https://{{domain.domain}}/about', 'target': '_new'}
|
|
{{domain.domain}}
|
|
|
|
%td{'class': 'col2'}
|
|
%form{'action': 'https://{{config.host}}/admin/accept', 'method': 'post'}
|
|
%input{'name': 'page', 'value': '{{page}}', 'hidden': None}
|
|
%input{'name': 'name', 'value': '{{domain.domain}}', 'hidden': None}
|
|
%input{'type': 'submit', 'value': 'Accept'}
|
|
|
|
%form{'action': 'https://{{config.host}}/admin/deny', 'method': 'post'}
|
|
%input{'name': 'page', 'value': '{{page}}', 'hidden': None}
|
|
%input{'name': 'name', 'value': '{{domain.domain}}', 'hidden': None}
|
|
%input{'type': 'submit', 'value': 'Deny'}
|
|
|
|
-if page == 'whitelist'
|
|
%div{'class': 'section admin group whitelist'}
|
|
%p{'class': 'sec-header'} Whitelist
|
|
|
|
%table
|
|
%tr{'class': 'header'}
|
|
%td{'class': 'col1'} Instance
|
|
%td{'class': 'col2'} Action
|
|
|
|
- for instance in data.whitelist
|
|
%tr{'class': 'instance_row'}
|
|
%td{'class': 'col1 instance'}
|
|
%a{'href': 'https://{{instance.domain}}/about', 'target': '_new'}
|
|
{{instance.domain}}
|
|
|
|
%td{'class': 'col2'}
|
|
%form{'action': 'https://{{config.host}}/admin/remove', 'method': 'post'}
|
|
%input{'name': 'page', 'value': '{{page}}', 'hidden': None}
|
|
%input{'name': 'name', 'value': '{{instance.domain}}', 'hidden': None}
|
|
%input{'type': 'submit', 'value': 'Remove'}
|
|
|
|
%tr
|
|
%form{'action': 'https://{{config.host}}/admin/add', 'method': 'post'}
|
|
%td{'class': 'col1'}
|
|
%input{'class': 'domain', 'name': 'name', 'placeholder': 'domain'}
|
|
|
|
%td{'class': 'col2'}
|
|
%input{'name': 'page', 'value': '{{page}}', 'hidden': None}
|
|
%input{'type': 'submit', 'value': 'Add'}
|
|
|
|
-if page == 'domainbans'
|
|
%div{'class': 'section admin group domainbans'}
|
|
%p{'class': 'sec-header'} Domain Bans
|
|
%table
|
|
%tr{'class': 'header'}
|
|
%td{'class': 'col1'} Instance
|
|
%td{'class': 'reason'} Reason
|
|
%td{'class': 'col2'} Action
|
|
|
|
- for domain in data.domainban
|
|
%tr
|
|
%td{'class': 'col1 instance'}
|
|
%a{'href': 'https://{{domain.domain}}/about', 'target': '_new'}
|
|
{{domain.domain}}
|
|
|
|
%td{'class': 'reason'}
|
|
{{domain.reason}}
|
|
|
|
%td{'class': 'col2'}
|
|
%form{'action': 'https://{{config.host}}/admin/unban', 'method': 'post'}
|
|
%input{'name': 'page', 'value': '{{page}}', 'hidden': None}
|
|
%input{'name': 'name', 'value': '{{domain.domain}}', 'hidden': None}
|
|
%input{'type': 'submit', 'value': 'Unban'}
|
|
|
|
-if page == 'userbans'
|
|
%div{'class': 'section admin group userbans'}
|
|
%p{'class': 'sec-header'} User Bans
|
|
|
|
%table
|
|
%tr{'class': 'header'}
|
|
%td{'class': 'col1'} User
|
|
%td{'class': 'reason'} Reason
|
|
%td{'class': 'col2'} Action
|
|
|
|
- for user in data.userban
|
|
%tr
|
|
%td{'class': 'col1 instance'}
|
|
-if user.domain != 'any'
|
|
%a{'href': 'https://{{user.domain}}/users/{{user.user}}', 'target': '_new'}
|
|
{{user.user}}@{{user.domain}}
|
|
|
|
-else
|
|
{{user.user}}@{{user.domain}}
|
|
|
|
%td{'class': 'reason'}
|
|
{{user.reason}}
|
|
|
|
%td{'class': 'col2'}
|
|
%form{'action': 'https://{{config.host}}/admin/unban', 'method': 'post'}
|
|
%input{'name': 'page', 'value': '{{page}}', 'hidden': None}
|
|
%input{'name': 'name', 'value': '{{user.user}}@{{user.domain}}', 'hidden': None}
|
|
%input{'type': 'submit', 'value': 'Unban'}
|
|
|
|
-if page == 'retries'
|
|
%div{'class': 'section admin group retries'}
|
|
%p{'class': 'sec-header'} Retries
|
|
|
|
%table
|
|
%tr{'class': 'header'}
|
|
%td{'class': 'col1'} ID
|
|
%td Inbox
|
|
%td Data
|
|
%td Headers
|
|
%td{'class': 'col2', 'colspan': 2} Action
|
|
|
|
-for retry in retries
|
|
%tr{'class': 'instance_row'}
|
|
%td{'class': 'col1 id'}
|
|
{{retry.id}}
|
|
|
|
%td
|
|
{{retry.inbox}}
|
|
|
|
%td
|
|
%textarea{'class': 'data'}<
|
|
{{retry.data}}
|
|
|
|
%td
|
|
%textarea{'class': 'headers'}<
|
|
{{retry.headers}}
|
|
|
|
%td{'class': 'action'}
|
|
%form{'action': 'https://{{config.host}}/admin/retry', 'method': 'post'}
|
|
%input{'name': 'page', 'value': '{{page}}', 'hidden': None}
|
|
%input{'name': 'name', 'value': '{{retry.id}}', 'hidden': None}
|
|
%input{'type': 'submit', 'value': 'Retry'}
|
|
|
|
%td{'class': 'col2 action'}
|
|
%form{'action': 'https://{{config.host}}/admin/remret', 'method': 'post'}
|
|
%input{'name': 'page', 'value': '{{page}}', 'hidden': None}
|
|
%input{'name': 'name', 'value': '{{retry.id}}', 'hidden': None}
|
|
%input{'type': 'submit', 'value': 'Remove'}
|
|
|
|
-if page == 'settings'
|
|
%div{'class': 'group settings-div'}
|
|
%form{'action': 'https://{{config.host}}/admin/settings', 'method': 'post'}
|
|
%div{'class': 'section settings', 'id': 'info'}
|
|
%p{'class': 'sec-header'} Server Info
|
|
|
|
%label General Info
|
|
%textarea{'name': 'info', 'placeholder': 'Relay Info'}<
|
|
{% if config.info %}{{config.info}}{% endif %}
|
|
|
|
%label Relay Rules
|
|
%textarea{'name': 'rules', 'placeholder': 'Relay Rules'}<
|
|
{% if config.rules %}{{config.rules}}{% endif %}
|
|
|
|
%div{'class': 'section settings', 'id': 'settings'}
|
|
%p{'class': 'sec-header'} Relay Settings
|
|
%div{'class': 'grid-container'}
|
|
-if config.admin
|
|
-set admin = config.admin
|
|
-else
|
|
-set admin = 'None'
|
|
|
|
-if config.email
|
|
-set email = config.email
|
|
-else
|
|
-set email = 'None'
|
|
|
|
%div{'class': 'grid-item col1'}
|
|
%label Name
|
|
%input{'type': 'text', 'name': 'name', 'placeholder': 'Relay Name', 'value': '{{config.name}}'}
|
|
|
|
%label Contact E-Mail
|
|
%input{'type': 'text', 'name': 'email', 'placeholder': 'name@example.com', 'value': '{{email}}'}
|
|
|
|
%label Admin Fedi Account
|
|
%input{'type': 'text', 'name': 'admin', 'placeholder': 'username@fedi.example.com', 'value': '{{admin}}'}
|
|
|
|
%label New Instance Notification
|
|
%select{'name': 'notification'}
|
|
-if config.notification
|
|
%option{'value': 'yes', 'selected': None} Yes
|
|
%option{'value': 'no'} No (default)
|
|
|
|
-else
|
|
%option{'value': 'yes'} Yes
|
|
%option{'value': 'no', 'selected': None} No (default)
|
|
|
|
%label Block Other Relays
|
|
%select{'name': 'block_relays'}
|
|
-if config.block_relays
|
|
%option{'value': 'yes', 'selected': None} Yes (default)
|
|
%option{'value': 'no'} No
|
|
|
|
-else
|
|
%option{'value': 'yes'} Yes (default)
|
|
%option{'value': 'no', 'selected': None} No
|
|
|
|
%div{'class': 'grid-item col2'}
|
|
%label Show Instance Blocks
|
|
%select{'name': 'show_domainbans'}
|
|
-if config.show_domainbans
|
|
%option{'value': 'yes', 'selected': None} Yes
|
|
%option{'value': 'no'} No (default)
|
|
|
|
-else
|
|
%option{'value': 'yes'} Yes
|
|
%option{'value': 'no', 'selected': None} No (default)
|
|
|
|
%label Show User Blocks
|
|
%select{'name': 'show_userbans'}
|
|
-if config.show_userbans
|
|
%option{'value': 'yes', 'selected': None} Yes
|
|
%option{'value': 'no'} No (default)
|
|
|
|
-else
|
|
%option{'value': 'yes'} Yes
|
|
%option{'value': 'no', 'selected': None} No (default)
|
|
|
|
%label Require Approval
|
|
%select{'name': 'require_approval'}
|
|
-if config.require_approval
|
|
%option{'value': 'yes', selected: None} Yes (default)
|
|
%option{'value': 'no'} No
|
|
|
|
-else
|
|
%option{'value': 'yes'} Yes (default)
|
|
%option{'value': 'no', selected: None} No
|
|
|
|
%label Whitelist Mode
|
|
%select{'name': 'whitelist'}
|
|
-if config.whitelist
|
|
%option{'value': 'yes', selected: None} Yes
|
|
%option{'value': 'no'} No (default)
|
|
|
|
-else
|
|
%option{'value': 'yes'} Yes
|
|
%option{'value': 'no', selected: None} No (default)
|
|
|
|
%label Log Level
|
|
%select{'name': 'log_level'}
|
|
- for level in ['MERP', 'DEBUG', 'VERB', 'INFO', 'WARN', 'ERROR', 'CRIT']
|
|
-if config.log_level == level
|
|
%option{'value': '{{level}}', selected: None}
|
|
{{level}}
|
|
|
|
-else
|
|
%option{'value': '{{level}}'}
|
|
{{level}}
|
|
|
|
%div{'class': 'section settings', 'id': 'network'}
|
|
%p{'class': 'sec-header'} Network
|
|
%div{'class': 'grid-container'}
|
|
%div{'class': 'grid-item col1'}
|
|
|
|
%label Listen Address
|
|
%input{'type': 'text', 'name': 'address', 'placeholder': '127.0.0.1', 'value': '{{config.address}}'}
|
|
|
|
%label Listen Port
|
|
%input{'type': 'numeric', 'name': 'port', 'placeholder': '3621', 'value': '{{config.port}}'}
|
|
|
|
%label Hostname
|
|
%input{'type': 'text', 'name': 'host', 'placeholder': 'relay.example.com', 'value': '{{config.host}}'}
|
|
|
|
%div{'class': 'section settings', 'id': 'submit'}
|
|
%input{'name': 'page', 'value': '{{page}}', 'hidden': None}
|
|
%input{'type': 'submit', 'value': 'Save Settings', 'class': 'submit'}
|
|
|
|
%div{'class': 'section settings', 'id': 'code'}
|
|
%p{'class': 'sec-header'}< Authentication Code
|
|
%div{'class': 'grid-container'}
|
|
%div{'class': 'grid-item col1'}
|
|
-if data.auth_code
|
|
%a{'href': 'https://{{config.host}}/register?code=={data.auth_code}', 'target': '_new'}<
|
|
{{data.auth_code}}
|
|
|
|
-else
|
|
No Code
|
|
|
|
%div{'class': 'grid-item col2'}
|
|
%form{'action': 'https://{{config.host}}/admin/auth_code', 'method': 'post'}<
|
|
%input{'name': 'page', 'value': '{{page}}', 'hidden': None}
|
|
%input{'type': 'submit', 'name': 'action', 'value': 'Delete'}
|
|
%input{'type': 'submit', 'name': 'action', 'value': 'Regen'}
|