diff --git a/relay/frontend/page/admin-instances.haml b/relay/frontend/page/admin-instances.haml index c366acc..ae26d7a 100644 --- a/relay/frontend/page/admin-instances.haml +++ b/relay/frontend/page/admin-instances.haml @@ -25,7 +25,7 @@ %tr %td.instance << Instance %td.software << Software - %td << Joined + %td.date << Joined %td.remove %tbody diff --git a/relay/frontend/page/admin-whitelist.haml b/relay/frontend/page/admin-whitelist.haml index 083c8bb..be31f0d 100644 --- a/relay/frontend/page/admin-whitelist.haml +++ b/relay/frontend/page/admin-whitelist.haml @@ -1,5 +1,31 @@ -extends "base.haml" -set page="Whitelist" -block content - .section - UvU + %details.section + %summary << Add Domain + %form(target="/admin/whitelist", method="POST") + #add-domain + %label(for="domain") << Domain + %input(type="domain", id="domain" name="domain", placeholder="Domain") + + %input(type="submit" value="Add Domain") + + #whitelist.section + %table + %thead + %tr + %td.domain << Domain + %td.date << Added + %td.remove + + %tbody + -for item in whitelist + %tr + %td.domain + =item.domain + + %td.date + =item.created.strftime("%Y-%m-%d") + + %td.remove + %a(href="/admin/whitelist/delete/{{item.domain}}" title="Remove whitlisted domain") << ✖ diff --git a/relay/frontend/style/whitelist.css b/relay/frontend/style/whitelist.css index e69de29..6d3566a 100644 --- a/relay/frontend/style/whitelist.css +++ b/relay/frontend/style/whitelist.css @@ -0,0 +1,21 @@ +form input[type="submit"] { + display: block; + margin: 0 auto; +} + +#whitelist .domain{ + width: 100%; +} + +#whitelist .date { + width: max-content; + text-align: right; +} + +#add-domain { + display: grid; + grid-template-columns: max-content auto; + grid-gap: var(--spacing); + margin-top: var(--spacing); + margin-bottom: var(--spacing); +} diff --git a/relay/views/frontend.py b/relay/views/frontend.py index 089751d..550528c 100644 --- a/relay/views/frontend.py +++ b/relay/views/frontend.py @@ -193,7 +193,7 @@ class AdminWhitelist(View): with self.database.session() as conn: context = { - 'domains': tuple(conn.execute('SELECT * FROM whitelist').all()) + 'whitelist': tuple(conn.execute('SELECT * FROM whitelist').all()) } if error: @@ -206,6 +206,34 @@ class AdminWhitelist(View): return Response.new(data, ctype = 'html') + async def post(self, request: Request) -> Response: + data = await request.post() + + if not data['domain']: + return await self.get(request, error = 'Missing domain') + + with self.database.session(True) as conn: + if (ban := conn.get_domain_whitelist(data['domain'])): + return await self.get(request, message = "Domain already in whitelist") + + conn.put_domain_whitelist(data['domain']) + + return await self.get(request, message = "Added/updated domain ban") + + +@register_route('/admin/whitelist/delete/{domain}') +class AdminWhitlistDelete(View): + async def get(self, request: Request, domain: str) -> Response: + with self.database.session() as conn: + if not (conn.get_domain_whitelist(domain)): + msg = 'Whitelisted domain not found' + return await AdminWhitelist.run("GET", request, message = msg) + + conn.del_domain_whitelist(domain) + + return await AdminWhitelist.run("GET", request, message = 'Removed domain from whitelist') + + @register_route('/admin/domain_bans') class AdminDomainBans(View): async def get(self,