forked from chookspace/chookchat
220 lines
6.2 KiB
JavaScript
220 lines
6.2 KiB
JavaScript
async function like(id) {
|
|
const formData = new FormData();
|
|
formData.append('post', id);
|
|
|
|
const result = await fetch('/like', {
|
|
method: 'POST',
|
|
body: formData
|
|
});
|
|
|
|
if (result.status === 401) {
|
|
window.location.href = "/login";
|
|
return;
|
|
}
|
|
|
|
if (result.status < 200 || result.status >= 400) {
|
|
alert("your post didnt get the like because the server thought your opinion was invalid");
|
|
return;
|
|
}
|
|
}
|
|
|
|
async function post() {
|
|
const postbox = document.getElementById('newpost');
|
|
|
|
const formData = new FormData();
|
|
formData.append('post', postbox.value);
|
|
|
|
const result = await fetch('/post', {
|
|
method: 'POST',
|
|
body: formData
|
|
});
|
|
|
|
if (result.status < 200 || result.status >= 400) {
|
|
alert("you have been silenced by the server and your post did not go through");
|
|
return;
|
|
}
|
|
|
|
window.location.href = "/";
|
|
}
|
|
|
|
async function register() {
|
|
const usernameBox = document.getElementById('username');
|
|
const passwordBox = document.getElementById('password');
|
|
|
|
const formData = new FormData();
|
|
formData.append('username', usernameBox.value);
|
|
formData.append('password', passwordBox.value);
|
|
|
|
const result = await fetch('/register', {
|
|
method: 'POST',
|
|
body: formData
|
|
});
|
|
|
|
if (result.status < 200 || result.status >= 400) {
|
|
alert(await result.text());
|
|
return;
|
|
}
|
|
|
|
window.location.href = "/";
|
|
|
|
}
|
|
|
|
async function login() {
|
|
const usernameBox = document.getElementById('username');
|
|
const passwordBox = document.getElementById('password');
|
|
|
|
const formData = new FormData();
|
|
formData.append('username', usernameBox.value);
|
|
formData.append('password', passwordBox.value);
|
|
|
|
|
|
const result = await fetch('/login', {
|
|
method: 'POST',
|
|
body: formData
|
|
});
|
|
|
|
if (result.status < 200 || result.status >= 400) {
|
|
alert("for some reason the server hates you and didn't let you log into your account");
|
|
return;
|
|
}
|
|
|
|
window.location.href = "/";
|
|
}
|
|
|
|
async function checkLoginStatus() {
|
|
const result = await fetch('/me');
|
|
|
|
if (result.headers.get('X-Logged-In') !== 'true') {
|
|
return "";
|
|
}
|
|
|
|
const username = result.headers.get('X-Username');
|
|
return username;
|
|
}
|
|
|
|
document.addEventListener('DOMContentLoaded', async function() {
|
|
|
|
if (window.fetch) {
|
|
// We know the fetch API exists, so hide the stuff that doesn't rely on it
|
|
const userStatus = await checkLoginStatus();
|
|
|
|
const postbox = document.getElementById("postbox");
|
|
if (!postbox) {
|
|
return;
|
|
}
|
|
|
|
// if we're logged in, show the post box,
|
|
// otherwise show a welcome message, encouraging users to sign up/log in
|
|
if (userStatus === "") {
|
|
if (window.location.pathname === "/settings") {
|
|
window.location.href = "/login";
|
|
}
|
|
const newElement = document.createElement("p");
|
|
newElement.textContent = "Welcome to Chookchat!\nTo get posting, click 'login' to log in or create an account.\nEnjoy your stay!";
|
|
postbox.appendChild(newElement);
|
|
} else {
|
|
const helperText = document.createElement("p");
|
|
helperText.textContent = "You're posting as " + userStatus;
|
|
postbox.appendChild(helperText);
|
|
|
|
const textArea = document.createElement("textarea");
|
|
textArea.id = "newpost";
|
|
postbox.appendChild(textArea);
|
|
|
|
const postButton = document.createElement("button");
|
|
postButton.textContent = "Post";
|
|
postButton.id = "postbutton"
|
|
postButton.onclick = post;
|
|
postbox.appendChild(postButton);
|
|
|
|
const loginLink = document.getElementById("loginLink");
|
|
loginLink.textContent = "hello, " + userStatus + "!";
|
|
loginLink.href = "/profile/" + userStatus;
|
|
}
|
|
|
|
const form = document.getElementById("postbox-form");
|
|
if (!form) {
|
|
return;
|
|
}
|
|
form.style.display = 'none';
|
|
|
|
}
|
|
|
|
});
|
|
|
|
async function settingsChangePassword() {
|
|
const oldpassword = document.getElementById("change-password-oldpassword");
|
|
const newpassword = document.getElementById("change-password");
|
|
|
|
const formData = new FormData();
|
|
formData.append('oldpassword', oldpassword.value);
|
|
formData.append('newpassword', newpassword.value);
|
|
|
|
const result = await fetch('/settings/changePassword', {
|
|
method: "POST",
|
|
body: formData
|
|
});
|
|
|
|
if (result.status < 200 || result.status >= 400) {
|
|
alert("for whatever reason your password wasn't changed");
|
|
} else {
|
|
alert("your password was changed!");
|
|
}
|
|
}
|
|
|
|
async function settingsChangeUsername() {
|
|
const password = document.getElementById("change-username-password");
|
|
const newusername = document.getElementById("change-username");
|
|
|
|
const formData = new FormData();
|
|
formData.append('password', password.value);
|
|
formData.append('newusername', newusername.value);
|
|
|
|
const result = await fetch('/settings/changeUsername', {
|
|
method: "POST",
|
|
body: formData
|
|
});
|
|
|
|
if (result.status < 200 || result.status >= 400) {
|
|
alert("for whatever reason your username wasn't changed");
|
|
} else {
|
|
alert("your username was changed!");
|
|
}
|
|
}
|
|
|
|
async function settingsChangeBio() {
|
|
const bio = document.getElementById("change-bio");
|
|
|
|
const formData = new FormData();
|
|
formData.append('bio', bio.value);
|
|
|
|
const result = await fetch('/settings/changeBio', {
|
|
method: "POST",
|
|
body: formData
|
|
});
|
|
|
|
if (result.status < 200 || result.status >= 400) {
|
|
alert("for whatever reason your bio wasn't changed");
|
|
} else {
|
|
alert("your bio was changed!");
|
|
}
|
|
|
|
}
|
|
|
|
async function invalidateAllSessions() {
|
|
const formData = new FormData();
|
|
formData.append('a', 'a');
|
|
|
|
const result = await fetch('/settings/invalidateAllSessions', {
|
|
method: "POST",
|
|
body: formData
|
|
});
|
|
|
|
if (result.status < 200 || result.status >= 400) {
|
|
alert("for whatever reason your sessions weren't invalidated");
|
|
} else {
|
|
alert("your sessions were invalidated!");
|
|
}
|
|
|
|
}
|