68 lines
1.6 KiB
Vue
68 lines
1.6 KiB
Vue
<template>
|
|
<div>
|
|
<div class="column is-4 is-offset-4">
|
|
<div class="box" v-for="rs in remotesources" v-bind:key="rs.id">
|
|
<LoginForm
|
|
action="Login"
|
|
:name="rs.name"
|
|
v-if="rs.auth_type == 'password'"
|
|
v-on:login="doLogin(rs.name, $event.username, $event.password)"
|
|
/>
|
|
<button
|
|
v-else
|
|
class="button is-info is-fullwidth"
|
|
@click="doLogin(rs.name)"
|
|
>Login with {{rs.name}}</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</template>
|
|
|
|
<script>
|
|
import LoginForm from "@/components/loginform";
|
|
import { apiurl, loginurl, fetch, login, logout } from "@/util/auth";
|
|
|
|
export default {
|
|
name: "Login",
|
|
components: {
|
|
LoginForm
|
|
},
|
|
data: function() {
|
|
return {
|
|
remotesources: null
|
|
};
|
|
},
|
|
methods: {
|
|
async getRemoteSources() {
|
|
let res = await (await fetch(apiurl("/remotesources"))).json();
|
|
console.log("remote sources result", res);
|
|
this.remotesources = res;
|
|
},
|
|
async doLogin(rsName, username, password) {
|
|
let u = loginurl();
|
|
let res = await (await fetch(u, {
|
|
method: "POST",
|
|
body: JSON.stringify({
|
|
remote_source_name: rsName,
|
|
login_name: username,
|
|
password: password
|
|
})
|
|
})).json();
|
|
console.log("login result", res);
|
|
if (res.oauth2_redirect) {
|
|
window.location = res.oauth2_redirect;
|
|
return;
|
|
}
|
|
login(res.token, res.user);
|
|
this.$router.push({ name: "home" });
|
|
}
|
|
},
|
|
created: function() {
|
|
logout();
|
|
this.getRemoteSources();
|
|
}
|
|
};
|
|
</script>
|
|
|
|
|