add blocks
This commit is contained in:
42
static/blocks/pages/users/content.md
Normal file
42
static/blocks/pages/users/content.md
Normal file
@@ -0,0 +1,42 @@
|
||||
<div class="box">
|
||||
<h1>Auth demo</h1>
|
||||
<div>
|
||||
<h3>Register</h3>
|
||||
user:<br>
|
||||
<input id="reg_user" placeholder="Username"><br>
|
||||
password:<br>
|
||||
<input id="reg_pass" placeholder="password" type="password"><button class="toggle-pass" type="button">👁</button><br><br>
|
||||
<button id="btn_reg">Register</button>
|
||||
|
||||
<h3>Users</h3>
|
||||
user:<br>
|
||||
<select id="users_list"></select>
|
||||
<button id="btn_load_users">Load Users</button><br>
|
||||
<!-- <button id="btn_user_data">Get User Data</button> -->
|
||||
ID:<br>
|
||||
<input id="ud_id" placeholder="ID"><br>
|
||||
user:<br>
|
||||
<input id="ud_username" placeholder="Username"><br>
|
||||
password:<br>
|
||||
<input id="ud_password" placeholder="New password" type="password"><button class="toggle-pass" type="button">👁</button><br>
|
||||
<br>
|
||||
<button id="btn_update_pass">Update password</button>
|
||||
<button id="btn_delete_user">Delete user</button>
|
||||
|
||||
<h3>Login</h3>
|
||||
user:<br>
|
||||
<input id="log_user" placeholder="Username">
|
||||
<br>
|
||||
password:<br>
|
||||
<input id="log_pass" placeholder="password" type="password"><button class="toggle-pass" type="button">👁</button>
|
||||
<br><br>
|
||||
<button id="btn_log">Login</button>
|
||||
</div><br>
|
||||
|
||||
<button id="btn_prot">Protected</button>
|
||||
|
||||
<pre id="out"></pre>
|
||||
|
||||
<button id="btn_logout">Logout</button>
|
||||
|
||||
</div>
|
||||
125
static/blocks/pages/users/script.js
Normal file
125
static/blocks/pages/users/script.js
Normal file
@@ -0,0 +1,125 @@
|
||||
/* ------------------- Регистрация (не защищена) ------------------- */
|
||||
|
||||
async function UserReg() {
|
||||
const u = reg_user.value,
|
||||
p = reg_pass.value;
|
||||
|
||||
const r = await fetch("/api/users/register", {
|
||||
method: "POST",
|
||||
headers: { "Content-Type": "application/json" },
|
||||
body: JSON.stringify({ username: u, password: p })
|
||||
});
|
||||
|
||||
if (!r.ok) return alert("Ошибка");
|
||||
alert("ok");
|
||||
reg_user.value = "",
|
||||
reg_pass.value = "";
|
||||
};
|
||||
|
||||
/* ------------------- Логин (не защищён) ------------------- */
|
||||
|
||||
async function UserLogin() {
|
||||
const u = log_user.value,
|
||||
p = log_pass.value;
|
||||
|
||||
const r = await fetch("/api/users/login", {
|
||||
method: "POST",
|
||||
credentials: "include",
|
||||
headers: { "Content-Type": "application/json" },
|
||||
body: JSON.stringify({ username: u, password: p })
|
||||
});
|
||||
|
||||
if (!r.ok) return alert("Ошибка");
|
||||
|
||||
const data = await r.json();
|
||||
accessToken = data.access_token;
|
||||
alert("logged in");
|
||||
log_user.value = "",
|
||||
log_pass.value = "";
|
||||
|
||||
};
|
||||
|
||||
/* ------------------- Логоут (не защищён) ------------------- */
|
||||
|
||||
async function UserLogout() {
|
||||
accessToken = "";
|
||||
await fetch("/api/users/logout", { method: "POST", credentials: "include" });
|
||||
};
|
||||
|
||||
/* ------------------- Защищённые операции ------------------- */
|
||||
|
||||
async function getUsersNames() {
|
||||
const users = await apiProtected("/api/users/getUsersNames");
|
||||
|
||||
users_list.innerHTML = "";
|
||||
users.forEach((username) => {
|
||||
const opt = document.createElement("option");
|
||||
opt.value = username;
|
||||
opt.textContent = username;
|
||||
users_list.appendChild(opt);
|
||||
});
|
||||
|
||||
if (users.length > 0) getUserData(users[0]);
|
||||
}
|
||||
|
||||
async function getUserData(username) {
|
||||
const data = await apiProtected(
|
||||
`/api/users/getUserData?username=${encodeURIComponent(username)}`
|
||||
);
|
||||
|
||||
ud_id.value = data.ID;
|
||||
ud_username.value = data.Username;
|
||||
}
|
||||
|
||||
async function updatePassword() {
|
||||
const username = ud_username.value;
|
||||
const password = ud_password.value;
|
||||
|
||||
if (!password) return alert("Введите пароль");
|
||||
|
||||
await apiProtected("/api/users/update_password", {
|
||||
method: "POST",
|
||||
body: JSON.stringify({ username, password })
|
||||
});
|
||||
|
||||
alert("Пароль обновлён");
|
||||
}
|
||||
|
||||
async function deleteUser() {
|
||||
const username = users_list.value;
|
||||
if (!username) return;
|
||||
|
||||
if (!confirm(`Удалить пользователя "${username}"?`)) return;
|
||||
|
||||
await apiProtected("/api/users/delete_user", {
|
||||
method: "POST",
|
||||
body: JSON.stringify({ username })
|
||||
});
|
||||
|
||||
alert("Удалён");
|
||||
getUsersNames();
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* ------------------- Кнопки ------------------- */
|
||||
btn_reg.onclick = UserReg;
|
||||
btn_logout.onclick = UserLogout;
|
||||
btn_log.onclick = UserLogin;
|
||||
btn_delete_user.onclick = deleteUser;
|
||||
btn_update_pass.onclick = updatePassword;
|
||||
btn_load_users.onclick = getUsersNames;
|
||||
|
||||
users_list.onchange = (e) => getUserData(e.target.value);
|
||||
btn_prot.onclick = async () => {
|
||||
try {
|
||||
const data = await apiProtected("/api/protected");
|
||||
out.textContent = JSON.stringify(data, null, 2);
|
||||
} catch {
|
||||
out.textContent = "err";
|
||||
}
|
||||
};
|
||||
|
||||
document.addEventListener("DOMContentLoaded", getUsersNames);
|
||||
|
||||
|
||||
0
static/blocks/pages/users/style.css
Normal file
0
static/blocks/pages/users/style.css
Normal file
Reference in New Issue
Block a user