perbaikan keycloak dan hak akses pada sidebarItem, add axios, pinia, zod

This commit is contained in:
2025-06-02 12:08:55 +07:00
parent 615586c2c6
commit 87a4bdc1a8
12 changed files with 323 additions and 63 deletions

73
server/api/auth/login.js Normal file
View File

@@ -0,0 +1,73 @@
import client from "~/server/utils/auth";
import { sendRedirect } from 'h3';
import cors from 'cors';
export default defineEventHandler(async (event) => {
const runtimeconfig = useRuntimeConfig();
const redirectUri = `${runtimeconfig.public.keycloakRedirectURI}/callback`; // Ganti dengan URL yang sesuai jika perlu
const responseType = 'code';
const scope = 'openid';
// Apply CORS middleware
await new Promise((resolve, reject) => {
cors({
origin: redirectUri,
methods: ['POST'],
})(event.node.req, event.node.res, resolve);
});
// await new Promise((resolve, reject) => {
// cors({
// origin: runtimeConfig.public.keycloakRedirectURI,
// methods: ['GET', 'POST'],
// })(event.node.req, event.node.res, (err: any) => {
// if (err) reject(err);
// else resolve(true);
// });
// });
const authClient = await client();
const authorizationUrl = authClient.authorizationUrl({
scope: 'openid profile email',
// scope: 'login-required',
});
// console.log(authorizationUrl)
// const baseURL = new URL(authorizationUrl)
// // console.log(baseURL.searchParams)
// const urlParam = baseURL.searchParams
// console.log(urlParam.get('code'))
// if (event.node.req.url?.startsWith('/callback')) {
// try {
// const params = authClient.callbackParams(event.node.req);
// const tokenSet = await authClient.callback(redirectUri, params, {
// response_type: responseType,
// });
//
// const userInfo = await authClient.userinfo(tokenSet);
// console.log(userInfo);
// Simpan user info di session
// await setCookie(event).update({
// user: {
// id: userInfo.sub,
// name: userInfo.name || userInfo.preferred_username,
// email: userInfo.email,
// roles: userInfo.roles || [],
// accessToken: tokenSet.access_token,
// refreshToken: tokenSet.refresh_token,
// }
// });
// Redirect setelah login sukses
// return sendRedirect(event, runtimeConfig.public.afterLoginRedirect || '/');
//
// } catch (error) {
// console.error('Keycloak authentication error:', error);
// throw createError({
// statusCode: 401,
// statusMessage: 'Authentication failed',
// });
// }
// }
console.log(authorizationUrl)
return { callbackURL: authorizationUrl }
// return { callbackURL: authorizationUrl+`&response_type=${responseType}&scope=${scope}` }
});

19
server/api/sidebarItem.ts Normal file
View File

@@ -0,0 +1,19 @@
import axios from "axios";
export default defineEventHandler(async (event) => {
const read_body = await readBody(event)
console.log(`ini ${read_body}`)
try {
const response = await axios.get(`http://10.10.150.131:8080/api/login/${read_body.key}`)
// console.log(response.data.data)
return response.data.data
} catch (error) {
console.log(`Messages Err: ${error.response.data.message} || nullable`)
throw createError({
statusCode: error.response?.status || 500,
statusMessage: error.message || 'Internal Server Error',
});
}
})