Files

116 lines
4.0 KiB
Vue

<script setup lang="ts">
import Topbar from "~/components/layout/full/Topbar.vue";
const title = ref(
"Matdash - Nuxt3 Typescript based Free Admin Dashboard Template"
);
useHead({
meta: [{ content: title }],
titleTemplate: (titleChunk) => {
return titleChunk
? `${titleChunk} - Nuxt3 Typescript based Free Admin Dashboard Template`
: "Matdash - Nuxt3 Typescript based Free Admin Dashboard Template";
},
});
const { session, refresh, update, reset, overwrite } = await useSession()
const { $encodeBase64, $decodeBase64 } = useNuxtApp();
const sidebarMenu = ref('');
const sessionState = ref('');
const issuer = ref('');
const code = ref('');
const cobaSetProfile = ref<any[]>([]);
const runtimeconfig = useRuntimeConfig();
const url = window.location.href;
const urlParams = new URL(url).searchParams;
sessionState.value = urlParams.get('session_state') || '';
issuer.value = urlParams.get('iss') || '';
code.value = urlParams.get('code') || '';
const response = $fetch(`${issuer.value}/protocol/openid-connect/token`, {
method: 'POST',
headers: { 'Content-Type': 'application/x-www-form-urlencoded', },
body: new URLSearchParams({
grant_type: 'authorization_code',
client_id: runtimeconfig.public.keycloakClient, // Ganti dengan client ID Anda
client_secret: runtimeconfig.public.keycloakSecretKey,
code: code.value,
redirect_uri: `${window.location.origin}`, // Ganti dengan redirect URI Anda
})
}).then((response) => {
const reUserInfo = $fetch(`${issuer.value}/protocol/openid-connect/userinfo`, {
headers: {
Authorization: `Bearer ${response.access_token}`,
}
})
.then((response) => {
const idMongose = response.idMongose
const encodeProfile = $encodeBase64(JSON.stringify(response))
localStorage.setItem('userProfile', encodeProfile)
console.log("ini id mongose",idMongose)
// cobaSetProfile.value.push(encodeProfile)
$fetch(`/api/auth/sidebarItem`, {
method: 'POST',
body: { key: idMongose }
})
.then(async(response) => {
// localStorage.setItem('sidebarItems', $encodeBase64(JSON.stringify(response)))
// update({ 'user_login': response })
// await overwrite({ 'sidebarItems': response })
const sessionMenu = await $fetch(`/api/auth/getSessionMenu`)
console.log("session menu dari get",sessionMenu)
sidebarMenu.value = sessionMenu.items
// sidebarMenu.value = response.items
}).catch((err) => {
loadSidebarItemLocalStorage()
})
// $fetch(`http://10.10.150.131:8080/api/login/${idMongose}`, {
// headers: { 'Content-Type': 'application/json', },
// mode: 'no-cors'
// })
// .then((response) => {
// console.log(response)
// })
}).catch((err) => {
loadSidebarItemLocalStorage()
})
}).catch((err) => {
loadSidebarItemLocalStorage()
})
// function loadSidebarItemLocalStorage() {
// const sessionMenu = $fetch(`/api/auth/getSessionMenu`)
// console.log("session menu dari get",sessionMenu)
// // const as = JSON.parse($decodeBase64(localStorage.getItem('sidebarItems')))
// const as = session.value?.sidebarItems
// console.log(session.value)
// console.log("menu default",as)
// console.log('sdadsd')
// sidebarMenu.value = as.items
// // sidebarMenu.value = session.value.user_login.items
// }
const loadSidebarItemLocalStorage = async() => {
const sessionMenu = await $fetch(`/api/auth/getSessionMenu`)
console.log("session menu dari get",sessionMenu)
sidebarMenu.value = sessionMenu.items
}
</script>
<template>
<v-locale-provider>
<!-- <Topbar /> -->
<v-app>
<LayoutFullMain :items="sidebarMenu" />
<v-main class="mr-md-4">
<div class="mb-3 hr-layout bg-containerBg">
<v-container fluid class="page-wrapper bg-background pt-md-8 rounded-xl">
<div class="maxWidth">
<NuxtPage />
</div>
</v-container>
</div>
</v-main>
</v-app>
</v-locale-provider>
</template>