add login

master
adb 2 years ago
parent e447cb5164
commit 7bedf7c13f

@ -3,6 +3,6 @@ import { Context } from '@/middleware/Context';
export default function auth({ next, router }: Context) { export default function auth({ next, router }: Context) {
console.log('auth'); console.log('auth');
if (!useWebdavStorage().currentClient) return router.push({ name: 'Login' }); if (!useWebdavStorage().currentSession?.isActive) return router.push({ name: 'Login' });
return next(); return next();
} }

@ -6,22 +6,36 @@ type Auth = {
pass: string; pass: string;
}; };
export type Session = {
client: WebDAVClient;
isActive: boolean;
};
export const useWebdavStorage = defineStore('auth', { export const useWebdavStorage = defineStore('auth', {
state: () => ({ state: () => ({
clientList: [] as Array<WebDAVClient>, sessions: [] as Array<Session>,
currentClient: null as null | WebDAVClient, currentSession: null as null | Session,
}), }),
actions: { actions: {
login({ user, pass }: Auth) { login({ user, pass }: Auth): Promise<Session> {
console.log(user, pass); return new Promise((resolve, reject) => {
const client = createClient(process.env.VUE_APP_ROOT_WEBDAV as string, { try {
authType: AuthType.Digest, const client = createClient(
username: user as string, process.env.VUE_APP_ROOT_WEBDAV as string,
password: pass as string, {
}) as WebDAVClient; authType: AuthType.Digest,
this.clientList.push(client); username: user as string,
this.currentClient = client; password: pass as string,
return client; }
) as WebDAVClient;
const session = { client, isActive: true } as Session;
this.sessions.push(session);
this.currentSession = session;
resolve(session);
} catch (e) {
reject(e);
}
});
}, },
}, },
}); });

@ -1,10 +1,23 @@
<template> <template>
<h1>Login</h1> <h1>Login</h1>
user: <input type="text" v-model="user" /><br />
pass: <input type="password" v-model="pass" /><br />
<button @click="login">Login</button>
</template> </template>
<script> <script setup lang="ts">
export default { import { ref } from 'vue';
name: 'Login', import { useWebdavStorage } from '@/store/webdav';
const user = ref('');
const pass = ref('');
const login = async () => {
await useWebdavStorage()
.login({ user, pass })
.then(async session => {
console.log(await session.client.getDirectoryContents('/'));
});
}; };
</script> </script>

Loading…
Cancel
Save