odtool / src /components /onedrive /Callback.vue
bot
εˆε§‹εŒ–
9f6f5a5
<script lang="ts" setup>
import { NAlert, NButton, NInput, NSpace, NSpin } from 'naive-ui';
import { reactive } from 'vue';
const url = new URL(window.location.href);
const code = url.searchParams.get("code");
const client = url.searchParams.get("state");
const error = url.searchParams.get("error");
const error_description = url.searchParams.get("error_description");
const data = reactive({
refreshToken: "",
accessToken: "",
error1: "",
errorMessage1: "",
siteUrl: "",
siteId: "",
error2: "",
errorMessage2: "",
gettingSiteId: false,
})
const getToken = () => {
fetch(`/api/onedrive/get_refresh_token`, {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({
code,
client,
}),
})
.then((resp) => resp.json())
.then((res) => {
console.log(res);
if (res.error) {
data.error1 = res.error;
data.errorMessage1 = res.error_description;
return;
}
data.refreshToken = res.refresh_token;
data.accessToken = res.access_token;
});
}
if (code && client && !error) {
getToken()
}
const [client_id, client_secret, zone,redirect_uri] = atob(client as string).split("::");
const getSiteId = () => {
data.gettingSiteId = true;
fetch(`/api/onedrive/get_site_id`, {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({
site_url: data.siteUrl,
access_token: data.accessToken,
zone,
}),
})
.then((resp) => {
data.gettingSiteId = false;
return resp.json()
})
.then((res) => {
if (res.error) {
data.error2 = res.error;
data.errorMessage2 = res.error.message;
return;
}
data.siteId = res.id;
});
}
</script>
<template>
<NAlert :title="error || 'Error'" type="error" v-if="!code || !client || error">
{{ error_description }}
</NAlert>
<NSpace v-else vertical size="large">
<p><b>client_id: </b>{{ client_id }}</p>
<p><b>client_secret: </b>{{ client_secret }}</p>
<p><b>zone: </b>{{ zone }}</p>
<p><b>redirect_uri: </b>{{ redirect_uri }}</p>
<NAlert :title="data.error1" type="error" v-if="data.error1 || data.errorMessage1">
{{ data.errorMessage1 }}
</NAlert>
<NSpace vertical>
<b>refresh_token:</b>
<NSpin v-if="!data.refreshToken && !data.errorMessage1" />
<NInput v-else type="textarea" autosize readonly :value="data.refreshToken" />
</NSpace>
<NSpace vertical size="large" v-if="data.accessToken">
<h3>Get sharepoint site ID</h3>
<NAlert :title="data.error2" type="error" v-if="data.error2 || data.errorMessage2">
{{ data.errorMessage2 }}
</NAlert>
<NInput placeholder="input site url (https://xx.sharepoint.xx/sites/xx)" size="large"
v-model:value="data.siteUrl" />
<NButton type="primary" size="large" @click="getSiteId">Get SiteID</NButton>
<NSpin v-if="data.gettingSiteId" />
<p v-else-if="data.siteId"><b>site_id: </b>{{ data.siteId }}</p>
</NSpace>
</NSpace>
</template>
<style scoped>
p {
margin: 0;
font-size: large;
}
</style>