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

58 lines
1.9 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 } from "../../../stores.js";
import { createEventDispatcher } from 'svelte';
export let globals;
const dispatch = createEventDispatcher();
var loginserver;
function handleSelectServer() {
if(!isValidHttpUrl(loginserver)) {
loginserver = 'https://' + loginserver;
if(!isValidHttpUrl(loginserver)) {
return dispatch('message', {text: 'This server is not a Blackbird Chess server'})
}
}
console.log("Selected server: " + loginserver);
fetch(loginserver + urls.capabilities)
.then((response) => {
if (!response.ok) return dispatch('message', {text: 'This server is not a Blackbird Chess server'})
return response.json()
})
.then((data) => {
if(!data.login) return dispatch('message', {text: 'This server is unavailable for login currently'})
globals.server.url = loginserver;
globals.server.caps = data;
})
.catch((error) => {
return dispatch('message', {text: 'This server is not a Blackbird Chess server'})
});
}
function isValidHttpUrl(string) {
let url;
try {
url = new URL(string);
} catch (_) {
return false;
}
return url.protocol === "http:" || url.protocol === "https:";
}
</script>