feat: tambah dependensi 'jose' versi 5.9.2 pada package.json
refactor: rapikan identasi dan buat field 'expires' opsional di model UserSession pada schema prisma chore: bersihkan import tidak terpakai di route login dan register API
This commit is contained in:
@@ -54,6 +54,7 @@
|
|||||||
"eslint": "8.45.0",
|
"eslint": "8.45.0",
|
||||||
"eslint-config-next": "13.4.12",
|
"eslint-config-next": "13.4.12",
|
||||||
"iron-session": "^6.3.1",
|
"iron-session": "^6.3.1",
|
||||||
|
"jose": "^5.9.2",
|
||||||
"jotai": "^2.4.3",
|
"jotai": "^2.4.3",
|
||||||
"lodash": "^4.17.21",
|
"lodash": "^4.17.21",
|
||||||
"mapbox-gl": "^3.5.2",
|
"mapbox-gl": "^3.5.2",
|
||||||
|
|||||||
@@ -60,14 +60,14 @@ model MasterUserRole {
|
|||||||
}
|
}
|
||||||
|
|
||||||
model UserSession {
|
model UserSession {
|
||||||
id String @id @default(cuid())
|
id String @id @default(cuid())
|
||||||
token String
|
token String
|
||||||
expires DateTime
|
expires DateTime?
|
||||||
active Boolean @default(true)
|
active Boolean @default(true)
|
||||||
createdAt DateTime @default(now())
|
createdAt DateTime @default(now())
|
||||||
updatedAt DateTime @default(now()) @updatedAt
|
updatedAt DateTime @default(now()) @updatedAt
|
||||||
User User @relation(fields: [userId], references: [id])
|
User User @relation(fields: [userId], references: [id])
|
||||||
userId String @unique
|
userId String @unique
|
||||||
}
|
}
|
||||||
|
|
||||||
model KodeOtp {
|
model KodeOtp {
|
||||||
|
|||||||
@@ -1,8 +1,4 @@
|
|||||||
import { redirect } from "next/navigation";
|
|
||||||
|
|
||||||
import { myConsole } from "@/app/fun/my_console";
|
|
||||||
import prisma from "@/app/lib/prisma";
|
|
||||||
import { RouterAdminDashboard } from "@/app/lib/router_hipmi/router_admin";
|
|
||||||
|
|
||||||
import { NextResponse } from "next/server";
|
import { NextResponse } from "next/server";
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
import { myConsole } from "@/app/fun/my_console";
|
|
||||||
import { PwdCookies } from "@/app/lib";
|
|
||||||
import prisma from "@/app/lib/prisma";
|
import prisma from "@/app/lib/prisma";
|
||||||
|
import { ServerEnv } from "@/app/lib/server_env";
|
||||||
import { sealData } from "iron-session";
|
import { sealData } from "iron-session";
|
||||||
import { cookies } from "next/headers";
|
import { cookies } from "next/headers";
|
||||||
import { NextResponse } from "next/server";
|
import { NextResponse } from "next/server";
|
||||||
@@ -16,8 +15,6 @@ export async function POST(req: Request) {
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
myConsole(cekUsername);
|
|
||||||
|
|
||||||
if (cekUsername)
|
if (cekUsername)
|
||||||
return NextResponse.json({ status: 400, message: "Username sudah ada" });
|
return NextResponse.json({ status: 400, message: "Username sudah ada" });
|
||||||
|
|
||||||
@@ -35,7 +32,7 @@ export async function POST(req: Request) {
|
|||||||
username: data.username,
|
username: data.username,
|
||||||
}),
|
}),
|
||||||
{
|
{
|
||||||
password: PwdCookies,
|
password: ServerEnv.value?.WIBU_PWD as string,
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
import { myConsole } from "@/app/fun/my_console";
|
|
||||||
import { PwdCookies } from "@/app/lib";
|
|
||||||
import prisma from "@/app/lib/prisma";
|
import prisma from "@/app/lib/prisma";
|
||||||
|
import { ServerEnv } from "@/app/lib/server_env";
|
||||||
import { sealData } from "iron-session";
|
import { sealData } from "iron-session";
|
||||||
import { revalidatePath } from "next/cache";
|
import { revalidatePath } from "next/cache";
|
||||||
import { cookies } from "next/headers";
|
import { cookies } from "next/headers";
|
||||||
@@ -22,8 +21,6 @@ export async function POST(req: Request) {
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
myConsole(data);
|
|
||||||
|
|
||||||
if (!data) return NextResponse.json({ status: 404 });
|
if (!data) return NextResponse.json({ status: 404 });
|
||||||
|
|
||||||
if (data) {
|
if (data) {
|
||||||
@@ -33,7 +30,7 @@ export async function POST(req: Request) {
|
|||||||
username: data.username,
|
username: data.username,
|
||||||
}),
|
}),
|
||||||
{
|
{
|
||||||
password: await PwdCookies,
|
password: ServerEnv.value?.WIBU_PWD as string,
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
19
src/app/api/check-cookies/route.ts
Normal file
19
src/app/api/check-cookies/route.ts
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
import _ from "lodash";
|
||||||
|
import { cookies } from "next/headers";
|
||||||
|
|
||||||
|
export async function GET(req: Request) {
|
||||||
|
try {
|
||||||
|
const cekCookies = cookies();
|
||||||
|
const c = cekCookies.get("ssn");
|
||||||
|
|
||||||
|
if (!c || !c?.value || _.isEmpty(c?.value) || _.isUndefined(c?.value)) {
|
||||||
|
return Response.json({ success: false });
|
||||||
|
}
|
||||||
|
|
||||||
|
return Response.json({ success: true });
|
||||||
|
} catch (error) {
|
||||||
|
console.log(error);
|
||||||
|
}
|
||||||
|
|
||||||
|
return Response.json({ success: false });
|
||||||
|
}
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
import { AdminLayout } from "@/app_modules/admin/main_dashboard";
|
import { AdminLayout } from "@/app_modules/admin/main_dashboard";
|
||||||
import adminNotifikasi_countNotifikasi from "@/app_modules/admin/notifikasi/fun/count/count_is_read";
|
import adminNotifikasi_countNotifikasi from "@/app_modules/admin/notifikasi/fun/count/count_is_read";
|
||||||
import adminNotifikasi_getByUserId from "@/app_modules/admin/notifikasi/fun/get/get_notifikasi_by_user_id";
|
import adminNotifikasi_getByUserId from "@/app_modules/admin/notifikasi/fun/get/get_notifikasi_by_user_id";
|
||||||
|
import { CheckCookies_UiView } from "@/app_modules/check_cookies";
|
||||||
import { user_funGetOneUserId } from "@/app_modules/fun_global/get_user_token";
|
import { user_funGetOneUserId } from "@/app_modules/fun_global/get_user_token";
|
||||||
import { user_getOneByUserId } from "@/app_modules/home/fun/get/get_one_user_by_id";
|
import { user_getOneByUserId } from "@/app_modules/home/fun/get/get_one_user_by_id";
|
||||||
import React from "react";
|
import React from "react";
|
||||||
@@ -11,6 +12,8 @@ export default async function Layout({
|
|||||||
children: React.ReactNode;
|
children: React.ReactNode;
|
||||||
}) {
|
}) {
|
||||||
const userId = await user_funGetOneUserId();
|
const userId = await user_funGetOneUserId();
|
||||||
|
if (!userId) return <CheckCookies_UiView />;
|
||||||
|
|
||||||
const dataUser = await user_getOneByUserId(userId);
|
const dataUser = await user_getOneByUserId(userId);
|
||||||
const listNotif = await adminNotifikasi_getByUserId();
|
const listNotif = await adminNotifikasi_getByUserId();
|
||||||
const countNotifikasi = await adminNotifikasi_countNotifikasi();
|
const countNotifikasi = await adminNotifikasi_countNotifikasi();
|
||||||
|
|||||||
@@ -1,9 +1,12 @@
|
|||||||
import { Validasi } from "@/app_modules/auth";
|
import { Validasi } from "@/app_modules/auth";
|
||||||
import { auth_getKodeOtpById } from "@/app_modules/auth/fun/get_kode_otp_by_id";
|
import { auth_getKodeOtpById } from "@/app_modules/auth/fun/get_kode_otp_by_id";
|
||||||
|
import { ServerEnv } from "@/app/lib/server_env";
|
||||||
|
|
||||||
|
|
||||||
export default async function Page({ params }: { params: { id: string } }) {
|
export default async function Page({ params }: { params: { id: string } }) {
|
||||||
let kodeOtpId = params.id;
|
let kodeOtpId = params.id;
|
||||||
const dataOtp = await auth_getKodeOtpById(kodeOtpId);
|
const dataOtp = await auth_getKodeOtpById(kodeOtpId);
|
||||||
|
|
||||||
|
|
||||||
return <Validasi dataOtp={dataOtp} />;
|
return <Validasi dataOtp={dataOtp} />;
|
||||||
}
|
}
|
||||||
|
|||||||
5
src/app/dev/check-cookies/page.tsx
Normal file
5
src/app/dev/check-cookies/page.tsx
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
import { CheckCookies_UiView } from "@/app_modules/check_cookies";
|
||||||
|
|
||||||
|
export default function Page() {
|
||||||
|
return <CheckCookies_UiView />;
|
||||||
|
}
|
||||||
@@ -1,4 +1,5 @@
|
|||||||
import adminColab_getOneRoomChatById from "@/app_modules/admin/colab/fun/get/get_one_room_chat_by_id";
|
import adminColab_getOneRoomChatById from "@/app_modules/admin/colab/fun/get/get_one_room_chat_by_id";
|
||||||
|
import { CheckCookies_UiView } from "@/app_modules/check_cookies";
|
||||||
import {
|
import {
|
||||||
Colab_DetailGrupDiskusi,
|
Colab_DetailGrupDiskusi,
|
||||||
Colab_GroupChatView,
|
Colab_GroupChatView,
|
||||||
@@ -11,6 +12,8 @@ import _ from "lodash";
|
|||||||
export default async function Page({ params }: { params: { id: string } }) {
|
export default async function Page({ params }: { params: { id: string } }) {
|
||||||
const roomId = params.id;
|
const roomId = params.id;
|
||||||
const userLoginId = await user_funGetOneUserId();
|
const userLoginId = await user_funGetOneUserId();
|
||||||
|
if (!userLoginId) return <CheckCookies_UiView />;
|
||||||
|
|
||||||
const getData = (await adminColab_getOneRoomChatById({ roomId: roomId }))
|
const getData = (await adminColab_getOneRoomChatById({ roomId: roomId }))
|
||||||
.data;
|
.data;
|
||||||
const dataRoom = _.omit(getData, [
|
const dataRoom = _.omit(getData, [
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
import { CheckCookies_UiView } from "@/app_modules/check_cookies";
|
||||||
import { Colab_MainDetail } from "@/app_modules/colab";
|
import { Colab_MainDetail } from "@/app_modules/colab";
|
||||||
import colab_funCekPartisipasiById from "@/app_modules/colab/fun/get/cek_partisipasi_by_user_id";
|
import colab_funCekPartisipasiById from "@/app_modules/colab/fun/get/cek_partisipasi_by_user_id";
|
||||||
import colab_getListPartisipanByColabId from "@/app_modules/colab/fun/get/get_list_partisipan_by_id";
|
import colab_getListPartisipanByColabId from "@/app_modules/colab/fun/get/get_list_partisipan_by_id";
|
||||||
@@ -7,6 +8,8 @@ import { user_funGetOneUserId } from "@/app_modules/fun_global/get_user_token";
|
|||||||
export default async function Page({ params }: { params: { id: string } }) {
|
export default async function Page({ params }: { params: { id: string } }) {
|
||||||
let colabId = params.id;
|
let colabId = params.id;
|
||||||
const userLoginId = await user_funGetOneUserId();
|
const userLoginId = await user_funGetOneUserId();
|
||||||
|
if (!userLoginId) return <CheckCookies_UiView />;
|
||||||
|
|
||||||
const dataColab = await colab_getOneCollaborationById(colabId);
|
const dataColab = await colab_getOneCollaborationById(colabId);
|
||||||
const listPartisipan = await colab_getListPartisipanByColabId(colabId);
|
const listPartisipan = await colab_getListPartisipanByColabId(colabId);
|
||||||
const cekPartisipan = await colab_funCekPartisipasiById(colabId);
|
const cekPartisipan = await colab_funCekPartisipasiById(colabId);
|
||||||
|
|||||||
@@ -1,10 +1,12 @@
|
|||||||
|
import { CheckCookies_UiView } from "@/app_modules/check_cookies";
|
||||||
import { Colab_Beranda } from "@/app_modules/colab";
|
import { Colab_Beranda } from "@/app_modules/colab";
|
||||||
import colab_getListAllProyek from "@/app_modules/colab/fun/get/get_list_all_proyek";
|
import colab_getListAllProyek from "@/app_modules/colab/fun/get/get_list_all_proyek";
|
||||||
import { user_funGetOneUserId } from "@/app_modules/fun_global/get_user_token";
|
import { user_funGetOneUserId } from "@/app_modules/fun_global/get_user_token";
|
||||||
|
|
||||||
export default async function Page() {
|
export default async function Page() {
|
||||||
const listData = await colab_getListAllProyek({page: 1});
|
const listData = await colab_getListAllProyek({ page: 1 });
|
||||||
const userLoginId = await user_funGetOneUserId();
|
const userLoginId = await user_funGetOneUserId();
|
||||||
|
if (!userLoginId) return <CheckCookies_UiView />;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
|
|||||||
@@ -1,16 +1,18 @@
|
|||||||
|
import { CheckCookies_UiView } from "@/app_modules/check_cookies";
|
||||||
import { CreateCeritaPenggalangDonasi } from "@/app_modules/donasi";
|
import { CreateCeritaPenggalangDonasi } from "@/app_modules/donasi";
|
||||||
import { Donasi_getTemporaryCreate } from "@/app_modules/donasi/fun/get/get_temporary_create";
|
import { Donasi_getTemporaryCreate } from "@/app_modules/donasi/fun/get/get_temporary_create";
|
||||||
import { user_funGetOneUserId } from "@/app_modules/fun_global/get_user_token";
|
import { user_funGetOneUserId } from "@/app_modules/fun_global/get_user_token";
|
||||||
|
|
||||||
export default async function Page({ params }: { params: { id: string } }) {
|
export default async function Page({ params }: { params: { id: string } }) {
|
||||||
const getTemporaryCreate = await Donasi_getTemporaryCreate(params.id);
|
const getTemporaryCreate = await Donasi_getTemporaryCreate(params.id);
|
||||||
const userId = await user_funGetOneUserId();
|
const userLoginId = await user_funGetOneUserId();
|
||||||
|
if (!userLoginId) return <CheckCookies_UiView />;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<CreateCeritaPenggalangDonasi
|
<CreateCeritaPenggalangDonasi
|
||||||
dataTemporary={getTemporaryCreate as any}
|
dataTemporary={getTemporaryCreate as any}
|
||||||
userId={userId}
|
userId={userLoginId}
|
||||||
/>
|
/>
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
import { CheckCookies_UiView } from "@/app_modules/check_cookies";
|
||||||
import { DetailMainDonasi } from "@/app_modules/donasi";
|
import { DetailMainDonasi } from "@/app_modules/donasi";
|
||||||
import { Donasi_getCountDonatur } from "@/app_modules/donasi/fun/count/get_count_donatur";
|
import { Donasi_getCountDonatur } from "@/app_modules/donasi/fun/count/get_count_donatur";
|
||||||
import { Donasi_getOneById } from "@/app_modules/donasi/fun/get/get_one_donasi_by_id";
|
import { Donasi_getOneById } from "@/app_modules/donasi/fun/get/get_one_donasi_by_id";
|
||||||
@@ -8,6 +9,8 @@ export default async function Page({ params }: { params: { id: string } }) {
|
|||||||
const dataDonasi = await Donasi_getOneById(donasiId);
|
const dataDonasi = await Donasi_getOneById(donasiId);
|
||||||
const countDonatur = await Donasi_getCountDonatur(donasiId)
|
const countDonatur = await Donasi_getCountDonatur(donasiId)
|
||||||
const userLoginId = await user_funGetOneUserId();
|
const userLoginId = await user_funGetOneUserId();
|
||||||
|
if (!userLoginId) return <CheckCookies_UiView />;
|
||||||
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
import { CheckCookies_UiView } from "@/app_modules/check_cookies";
|
||||||
import { DetailPublishDonasi } from "@/app_modules/donasi";
|
import { DetailPublishDonasi } from "@/app_modules/donasi";
|
||||||
import { Donasi_getCountDonatur } from "@/app_modules/donasi/fun/count/get_count_donatur";
|
import { Donasi_getCountDonatur } from "@/app_modules/donasi/fun/count/get_count_donatur";
|
||||||
import { Donasi_getOneById } from "@/app_modules/donasi/fun/get/get_one_donasi_by_id";
|
import { Donasi_getOneById } from "@/app_modules/donasi/fun/get/get_one_donasi_by_id";
|
||||||
@@ -5,14 +6,19 @@ import { user_funGetOneUserId } from "@/app_modules/fun_global/get_user_token";
|
|||||||
|
|
||||||
export default async function Page({ params }: { params: { id: string } }) {
|
export default async function Page({ params }: { params: { id: string } }) {
|
||||||
const dataPublish = await Donasi_getOneById(params.id);
|
const dataPublish = await Donasi_getOneById(params.id);
|
||||||
const countDonatur= await Donasi_getCountDonatur(params.id)
|
const countDonatur = await Donasi_getCountDonatur(params.id);
|
||||||
const userLoginId = await user_funGetOneUserId();
|
const userLoginId = await user_funGetOneUserId();
|
||||||
|
if (!userLoginId) return <CheckCookies_UiView />;
|
||||||
|
|
||||||
// console.log(userLoginId)
|
// console.log(userLoginId)
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<DetailPublishDonasi dataPublish={dataPublish as any} countDonatur={countDonatur} userLoginId={userLoginId}/>
|
<DetailPublishDonasi
|
||||||
|
dataPublish={dataPublish as any}
|
||||||
|
countDonatur={countDonatur}
|
||||||
|
userLoginId={userLoginId}
|
||||||
|
/>
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
import { CheckCookies_UiView } from "@/app_modules/check_cookies";
|
||||||
import { LayoutDonasi } from "@/app_modules/donasi";
|
import { LayoutDonasi } from "@/app_modules/donasi";
|
||||||
import { Donasi_getNotifByUserId } from "@/app_modules/donasi/fun/get/get_notif_by_user_id";
|
import { Donasi_getNotifByUserId } from "@/app_modules/donasi/fun/get/get_notif_by_user_id";
|
||||||
import { user_funGetOneUserId } from "@/app_modules/fun_global/get_user_token";
|
import { user_funGetOneUserId } from "@/app_modules/fun_global/get_user_token";
|
||||||
@@ -8,16 +9,16 @@ export default async function Layout({
|
|||||||
}: {
|
}: {
|
||||||
children: React.ReactNode;
|
children: React.ReactNode;
|
||||||
}) {
|
}) {
|
||||||
const userId = await user_funGetOneUserId();
|
const userLoginId = await user_funGetOneUserId();
|
||||||
// console.log(userId)
|
if (!userLoginId) return <CheckCookies_UiView />;
|
||||||
const isRead = await Donasi_getNotifByUserId(userId).then((res: any) =>
|
|
||||||
res.map((val: any) => val.isRead)
|
const isRead = await Donasi_getNotifByUserId(userLoginId).then((res: any) =>
|
||||||
|
res.map((val: any) => val.isRead)
|
||||||
);
|
);
|
||||||
// console.log(isRead)
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<LayoutDonasi userId={userId} isRead={isRead as any}>
|
<LayoutDonasi userId={userLoginId} isRead={isRead as any}>
|
||||||
{children}
|
{children}
|
||||||
</LayoutDonasi>
|
</LayoutDonasi>
|
||||||
</>
|
</>
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
import { CheckCookies_UiView } from "@/app_modules/check_cookies";
|
||||||
import { Donasi_MetodePembayaran } from "@/app_modules/donasi";
|
import { Donasi_MetodePembayaran } from "@/app_modules/donasi";
|
||||||
import { Donasi_getMasterBank } from "@/app_modules/donasi/fun/master/get_bank";
|
import { Donasi_getMasterBank } from "@/app_modules/donasi/fun/master/get_bank";
|
||||||
import { user_funGetOneUserId } from "@/app_modules/fun_global/get_user_token";
|
import { user_funGetOneUserId } from "@/app_modules/fun_global/get_user_token";
|
||||||
@@ -5,9 +6,11 @@ import { user_funGetOneUserId } from "@/app_modules/fun_global/get_user_token";
|
|||||||
export default async function Page({params}: {params: {id: string}}) {
|
export default async function Page({params}: {params: {id: string}}) {
|
||||||
let donasiId= params.id
|
let donasiId= params.id
|
||||||
const listBank = await Donasi_getMasterBank()
|
const listBank = await Donasi_getMasterBank()
|
||||||
const authorId = await user_funGetOneUserId()
|
const userLoginId = await user_funGetOneUserId();
|
||||||
|
if (!userLoginId) return <CheckCookies_UiView />;
|
||||||
|
|
||||||
|
|
||||||
return<>
|
return<>
|
||||||
<Donasi_MetodePembayaran listBank={listBank} donasiId={donasiId} authorId={authorId}/>
|
<Donasi_MetodePembayaran listBank={listBank} donasiId={donasiId} authorId={userLoginId}/>
|
||||||
</>
|
</>
|
||||||
}
|
}
|
||||||
@@ -1,13 +1,16 @@
|
|||||||
|
import { CheckCookies_UiView } from "@/app_modules/check_cookies";
|
||||||
import { Event_Create } from "@/app_modules/event";
|
import { Event_Create } from "@/app_modules/event";
|
||||||
import { Event_getMasterTipeAcara } from "@/app_modules/event/fun/master/get_tipe_acara";
|
import { Event_getMasterTipeAcara } from "@/app_modules/event/fun/master/get_tipe_acara";
|
||||||
import { user_funGetOneUserId } from "@/app_modules/fun_global/get_user_token";
|
import { user_funGetOneUserId } from "@/app_modules/fun_global/get_user_token";
|
||||||
import _ from "lodash";
|
import _ from "lodash";
|
||||||
|
|
||||||
export default async function Page() {
|
export default async function Page() {
|
||||||
const userId = await user_funGetOneUserId();
|
const userLoginId = await user_funGetOneUserId();
|
||||||
|
if (!userLoginId) return <CheckCookies_UiView />;
|
||||||
|
|
||||||
const listTipeAcara = await Event_getMasterTipeAcara();
|
const listTipeAcara = await Event_getMasterTipeAcara();
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Event_Create listTipeAcara={listTipeAcara as any} authorId={userId} />
|
<Event_Create listTipeAcara={listTipeAcara as any} authorId={userLoginId} />
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
import { CheckCookies_UiView } from "@/app_modules/check_cookies";
|
||||||
import { Event_DetailMain } from "@/app_modules/event";
|
import { Event_DetailMain } from "@/app_modules/event";
|
||||||
import { Event_countTotalPesertaById } from "@/app_modules/event/fun/count/count_total_peserta_by_id";
|
import { Event_countTotalPesertaById } from "@/app_modules/event/fun/count/count_total_peserta_by_id";
|
||||||
import { Event_CekUserJoinById } from "@/app_modules/event/fun/get/cek_user_join_by_id";
|
import { Event_CekUserJoinById } from "@/app_modules/event/fun/get/cek_user_join_by_id";
|
||||||
@@ -7,11 +8,13 @@ import { user_funGetOneUserId } from "@/app_modules/fun_global/get_user_token";
|
|||||||
|
|
||||||
export default async function Page({ params }: { params: { id: string } }) {
|
export default async function Page({ params }: { params: { id: string } }) {
|
||||||
let eventId = params.id;
|
let eventId = params.id;
|
||||||
|
const userLoginId = await user_funGetOneUserId();
|
||||||
|
if (!userLoginId) return <CheckCookies_UiView />;
|
||||||
|
|
||||||
const dataEvent = await Event_getOneById(eventId);
|
const dataEvent = await Event_getOneById(eventId);
|
||||||
const listPeserta = await Event_getListPesertaById(eventId);
|
const listPeserta = await Event_getListPesertaById(eventId);
|
||||||
const userLoginId = await user_funGetOneUserId();
|
|
||||||
const isJoin = await Event_CekUserJoinById(eventId, userLoginId);
|
const isJoin = await Event_CekUserJoinById(eventId, userLoginId);
|
||||||
const totalPeserta = await Event_countTotalPesertaById(eventId)
|
const totalPeserta = await Event_countTotalPesertaById(eventId);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
import { CheckCookies_UiView } from "@/app_modules/check_cookies";
|
||||||
import { Event_StatusPage } from "@/app_modules/event";
|
import { Event_StatusPage } from "@/app_modules/event";
|
||||||
import { event_getAllDraft } from "@/app_modules/event/fun/get/status/get_all_draft";
|
import { event_getAllDraft } from "@/app_modules/event/fun/get/status/get_all_draft";
|
||||||
import { event_getAllReject } from "@/app_modules/event/fun/get/status/get_all_reject";
|
import { event_getAllReject } from "@/app_modules/event/fun/get/status/get_all_reject";
|
||||||
@@ -6,7 +7,9 @@ import { event_funGetAllStatusPublish } from "@/app_modules/event/fun/get/status
|
|||||||
import { user_funGetOneUserId } from "@/app_modules/fun_global/get_user_token";
|
import { user_funGetOneUserId } from "@/app_modules/fun_global/get_user_token";
|
||||||
|
|
||||||
export default async function Page() {
|
export default async function Page() {
|
||||||
const authorId = await user_funGetOneUserId();
|
const userLoginId = await user_funGetOneUserId();
|
||||||
|
if (!userLoginId) return <CheckCookies_UiView />;
|
||||||
|
|
||||||
const listPublish = await event_funGetAllStatusPublish({ page: 1 });
|
const listPublish = await event_funGetAllStatusPublish({ page: 1 });
|
||||||
const listReview = await event_getAllReview({ page: 1 });
|
const listReview = await event_getAllReview({ page: 1 });
|
||||||
const listDraft = await event_getAllDraft({ page: 1 });
|
const listDraft = await event_getAllDraft({ page: 1 });
|
||||||
@@ -14,7 +17,7 @@ export default async function Page() {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<Event_StatusPage
|
<Event_StatusPage
|
||||||
authorId={authorId}
|
authorId={userLoginId}
|
||||||
listPublish={listPublish}
|
listPublish={listPublish}
|
||||||
listReview={listReview}
|
listReview={listReview}
|
||||||
listDraft={listDraft}
|
listDraft={listDraft}
|
||||||
|
|||||||
@@ -6,11 +6,13 @@ import { user_funGetOneUserId } from "@/app_modules/fun_global/get_user_token";
|
|||||||
import { RouterForum } from "@/app/lib/router_hipmi/router_forum";
|
import { RouterForum } from "@/app/lib/router_hipmi/router_forum";
|
||||||
import { redirect } from "next/navigation";
|
import { redirect } from "next/navigation";
|
||||||
import { forum_countTotalKomenById } from "@/app_modules/forum/fun/count/count_total_komentar_by_id";
|
import { forum_countTotalKomenById } from "@/app_modules/forum/fun/count/count_total_komentar_by_id";
|
||||||
|
import { CheckCookies_UiView } from "@/app_modules/check_cookies";
|
||||||
|
|
||||||
export default async function Page({ params }: { params: { id: string } }) {
|
export default async function Page({ params }: { params: { id: string } }) {
|
||||||
let postingId = params.id;
|
let postingId = params.id;
|
||||||
|
|
||||||
const userLoginId = await user_funGetOneUserId();
|
const userLoginId = await user_funGetOneUserId();
|
||||||
|
if (!userLoginId) return <CheckCookies_UiView />;
|
||||||
|
|
||||||
const dataPosting = await forum_getOnePostingById(postingId);
|
const dataPosting = await forum_getOnePostingById(postingId);
|
||||||
const listKomentar = await forum_funGetAllKomentarById({
|
const listKomentar = await forum_funGetAllKomentarById({
|
||||||
postingId: postingId,
|
postingId: postingId,
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
import { CheckCookies_UiView } from "@/app_modules/check_cookies";
|
||||||
import { LayoutForum_Main } from "@/app_modules/forum";
|
import { LayoutForum_Main } from "@/app_modules/forum";
|
||||||
import { user_funGetOneUserId } from "@/app_modules/fun_global/get_user_token";
|
import { user_funGetOneUserId } from "@/app_modules/fun_global/get_user_token";
|
||||||
import { user_getOneByUserId } from "@/app_modules/home/fun/get/get_one_user_by_id";
|
import { user_getOneByUserId } from "@/app_modules/home/fun/get/get_one_user_by_id";
|
||||||
@@ -8,8 +9,10 @@ export default async function Layout({
|
|||||||
}: {
|
}: {
|
||||||
children: React.ReactNode;
|
children: React.ReactNode;
|
||||||
}) {
|
}) {
|
||||||
const authorId = await user_funGetOneUserId();
|
const userLoginId = await user_funGetOneUserId();
|
||||||
const dataAuthor = await user_getOneByUserId(authorId);
|
if (!userLoginId) return <CheckCookies_UiView />;
|
||||||
|
|
||||||
|
const dataAuthor = await user_getOneByUserId(userLoginId);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
|
|||||||
@@ -1,10 +1,14 @@
|
|||||||
|
import { CheckCookies_UiView } from "@/app_modules/check_cookies";
|
||||||
import { Forum_Beranda } from "@/app_modules/forum";
|
import { Forum_Beranda } from "@/app_modules/forum";
|
||||||
import { forum_new_getAllPosting } from "@/app_modules/forum/fun/get/new_get_all_posting";
|
import { forum_new_getAllPosting } from "@/app_modules/forum/fun/get/new_get_all_posting";
|
||||||
import { user_funGetOneUserId } from "@/app_modules/fun_global/get_user_token";
|
import { user_funGetOneUserId } from "@/app_modules/fun_global/get_user_token";
|
||||||
|
|
||||||
export default async function Page() {
|
export default async function Page() {
|
||||||
|
const userLoginId = await user_funGetOneUserId();
|
||||||
|
if (!userLoginId) return <CheckCookies_UiView />;
|
||||||
|
|
||||||
const listForum = await forum_new_getAllPosting({ page: 1 });
|
const listForum = await forum_new_getAllPosting({ page: 1 });
|
||||||
const userLoginId = await user_funGetOneUserId();
|
|
||||||
|
|
||||||
// console.log(JSON.stringify(listForum, null, 2));
|
// console.log(JSON.stringify(listForum, null, 2));
|
||||||
|
|
||||||
|
|||||||
@@ -1,9 +1,12 @@
|
|||||||
|
import { CheckCookies_UiView } from "@/app_modules/check_cookies";
|
||||||
import { Forum_ReportKomentarLainnya } from "@/app_modules/forum";
|
import { Forum_ReportKomentarLainnya } from "@/app_modules/forum";
|
||||||
import { user_funGetOneUserId } from "@/app_modules/fun_global/get_user_token";
|
import { user_funGetOneUserId } from "@/app_modules/fun_global/get_user_token";
|
||||||
|
|
||||||
export default async function Page({ params }: { params: { id: string } }) {
|
export default async function Page({ params }: { params: { id: string } }) {
|
||||||
let komentarId = params.id;
|
let komentarId = params.id;
|
||||||
const userLoginId = await user_funGetOneUserId();
|
const userLoginId = await user_funGetOneUserId();
|
||||||
|
if (!userLoginId) return <CheckCookies_UiView />;
|
||||||
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
|
|||||||
@@ -1,9 +1,12 @@
|
|||||||
|
import { CheckCookies_UiView } from "@/app_modules/check_cookies";
|
||||||
import { Forum_ReportPostingLainnya } from "@/app_modules/forum";
|
import { Forum_ReportPostingLainnya } from "@/app_modules/forum";
|
||||||
import { user_funGetOneUserId } from "@/app_modules/fun_global/get_user_token";
|
import { user_funGetOneUserId } from "@/app_modules/fun_global/get_user_token";
|
||||||
|
|
||||||
export default async function Page({ params }: { params: { id: string } }) {
|
export default async function Page({ params }: { params: { id: string } }) {
|
||||||
let postingId = params.id;
|
let postingId = params.id;
|
||||||
const userLoginId = await user_funGetOneUserId()
|
const userLoginId = await user_funGetOneUserId();
|
||||||
|
if (!userLoginId) return <CheckCookies_UiView />;
|
||||||
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
import { CheckCookies_UiView } from "@/app_modules/check_cookies";
|
||||||
import { Forum_ReportPosting } from "@/app_modules/forum";
|
import { Forum_ReportPosting } from "@/app_modules/forum";
|
||||||
import { forum_getMasterKategoriReport } from "@/app_modules/forum/fun/master/get_master_kategori_report";
|
import { forum_getMasterKategoriReport } from "@/app_modules/forum/fun/master/get_master_kategori_report";
|
||||||
import { user_funGetOneUserId } from "@/app_modules/fun_global/get_user_token";
|
import { user_funGetOneUserId } from "@/app_modules/fun_global/get_user_token";
|
||||||
@@ -5,7 +6,8 @@ import { user_funGetOneUserId } from "@/app_modules/fun_global/get_user_token";
|
|||||||
export default async function Page({ params }: { params: { id: string } }) {
|
export default async function Page({ params }: { params: { id: string } }) {
|
||||||
let postingId = params.id;
|
let postingId = params.id;
|
||||||
const listReport = await forum_getMasterKategoriReport();
|
const listReport = await forum_getMasterKategoriReport();
|
||||||
const userLoginId = await user_funGetOneUserId();
|
const userLoginId = await user_funGetOneUserId();
|
||||||
|
if (!userLoginId) return <CheckCookies_UiView />;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
import { RouterAdminDashboard } from "@/app/lib/router_hipmi/router_admin";
|
import { RouterAdminDashboard } from "@/app/lib/router_hipmi/router_admin";
|
||||||
import { RouterHome } from "@/app/lib/router_hipmi/router_home";
|
import { RouterHome } from "@/app/lib/router_hipmi/router_home";
|
||||||
|
import { CheckCookies_UiView } from "@/app_modules/check_cookies";
|
||||||
import { user_funGetOneUserId } from "@/app_modules/fun_global/get_user_token";
|
import { user_funGetOneUserId } from "@/app_modules/fun_global/get_user_token";
|
||||||
import { HomeView } from "@/app_modules/home";
|
import { HomeView } from "@/app_modules/home";
|
||||||
import { user_getOneByUserId } from "@/app_modules/home/fun/get/get_one_user_by_id";
|
import { user_getOneByUserId } from "@/app_modules/home/fun/get/get_one_user_by_id";
|
||||||
@@ -8,8 +9,10 @@ import notifikasi_countUserNotifikasi from "@/app_modules/notifikasi/fun/count/f
|
|||||||
import { redirect } from "next/navigation";
|
import { redirect } from "next/navigation";
|
||||||
|
|
||||||
export default async function Page() {
|
export default async function Page() {
|
||||||
const userId = await user_funGetOneUserId();
|
const userLoginId = await user_funGetOneUserId();
|
||||||
const dataUser = await user_getOneByUserId(userId);
|
if (!userLoginId) return <CheckCookies_UiView />;
|
||||||
|
|
||||||
|
const dataUser = await user_getOneByUserId(userLoginId);
|
||||||
const dataJob = await job_getTwoForHomeView();
|
const dataJob = await job_getTwoForHomeView();
|
||||||
|
|
||||||
if (dataUser?.active === false) {
|
if (dataUser?.active === false) {
|
||||||
@@ -19,14 +22,11 @@ export default async function Page() {
|
|||||||
if (dataUser?.masterUserRoleId === "2" || dataUser?.masterUserRoleId === "3")
|
if (dataUser?.masterUserRoleId === "2" || dataUser?.masterUserRoleId === "3")
|
||||||
return redirect(RouterAdminDashboard.splash_admin);
|
return redirect(RouterAdminDashboard.splash_admin);
|
||||||
|
|
||||||
// if (dataUser?.Profile === null) return <ComponentGlobal_V2_LoadingPage />;
|
|
||||||
|
|
||||||
// await new Promise((a, b) => {
|
|
||||||
// setTimeout(a, 3000);
|
|
||||||
// });
|
|
||||||
|
|
||||||
const countNotifikasi = await notifikasi_countUserNotifikasi();
|
const countNotifikasi = await notifikasi_countUserNotifikasi();
|
||||||
|
|
||||||
|
// const cekCookies = await fetch("/api/check-cookies");
|
||||||
|
// console.log(await cekCookies.json());
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<HomeView
|
<HomeView
|
||||||
|
|||||||
@@ -1,20 +1,19 @@
|
|||||||
import { funGetUserProfile } from "@/app_modules/fun_global/get_user_profile";
|
import { CheckCookies_UiView } from "@/app_modules/check_cookies";
|
||||||
|
import { user_funGetOneUserId } from "@/app_modules/fun_global/get_user_token";
|
||||||
import { DetailInvestasi } from "@/app_modules/investasi";
|
import { DetailInvestasi } from "@/app_modules/investasi";
|
||||||
import getOneInvestasiById from "@/app_modules/investasi/fun/get_one_investasi_by_id";
|
import getOneInvestasiById from "@/app_modules/investasi/fun/get_one_investasi_by_id";
|
||||||
import { user_funGetOneUserId } from "@/app_modules/fun_global/get_user_token";
|
|
||||||
import funProgressBar from "@/app_modules/investasi/fun/fun_progress_bar";
|
|
||||||
import funTotalInvestorByIdInvestasi from "@/app_modules/investasi/fun/fun_total_investor_by_id";
|
|
||||||
|
|
||||||
export default async function Page({ params }: { params: { id: string } }) {
|
export default async function Page({ params }: { params: { id: string } }) {
|
||||||
const investasiId = params.id
|
const investasiId = params.id;
|
||||||
const dataInvestasi = await getOneInvestasiById(investasiId);
|
const dataInvestasi = await getOneInvestasiById(investasiId);
|
||||||
const loginUserId = await user_funGetOneUserId();
|
const userLoginId = await user_funGetOneUserId();
|
||||||
|
if (!userLoginId) return <CheckCookies_UiView />;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<DetailInvestasi
|
<DetailInvestasi
|
||||||
dataInvestasi={dataInvestasi as any}
|
dataInvestasi={dataInvestasi as any}
|
||||||
loginUserId={loginUserId}
|
loginUserId={userLoginId}
|
||||||
/>
|
/>
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ import {
|
|||||||
|
|
||||||
export default async function Page() {
|
export default async function Page() {
|
||||||
const userId = await user_funGetOneUserId();
|
const userId = await user_funGetOneUserId();
|
||||||
|
if (!userId) return <div>{"User Tidak ditemukan"}</div>;
|
||||||
const listStatus = await getStatusInvestasi();
|
const listStatus = await getStatusInvestasi();
|
||||||
const dataDraft = await getPortoByStatusId(userId, 1);
|
const dataDraft = await getPortoByStatusId(userId, 1);
|
||||||
const dataReview = await getPortoByStatusId(userId, 2);
|
const dataReview = await getPortoByStatusId(userId, 2);
|
||||||
@@ -30,12 +31,10 @@ export default async function Page() {
|
|||||||
page: 1,
|
page: 1,
|
||||||
statusId: "3",
|
statusId: "3",
|
||||||
});
|
});
|
||||||
const listDataReject = await investasi_funGetAllInvestasiNonPublishByUserId({
|
const listDataReject = await investasi_funGetAllInvestasiNonPublishByUserId({
|
||||||
page: 1,
|
page: 1,
|
||||||
statusId: "4",
|
statusId: "4",
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
|
|||||||
@@ -4,11 +4,14 @@ import getMaster_StatusTransaksiInvestasi from "@/app_modules/investasi/fun/mast
|
|||||||
import { user_funGetOneUserId } from "@/app_modules/fun_global/get_user_token";
|
import { user_funGetOneUserId } from "@/app_modules/fun_global/get_user_token";
|
||||||
import { investasi_funGetTransaksiByUserId } from "@/app_modules/investasi/_fun";
|
import { investasi_funGetTransaksiByUserId } from "@/app_modules/investasi/_fun";
|
||||||
import { Investasi_UiDaftarTransaksi } from "@/app_modules/investasi/_ui";
|
import { Investasi_UiDaftarTransaksi } from "@/app_modules/investasi/_ui";
|
||||||
|
import { CheckCookies_UiView } from "@/app_modules/check_cookies";
|
||||||
|
|
||||||
export default async function Page() {
|
export default async function Page() {
|
||||||
const userId = await user_funGetOneUserId();
|
const userLoginId = await user_funGetOneUserId();
|
||||||
|
if (!userLoginId) return <CheckCookies_UiView />;
|
||||||
|
|
||||||
const statusTransaksi = await getMaster_StatusTransaksiInvestasi();
|
const statusTransaksi = await getMaster_StatusTransaksiInvestasi();
|
||||||
const listTransaksi = await getListAllTransaksiById_Investasi(userId);
|
const listTransaksi = await getListAllTransaksiById_Investasi(userLoginId);
|
||||||
|
|
||||||
// NEW
|
// NEW
|
||||||
const dataTransaksi = await investasi_funGetTransaksiByUserId({ page: 1 });
|
const dataTransaksi = await investasi_funGetTransaksiByUserId({ page: 1 });
|
||||||
|
|||||||
@@ -3,9 +3,12 @@ import getOneInvestasiById from "@/app_modules/investasi/fun/get_one_investasi_b
|
|||||||
import getMaster_NamaBank from "@/app_modules/investasi/fun/master/get_nama_bank";
|
import getMaster_NamaBank from "@/app_modules/investasi/fun/master/get_nama_bank";
|
||||||
|
|
||||||
import { user_funGetOneUserId } from "@/app_modules/fun_global";
|
import { user_funGetOneUserId } from "@/app_modules/fun_global";
|
||||||
|
import { CheckCookies_UiView } from "@/app_modules/check_cookies";
|
||||||
|
|
||||||
export default async function Page({ params }: { params: { id: string } }) {
|
export default async function Page({ params }: { params: { id: string } }) {
|
||||||
const authorId = await user_funGetOneUserId();
|
const userLoginId = await user_funGetOneUserId();
|
||||||
|
if (!userLoginId) return <CheckCookies_UiView />;
|
||||||
|
|
||||||
const dataInvestasi = await getOneInvestasiById(params.id);
|
const dataInvestasi = await getOneInvestasiById(params.id);
|
||||||
const namaBank = await getMaster_NamaBank();
|
const namaBank = await getMaster_NamaBank();
|
||||||
// console.log(namaBank)
|
// console.log(namaBank)
|
||||||
@@ -14,7 +17,7 @@ export default async function Page({ params }: { params: { id: string } }) {
|
|||||||
<MetodeTransferInvestasi
|
<MetodeTransferInvestasi
|
||||||
dataInvestasi={dataInvestasi as any}
|
dataInvestasi={dataInvestasi as any}
|
||||||
namaBank={namaBank as any}
|
namaBank={namaBank as any}
|
||||||
authorId={authorId}
|
authorId={userLoginId}
|
||||||
/>
|
/>
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -1,11 +1,14 @@
|
|||||||
|
import { CheckCookies_UiView } from "@/app_modules/check_cookies";
|
||||||
import { user_funGetOneUserId } from "@/app_modules/fun_global";
|
import { user_funGetOneUserId } from "@/app_modules/fun_global";
|
||||||
import { funGetUserProfile } from "@/app_modules/fun_global/get_user_profile";
|
import { funGetUserProfile } from "@/app_modules/fun_global/get_user_profile";
|
||||||
import { ProsesTransaksiInvestasi } from "@/app_modules/investasi";
|
import { ProsesTransaksiInvestasi } from "@/app_modules/investasi";
|
||||||
import getOneInvestasiById from "@/app_modules/investasi/fun/get_one_investasi_by_id";
|
import getOneInvestasiById from "@/app_modules/investasi/fun/get_one_investasi_by_id";
|
||||||
|
|
||||||
export default async function Page({ params }: { params: { id: string } }) {
|
export default async function Page({ params }: { params: { id: string } }) {
|
||||||
const authorId = await user_funGetOneUserId();
|
const userLoginId = await user_funGetOneUserId();
|
||||||
const userLogin = await funGetUserProfile(authorId);
|
if (!userLoginId) return <CheckCookies_UiView />;
|
||||||
|
|
||||||
|
const userLogin = await funGetUserProfile(userLoginId);
|
||||||
const dataInvestasi = await getOneInvestasiById(params.id);
|
const dataInvestasi = await getOneInvestasiById(params.id);
|
||||||
|
|
||||||
// console.log(dataInvestasi);
|
// console.log(dataInvestasi);
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
import { funGetUserIdByToken } from "@/app_modules/_global/fun/get";
|
||||||
|
import { CheckCookies_UiView } from "@/app_modules/check_cookies";
|
||||||
import { user_funGetOneUserId } from "@/app_modules/fun_global/get_user_token";
|
import { user_funGetOneUserId } from "@/app_modules/fun_global/get_user_token";
|
||||||
import { KatalogLayout } from "@/app_modules/katalog/main";
|
import { KatalogLayout } from "@/app_modules/katalog/main";
|
||||||
import { Profile_getOneProfileAndUserById } from "@/app_modules/katalog/profile/fun/get/get_one_user_profile";
|
import { Profile_getOneProfileAndUserById } from "@/app_modules/katalog/profile/fun/get/get_one_user_profile";
|
||||||
@@ -10,10 +12,10 @@ export default async function Layout({
|
|||||||
params: { id: string };
|
params: { id: string };
|
||||||
}) {
|
}) {
|
||||||
const profileId = params.id;
|
const profileId = params.id;
|
||||||
const dataProfile = await Profile_getOneProfileAndUserById(profileId)
|
const dataProfile = await Profile_getOneProfileAndUserById(profileId);
|
||||||
const authorId = dataProfile?.userId;
|
const authorId = dataProfile?.userId;
|
||||||
const userLoginId = await user_funGetOneUserId();
|
|
||||||
|
|
||||||
|
const userLoginId = await funGetUserIdByToken();
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
|
|||||||
@@ -1,21 +1,25 @@
|
|||||||
|
import { funGetUserIdByToken } from "@/app_modules/_global/fun/get";
|
||||||
|
import { CheckCookies_UiView } from "@/app_modules/check_cookies";
|
||||||
import { user_funGetOneUserId } from "@/app_modules/fun_global/get_user_token";
|
import { user_funGetOneUserId } from "@/app_modules/fun_global/get_user_token";
|
||||||
import { Katalog_MainView } from "@/app_modules/katalog";
|
import { Katalog_MainView } from "@/app_modules/katalog";
|
||||||
import { funGetListPortofolio } from "@/app_modules/katalog/portofolio/fun/get/get_list_portofolio";
|
import { funGetListPortofolio } from "@/app_modules/katalog/portofolio/fun/get/get_list_portofolio";
|
||||||
import { Profile_getOneProfileAndUserById } from "@/app_modules/katalog/profile/fun/get/get_one_user_profile";
|
import { Profile_getOneProfileAndUserById } from "@/app_modules/katalog/profile/fun/get/get_one_user_profile";
|
||||||
|
|
||||||
|
|
||||||
export default async function Page({ params }: { params: { id: string } }) {
|
export default async function Page({ params }: { params: { id: string } }) {
|
||||||
let profileId = params.id;
|
let profileId = params.id;
|
||||||
const userLoginId = await user_funGetOneUserId();
|
|
||||||
const listPorto = await funGetListPortofolio(profileId);
|
const listPorto = await funGetListPortofolio(profileId);
|
||||||
const dataProfile = await Profile_getOneProfileAndUserById(profileId);
|
const dataProfile = await Profile_getOneProfileAndUserById(profileId);
|
||||||
|
|
||||||
|
const userLoginId = await funGetUserIdByToken();
|
||||||
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<Katalog_MainView
|
<Katalog_MainView
|
||||||
profile={dataProfile as any}
|
profile={dataProfile as any}
|
||||||
listPorto={listPorto as any}
|
listPorto={listPorto as any}
|
||||||
userLoginId={userLoginId}
|
userLoginId={userLoginId as any}
|
||||||
/>
|
/>
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
|
|||||||
19
src/app/dev/layout.tsx
Normal file
19
src/app/dev/layout.tsx
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
import { funCheckToken } from "@/app_modules/_global/fun/get";
|
||||||
|
import { redirect } from "next/navigation";
|
||||||
|
import { RouterAuth } from "../lib/router_hipmi/router_auth";
|
||||||
|
import { CheckCookies_UiLayout } from "@/app_modules/check_cookies";
|
||||||
|
|
||||||
|
export default async function Layout({
|
||||||
|
children,
|
||||||
|
}: {
|
||||||
|
children: React.ReactNode;
|
||||||
|
}) {
|
||||||
|
// const cekCookies = await funCheckToken();
|
||||||
|
// if (cekCookies === false) redirect(RouterAuth.login);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
<CheckCookies_UiLayout>{children}</CheckCookies_UiLayout>
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -1,3 +1,4 @@
|
|||||||
|
import { CheckCookies_UiView } from "@/app_modules/check_cookies";
|
||||||
import { user_funGetOneUserId } from "@/app_modules/fun_global/get_user_token";
|
import { user_funGetOneUserId } from "@/app_modules/fun_global/get_user_token";
|
||||||
import { PortofolioLayout } from "@/app_modules/katalog/portofolio";
|
import { PortofolioLayout } from "@/app_modules/katalog/portofolio";
|
||||||
import { portofolio_getOneById } from "@/app_modules/katalog/portofolio/fun/get/get_one_portofolio";
|
import { portofolio_getOneById } from "@/app_modules/katalog/portofolio/fun/get/get_one_portofolio";
|
||||||
@@ -12,8 +13,8 @@ export default async function Layout({
|
|||||||
let portoId = params.id;
|
let portoId = params.id;
|
||||||
const getPorto = await portofolio_getOneById(portoId);
|
const getPorto = await portofolio_getOneById(portoId);
|
||||||
const userLoginId = await user_funGetOneUserId();
|
const userLoginId = await user_funGetOneUserId();
|
||||||
// console.log(userLoginId);
|
if (!userLoginId) return <CheckCookies_UiView />;
|
||||||
// console.log(getPorto?.Profile?.User?.id);
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<PortofolioLayout
|
<PortofolioLayout
|
||||||
|
|||||||
@@ -1,13 +1,15 @@
|
|||||||
import { RouterAdminDashboard } from "@/app/lib/router_hipmi/router_admin";
|
|
||||||
import { RouterHome } from "@/app/lib/router_hipmi/router_home";
|
import { RouterHome } from "@/app/lib/router_hipmi/router_home";
|
||||||
|
import { CheckCookies_UiView } from "@/app_modules/check_cookies";
|
||||||
import { user_funGetOneUserId } from "@/app_modules/fun_global/get_user_token";
|
import { user_funGetOneUserId } from "@/app_modules/fun_global/get_user_token";
|
||||||
import { Home_UserNonActive } from "@/app_modules/home";
|
import { Home_UserNonActive } from "@/app_modules/home";
|
||||||
import { user_getOneByUserId } from "@/app_modules/home/fun/get/get_one_user_by_id";
|
import { user_getOneByUserId } from "@/app_modules/home/fun/get/get_one_user_by_id";
|
||||||
import { redirect } from "next/navigation";
|
import { redirect } from "next/navigation";
|
||||||
|
|
||||||
export default async function Page() {
|
export default async function Page() {
|
||||||
const userId = await user_funGetOneUserId();
|
const userLoginId = await user_funGetOneUserId();
|
||||||
const dataUser = await user_getOneByUserId(userId);
|
if (!userLoginId) return <CheckCookies_UiView />;
|
||||||
|
|
||||||
|
const dataUser = await user_getOneByUserId(userLoginId);
|
||||||
|
|
||||||
if (dataUser?.active === true) {
|
if (dataUser?.active === true) {
|
||||||
return redirect(RouterHome.main_home);
|
return redirect(RouterHome.main_home);
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
import { CheckCookies_UiView } from "@/app_modules/check_cookies";
|
||||||
import { user_funGetOneUserId } from "@/app_modules/fun_global";
|
import { user_funGetOneUserId } from "@/app_modules/fun_global";
|
||||||
import { LayoutVote_DetailKontribusi } from "@/app_modules/vote";
|
import { LayoutVote_DetailKontribusi } from "@/app_modules/vote";
|
||||||
import React from "react";
|
import React from "react";
|
||||||
@@ -10,7 +11,9 @@ export default async function Layout({
|
|||||||
params: { id: string };
|
params: { id: string };
|
||||||
}) {
|
}) {
|
||||||
const votingId = params.id;
|
const votingId = params.id;
|
||||||
const userLoginId = await user_funGetOneUserId();
|
const userLoginId = await user_funGetOneUserId();
|
||||||
|
if (!userLoginId) return <CheckCookies_UiView />;
|
||||||
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
import { CheckCookies_UiView } from "@/app_modules/check_cookies";
|
||||||
import { user_funGetOneUserId } from "@/app_modules/fun_global/get_user_token";
|
import { user_funGetOneUserId } from "@/app_modules/fun_global/get_user_token";
|
||||||
import { LayoutVote_MainDetail } from "@/app_modules/vote";
|
import { LayoutVote_MainDetail } from "@/app_modules/vote";
|
||||||
import React from "react";
|
import React from "react";
|
||||||
@@ -11,6 +12,7 @@ export default async function Layout({
|
|||||||
}) {
|
}) {
|
||||||
const votingId = params.id;
|
const votingId = params.id;
|
||||||
const userLoginId = await user_funGetOneUserId();
|
const userLoginId = await user_funGetOneUserId();
|
||||||
|
if (!userLoginId) return <CheckCookies_UiView />;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
|
|||||||
@@ -5,15 +5,19 @@ import { Vote_getHasilVoteById } from "@/app_modules/vote/fun/get/get_list_hasil
|
|||||||
import { Vote_getListKontributorById } from "@/app_modules/vote/fun/get/get_list_kontributor_by_id";
|
import { Vote_getListKontributorById } from "@/app_modules/vote/fun/get/get_list_kontributor_by_id";
|
||||||
import { voting_funGetOneVotingbyId } from "@/app_modules/vote/fun/get/fun_get_one_by_id";
|
import { voting_funGetOneVotingbyId } from "@/app_modules/vote/fun/get/fun_get_one_by_id";
|
||||||
import { Vote_getOnePilihanVotingByUserId } from "@/app_modules/vote/fun/get/get_one_pilihan_voting_by_user_id";
|
import { Vote_getOnePilihanVotingByUserId } from "@/app_modules/vote/fun/get/get_one_pilihan_voting_by_user_id";
|
||||||
|
import { CheckCookies_UiView } from "@/app_modules/check_cookies";
|
||||||
|
|
||||||
export default async function Page({ params }: { params: { id: string } }) {
|
export default async function Page({ params }: { params: { id: string } }) {
|
||||||
const voteId = params.id;
|
const voteId = params.id;
|
||||||
|
|
||||||
|
const userLoginId = await user_funGetOneUserId();
|
||||||
|
if (!userLoginId) return <CheckCookies_UiView />;
|
||||||
|
|
||||||
const dataVote = await voting_funGetOneVotingbyId(voteId);
|
const dataVote = await voting_funGetOneVotingbyId(voteId);
|
||||||
const hasilVoting = await Vote_getHasilVoteById(voteId as any);
|
const hasilVoting = await Vote_getHasilVoteById(voteId as any);
|
||||||
const isKontributor = await Vote_cekKontributorById(voteId);
|
const isKontributor = await Vote_cekKontributorById(voteId);
|
||||||
const pilihanKontributor = await Vote_getOnePilihanVotingByUserId(voteId);
|
const pilihanKontributor = await Vote_getOnePilihanVotingByUserId(voteId);
|
||||||
const listKontributor = await Vote_getListKontributorById(voteId);
|
const listKontributor = await Vote_getListKontributorById(voteId);
|
||||||
const userLoginId = await user_funGetOneUserId();
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
import { CheckCookies_UiView } from "@/app_modules/check_cookies";
|
||||||
import { user_funGetOneUserId } from "@/app_modules/fun_global";
|
import { user_funGetOneUserId } from "@/app_modules/fun_global";
|
||||||
import { LayoutVote_DetailPublish } from "@/app_modules/vote";
|
import { LayoutVote_DetailPublish } from "@/app_modules/vote";
|
||||||
import { Voting_funGetOneVotingbyId } from "@/app_modules/vote/fun/get";
|
import { Voting_funGetOneVotingbyId } from "@/app_modules/vote/fun/get";
|
||||||
@@ -12,16 +13,14 @@ export default async function Layout({
|
|||||||
}) {
|
}) {
|
||||||
const votingId = params.id;
|
const votingId = params.id;
|
||||||
const userLoginId = await user_funGetOneUserId();
|
const userLoginId = await user_funGetOneUserId();
|
||||||
|
if (!userLoginId) return <CheckCookies_UiView />;
|
||||||
|
|
||||||
const dataVoting = await Voting_funGetOneVotingbyId(votingId);
|
const dataVoting = await Voting_funGetOneVotingbyId(votingId);
|
||||||
const authorId = dataVoting?.authorId;
|
const authorId = dataVoting?.authorId;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<LayoutVote_DetailPublish
|
<LayoutVote_DetailPublish votingId={votingId} userLoginId={userLoginId}>
|
||||||
votingId={votingId}
|
|
||||||
userLoginId={userLoginId}
|
|
||||||
>
|
|
||||||
{children}
|
{children}
|
||||||
</LayoutVote_DetailPublish>
|
</LayoutVote_DetailPublish>
|
||||||
</>
|
</>
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
import { CheckCookies_UiView } from "@/app_modules/check_cookies";
|
||||||
import { user_funGetOneUserId } from "@/app_modules/fun_global";
|
import { user_funGetOneUserId } from "@/app_modules/fun_global";
|
||||||
import { LayoutVote_DetailSemuaRiwayat } from "@/app_modules/vote";
|
import { LayoutVote_DetailSemuaRiwayat } from "@/app_modules/vote";
|
||||||
import React from "react";
|
import React from "react";
|
||||||
@@ -9,9 +10,9 @@ export default async function Layout({
|
|||||||
children: React.ReactNode;
|
children: React.ReactNode;
|
||||||
params: { id: string };
|
params: { id: string };
|
||||||
}) {
|
}) {
|
||||||
const votingId = params.id;
|
const votingId = params.id;
|
||||||
const userLoginId = await user_funGetOneUserId();
|
const userLoginId = await user_funGetOneUserId();
|
||||||
|
if (!userLoginId) return <CheckCookies_UiView />;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
|
|||||||
@@ -1,6 +0,0 @@
|
|||||||
export function myConsole(value: any) {
|
|
||||||
const onData = false
|
|
||||||
if (onData) {
|
|
||||||
console.log(value);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -2,9 +2,37 @@ import MqttLoader from "@/util/mqtt_loader";
|
|||||||
import RootStyleRegistry from "./emotion";
|
import RootStyleRegistry from "./emotion";
|
||||||
import "./globals.css";
|
import "./globals.css";
|
||||||
import { TokenProvider } from "./lib/token";
|
import { TokenProvider } from "./lib/token";
|
||||||
|
import dotenv from "dotenv";
|
||||||
|
import { ServerEnv } from "./lib/server_env";
|
||||||
|
dotenv.config({
|
||||||
|
path: ".env",
|
||||||
|
});
|
||||||
|
|
||||||
const token = process.env.WS_APIKEY;
|
const token = process.env.WS_APIKEY;
|
||||||
const pwdCookies = process.env.PWD;
|
|
||||||
|
const DATABASE_URL = process.env.DATABASE_URL!;
|
||||||
|
const WIBU_PWD = process.env.WIBU_PWD!;
|
||||||
|
const Client_KEY = process.env.Client_KEY!;
|
||||||
|
const Server_KEY = process.env.Server_KEY!;
|
||||||
|
const MAPBOX_TOKEN = process.env.MAPBOX_TOKEN!;
|
||||||
|
const WS_APIKEY = process.env.WS_APIKEY!;
|
||||||
|
|
||||||
|
if (!DATABASE_URL) throw new Error("Require DATABASE_URL");
|
||||||
|
if (!WIBU_PWD) throw new Error("Require PWD");
|
||||||
|
if (!Client_KEY) throw new Error("Require Client_KEY");
|
||||||
|
if (!Server_KEY) throw new Error("Require Server_KEY");
|
||||||
|
if (!MAPBOX_TOKEN) throw new Error("Require MAPBOX_TOKEN");
|
||||||
|
if (!WS_APIKEY) throw new Error("Require WS_APIKEY");
|
||||||
|
|
||||||
|
const envObject = {
|
||||||
|
DATABASE_URL,
|
||||||
|
WIBU_PWD,
|
||||||
|
Client_KEY,
|
||||||
|
Server_KEY,
|
||||||
|
MAPBOX_TOKEN,
|
||||||
|
WS_APIKEY,
|
||||||
|
};
|
||||||
|
ServerEnv.set(envObject);
|
||||||
|
|
||||||
export default function RootLayout({
|
export default function RootLayout({
|
||||||
children,
|
children,
|
||||||
@@ -12,11 +40,11 @@ export default function RootLayout({
|
|||||||
children: React.ReactNode;
|
children: React.ReactNode;
|
||||||
}) {
|
}) {
|
||||||
if (!token) return <>Require Token Storage</>;
|
if (!token) return <>Require Token Storage</>;
|
||||||
console.log(pwdCookies)
|
|
||||||
return (
|
return (
|
||||||
<RootStyleRegistry>
|
<RootStyleRegistry>
|
||||||
<MqttLoader />
|
<MqttLoader />
|
||||||
<TokenProvider token={token} />
|
<TokenProvider token={token} envObject={envObject} />
|
||||||
{children}
|
{children}
|
||||||
</RootStyleRegistry>
|
</RootStyleRegistry>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -1,9 +1,7 @@
|
|||||||
import APIs from "./APIs";
|
import APIs from "./APIs";
|
||||||
import DIRECTORY_ID from "./id-derectory";
|
import DIRECTORY_ID from "./id-derectory";
|
||||||
import prisma from "./prisma";
|
import prisma from "./prisma";
|
||||||
import { PwdCookies } from "./pwd";
|
|
||||||
|
|
||||||
export { DIRECTORY_ID };
|
export { DIRECTORY_ID };
|
||||||
export { prisma };
|
export { prisma };
|
||||||
export { APIs };
|
export { APIs };
|
||||||
export { PwdCookies };
|
|
||||||
|
|||||||
@@ -1,5 +0,0 @@
|
|||||||
import "dotenv/config";
|
|
||||||
const dotenv = require("dotenv").config(".env");
|
|
||||||
const PwdCookies = dotenv?.parsed.PWD;
|
|
||||||
|
|
||||||
export { PwdCookies };
|
|
||||||
@@ -2,4 +2,5 @@ export const RouterAuth = {
|
|||||||
login: "/dev/auth/login",
|
login: "/dev/auth/login",
|
||||||
validasi: "/dev/auth/validasi/",
|
validasi: "/dev/auth/validasi/",
|
||||||
register: "/dev/auth/register/",
|
register: "/dev/auth/register/",
|
||||||
|
check_cookies: "/dev/check-cookies",
|
||||||
};
|
};
|
||||||
|
|||||||
15
src/app/lib/server_env.ts
Normal file
15
src/app/lib/server_env.ts
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
type ENV = {
|
||||||
|
DATABASE_URL: string;
|
||||||
|
WIBU_PWD: string;
|
||||||
|
Client_KEY: string;
|
||||||
|
Server_KEY: string;
|
||||||
|
MAPBOX_TOKEN: string;
|
||||||
|
WS_APIKEY: string;
|
||||||
|
};
|
||||||
|
export class ServerEnv {
|
||||||
|
static value: ENV | null = null;
|
||||||
|
|
||||||
|
static set(val: ENV) {
|
||||||
|
ServerEnv.value = val;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -10,8 +10,31 @@ class TokenStorage {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function TokenProvider({ token }: { token: string }) {
|
type ENV = {
|
||||||
|
DATABASE_URL: string;
|
||||||
|
WIBU_PWD: string;
|
||||||
|
Client_KEY: string;
|
||||||
|
Server_KEY: string;
|
||||||
|
MAPBOX_TOKEN: string;
|
||||||
|
WS_APIKEY: string;
|
||||||
|
};
|
||||||
|
export class GlobalEnv {
|
||||||
|
static value: ENV | null = null;
|
||||||
|
|
||||||
|
static set(val: ENV) {
|
||||||
|
GlobalEnv.value = val;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function TokenProvider({
|
||||||
|
token,
|
||||||
|
envObject,
|
||||||
|
}: {
|
||||||
|
token: string;
|
||||||
|
envObject: ENV;
|
||||||
|
}) {
|
||||||
TokenStorage.set(token);
|
TokenStorage.set(token);
|
||||||
|
GlobalEnv.set(envObject);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,51 +1,9 @@
|
|||||||
"use client";
|
import { ServerEnv } from "../lib/server_env";
|
||||||
import Coba from "@/ui/Coba";
|
|
||||||
import { useState } from "react";
|
|
||||||
// Beda Package
|
|
||||||
import InfiniteScroll from "react-infinite-scroll-component";
|
|
||||||
|
|
||||||
export default function App() {
|
export default function App() {
|
||||||
const [data, setData] = useState<any[]>([]);
|
return (
|
||||||
const [isLoading, setIsLoading] = useState(false);
|
<div>
|
||||||
|
<pre>{JSON.stringify(ServerEnv.value, null, 2)}</pre>
|
||||||
const ttlData = Array.from({ length: 21 });
|
</div>
|
||||||
const [list, setList] = useState<any[]>(ttlData);
|
);
|
||||||
|
|
||||||
// useShallowEffect(() => {
|
|
||||||
// setData(createItems());
|
|
||||||
// }, []);
|
|
||||||
|
|
||||||
// const next = async (direction: ScrollDirection) => {
|
|
||||||
// console.log("next", direction);
|
|
||||||
// try {
|
|
||||||
// setIsLoading(true);
|
|
||||||
// const newData = await loadMore();
|
|
||||||
|
|
||||||
// const d = direction === "up" ? [...newData, ...data] : [];
|
|
||||||
// setData(d);
|
|
||||||
// } finally {
|
|
||||||
// setIsLoading(false);
|
|
||||||
// }
|
|
||||||
// };
|
|
||||||
|
|
||||||
// const ref = useInfiniteScroll({
|
|
||||||
// next,
|
|
||||||
// rowCount: data.length,
|
|
||||||
// hasMore: { up: true },
|
|
||||||
// });
|
|
||||||
|
|
||||||
const fetchMoreData = () => {
|
|
||||||
setTimeout(() => {
|
|
||||||
setList(list.concat(Array.from({ length: 20 })));
|
|
||||||
}, 100);
|
|
||||||
};
|
|
||||||
|
|
||||||
const style = {
|
|
||||||
height: 30,
|
|
||||||
border: "1px solid green",
|
|
||||||
margin: 6,
|
|
||||||
padding: 8,
|
|
||||||
};
|
|
||||||
|
|
||||||
return <></>;
|
|
||||||
}
|
}
|
||||||
|
|||||||
17
src/app_modules/_global/fun/get/fun_cek_token.ts
Normal file
17
src/app_modules/_global/fun/get/fun_cek_token.ts
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
"use server";
|
||||||
|
|
||||||
|
import { prisma } from "@/app/lib";
|
||||||
|
import _ from "lodash";
|
||||||
|
import { cookies } from "next/headers";
|
||||||
|
|
||||||
|
export async function funCheckToken() {
|
||||||
|
const c = cookies().get("ssn");
|
||||||
|
const cekToken = await prisma.userSession.findFirst({
|
||||||
|
where: {
|
||||||
|
token: c?.value,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
if (cekToken === null) return false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
18
src/app_modules/_global/fun/get/fun_get_user_id_by_token.ts
Normal file
18
src/app_modules/_global/fun/get/fun_get_user_id_by_token.ts
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
"use server";
|
||||||
|
|
||||||
|
import { cookies } from "next/headers";
|
||||||
|
import prisma from "@/app/lib/prisma";
|
||||||
|
import { redirect } from "next/navigation";
|
||||||
|
import { RouterAuth } from "@/app/lib/router_hipmi/router_auth";
|
||||||
|
|
||||||
|
export async function funGetUserIdByToken() {
|
||||||
|
const c = cookies().get("ssn");
|
||||||
|
const cekToken = await prisma.userSession.findFirst({
|
||||||
|
where: {
|
||||||
|
token: c?.value,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
if (cekToken === null) return redirect(RouterAuth.login);
|
||||||
|
return cekToken.userId;
|
||||||
|
}
|
||||||
@@ -1,5 +1,9 @@
|
|||||||
|
import { funCheckToken } from "./fun_cek_token";
|
||||||
import { funGlobal_getNomorAdmin } from "./fun_get_nomor_admin";
|
import { funGlobal_getNomorAdmin } from "./fun_get_nomor_admin";
|
||||||
|
import { funGetUserIdByToken } from "./fun_get_user_id_by_token";
|
||||||
import { funGlobal_getMasterKategoriApp } from "./fun_master_kategori_app";
|
import { funGlobal_getMasterKategoriApp } from "./fun_master_kategori_app";
|
||||||
|
|
||||||
export { funGlobal_getMasterKategoriApp };
|
export { funGlobal_getMasterKategoriApp };
|
||||||
export { funGlobal_getNomorAdmin };
|
export { funGlobal_getNomorAdmin };
|
||||||
|
export { funCheckToken };
|
||||||
|
export { funGetUserIdByToken };
|
||||||
|
|||||||
@@ -2,8 +2,10 @@
|
|||||||
|
|
||||||
import prisma from "@/app/lib/prisma";
|
import prisma from "@/app/lib/prisma";
|
||||||
import { RouterAdminColab } from "@/app/lib/router_admin/router_admin_colab";
|
import { RouterAdminColab } from "@/app/lib/router_admin/router_admin_colab";
|
||||||
|
import { RouterAuth } from "@/app/lib/router_hipmi/router_auth";
|
||||||
import { user_funGetOneUserId } from "@/app_modules/fun_global/get_user_token";
|
import { user_funGetOneUserId } from "@/app_modules/fun_global/get_user_token";
|
||||||
import { revalidatePath } from "next/cache";
|
import { revalidatePath } from "next/cache";
|
||||||
|
import { redirect } from "next/navigation";
|
||||||
|
|
||||||
export default async function adminColab_funReportProjectById({
|
export default async function adminColab_funReportProjectById({
|
||||||
colabId,
|
colabId,
|
||||||
@@ -13,6 +15,10 @@ export default async function adminColab_funReportProjectById({
|
|||||||
report: string;
|
report: string;
|
||||||
}) {
|
}) {
|
||||||
const authorId = await user_funGetOneUserId();
|
const authorId = await user_funGetOneUserId();
|
||||||
|
if (!authorId) {
|
||||||
|
redirect(RouterAuth.login);
|
||||||
|
// return { status: 400, message: "Gagal mendapatkan authorId" };
|
||||||
|
}
|
||||||
|
|
||||||
const projectUpdate = await prisma.projectCollaboration.update({
|
const projectUpdate = await prisma.projectCollaboration.update({
|
||||||
where: {
|
where: {
|
||||||
|
|||||||
@@ -1,18 +1,32 @@
|
|||||||
"use server";
|
"use server";
|
||||||
|
|
||||||
import prisma from "@/app/lib/prisma";
|
import prisma from "@/app/lib/prisma";
|
||||||
|
import { funGetUserIdByToken } from "@/app_modules/_global/fun/get";
|
||||||
import { revalidatePath } from "next/cache";
|
import { revalidatePath } from "next/cache";
|
||||||
import { cookies } from "next/headers";
|
import { cookies } from "next/headers";
|
||||||
|
|
||||||
export async function auth_Logout(kodeId: string) {
|
export async function auth_Logout(kodeId: string) {
|
||||||
cookies().set({
|
const userId = await funGetUserIdByToken();
|
||||||
name: "ssn",
|
|
||||||
value: "",
|
try {
|
||||||
maxAge: 0,
|
const delToken = await prisma.userSession.delete({
|
||||||
});
|
where: {
|
||||||
|
userId: userId,
|
||||||
const c = cookies().get("ssn");
|
},
|
||||||
if (c?.value !== "") return { status: 400, message: "Gagal Logout" };
|
});
|
||||||
|
|
||||||
|
if (!delToken) return { status: 400, message: "Gagal Hapus User Session" };
|
||||||
|
cookies().set({
|
||||||
|
name: "ssn",
|
||||||
|
value: "",
|
||||||
|
maxAge: 0,
|
||||||
|
expires: 0,
|
||||||
|
});
|
||||||
|
|
||||||
|
return { status: 200, message: "Logout Berhasil" };
|
||||||
|
} catch (error) {
|
||||||
|
console.log(error);
|
||||||
|
}
|
||||||
|
|
||||||
// const del = await prisma.kodeOtp.delete({
|
// const del = await prisma.kodeOtp.delete({
|
||||||
// where: {
|
// where: {
|
||||||
|
|||||||
@@ -1,13 +1,16 @@
|
|||||||
"use server";
|
"use server";
|
||||||
|
|
||||||
import { PwdCookies } from "@/app/lib";
|
|
||||||
import prisma from "@/app/lib/prisma";
|
import prisma from "@/app/lib/prisma";
|
||||||
import { sealData } from "iron-session";
|
import { sealData } from "iron-session";
|
||||||
import { cookies } from "next/headers";
|
import { cookies } from "next/headers";
|
||||||
|
|
||||||
|
export async function Auth_funRegister({
|
||||||
export async function Auth_funRegister(data: any) {
|
data,
|
||||||
|
HIPMI_PWD,
|
||||||
|
}: {
|
||||||
|
data: any;
|
||||||
|
HIPMI_PWD: string;
|
||||||
|
}) {
|
||||||
const cekUsername = await prisma.user.findUnique({
|
const cekUsername = await prisma.user.findUnique({
|
||||||
where: {
|
where: {
|
||||||
username: data.username,
|
username: data.username,
|
||||||
@@ -28,21 +31,31 @@ export async function Auth_funRegister(data: any) {
|
|||||||
});
|
});
|
||||||
if (!create) return { status: 400, message: "Gagal Mendaftar" };
|
if (!create) return { status: 400, message: "Gagal Mendaftar" };
|
||||||
|
|
||||||
const seal = await sealData(
|
const sealToken = await sealData(
|
||||||
JSON.stringify({
|
JSON.stringify({
|
||||||
id: create.id,
|
id: create.id,
|
||||||
username: create.username,
|
username: create.username,
|
||||||
}),
|
}),
|
||||||
{
|
{
|
||||||
password: PwdCookies
|
password: HIPMI_PWD,
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
cookies().set({
|
cookies().set({
|
||||||
name: "ssn",
|
name: "ssn",
|
||||||
value: seal,
|
value: sealToken,
|
||||||
maxAge: 60 * 60 * 24 * 7,
|
// maxAge: 60 * 60 * 24 * 7,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const createUserSession = await prisma.userSession.create({
|
||||||
|
data: {
|
||||||
|
token: sealToken,
|
||||||
|
userId: create.id,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
if (!createUserSession)
|
||||||
|
return { status: 400, message: "Gagal Membuat User Session" };
|
||||||
|
|
||||||
return { status: 200, message: "Berhasil Mendaftar" };
|
return { status: 200, message: "Berhasil Mendaftar" };
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,15 +1,19 @@
|
|||||||
"use server";
|
"use server";
|
||||||
|
|
||||||
import prisma from "@/app/lib/prisma";
|
import prisma from "@/app/lib/prisma";
|
||||||
import { sealData } from "iron-session";
|
|
||||||
import { cookies } from "next/headers";
|
|
||||||
import { revalidatePath } from "next/cache";
|
|
||||||
import { RouterHome } from "@/app/lib/router_hipmi/router_home";
|
import { RouterHome } from "@/app/lib/router_hipmi/router_home";
|
||||||
import { PwdCookies } from "@/app/lib";
|
import { sealData, unsealData } from "iron-session";
|
||||||
|
import { revalidatePath } from "next/cache";
|
||||||
|
import { cookies } from "next/headers";
|
||||||
|
|
||||||
|
export async function auth_funValidasi({
|
||||||
export async function auth_funValidasi(nomor: string) {
|
nomor,
|
||||||
const cek = await prisma.user.findUnique({
|
HIPMI_PWD,
|
||||||
|
}: {
|
||||||
|
nomor: string;
|
||||||
|
HIPMI_PWD: string;
|
||||||
|
}) {
|
||||||
|
const cekUser = await prisma.user.findUnique({
|
||||||
where: {
|
where: {
|
||||||
nomor: nomor,
|
nomor: nomor,
|
||||||
},
|
},
|
||||||
@@ -21,30 +25,44 @@ export async function auth_funValidasi(nomor: string) {
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
if (cek === null) return { status: 400, message: "Nomor Belum Terdaftar" };
|
if (cekUser === null) return { status: 400, message: "Nomor Belum Terdaftar" };
|
||||||
if (cek) {
|
|
||||||
const res = await sealData(
|
|
||||||
JSON.stringify({
|
|
||||||
id: cek.id,
|
|
||||||
username: cek.username,
|
|
||||||
}),
|
|
||||||
{
|
|
||||||
password: PwdCookies,
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
cookies().set({
|
const sealToken = await sealData(
|
||||||
name: "ssn",
|
JSON.stringify({
|
||||||
value: res,
|
id: cekUser.id,
|
||||||
maxAge: 60 * 60 * 24 * 30,
|
username: cekUser.username,
|
||||||
|
}),
|
||||||
|
{
|
||||||
|
password: HIPMI_PWD,
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
cookies().set({
|
||||||
|
name: "ssn",
|
||||||
|
value: sealToken,
|
||||||
|
// maxAge: 60 * 60 * 24 * 30,
|
||||||
|
// expires: 60 * 60 * 24 * 30,
|
||||||
|
});
|
||||||
|
|
||||||
|
try {
|
||||||
|
const createUserSession = await prisma.userSession.create({
|
||||||
|
data: {
|
||||||
|
token: sealToken,
|
||||||
|
userId: cekUser.id,
|
||||||
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
if (!createUserSession)
|
||||||
|
return { status: 401, message: "Gagal Membuat User Session" };
|
||||||
|
|
||||||
revalidatePath(RouterHome.main_home);
|
revalidatePath(RouterHome.main_home);
|
||||||
|
} catch (error) {
|
||||||
|
console.log(error);
|
||||||
}
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
status: 200,
|
status: 200,
|
||||||
message: "Nomor Terverifikasi",
|
message: "Nomor Terverifikasi",
|
||||||
role: cek.masterUserRoleId,
|
role: cekUser.masterUserRoleId,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,8 +6,6 @@ import {
|
|||||||
MainColor,
|
MainColor,
|
||||||
} from "@/app_modules/_global/color/color_pallet";
|
} from "@/app_modules/_global/color/color_pallet";
|
||||||
import ComponentGlobal_ErrorInput from "@/app_modules/_global/component/error_input";
|
import ComponentGlobal_ErrorInput from "@/app_modules/_global/component/error_input";
|
||||||
import { ComponentGlobal_NotifikasiBerhasil } from "@/app_modules/_global/notif_global/notifikasi_berhasil";
|
|
||||||
import { ComponentGlobal_NotifikasiPeringatan } from "@/app_modules/_global/notif_global/notifikasi_peringatan";
|
|
||||||
import { auth_funLogin } from "@/app_modules/auth/fun/fun_login";
|
import { auth_funLogin } from "@/app_modules/auth/fun/fun_login";
|
||||||
import {
|
import {
|
||||||
BackgroundImage,
|
BackgroundImage,
|
||||||
@@ -17,18 +15,20 @@ import {
|
|||||||
Text,
|
Text,
|
||||||
Title,
|
Title,
|
||||||
} from "@mantine/core";
|
} from "@mantine/core";
|
||||||
import { useFocusTrap } from "@mantine/hooks";
|
|
||||||
import { useAtom } from "jotai";
|
import { useAtom } from "jotai";
|
||||||
import { useRouter } from "next/navigation";
|
import { useRouter } from "next/navigation";
|
||||||
import { useState } from "react";
|
import { useState } from "react";
|
||||||
import { PhoneInput } from "react-international-phone";
|
import { PhoneInput } from "react-international-phone";
|
||||||
import "react-international-phone/style.css";
|
import "react-international-phone/style.css";
|
||||||
import { gs_kodeId } from "../state/state";
|
import { gs_kodeId } from "../state/state";
|
||||||
|
import {
|
||||||
|
ComponentGlobal_NotifikasiBerhasil,
|
||||||
|
ComponentGlobal_NotifikasiPeringatan,
|
||||||
|
} from "@/app_modules/_global/notif_global";
|
||||||
|
|
||||||
export default function Login() {
|
export default function Login() {
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
const [kodeId, setKodeId] = useAtom(gs_kodeId);
|
const [kodeId, setKodeId] = useAtom(gs_kodeId);
|
||||||
const focusTrapRef = useFocusTrap();
|
|
||||||
const [phone, setPhone] = useState("");
|
const [phone, setPhone] = useState("");
|
||||||
const [loading, setLoading] = useState(false);
|
const [loading, setLoading] = useState(false);
|
||||||
const [isError, setError] = useState(false);
|
const [isError, setError] = useState(false);
|
||||||
@@ -38,16 +38,15 @@ export default function Login() {
|
|||||||
|
|
||||||
if (nomorHp.length <= 4) return setError(true);
|
if (nomorHp.length <= 4) return setError(true);
|
||||||
|
|
||||||
await auth_funLogin(nomorHp).then((res) => {
|
const res = await auth_funLogin(nomorHp);
|
||||||
if (res.status === 200) {
|
if (res.status === 200) {
|
||||||
setLoading(true);
|
setLoading(true);
|
||||||
ComponentGlobal_NotifikasiBerhasil(res.message, 2000);
|
ComponentGlobal_NotifikasiBerhasil(res.message, 2000);
|
||||||
setKodeId(res.kodeOtpId);
|
setKodeId(res.kodeOtpId);
|
||||||
router.push(RouterAuth.validasi + res.kodeOtpId);
|
router.push(RouterAuth.validasi + res.kodeOtpId);
|
||||||
} else {
|
} else {
|
||||||
ComponentGlobal_NotifikasiPeringatan(res.message);
|
ComponentGlobal_NotifikasiPeringatan(res.message);
|
||||||
}
|
}
|
||||||
});
|
|
||||||
|
|
||||||
// await fetch(ApiHipmi.login, {
|
// await fetch(ApiHipmi.login, {
|
||||||
// method: "POST",
|
// method: "POST",
|
||||||
|
|||||||
@@ -4,12 +4,7 @@ import { Warna } from "@/app/lib/warna";
|
|||||||
import { ComponentGlobal_NotifikasiBerhasil } from "@/app_modules/_global/notif_global/notifikasi_berhasil";
|
import { ComponentGlobal_NotifikasiBerhasil } from "@/app_modules/_global/notif_global/notifikasi_berhasil";
|
||||||
import { ComponentGlobal_NotifikasiPeringatan } from "@/app_modules/_global/notif_global/notifikasi_peringatan";
|
import { ComponentGlobal_NotifikasiPeringatan } from "@/app_modules/_global/notif_global/notifikasi_peringatan";
|
||||||
import UIGlobal_Modal from "@/app_modules/_global/ui/ui_modal";
|
import UIGlobal_Modal from "@/app_modules/_global/ui/ui_modal";
|
||||||
import {
|
import { ActionIcon, Button, Stack, Text } from "@mantine/core";
|
||||||
ActionIcon,
|
|
||||||
Button,
|
|
||||||
Stack,
|
|
||||||
Text
|
|
||||||
} from "@mantine/core";
|
|
||||||
import { IconLogout } from "@tabler/icons-react";
|
import { IconLogout } from "@tabler/icons-react";
|
||||||
import { useAtom } from "jotai";
|
import { useAtom } from "jotai";
|
||||||
import { useRouter } from "next/navigation";
|
import { useRouter } from "next/navigation";
|
||||||
@@ -24,9 +19,6 @@ export default function Component_Logout() {
|
|||||||
const [loading, setLoading] = useState(false);
|
const [loading, setLoading] = useState(false);
|
||||||
|
|
||||||
async function onClickLogout() {
|
async function onClickLogout() {
|
||||||
// await auth_Logout(kodeId).then((res) => {
|
|
||||||
// ComponentGlobal_NotifikasiBerhasil("Berhasil Logout");
|
|
||||||
// });
|
|
||||||
await auth_Logout(kodeId).then((res) => {
|
await auth_Logout(kodeId).then((res) => {
|
||||||
if (res.status === 200) {
|
if (res.status === 200) {
|
||||||
ComponentGlobal_NotifikasiBerhasil(res.message);
|
ComponentGlobal_NotifikasiBerhasil(res.message);
|
||||||
|
|||||||
@@ -15,17 +15,16 @@ import {
|
|||||||
Stack,
|
Stack,
|
||||||
Text,
|
Text,
|
||||||
TextInput,
|
TextInput,
|
||||||
Title
|
Title,
|
||||||
} from "@mantine/core";
|
} from "@mantine/core";
|
||||||
import { useFocusTrap } from "@mantine/hooks";
|
import { useFocusTrap } from "@mantine/hooks";
|
||||||
import {
|
import { IconUserCircle } from "@tabler/icons-react";
|
||||||
IconUserCircle
|
|
||||||
} from "@tabler/icons-react";
|
|
||||||
import _ from "lodash";
|
import _ from "lodash";
|
||||||
import { useRouter } from "next/navigation";
|
import { useRouter } from "next/navigation";
|
||||||
import { useState } from "react";
|
import { useState } from "react";
|
||||||
import { auth_funDeleteAktivasiKodeOtpById } from "../fun/fun_edit_aktivasi_kode_otp_by_id";
|
import { auth_funDeleteAktivasiKodeOtpById } from "../fun/fun_edit_aktivasi_kode_otp_by_id";
|
||||||
import { Auth_funRegister } from "../fun/fun_register";
|
import { Auth_funRegister } from "../fun/fun_register";
|
||||||
|
import { GlobalEnv } from "@/app/lib/token";
|
||||||
|
|
||||||
export default function Register({ dataOtp }: { dataOtp: any }) {
|
export default function Register({ dataOtp }: { dataOtp: any }) {
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
@@ -40,7 +39,6 @@ export default function Register({ dataOtp }: { dataOtp: any }) {
|
|||||||
username: value,
|
username: value,
|
||||||
nomor: nomor,
|
nomor: nomor,
|
||||||
};
|
};
|
||||||
// console.log(body);
|
|
||||||
|
|
||||||
if (body.username === "") {
|
if (body.username === "") {
|
||||||
setIsValue(true);
|
setIsValue(true);
|
||||||
@@ -49,7 +47,7 @@ export default function Register({ dataOtp }: { dataOtp: any }) {
|
|||||||
if (body.username.length < 5) return null;
|
if (body.username.length < 5) return null;
|
||||||
if (_.values(body.username).includes(" ")) return null;
|
if (_.values(body.username).includes(" ")) return null;
|
||||||
|
|
||||||
const res = await Auth_funRegister(body)
|
const res = await Auth_funRegister({data: body, HIPMI_PWD: GlobalEnv.value?.WIBU_PWD as string});
|
||||||
if (res.status === 200) {
|
if (res.status === 200) {
|
||||||
await auth_funDeleteAktivasiKodeOtpById(dataOtp.id).then((val) => {
|
await auth_funDeleteAktivasiKodeOtpById(dataOtp.id).then((val) => {
|
||||||
if (val.status === 200) {
|
if (val.status === 200) {
|
||||||
@@ -67,16 +65,12 @@ export default function Register({ dataOtp }: { dataOtp: any }) {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
{/* <pre>{JSON.stringify(dataOtp,null,2)}</pre> */}
|
<BackgroundImage src={"/aset/global/main_background.png"} h={"100vh"}>
|
||||||
<BackgroundImage
|
|
||||||
src={"/aset/global/main_background.png"}
|
|
||||||
h={"100vh"}
|
|
||||||
// pos={"static"}
|
|
||||||
>
|
|
||||||
<Center h={"100vh"}>
|
<Center h={"100vh"}>
|
||||||
<Stack h={"100%"} align="center" justify="center" spacing={70}>
|
<Stack h={"100%"} align="center" justify="center" spacing={70}>
|
||||||
<Title order={2} c={MainColor.yellow}>
|
<Title order={2} c={MainColor.yellow}>
|
||||||
REGISTRASI
|
REGISTRASI
|
||||||
|
{GlobalEnv.value?.DATABASE_URL}
|
||||||
</Title>
|
</Title>
|
||||||
|
|
||||||
<IconUserCircle size={100} color="white" />
|
<IconUserCircle size={100} color="white" />
|
||||||
|
|||||||
@@ -26,6 +26,7 @@ import { useRouter } from "next/navigation";
|
|||||||
import { useState } from "react";
|
import { useState } from "react";
|
||||||
import { auth_funDeleteAktivasiKodeOtpById } from "../fun/fun_edit_aktivasi_kode_otp_by_id";
|
import { auth_funDeleteAktivasiKodeOtpById } from "../fun/fun_edit_aktivasi_kode_otp_by_id";
|
||||||
import { auth_funValidasi } from "../fun/fun_validasi";
|
import { auth_funValidasi } from "../fun/fun_validasi";
|
||||||
|
import { GlobalEnv } from "@/app/lib/token";
|
||||||
|
|
||||||
export default function Validasi({ dataOtp }: { dataOtp: any }) {
|
export default function Validasi({ dataOtp }: { dataOtp: any }) {
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
@@ -41,9 +42,11 @@ export default function Validasi({ dataOtp }: { dataOtp: any }) {
|
|||||||
if (code != inputCode)
|
if (code != inputCode)
|
||||||
return ComponentGlobal_NotifikasiPeringatan("Kode Salah");
|
return ComponentGlobal_NotifikasiPeringatan("Kode Salah");
|
||||||
|
|
||||||
const res = await auth_funValidasi(nomor);
|
const res = await auth_funValidasi({
|
||||||
|
nomor: nomor,
|
||||||
|
HIPMI_PWD: GlobalEnv.value?.WIBU_PWD as string,
|
||||||
|
});
|
||||||
if (res.status === 200) {
|
if (res.status === 200) {
|
||||||
|
|
||||||
const resAktivasi = await auth_funDeleteAktivasiKodeOtpById(dataOtp.id);
|
const resAktivasi = await auth_funDeleteAktivasiKodeOtpById(dataOtp.id);
|
||||||
if (resAktivasi.status === 200) {
|
if (resAktivasi.status === 200) {
|
||||||
if (res.role === "1") {
|
if (res.role === "1") {
|
||||||
@@ -51,12 +54,13 @@ export default function Validasi({ dataOtp }: { dataOtp: any }) {
|
|||||||
setLoading(true);
|
setLoading(true);
|
||||||
router.push(RouterHome.main_home, { scroll: false });
|
router.push(RouterHome.main_home, { scroll: false });
|
||||||
} else {
|
} else {
|
||||||
router.push(RouterAdminDashboard.splash_admin);
|
ComponentGlobal_NotifikasiBerhasil("Admin Logged in");
|
||||||
|
setLoading(true);
|
||||||
|
router.push(RouterAdminDashboard.splash_admin, { scroll: false });
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
ComponentGlobal_NotifikasiPeringatan(resAktivasi.message);
|
ComponentGlobal_NotifikasiPeringatan(resAktivasi.message);
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
ComponentGlobal_NotifikasiBerhasil(res.message);
|
ComponentGlobal_NotifikasiBerhasil(res.message);
|
||||||
router.push(RouterAuth.register + dataOtp.id, { scroll: false });
|
router.push(RouterAuth.register + dataOtp.id, { scroll: false });
|
||||||
|
|||||||
5
src/app_modules/check_cookies/index.ts
Normal file
5
src/app_modules/check_cookies/index.ts
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
import { CheckCookies_UiLayout } from "./layout_cek_cookies";
|
||||||
|
import { CheckCookies_UiView } from "./ui_check_cookies";
|
||||||
|
|
||||||
|
export { CheckCookies_UiView };
|
||||||
|
export { CheckCookies_UiLayout };
|
||||||
27
src/app_modules/check_cookies/layout_cek_cookies.tsx
Normal file
27
src/app_modules/check_cookies/layout_cek_cookies.tsx
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
"use client";
|
||||||
|
|
||||||
|
import { RouterAuth } from "@/app/lib/router_hipmi/router_auth";
|
||||||
|
import { useShallowEffect } from "@mantine/hooks";
|
||||||
|
import { useRouter } from "next/navigation";
|
||||||
|
|
||||||
|
export function CheckCookies_UiLayout({
|
||||||
|
children,
|
||||||
|
}: {
|
||||||
|
children: React.ReactNode;
|
||||||
|
}) {
|
||||||
|
const router = useRouter();
|
||||||
|
|
||||||
|
useShallowEffect(() => {
|
||||||
|
onCheckCookies();
|
||||||
|
}, []);
|
||||||
|
|
||||||
|
async function onCheckCookies() {
|
||||||
|
const cek = await fetch("/api/check-cookies");
|
||||||
|
const result = await cek.json();
|
||||||
|
if (result.success === false) {
|
||||||
|
router.push(RouterAuth.login);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return <>{children}</>;
|
||||||
|
}
|
||||||
23
src/app_modules/check_cookies/ui_check_cookies.tsx
Normal file
23
src/app_modules/check_cookies/ui_check_cookies.tsx
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
"use client";
|
||||||
|
|
||||||
|
import { Button, Center } from "@mantine/core";
|
||||||
|
import { UIGlobal_LayoutTamplate } from "../_global/ui";
|
||||||
|
import { RouterAuth } from "@/app/lib/router_hipmi/router_auth";
|
||||||
|
import { useRouter } from "next/navigation";
|
||||||
|
import { useShallowEffect } from "@mantine/hooks";
|
||||||
|
|
||||||
|
export function CheckCookies_UiView() {
|
||||||
|
const router = useRouter();
|
||||||
|
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
<UIGlobal_LayoutTamplate>
|
||||||
|
<Center h={"80vh"}>
|
||||||
|
<Button radius={"xl"} onClick={() => router.push(RouterAuth.login)}>
|
||||||
|
Kembali ke Halaman Login
|
||||||
|
</Button>
|
||||||
|
</Center>
|
||||||
|
</UIGlobal_LayoutTamplate>
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -1,7 +1,9 @@
|
|||||||
"use server";
|
"use server";
|
||||||
|
|
||||||
import prisma from "@/app/lib/prisma";
|
import prisma from "@/app/lib/prisma";
|
||||||
|
import { RouterAuth } from "@/app/lib/router_hipmi/router_auth";
|
||||||
import { user_funGetOneUserId } from "@/app_modules/fun_global/get_user_token";
|
import { user_funGetOneUserId } from "@/app_modules/fun_global/get_user_token";
|
||||||
|
import { redirect } from "next/navigation";
|
||||||
|
|
||||||
export default async function colab_funCreateRoomChat(
|
export default async function colab_funCreateRoomChat(
|
||||||
nameRoom: string,
|
nameRoom: string,
|
||||||
@@ -9,6 +11,10 @@ export default async function colab_funCreateRoomChat(
|
|||||||
colabId: string
|
colabId: string
|
||||||
) {
|
) {
|
||||||
const authorId = await user_funGetOneUserId();
|
const authorId = await user_funGetOneUserId();
|
||||||
|
if (!authorId) {
|
||||||
|
redirect(RouterAuth.login);
|
||||||
|
// return { status: 400, message: "Gagal mendapatkan authorId" };
|
||||||
|
}
|
||||||
|
|
||||||
const createRoom = await prisma.projectCollaboration_RoomChat.create({
|
const createRoom = await prisma.projectCollaboration_RoomChat.create({
|
||||||
data: {
|
data: {
|
||||||
|
|||||||
@@ -1,10 +1,16 @@
|
|||||||
"use server";
|
"use server";
|
||||||
|
|
||||||
import prisma from "@/app/lib/prisma";
|
import prisma from "@/app/lib/prisma";
|
||||||
|
import { RouterAuth } from "@/app/lib/router_hipmi/router_auth";
|
||||||
import { user_funGetOneUserId } from "@/app_modules/fun_global/get_user_token";
|
import { user_funGetOneUserId } from "@/app_modules/fun_global/get_user_token";
|
||||||
|
import { redirect } from "next/navigation";
|
||||||
|
|
||||||
export default async function colab_CekNotifikasi() {
|
export default async function colab_CekNotifikasi() {
|
||||||
const authorId = await user_funGetOneUserId();
|
const authorId = await user_funGetOneUserId();
|
||||||
|
if (!authorId) {
|
||||||
|
redirect(RouterAuth.login);
|
||||||
|
// return { status: 400, message: "Gagal mendapatkan authorId" };
|
||||||
|
}
|
||||||
|
|
||||||
const cekNotif = await prisma.projectCollaboration_Notifikasi.findMany({
|
const cekNotif = await prisma.projectCollaboration_Notifikasi.findMany({
|
||||||
where: {
|
where: {
|
||||||
|
|||||||
@@ -1,10 +1,16 @@
|
|||||||
"use server";
|
"use server";
|
||||||
|
|
||||||
import prisma from "@/app/lib/prisma";
|
import prisma from "@/app/lib/prisma";
|
||||||
|
import { RouterAuth } from "@/app/lib/router_hipmi/router_auth";
|
||||||
import { user_funGetOneUserId } from "@/app_modules/fun_global/get_user_token";
|
import { user_funGetOneUserId } from "@/app_modules/fun_global/get_user_token";
|
||||||
|
import { redirect } from "next/navigation";
|
||||||
|
|
||||||
export default async function colab_getListNotifikasiByUserId() {
|
export default async function colab_getListNotifikasiByUserId() {
|
||||||
const authorId = await user_funGetOneUserId();
|
const authorId = await user_funGetOneUserId();
|
||||||
|
if (!authorId) {
|
||||||
|
redirect(RouterAuth.login);
|
||||||
|
// return { status: 400, message: "Gagal mendapatkan authorId" };
|
||||||
|
}
|
||||||
|
|
||||||
const get = await prisma.projectCollaboration_Notifikasi.findMany({
|
const get = await prisma.projectCollaboration_Notifikasi.findMany({
|
||||||
orderBy: {
|
orderBy: {
|
||||||
|
|||||||
@@ -1,10 +1,20 @@
|
|||||||
"use server";
|
"use server";
|
||||||
|
|
||||||
import prisma from "@/app/lib/prisma";
|
import prisma from "@/app/lib/prisma";
|
||||||
|
import { RouterAuth } from "@/app/lib/router_hipmi/router_auth";
|
||||||
import { user_funGetOneUserId } from "@/app_modules/fun_global/get_user_token";
|
import { user_funGetOneUserId } from "@/app_modules/fun_global/get_user_token";
|
||||||
|
import { redirect } from "next/navigation";
|
||||||
|
|
||||||
export default async function colab_getListRoomChatByAuthorId({page}: {page: number}) {
|
export default async function colab_getListRoomChatByAuthorId({
|
||||||
const userLoginId = await user_funGetOneUserId();
|
page,
|
||||||
|
}: {
|
||||||
|
page: number;
|
||||||
|
}) {
|
||||||
|
const authorId = await user_funGetOneUserId();
|
||||||
|
if (!authorId) {
|
||||||
|
redirect(RouterAuth.login);
|
||||||
|
// return { status: 400, message: "Gagal mendapatkan authorId" };
|
||||||
|
}
|
||||||
const takeData = 10;
|
const takeData = 10;
|
||||||
const skipData = page * takeData - takeData;
|
const skipData = page * takeData - takeData;
|
||||||
|
|
||||||
@@ -15,7 +25,7 @@ export default async function colab_getListRoomChatByAuthorId({page}: {page: num
|
|||||||
createdAt: "desc",
|
createdAt: "desc",
|
||||||
},
|
},
|
||||||
where: {
|
where: {
|
||||||
userId: userLoginId,
|
userId: authorId,
|
||||||
},
|
},
|
||||||
select: {
|
select: {
|
||||||
ProjectCollaboration_RoomChat: {
|
ProjectCollaboration_RoomChat: {
|
||||||
@@ -36,5 +46,4 @@ export default async function colab_getListRoomChatByAuthorId({page}: {page: num
|
|||||||
// console.log(listRoom);
|
// console.log(listRoom);
|
||||||
|
|
||||||
return listRoom;
|
return listRoom;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,24 +1,27 @@
|
|||||||
"use server";
|
"use server";
|
||||||
|
|
||||||
import { cookies } from "next/headers";
|
|
||||||
import { unsealData } from "iron-session";
|
|
||||||
import { redirect } from "next/navigation";
|
|
||||||
import { RouterAuth } from "@/app/lib/router_hipmi/router_auth";
|
import { RouterAuth } from "@/app/lib/router_hipmi/router_auth";
|
||||||
|
import { ServerEnv } from "@/app/lib/server_env";
|
||||||
|
import { unsealData } from "iron-session";
|
||||||
import _ from "lodash";
|
import _ from "lodash";
|
||||||
import { PwdCookies } from "@/app/lib";
|
import { cookies } from "next/headers";
|
||||||
|
import { redirect } from "next/navigation";
|
||||||
|
|
||||||
|
export async function user_funGetOneUserId(): Promise<string | null> {
|
||||||
|
try {
|
||||||
|
const kukis = cookies();
|
||||||
|
const c = kukis.get("ssn");
|
||||||
|
if (!c || !c?.value || _.isEmpty(c?.value) || _.isUndefined(c?.value))
|
||||||
|
return redirect(RouterAuth.login);
|
||||||
|
|
||||||
export async function user_funGetOneUserId() {
|
const token = JSON.parse(
|
||||||
const kukis = cookies();
|
await unsealData(c?.value as string, {
|
||||||
const c = kukis.get("ssn");
|
password: ServerEnv.value?.WIBU_PWD as string,
|
||||||
if (!c || !c?.value || _.isEmpty(c?.value) || _.isUndefined(c?.value))
|
})
|
||||||
return redirect(RouterAuth.login);
|
);
|
||||||
|
|
||||||
const token = JSON.parse(
|
return token.id;
|
||||||
await unsealData(c?.value as string, {
|
} catch (error) {
|
||||||
password: PwdCookies,
|
return null;
|
||||||
})
|
}
|
||||||
);
|
|
||||||
|
|
||||||
return token.id;
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -127,7 +127,7 @@ export function Home_UiView({
|
|||||||
onClick={() => {
|
onClick={() => {
|
||||||
if (dataUser.Profile === null) {
|
if (dataUser.Profile === null) {
|
||||||
return ComponentGlobal_NotifikasiPeringatan(
|
return ComponentGlobal_NotifikasiPeringatan(
|
||||||
"Lengkapi Data Profile"
|
"Lengkapi Profile"
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
if (e.link === "") {
|
if (e.link === "") {
|
||||||
@@ -176,7 +176,7 @@ export function Home_UiView({
|
|||||||
onClick={() => {
|
onClick={() => {
|
||||||
if (dataUser.Profile === null) {
|
if (dataUser.Profile === null) {
|
||||||
return ComponentGlobal_NotifikasiPeringatan(
|
return ComponentGlobal_NotifikasiPeringatan(
|
||||||
"Lengkapi Data Profile"
|
"Lengkapi Profile"
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
if (routePageJob.link === "") {
|
if (routePageJob.link === "") {
|
||||||
|
|||||||
@@ -1,9 +1,6 @@
|
|||||||
"use server";
|
"use server";
|
||||||
|
|
||||||
import { myConsole } from "@/app/fun/my_console";
|
|
||||||
import prisma from "@/app/lib/prisma";
|
import prisma from "@/app/lib/prisma";
|
||||||
import { RouterInvestasi_OLD } from "@/app/lib/router_hipmi/router_investasi";
|
|
||||||
import { revalidatePath } from "next/cache";
|
|
||||||
|
|
||||||
export default async function funDeleteBeritaInvestasi(id: string) {
|
export default async function funDeleteBeritaInvestasi(id: string) {
|
||||||
const res = await prisma.beritaInvestasi.delete({
|
const res = await prisma.beritaInvestasi.delete({
|
||||||
|
|||||||
@@ -1,10 +1,8 @@
|
|||||||
"use server";
|
"use server";
|
||||||
|
|
||||||
import { myConsole } from "@/app/fun/my_console";
|
|
||||||
import prisma from "@/app/lib/prisma";
|
import prisma from "@/app/lib/prisma";
|
||||||
import fs from "fs";
|
import fs from "fs";
|
||||||
import _ from "lodash";
|
import _ from "lodash";
|
||||||
import { cookies } from "next/headers";
|
|
||||||
import { v4 } from "uuid";
|
import { v4 } from "uuid";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -18,9 +16,6 @@ export async function funUploadFoto(formData: FormData, id: string) {
|
|||||||
const fExt = _.lowerCase(file.name.split(".").pop());
|
const fExt = _.lowerCase(file.name.split(".").pop());
|
||||||
const fRandomName = v4(fName) + "." + fExt;
|
const fRandomName = v4(fName) + "." + fExt;
|
||||||
|
|
||||||
myConsole(id);
|
|
||||||
myConsole(fExt);
|
|
||||||
|
|
||||||
const upload = await prisma.images.create({
|
const upload = await prisma.images.create({
|
||||||
data: {
|
data: {
|
||||||
url: fRandomName,
|
url: fRandomName,
|
||||||
|
|||||||
@@ -1,7 +1,9 @@
|
|||||||
"use server";
|
"use server";
|
||||||
|
|
||||||
import prisma from "@/app/lib/prisma";
|
import prisma from "@/app/lib/prisma";
|
||||||
|
import { RouterAuth } from "@/app/lib/router_hipmi/router_auth";
|
||||||
import { user_funGetOneUserId } from "@/app_modules/fun_global/get_user_token";
|
import { user_funGetOneUserId } from "@/app_modules/fun_global/get_user_token";
|
||||||
|
import { redirect } from "next/navigation";
|
||||||
|
|
||||||
export async function userSearch_getAllUser({
|
export async function userSearch_getAllUser({
|
||||||
page,
|
page,
|
||||||
@@ -10,7 +12,12 @@ export async function userSearch_getAllUser({
|
|||||||
page: number;
|
page: number;
|
||||||
search?: string;
|
search?: string;
|
||||||
}) {
|
}) {
|
||||||
const userLoginId = await user_funGetOneUserId();
|
const authorId = await user_funGetOneUserId();
|
||||||
|
if (!authorId) {
|
||||||
|
redirect(RouterAuth.login);
|
||||||
|
// return { status: 400, message: "Gagal mendapatkan authorId" };
|
||||||
|
}
|
||||||
|
|
||||||
const takeData = 20;
|
const takeData = 20;
|
||||||
const skipData = page * takeData - takeData;
|
const skipData = page * takeData - takeData;
|
||||||
|
|
||||||
@@ -33,7 +40,7 @@ export async function userSearch_getAllUser({
|
|||||||
OR: [
|
OR: [
|
||||||
{
|
{
|
||||||
NOT: {
|
NOT: {
|
||||||
id: userLoginId,
|
id: authorId,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
|||||||
@@ -5,9 +5,15 @@ import { MODEL_VOTING } from "../../model/interface";
|
|||||||
import prisma from "@/app/lib/prisma";
|
import prisma from "@/app/lib/prisma";
|
||||||
import { revalidatePath } from "next/cache";
|
import { revalidatePath } from "next/cache";
|
||||||
import _ from "lodash";
|
import _ from "lodash";
|
||||||
|
import { RouterAuth } from "@/app/lib/router_hipmi/router_auth";
|
||||||
|
import { redirect } from "next/navigation";
|
||||||
|
|
||||||
export async function Vote_funCreate(req: MODEL_VOTING, listVote: any[]) {
|
export async function Vote_funCreate(req: MODEL_VOTING, listVote: any[]) {
|
||||||
const authorId = await user_funGetOneUserId();
|
const authorId = await user_funGetOneUserId();
|
||||||
|
if (!authorId) {
|
||||||
|
redirect(RouterAuth.login);
|
||||||
|
// return { status: 400, message: "Gagal mendapatkan authorId" };
|
||||||
|
}
|
||||||
|
|
||||||
const create = await prisma.voting.create({
|
const create = await prisma.voting.create({
|
||||||
data: {
|
data: {
|
||||||
|
|||||||
@@ -2,17 +2,22 @@
|
|||||||
|
|
||||||
import { user_funGetOneUserId } from "@/app_modules/fun_global/get_user_token";
|
import { user_funGetOneUserId } from "@/app_modules/fun_global/get_user_token";
|
||||||
import prisma from "@/app/lib/prisma";
|
import prisma from "@/app/lib/prisma";
|
||||||
|
import { RouterAuth } from "@/app/lib/router_hipmi/router_auth";
|
||||||
|
import { redirect } from "next/navigation";
|
||||||
|
|
||||||
export async function Vote_getAllListRiwayatSaya({ page }: { page: number }) {
|
export async function Vote_getAllListRiwayatSaya({ page }: { page: number }) {
|
||||||
const authorId = await user_funGetOneUserId();
|
const authorId = await user_funGetOneUserId();
|
||||||
const takeData = 5;
|
if (!authorId) {
|
||||||
const skipData = page * takeData - takeData;
|
redirect(RouterAuth.login);
|
||||||
|
// return { status: 400, message: "Gagal mendapatkan authorId" };
|
||||||
|
}
|
||||||
|
const takeData = 5;
|
||||||
|
const skipData = page * takeData - takeData;
|
||||||
|
|
||||||
const data = await prisma.voting.findMany({
|
const data = await prisma.voting.findMany({
|
||||||
take: takeData,
|
take: takeData,
|
||||||
skip: skipData,
|
skip: skipData,
|
||||||
|
|
||||||
orderBy: {
|
orderBy: {
|
||||||
createdAt: "asc",
|
createdAt: "asc",
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -1,11 +1,16 @@
|
|||||||
"use server";
|
"use server";
|
||||||
|
|
||||||
import prisma from "@/app/lib/prisma";
|
import prisma from "@/app/lib/prisma";
|
||||||
|
import { RouterAuth } from "@/app/lib/router_hipmi/router_auth";
|
||||||
import { user_funGetOneUserId } from "@/app_modules/fun_global/get_user_token";
|
import { user_funGetOneUserId } from "@/app_modules/fun_global/get_user_token";
|
||||||
|
import { redirect } from "next/navigation";
|
||||||
|
|
||||||
export async function vote_getAllDraft({ page }: { page: number }) {
|
export async function vote_getAllDraft({ page }: { page: number }) {
|
||||||
const authorId = await user_funGetOneUserId();
|
const authorId = await user_funGetOneUserId();
|
||||||
|
if (!authorId) {
|
||||||
|
redirect(RouterAuth.login);
|
||||||
|
// return { status: 400, message: "Gagal mendapatkan authorId" };
|
||||||
|
}
|
||||||
const takeData = 10;
|
const takeData = 10;
|
||||||
const skipData = page * takeData - takeData;
|
const skipData = page * takeData - takeData;
|
||||||
|
|
||||||
|
|||||||
@@ -1,10 +1,16 @@
|
|||||||
"use server";
|
"use server";
|
||||||
|
|
||||||
import prisma from "@/app/lib/prisma";
|
import prisma from "@/app/lib/prisma";
|
||||||
|
import { RouterAuth } from "@/app/lib/router_hipmi/router_auth";
|
||||||
import { user_funGetOneUserId } from "@/app_modules/fun_global/get_user_token";
|
import { user_funGetOneUserId } from "@/app_modules/fun_global/get_user_token";
|
||||||
|
import { redirect } from "next/navigation";
|
||||||
|
|
||||||
export async function vote_getAllPublish({ page }: { page: number }) {
|
export async function vote_getAllPublish({ page }: { page: number }) {
|
||||||
const authorId = await user_funGetOneUserId();
|
const authorId = await user_funGetOneUserId();
|
||||||
|
if (!authorId) {
|
||||||
|
redirect(RouterAuth.login);
|
||||||
|
// return { status: 400, message: "Gagal mendapatkan authorId" };
|
||||||
|
}
|
||||||
|
|
||||||
const takeData = 5;
|
const takeData = 5;
|
||||||
const skipData = page * takeData - takeData;
|
const skipData = page * takeData - takeData;
|
||||||
@@ -32,6 +38,5 @@ export async function vote_getAllPublish({ page }: { page: number }) {
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,10 +1,16 @@
|
|||||||
"use server";
|
"use server";
|
||||||
|
|
||||||
import prisma from "@/app/lib/prisma";
|
import prisma from "@/app/lib/prisma";
|
||||||
|
import { RouterAuth } from "@/app/lib/router_hipmi/router_auth";
|
||||||
import { user_funGetOneUserId } from "@/app_modules/fun_global/get_user_token";
|
import { user_funGetOneUserId } from "@/app_modules/fun_global/get_user_token";
|
||||||
|
import { redirect } from "next/navigation";
|
||||||
|
|
||||||
export async function vote_getAllReject({ page }: { page: number }) {
|
export async function vote_getAllReject({ page }: { page: number }) {
|
||||||
const authorId = await user_funGetOneUserId();
|
const authorId = await user_funGetOneUserId();
|
||||||
|
if (!authorId) {
|
||||||
|
redirect(RouterAuth.login);
|
||||||
|
// return { status: 400, message: "Gagal mendapatkan authorId" };
|
||||||
|
}
|
||||||
|
|
||||||
const takeData = 10;
|
const takeData = 10;
|
||||||
const skipData = page * takeData - takeData;
|
const skipData = page * takeData - takeData;
|
||||||
|
|||||||
@@ -1,10 +1,16 @@
|
|||||||
"use server";
|
"use server";
|
||||||
|
|
||||||
import prisma from "@/app/lib/prisma";
|
import prisma from "@/app/lib/prisma";
|
||||||
|
import { RouterAuth } from "@/app/lib/router_hipmi/router_auth";
|
||||||
import { user_funGetOneUserId } from "@/app_modules/fun_global/get_user_token";
|
import { user_funGetOneUserId } from "@/app_modules/fun_global/get_user_token";
|
||||||
|
import { redirect } from "next/navigation";
|
||||||
|
|
||||||
export async function vote_getAllReview({ page }: { page: number }) {
|
export async function vote_getAllReview({ page }: { page: number }) {
|
||||||
const authorId = await user_funGetOneUserId();
|
const authorId = await user_funGetOneUserId();
|
||||||
|
if (!authorId) {
|
||||||
|
redirect(RouterAuth.login);
|
||||||
|
// return { status: 400, message: "Gagal mendapatkan authorId" };
|
||||||
|
}
|
||||||
|
|
||||||
const takeData = 10;
|
const takeData = 10;
|
||||||
const skipData = page * takeData - takeData;
|
const skipData = page * takeData - takeData;
|
||||||
|
|||||||
11
src/bin/HipmiProvider.tsx
Normal file
11
src/bin/HipmiProvider.tsx
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
"use client";
|
||||||
|
|
||||||
|
import { GlobalEnv } from "@/app/lib/token";
|
||||||
|
|
||||||
|
export function HipmiProvider(
|
||||||
|
{ children }: { children: React.ReactNode },
|
||||||
|
onEnv: (val: string) => void
|
||||||
|
) {
|
||||||
|
onEnv(GlobalEnv.value?.WIBU_PWD as string);
|
||||||
|
return children;
|
||||||
|
}
|
||||||
31
src/bin/hipmi_env.ts
Normal file
31
src/bin/hipmi_env.ts
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
import dotenv from "dotenv";
|
||||||
|
import path from "path";
|
||||||
|
dotenv.config({
|
||||||
|
path: path.join(process.cwd(), ".env"),
|
||||||
|
});
|
||||||
|
|
||||||
|
const DATABASE_URL = process.env.DATABASE_URL!;
|
||||||
|
const WIBU_PWD = process.env.WIBU_PWD!;
|
||||||
|
const Client_KEY = process.env.Client_KEY!;
|
||||||
|
const Server_KEY = process.env.Server_KEY!;
|
||||||
|
const MAPBOX_TOKEN = process.env.MAPBOX_TOKEN!;
|
||||||
|
const WS_APIKEY = process.env.WS_APIKEY!;
|
||||||
|
|
||||||
|
if (!DATABASE_URL) throw new Error("Require DATABASE_URL");
|
||||||
|
if (!WIBU_PWD) throw new Error("Require PWD");
|
||||||
|
if (!Client_KEY) throw new Error("Require Client_KEY");
|
||||||
|
if (!Server_KEY) throw new Error("Require Server_KEY");
|
||||||
|
if (!MAPBOX_TOKEN) throw new Error("Require MAPBOX_TOKEN");
|
||||||
|
if (!WS_APIKEY) throw new Error("Require WS_APIKEY");
|
||||||
|
|
||||||
|
export function hipmiEnv() {
|
||||||
|
const envObject = {
|
||||||
|
DATABASE_URL,
|
||||||
|
WIBU_PWD,
|
||||||
|
Client_KEY,
|
||||||
|
Server_KEY,
|
||||||
|
MAPBOX_TOKEN,
|
||||||
|
WS_APIKEY,
|
||||||
|
};
|
||||||
|
return envObject;
|
||||||
|
}
|
||||||
152
src/middleware.ts
Normal file
152
src/middleware.ts
Normal file
@@ -0,0 +1,152 @@
|
|||||||
|
// Import type NextRequest buat nanganin request, dan NextResponse buat balikin response.
|
||||||
|
// Juga import jwtVerify dan SignJWT dari "jose" buat verifikasi dan bikin JWT.
|
||||||
|
import type { NextRequest } from "next/server";
|
||||||
|
import { NextResponse } from "next/server";
|
||||||
|
import { jwtVerify, SignJWT } from "jose";
|
||||||
|
|
||||||
|
// Kunci rahasia buat konfigurasi
|
||||||
|
const secretKey = process.env.SESSION_SECRET || ""; // Kalo SESSION_SECRET nggak ada, pake string kosong biar gak error
|
||||||
|
const encodedKey = new TextEncoder().encode(secretKey); // Kunci ini bakal diencode buat dipake di JWT
|
||||||
|
|
||||||
|
// Konfigurasi middleware
|
||||||
|
const middlewareConfig = {
|
||||||
|
publicRoute: [
|
||||||
|
// Daftar route yang bisa diakses tanpa login
|
||||||
|
"/",
|
||||||
|
"/auth/login",
|
||||||
|
"/auth/register",
|
||||||
|
"/api/signin",
|
||||||
|
"/api/register"
|
||||||
|
],
|
||||||
|
publicPatterns: [/^\/api\/files\/\w+/], // Regex buat nge-match route API yang bisa diakses bebas
|
||||||
|
signinPath: "/auth/login", // Brute buat halaman login
|
||||||
|
userPath: "/user", // Route buat halaman user setelah login
|
||||||
|
apiRoute: "/api",
|
||||||
|
tokenKey: "ws_token",
|
||||||
|
exp: "7 year"
|
||||||
|
};
|
||||||
|
|
||||||
|
// Fungsi buat decode token JWT
|
||||||
|
async function decrypt(token: string): Promise<Record<string, unknown> | null> {
|
||||||
|
try {
|
||||||
|
// Cek token JWT pake algoritma HS256 dan kunci terenkripsi
|
||||||
|
const { payload } = await jwtVerify(token, encodedKey, {
|
||||||
|
algorithms: ["HS256"]
|
||||||
|
});
|
||||||
|
// Balikin data 'user' dari payload atau null kalo nggak ada
|
||||||
|
return (payload.user as Record<string, unknown>) || null;
|
||||||
|
} catch (error) {
|
||||||
|
console.error("Gagal verifikasi session", error); // Kalo error, log error-nya
|
||||||
|
return null; // Balikin null kalo verifikasi gagal
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fungsi buat bikin (encode) token JWT
|
||||||
|
export async function encrypt(
|
||||||
|
user: Record<string, unknown>, // Data user yang mau dimasukkan ke token
|
||||||
|
exp = middlewareConfig.exp // Waktu expired token, default 7 tahun
|
||||||
|
): Promise<string> {
|
||||||
|
return new SignJWT({ user }) // Bikin token baru dengan data user
|
||||||
|
.setProtectedHeader({ alg: "HS256" }) // Set header buat algoritma HS256
|
||||||
|
.setIssuedAt() // Waktu token dibuat
|
||||||
|
.setExpirationTime(exp) // Waktu expired token
|
||||||
|
.sign(encodedKey); // Sign token pake kunci terenkripsi
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fungsi buat verifikasi token dan balikin data user
|
||||||
|
async function verifyToken(
|
||||||
|
token: string | undefined
|
||||||
|
): Promise<Record<string, unknown> | null> {
|
||||||
|
if (!token) return null; // Kalo nggak ada token, balikin null
|
||||||
|
return await decrypt(token); // Kalo ada, decrypt token dan ambil datanya
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fungsi buat set header CORS
|
||||||
|
function setCorsHeaders(res: NextResponse): void {
|
||||||
|
res.headers.set("Access-Control-Allow-Origin", "*"); // Semua origin diizinkan buat akses
|
||||||
|
res.headers.set(
|
||||||
|
"Access-Control-Allow-Methods",
|
||||||
|
"GET, POST, PUT, DELETE, OPTIONS"
|
||||||
|
); // Metode HTTP yang diizinkan
|
||||||
|
res.headers.set(
|
||||||
|
"Access-Control-Allow-Headers",
|
||||||
|
"Content-Type, Authorization"
|
||||||
|
); // Header yang diizinkan
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fungsi buat nanganin setup CORS dan preflight request (OPTIONS)
|
||||||
|
function handleCors(req: NextRequest, res: NextResponse): NextResponse {
|
||||||
|
setCorsHeaders(res); // Set header CORS
|
||||||
|
|
||||||
|
// Kalo request-nya OPTIONS (preflight)
|
||||||
|
if (req.method === "OPTIONS") {
|
||||||
|
// Balikin response tanpa konten dengan status 204
|
||||||
|
return new NextResponse(null, {
|
||||||
|
status: 204,
|
||||||
|
headers: {
|
||||||
|
"Access-Control-Allow-Origin": "*", // Semua origin diizinkan
|
||||||
|
"Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, OPTIONS", // Metode HTTP yang diizinkan
|
||||||
|
"Access-Control-Allow-Headers": "Content-Type, Authorization", // Header yang diizinkan
|
||||||
|
"Access-Control-Max-Age": "86400" // Cache preflight response selama 1 hari
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
return res; // Kalo bukan OPTIONS, balikin response biasa
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fungsi utama middleware
|
||||||
|
export async function middleware(req: NextRequest) {
|
||||||
|
const { pathname } = req.nextUrl; // Ambil path dari URL request
|
||||||
|
|
||||||
|
// Ngecek apakah route termasuk route publik
|
||||||
|
if (
|
||||||
|
middlewareConfig.publicRoute.includes(pathname) || // Kalo route-nya ada di daftar route publik
|
||||||
|
middlewareConfig.publicPatterns.some((pattern) => pattern.test(pathname)) // Atau cocok sama pola publik
|
||||||
|
) {
|
||||||
|
return handleCors(req, NextResponse.next()); // Lanjutkan ke route berikutnya tanpa cek token
|
||||||
|
}
|
||||||
|
|
||||||
|
// Ngecek token di cookies atau header Authorization
|
||||||
|
const token =
|
||||||
|
req.cookies.get(middlewareConfig.tokenKey)?.value || // Coba dapetin token dari cookie
|
||||||
|
req.headers.get("Authorization")?.split(" ")[1]; // Kalo nggak ada, cek di header Authorization
|
||||||
|
const user = await verifyToken(token); // Verifikasi token
|
||||||
|
|
||||||
|
if (!user) {
|
||||||
|
// Kalo user nggak valid (token nggak ada atau nggak sah)
|
||||||
|
if (pathname.startsWith(middlewareConfig.apiRoute)) {
|
||||||
|
// Kalo rutenya API
|
||||||
|
return handleCors(req, unauthorizedResponse()); // Balikin response "Unauthorized"
|
||||||
|
}
|
||||||
|
return handleCors(
|
||||||
|
req,
|
||||||
|
NextResponse.redirect(new URL(middlewareConfig.signinPath, req.url)) // Alihkan ke halaman login
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Kalo user udah login dan coba akses halaman login lagi, alihkan ke halaman user
|
||||||
|
if (pathname === middlewareConfig.signinPath) {
|
||||||
|
return handleCors(
|
||||||
|
req,
|
||||||
|
NextResponse.redirect(new URL(middlewareConfig.userPath, req.url)) // Alihkan ke halaman user
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// User terautentikasi, lanjut ke route berikutnya
|
||||||
|
return handleCors(req, NextResponse.next());
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fungsi buat balikin response unauthorized (gak ada hak akses) untuk request API
|
||||||
|
function unauthorizedResponse(): NextResponse {
|
||||||
|
return new NextResponse(JSON.stringify({ error: "Unauthorized" }), {
|
||||||
|
// Balikin JSON berisi error
|
||||||
|
status: 401, // Status Unauthorized
|
||||||
|
headers: { "Content-Type": "application/json" } // Set header type konten ke JSON
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// Konfigurasi buat middleware Next.js
|
||||||
|
export const config = {
|
||||||
|
matcher: ["/((?!_next|static|favicon.ico).*)"] // Cocokin semua route kecuali yang dimulai dengan _next, static, atau favicon.ico
|
||||||
|
};
|
||||||
@@ -4281,6 +4281,11 @@ jiti@^1.18.2:
|
|||||||
resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.21.6.tgz#6c7f7398dd4b3142767f9a168af2f317a428d268"
|
resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.21.6.tgz#6c7f7398dd4b3142767f9a168af2f317a428d268"
|
||||||
integrity sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==
|
integrity sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==
|
||||||
|
|
||||||
|
jose@^5.9.2:
|
||||||
|
version "5.9.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/jose/-/jose-5.9.2.tgz#22a22da06edb8fb9e583aa24bafc1e8457b4db92"
|
||||||
|
integrity sha512-ILI2xx/I57b20sd7rHZvgiiQrmp2mcotwsAH+5ajbpFQbrYVQdNHYlQhoA5cFb78CgtBOxtC05TeA+mcgkuCqQ==
|
||||||
|
|
||||||
jotai@^2.4.3:
|
jotai@^2.4.3:
|
||||||
version "2.9.3"
|
version "2.9.3"
|
||||||
resolved "https://registry.yarnpkg.com/jotai/-/jotai-2.9.3.tgz#abcae49a737cd50e3144a6c9eb39840db077c727"
|
resolved "https://registry.yarnpkg.com/jotai/-/jotai-2.9.3.tgz#abcae49a737cd50e3144a6c9eb39840db077c727"
|
||||||
|
|||||||
Reference in New Issue
Block a user