Dieser Commit ist enthalten in:
Ursprung
899b41d051
Commit
195a66fd60
@ -23,6 +23,10 @@
|
|||||||
import {players} from "@stores/stores.ts";
|
import {players} from "@stores/stores.ts";
|
||||||
import {capitalize} from "../util.ts";
|
import {capitalize} from "../util.ts";
|
||||||
import {permsRepo} from "@repo/perms.ts";
|
import {permsRepo} from "@repo/perms.ts";
|
||||||
|
import {me} from "@stores/me.ts";
|
||||||
|
import SWButton from "@components/styled/SWButton.svelte";
|
||||||
|
import SWModal from "@components/styled/SWModal.svelte";
|
||||||
|
import {userRepo} from "@repo/user.ts";
|
||||||
|
|
||||||
let search = "";
|
let search = "";
|
||||||
$: lowerCaseSearch = search.toLowerCase();
|
$: lowerCaseSearch = search.toLowerCase();
|
||||||
@ -36,6 +40,10 @@
|
|||||||
let prefixEdit = "PREFIX_NONE";
|
let prefixEdit = "PREFIX_NONE";
|
||||||
let activePerms: string[] = [];
|
let activePerms: string[] = [];
|
||||||
|
|
||||||
|
let resetPasswordModal = false;
|
||||||
|
let resetPassword = "";
|
||||||
|
let resetPasswordRepeat = "";
|
||||||
|
|
||||||
function loadPlayer(id: number | null) {
|
function loadPlayer(id: number | null) {
|
||||||
if (!id) {
|
if (!id) {
|
||||||
return;
|
return;
|
||||||
@ -80,6 +88,19 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
let permsFuture = $permsRepo.listPerms();
|
let permsFuture = $permsRepo.listPerms();
|
||||||
|
|
||||||
|
function resetPW() {
|
||||||
|
if (resetPassword === resetPasswordRepeat) {
|
||||||
|
$userRepo.setPassword(selectedPlayer!, resetPassword);
|
||||||
|
}
|
||||||
|
resetResetPassword();
|
||||||
|
}
|
||||||
|
|
||||||
|
function resetResetPassword() {
|
||||||
|
resetPassword = "";
|
||||||
|
resetPasswordRepeat = "";
|
||||||
|
resetPasswordModal = false;
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<div class="flex flex-col h-screen overflow-hidden">
|
<div class="flex flex-col h-screen overflow-hidden">
|
||||||
@ -134,6 +155,27 @@
|
|||||||
<Button disabled={prefixEdit === (player?.prefix.name ?? "") && activePerms === (player?.perms ?? [])}
|
<Button disabled={prefixEdit === (player?.prefix.name ?? "") && activePerms === (player?.perms ?? [])}
|
||||||
on:click={save}>Save
|
on:click={save}>Save
|
||||||
</Button>
|
</Button>
|
||||||
|
{#if $me != null && $me.perms.includes("ADMINISTRATION")}
|
||||||
|
<Button on:click={() => resetPasswordModal = true}>
|
||||||
|
Reset Password
|
||||||
|
</Button>
|
||||||
|
|
||||||
|
<SWModal bind:open={resetPasswordModal} title="Reset Password">
|
||||||
|
<Label for="new_password">New Password</Label>
|
||||||
|
<Input type="password" id="new_password" placeholder="New Password" bind:value={resetPassword}/>
|
||||||
|
<Label for="repeat_password">Repeat Password</Label>
|
||||||
|
<Input type="password" id="repeat_password" placeholder="Repeat Password" bind:value={resetPasswordRepeat}/>
|
||||||
|
|
||||||
|
<svelte:fragment slot="footer">
|
||||||
|
<Button class="ml-auto mr-4" on:click={resetResetPassword}>
|
||||||
|
Cancel
|
||||||
|
</Button>
|
||||||
|
<Button disabled={resetPassword === "" || resetPassword !== resetPasswordRepeat} on:click={resetPW}>
|
||||||
|
Reset Password
|
||||||
|
</Button>
|
||||||
|
</svelte:fragment>
|
||||||
|
</SWModal>
|
||||||
|
{/if}
|
||||||
</div>
|
</div>
|
||||||
{:catch error}
|
{:catch error}
|
||||||
<p>{error.toString()}</p>
|
<p>{error.toString()}</p>
|
||||||
|
36
src/components/repo/user.ts
Normale Datei
36
src/components/repo/user.ts
Normale Datei
@ -0,0 +1,36 @@
|
|||||||
|
/*
|
||||||
|
* This file is a part of the SteamWar software.
|
||||||
|
*
|
||||||
|
* Copyright (C) 2024 SteamWar.de-Serverteam
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Affero General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU Affero General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Affero General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import {fetchWithToken, tokenStore} from "@repo/repo.ts";
|
||||||
|
import {derived} from "svelte/store";
|
||||||
|
|
||||||
|
export class UserRepo {
|
||||||
|
|
||||||
|
constructor(private token: string) {
|
||||||
|
}
|
||||||
|
|
||||||
|
public async setPassword(id: number, password: string): Promise<void> {
|
||||||
|
await fetchWithToken(this.token, `/user/${id}/admin/password`, {
|
||||||
|
method: "PUT",
|
||||||
|
body: password,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export const userRepo = derived(tokenStore, ($token) => new UserRepo($token));
|
24
src/components/stores/me.ts
Normale Datei
24
src/components/stores/me.ts
Normale Datei
@ -0,0 +1,24 @@
|
|||||||
|
/*
|
||||||
|
* This file is a part of the SteamWar software.
|
||||||
|
*
|
||||||
|
* Copyright (C) 2024 SteamWar.de-Serverteam
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Affero General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU Affero General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Affero General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import {cached} from "@stores/cached.ts";
|
||||||
|
import {get} from "svelte/store";
|
||||||
|
import {dataRepo} from "@repo/data.ts";
|
||||||
|
|
||||||
|
export const me = cached(null, async () => get(dataRepo).getMe());
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren