mirror of
https://git.pleroma.social/pleroma/relay.git
synced 2024-11-09 18:08:00 +00:00
create admin users page
This commit is contained in:
parent
2223695d15
commit
b73fdece95
|
@ -27,6 +27,7 @@
|
||||||
{{menu_item("Whitelist", "/admin/whitelist")}}
|
{{menu_item("Whitelist", "/admin/whitelist")}}
|
||||||
{{menu_item("Domain Bans", "/admin/domain_bans")}}
|
{{menu_item("Domain Bans", "/admin/domain_bans")}}
|
||||||
{{menu_item("Software Bans", "/admin/software_bans")}}
|
{{menu_item("Software Bans", "/admin/software_bans")}}
|
||||||
|
{{menu_item("Users", "/admin/users")}}
|
||||||
{{menu_item("Config", "/admin/config")}}
|
{{menu_item("Config", "/admin/config")}}
|
||||||
{{menu_item("Logout", "/logout")}}
|
{{menu_item("Logout", "/logout")}}
|
||||||
|
|
||||||
|
|
44
relay/frontend/page/admin-users.haml
Normal file
44
relay/frontend/page/admin-users.haml
Normal file
|
@ -0,0 +1,44 @@
|
||||||
|
-extends "base.haml"
|
||||||
|
-set page="Users"
|
||||||
|
-block content
|
||||||
|
%details.section
|
||||||
|
%summary << Add User
|
||||||
|
%form(target="/admin/users", method="POST")
|
||||||
|
#add-user
|
||||||
|
%label(for="username") << Username
|
||||||
|
%input(id="username" name="username" placeholder="Username")
|
||||||
|
|
||||||
|
%label(for="password") << Password
|
||||||
|
%input(type="password" id="password" name="password" placeholder="Password")
|
||||||
|
|
||||||
|
%label(for="password2") << Password Again
|
||||||
|
%input(type="password" id="password2" name="password2" placeholder="Password Again")
|
||||||
|
|
||||||
|
%label(for="handle") << Handle
|
||||||
|
%input(type="email" name="handle" id="handle" placeholder="handle")
|
||||||
|
|
||||||
|
%input(type="submit" value="Add User")
|
||||||
|
|
||||||
|
#users.section
|
||||||
|
%table
|
||||||
|
%thead
|
||||||
|
%tr
|
||||||
|
%td.username << Username
|
||||||
|
%td.handle << Handle
|
||||||
|
%td.date << Joined
|
||||||
|
%td.remove
|
||||||
|
|
||||||
|
%tbody
|
||||||
|
-for user in users
|
||||||
|
%tr
|
||||||
|
%td.username
|
||||||
|
=user.username
|
||||||
|
|
||||||
|
%td.handle
|
||||||
|
=user.handle or "n/a"
|
||||||
|
|
||||||
|
%td.date
|
||||||
|
=user.created.strftime("%Y-%m-%d")
|
||||||
|
|
||||||
|
%td.remove
|
||||||
|
%a(href="/admin/users/delete/{{user.username}}" title="Remove User") << ✖
|
25
relay/frontend/style/users.css
Normal file
25
relay/frontend/style/users.css
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
form input[type="submit"] {
|
||||||
|
display: block;
|
||||||
|
margin: 0 auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
#users .username {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
#users .handle {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
#users .date {
|
||||||
|
width: max-content;
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
#add-user {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: max-content auto;
|
||||||
|
grid-gap: var(--spacing);
|
||||||
|
margin-top: var(--spacing);
|
||||||
|
margin-bottom: var(--spacing);
|
||||||
|
}
|
|
@ -350,6 +350,60 @@ class AdminSoftwareBansDelete(View):
|
||||||
return await AdminSoftwareBans.run("GET", request, message = 'Unbanned software')
|
return await AdminSoftwareBans.run("GET", request, message = 'Unbanned software')
|
||||||
|
|
||||||
|
|
||||||
|
@register_route('/admin/users')
|
||||||
|
class AdminUsers(View):
|
||||||
|
async def get(self,
|
||||||
|
request: Request,
|
||||||
|
error: str | None = None,
|
||||||
|
message: str | None = None) -> Response:
|
||||||
|
|
||||||
|
with self.database.session() as conn:
|
||||||
|
context = {
|
||||||
|
'users': tuple(conn.execute('SELECT * FROM users').all())
|
||||||
|
}
|
||||||
|
|
||||||
|
if error:
|
||||||
|
context['error'] = error
|
||||||
|
|
||||||
|
if message:
|
||||||
|
context['message'] = message
|
||||||
|
|
||||||
|
data = self.template.render('page/admin-users.haml', self, **context)
|
||||||
|
return Response.new(data, ctype = 'html')
|
||||||
|
|
||||||
|
|
||||||
|
async def post(self, request: Request) -> Response:
|
||||||
|
data = await request.post()
|
||||||
|
required_fields = {'username', 'password', 'password2'}
|
||||||
|
print(data)
|
||||||
|
|
||||||
|
if not all(map(data.get, required_fields)):
|
||||||
|
return await self.get(request, error = 'Missing username and/or password')
|
||||||
|
|
||||||
|
if data['password'] != data['password2']:
|
||||||
|
return await self.get(request, error = 'Passwords do not match')
|
||||||
|
|
||||||
|
with self.database.session(True) as conn:
|
||||||
|
if conn.get_user(data['username']):
|
||||||
|
return await self.get(request, message = "User already exists")
|
||||||
|
|
||||||
|
conn.put_user(data['username'], data['password'], data['handle'])
|
||||||
|
|
||||||
|
return await self.get(request, message = "Added user")
|
||||||
|
|
||||||
|
|
||||||
|
@register_route('/admin/users/delete/{name}')
|
||||||
|
class AdminUsersDelete(View):
|
||||||
|
async def get(self, request: Request, name: str) -> Response:
|
||||||
|
with self.database.session() as conn:
|
||||||
|
if not (conn.get_user(name)):
|
||||||
|
return await AdminUsers.run("GET", request, message = 'User not found')
|
||||||
|
|
||||||
|
conn.del_user(name)
|
||||||
|
|
||||||
|
return await AdminUsers.run("GET", request, message = 'User deleted')
|
||||||
|
|
||||||
|
|
||||||
@register_route('/admin/config')
|
@register_route('/admin/config')
|
||||||
class AdminConfig(View):
|
class AdminConfig(View):
|
||||||
async def get(self, request: Request, message: str | None = None) -> Response:
|
async def get(self, request: Request, message: str | None = None) -> Response:
|
||||||
|
|
Loading…
Reference in a new issue