blackbirdchess-client-web/src/routes/account/login/Server.svelte

71 lines
2.3 KiB
Svelte

<form name="login-server" class="flex flex-col">
<label class="label my-3">
<span>Please select the server to login:</span>
<input
type="url"
name="server"
id="login-server-url"
class="input"
bind:value={loginserver}>
</label>
<button type="button" id="login-server-submit" class="btn variant-filled-primary my-3" on:click={handleSelectServer}>Submit</button>
</form>
<style lang="scss">
</style>
<script lang="js">
import {urls, alerts, globalstore, sessionstore } from "$lib/stores.js";
import {onMount} from 'svelte';
import { requestor, setBaseUrl } from "../../../serverrequest.js";
var loginserver;
let sessionvars;
sessionstore.subscribe(value => {
sessionvars = value;
});
onMount(() => {
if(typeof sessionvars.serverurl !== 'undefined') {
loginserver = sessionvars.serverurl;
handleSelectServer();
}
})
async function handleSelectServer() {
if(!isValidHttpUrl(loginserver)) {
loginserver = 'https://' + loginserver;
if(!isValidHttpUrl(loginserver)) {
return alerts.update(data => [...data, {text: loginserver + ' is not a Blackbird Chess server', class: 'error'}]);
}
}
console.log("Selected server: " + loginserver);
setBaseUrl(loginserver);
try {
let response = await requestor.get(urls.capabilities);
let caps = JSON.parse(response.data);
if(!caps.login) return alerts.update(data => [...data, {text: loginserver + ' is unavailable for login currently', class: 'error'}]);
globalstore.update(data => ({ ...data, ...{server: {url: loginserver, caps: caps}}}));
sessionstore.update((data) => ({ ...data, ...{serverurl: loginserver }}));
} catch (error) {
return alerts.update(data => [...data, {text: loginserver + ' is not a Blackbird Chess server', class: 'error'}]);
}
}
function isValidHttpUrl(string) {
let url;
try {
url = new URL(string);
} catch (_) {
return false;
}
return url.protocol === "http:" || url.protocol === "https:";
}
</script>