diff --git a/pyproject.toml b/pyproject.toml index ee29123..a3473cb 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -84,6 +84,7 @@ relay = [ "data/*", "frontend/*", "frontend/page/*", + "frontend/page/admin/*", "frontend/static/*", ] diff --git a/relay/frontend/base.haml b/relay/frontend/base.haml index 33b8a85..607ebfd 100644 --- a/relay/frontend/base.haml +++ b/relay/frontend/base.haml @@ -31,7 +31,6 @@ {{menu_item("Whitelist", "/admin/whitelist")}} {{menu_item("Domain Bans", "/admin/domain_bans")}} {{menu_item("Software Bans", "/admin/software_bans")}} - {{menu_item("Users", "/admin/users")}} {{menu_item("Config", "/admin/config")}} {{menu_item("Logout", "/logout")}} diff --git a/relay/frontend/page/admin-users.haml b/relay/frontend/page/admin-users.haml deleted file mode 100644 index d6715c9..0000000 --- a/relay/frontend/page/admin-users.haml +++ /dev/null @@ -1,47 +0,0 @@ --extends "base.haml" --set page="Users" - --block content - %details.section - %summary << Add User - #add-item - %label(for="new-username") << Username - %input(id="new-username" name="username" placeholder="Username" autocomplete="off") - - %label(for="new-password") << Password - %input(id="new-password" type="password" placeholder="Password" autocomplete="off") - - %label(for="new-password2") << Password Again - %input(id="new-password2" type="password" placeholder="Password Again" autocomplete="off") - - %label(for="new-handle") << Handle - %input(id="new-handle" type="email" placeholder="handle" autocomplete="off") - - %input#new-user(type="button" value="Add User") - - %fieldset.section - %legend << Users - - .data-table - %table#users - %thead - %tr - %td.username << Username - %td.handle << Handle - %td.date << Joined - %td.remove - - %tbody - -for user in users - %tr(id="{{user.username}}") - %td.username - =user.username - - %td.handle - =user.handle or "n/a" - - %td.date - =user.created.strftime("%Y-%m-%d") - - %td.remove - %a(href="#" title="Remove User") << ✖ diff --git a/relay/frontend/page/admin-config.haml b/relay/frontend/page/admin/config.haml similarity index 100% rename from relay/frontend/page/admin-config.haml rename to relay/frontend/page/admin/config.haml diff --git a/relay/frontend/page/admin-domain_bans.haml b/relay/frontend/page/admin/domain_bans.haml similarity index 100% rename from relay/frontend/page/admin-domain_bans.haml rename to relay/frontend/page/admin/domain_bans.haml diff --git a/relay/frontend/page/admin-instances.haml b/relay/frontend/page/admin/instances.haml similarity index 100% rename from relay/frontend/page/admin-instances.haml rename to relay/frontend/page/admin/instances.haml diff --git a/relay/frontend/page/admin-software_bans.haml b/relay/frontend/page/admin/software_bans.haml similarity index 100% rename from relay/frontend/page/admin-software_bans.haml rename to relay/frontend/page/admin/software_bans.haml diff --git a/relay/frontend/page/admin-whitelist.haml b/relay/frontend/page/admin/whitelist.haml similarity index 100% rename from relay/frontend/page/admin-whitelist.haml rename to relay/frontend/page/admin/whitelist.haml diff --git a/relay/frontend/static/functions.js b/relay/frontend/static/functions.js index 3f8a181..f31ed21 100644 --- a/relay/frontend/static/functions.js +++ b/relay/frontend/static/functions.js @@ -680,103 +680,6 @@ function page_software_ban() { } -function page_user() { - function add_row_listeners(row) { - row.querySelector(".remove a").addEventListener("click", async (event) => { - event.preventDefault(); - await del_user(row.id); - }); - } - - - async function add_user() { - var elems = { - username: document.getElementById("new-username"), - password: document.getElementById("new-password"), - password2: document.getElementById("new-password2"), - handle: document.getElementById("new-handle") - } - - var values = { - username: elems.username.value.trim(), - password: elems.password.value.trim(), - password2: elems.password2.value.trim(), - handle: elems.handle.value.trim() - } - - if (values.username === "" | values.password === "" | values.password2 === "") { - toast("Username, password, and password2 are required"); - return; - } - - if (values.password !== values.password2) { - toast("Passwords do not match"); - return; - } - - try { - var user = await request("POST", "v1/user", values); - - } catch (err) { - toast(err); - return - } - - var row = append_table_row(document.querySelector("fieldset.section table"), user.username, { - domain: user.username, - handle: user.handle ? self.handle : "n/a", - date: get_date_string(user.created), - remove: `` - }); - - add_row_listeners(row); - - elems.username.value = null; - elems.password.value = null; - elems.password2.value = null; - elems.handle.value = null; - - document.querySelector("details.section").open = false; - toast("Created user", "message"); - } - - - async function del_user(username) { - try { - await request("DELETE", "v1/user", {"username": username}); - - } catch (error) { - toast(error); - return; - } - - document.getElementById(username).remove(); - toast("Deleted user", "message"); - } - - - document.querySelector("#new-user").addEventListener("click", async (event) => { - await add_user(); - }); - - for (var elem of document.querySelectorAll("#add-item input")) { - elem.addEventListener("keydown", async (event) => { - if (event.which === 13) { - await add_user(); - } - }); - } - - for (var row of document.querySelector("#users").rows) { - if (!row.querySelector(".remove a")) { - continue; - } - - add_row_listeners(row); - } -} - - function page_whitelist() { function add_row_listeners(row) { row.querySelector(".remove a").addEventListener("click", async (event) => { diff --git a/relay/views/api.py b/relay/views/api.py index 7769cdd..786d9f9 100644 --- a/relay/views/api.py +++ b/relay/views/api.py @@ -709,7 +709,7 @@ async def handle_whitelist_del(app: Application, request: Request, domain: str) return objects.Message("Removed domain from whitelist") -# remove /api/v1/user endpoints? +# remove /api/v1/user endpoints in 0.4.0 @Route(HttpMethod.GET, "/api/v1/user", "User", True) async def handle_users_get(app: Application, request: Request) -> list[objects.User]: with app.database.session(False) as s: diff --git a/relay/views/frontend.py b/relay/views/frontend.py index 737c8ff..8626746 100644 --- a/relay/views/frontend.py +++ b/relay/views/frontend.py @@ -74,7 +74,7 @@ async def handle_admin_instances( if message: context["message"] = message - return Response.new_template(200, "page/admin-instances.haml", request, context) + return Response.new_template(200, "page/admin/instances.haml", request, context) @register_route(HttpMethod.GET, "/admin/whitelist") @@ -95,7 +95,7 @@ async def handle_admin_whitelist( if message: context["message"] = message - return Response.new_template(200, "page/admin-whitelist.haml", request, context) + return Response.new_template(200, "page/admin/whitelist.haml", request, context) @register_route(HttpMethod.GET, "/admin/domain_bans") @@ -116,7 +116,7 @@ async def handle_admin_instance_bans( if message: context["message"] = message - return Response.new_template(200, "page/admin-domain_bans.haml", request, context) + return Response.new_template(200, "page/admin/domain_bans.haml", request, context) @register_route(HttpMethod.GET, "/admin/software_bans") @@ -137,28 +137,7 @@ async def handle_admin_software_bans( if message: context["message"] = message - return Response.new_template(200, "page/admin-software_bans.haml", request, context) - - -@register_route(HttpMethod.GET, "/admin/users") -async def handle_admin_users( - app: Application, - request: Request, - error: str | None = None, - message: str | None = None) -> Response: - - with app.database.session() as conn: - context: dict[str, Any] = { - "users": tuple(conn.execute("SELECT * FROM users ORDER BY username ASC")) - } - - if error: - context["error"] = error - - if message: - context["message"] = message - - return Response.new_template(200, "page/admin-users.haml", request, context) + return Response.new_template(200, "page/admin/software_bans.haml", request, context) @register_route(HttpMethod.GET, "/admin/config") @@ -184,7 +163,7 @@ async def handle_admin_config( } } - return Response.new_template(200, "page/admin-config.haml", request, context) + return Response.new_template(200, "page/admin/config.haml", request, context) @register_route(HttpMethod.GET, "/manifest.json")