Skip to content

Commit 341bc01

Browse files
authored
Merge pull request #14 from GesangPJ/test
Refactor codes, add more pages protection
2 parents 412f299 + 8cf0646 commit 341bc01

35 files changed

+146
-1426
lines changed

.env.example

+4-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ NEXTAUTH_SECRET= #use openssl to generate key, base64 recomended
99
BASEPATH=
1010
NEXT_PUBLIC_APP_URL=http://localhost:3000${BASEPATH}
1111

12-
# PRISMA MYSQL CONNECTION
12+
# PRISMA CONNECTION
1313
DATABASE_URL= #<mysql or postgresql>://<account name>:<password>@localhost:<port>/<databasename>
1414

1515
#Vercel PostgreSQL
@@ -22,3 +22,6 @@ POSTGRES_USER=
2222
POSTGRES_HOST=
2323
POSTGRES_PASSWORD=
2424
POSTGRES_DATABASE=
25+
26+
#Admin KEY
27+
ADMIN_KEY=

package-lock.json

+2-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "Kasbon-Manager",
3-
"version": "1.1.7",
3+
"version": "1.1.8",
44
"license": "Commercial",
55
"private": true,
66
"scripts": {

src/app/dashboard/account-settings/page.jsx

-22
This file was deleted.

src/app/dashboard/bayar/page.jsx

+22-1
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,29 @@
1+
'use client'
12

2-
import StatusBayar from "@/views/status-bayar/StatusBayar"
3+
import { useEffect } from "react"
4+
5+
import { useRouter } from "next/navigation"
36

7+
import { useSession } from "next-auth/react"
8+
9+
import StatusBayar from "@/views/status-bayar/StatusBayar"
410

511
const BayarKasbon = () =>{
12+
const {data: session, status} = useSession()
13+
const router = useRouter()
14+
15+
useEffect(()=>{
16+
if(status==='loading') return
17+
18+
if(!session){
19+
router.push('/error/401')
20+
}
21+
},[session, status, router])
22+
23+
if(!session){
24+
return null
25+
}
26+
627
return(
728
<div>
829
<h1>Halaman Status Bayar Kasbon</h1>

src/app/dashboard/cetak/page.jsx

+21
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,29 @@
1+
'use client'
12

3+
import { useEffect } from "react"
4+
5+
import { useRouter } from "next/navigation"
6+
7+
import { useSession } from "next-auth/react"
28

39
import PrintLaporan from "@/views/print-laporan/PrintLaporan"
410

511
const CetakKasbon = () =>{
12+
const {data:session, status} = useSession()
13+
const router = useRouter()
14+
15+
useEffect(()=>{
16+
if (status === 'loading') return
17+
18+
if(!session){
19+
router.push('/error/401')
20+
}
21+
}, [session, status, router])
22+
23+
if(!session){
24+
return null
25+
}
26+
627
return(
728
<div>
829
<div>

src/app/dashboard/daftar-akun/page.jsx

+25-7
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,40 @@
1-
import dynamic from 'next/dynamic'
1+
'use client'
22

3-
import TabelAkunAdmin from '@/views/tabel-akun/TabelAdmin'
3+
import { useEffect } from "react"
4+
5+
import { useRouter } from "next/navigation"
46

5-
//Membuat komponen yang diimport menjadi dynamic page
6-
const TabelAkun = dynamic(()=>import('@views/tabel-akun/TabelAkun'), {ssr:false})
7+
import { useSession } from "next-auth/react"
8+
9+
import TabelAkunAdmin from '@/views/tabel-akun/TabelAdmin'
710

11+
import TabelAkun from "@/views/tabel-akun/TabelAkun"
812

913
const DaftarAkun = () => {
14+
const {data: session, status} = useSession()
15+
const router = useRouter()
16+
17+
useEffect(()=>{
18+
if (status === 'loading') return
19+
20+
if(!session){
21+
router.push('/error/401')
22+
}
23+
}, [session, status, router])
24+
25+
if(!session){
26+
return null
27+
}
1028

1129
return (
12-
<div className="">
30+
<div>
1331
<h1>Tabel Daftar Akun</h1>
1432
<br />
15-
<div className="">
33+
<div>
1634
<TabelAkun/>
1735
</div>
1836
<br />
19-
<div className="">
37+
<div>
2038
<TabelAkunAdmin/>
2139
</div>
2240
<br />

src/app/dashboard/kasbon/page.jsx

-11
This file was deleted.

src/app/dashboard/laporan/page.jsx

-12
This file was deleted.

src/app/dashboard/registrasi-akun/page.jsx

+25-9
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@
22

33
import { useState, useEffect, useRef } from 'react'
44

5+
import { useRouter } from 'next/navigation'
6+
7+
import { useSession } from 'next-auth/react'
8+
59
import Card from '@mui/material/Card'
610
import Grid from '@mui/material/Grid'
711
import Button from '@mui/material/Button'
@@ -15,20 +19,32 @@ import FormControl from '@mui/material/FormControl'
1519
import Alert from '@mui/material/Alert'
1620

1721
const RegistrasiAkun = () => {
18-
const [status, setStatus] = useState(null)
22+
const {data: session, status} = useSession()
23+
const [alert, setAlert] = useState(null)
1924
const [message, setMessage] = useState('')
2025
const formRef = useRef(null)
26+
const router = useRouter()
2127

2228
useEffect(() => {
23-
if (status) {
29+
if (status === 'loading') return // Jangan lakukan apa pun saat sesi sedang dimuat
30+
31+
if (!session) {
32+
router.push('/error/401')
33+
}
34+
35+
if (alert) {
2436
const timer = setTimeout(() => {
25-
setStatus(null)
37+
setAlert(null)
2638
setMessage('')
2739
}, 5000)
2840

2941
return () => clearTimeout(timer)
3042
}
31-
}, [status])
43+
}, [session, status, router, alert])
44+
45+
if (!session) {
46+
return null
47+
}
3248

3349
const handleSubmit = async (event) => {
3450
event.preventDefault()
@@ -53,15 +69,15 @@ const RegistrasiAkun = () => {
5369
const result = await response.json()
5470

5571
if (response.ok) {
56-
setStatus('success')
72+
setAlert('success')
5773
setMessage('Akun berhasil didaftarkan!')
5874
formRef.current.reset() // Kosongkan form setelah berhasil didaftarkan
5975
} else {
60-
setStatus('error')
76+
setAlert('error')
6177
setMessage(result.error || 'Terjadi kesalahan saat mendaftarkan akun.')
6278
}
6379
} catch (error) {
64-
setStatus('error')
80+
setAlert('error')
6581
setMessage('Terjadi kesalahan saat mendaftarkan akun.')
6682
}
6783
}
@@ -71,8 +87,8 @@ const RegistrasiAkun = () => {
7187
<Card>
7288
<CardHeader title='Registrasi Akun' />
7389
<CardContent>
74-
{status && (
75-
<Alert severity={status} style={{ marginBottom: '1rem' }}>
90+
{alert && (
91+
<Alert severity={alert} style={{ marginBottom: '1rem' }}>
7692
{message}
7793
</Alert>
7894
)}

src/app/dashboard/request/page.jsx

+22
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,29 @@
1+
'use client'
2+
3+
import { useEffect } from "react"
4+
5+
import { useRouter } from "next/navigation"
6+
7+
import { useSession } from "next-auth/react"
18

29
import StatusRequest from "@/views/status-request/StatusRequest"
310

411
const RequestKasbon = () =>{
12+
const {data:session,status} = useSession()
13+
const router = useRouter()
14+
15+
useEffect(()=>{
16+
if(status === 'loading') return
17+
18+
if(!session){
19+
router.push('/error/401')
20+
}
21+
},[session,status,router])
22+
23+
if(!session){
24+
return null
25+
}
26+
527
return(
628
<div>
729
<h1>Status Request Kasbon</h1>

src/app/dashboard/reset-password-akun/page.jsx

-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import { useSession } from 'next-auth/react'
99
import ResetPasswordKaryawan from "@/views/reset-password/resetpassword-karyawan"
1010
import ResetPasswordAdmin from '@/views/reset-password/resetpassword-admin'
1111

12-
1312
const ResetPasswordAkun = () =>{
1413
const { data: session, status } = useSession()
1514
const router = useRouter()

src/app/dashboard/tambah-kasbon/page.jsx

+24-11
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
import { useState, useEffect, useRef } from 'react'
44

5+
import { useRouter } from 'next/navigation'
6+
57
import { useSession } from 'next-auth/react'
68

79
import Card from '@mui/material/Card'
@@ -17,29 +19,40 @@ import InputLabel from '@mui/material/InputLabel'
1719
import FormControl from '@mui/material/FormControl'
1820

1921
const TambahKasbon = () =>{
20-
const { data: session } = useSession()
21-
const [status, setStatus] = useState(null)
22+
const { data: session, status } = useSession()
23+
const [alert, setAlert] = useState(null)
2224
const [message, setMessage] = useState('')
2325
const formRef = useRef(null)
26+
const router = useRouter()
2427

2528
useEffect(() => {
26-
if (status) {
29+
if(status === 'loading') return
30+
31+
if(!session){
32+
router.push('/error/401')
33+
}
34+
35+
if (alert) {
2736
const timer = setTimeout(() => {
28-
setStatus(null)
37+
setAlert(null)
2938
setMessage('')
3039
}, 5000)
3140

3241
return () => clearTimeout(timer)
3342
}
34-
}, [status])
43+
}, [alert, session, status, router])
44+
45+
if(!session){
46+
return null
47+
}
3548

3649
const handleSubmit = async (event) => {
3750
event.preventDefault()
3851
const data = new FormData(event.target)
3952

4053
// Validasi form sebelum mengirimkan
4154
if (!data.get('jumlah') || !data.get('keterangan') || !data.get('metode')) {
42-
setStatus('error')
55+
setAlert('error')
4356
setMessage('Semua bidang harus diisi.')
4457

4558
return
@@ -64,15 +77,15 @@ const TambahKasbon = () =>{
6477
const result = await response.json()
6578

6679
if (response.ok) {
67-
setStatus('success')
80+
setAlert('success')
6881
setMessage('Permintaan Kasbon berhasil dikirim!')
6982
formRef.current.reset() // Kosongkan form setelah berhasil didaftarkan
7083
} else {
71-
setStatus('error')
84+
setAlert('error')
7285
setMessage(result.error || 'Terjadi kesalahan saat mengirim data permintaan kasbon.')
7386
}
7487
} catch (error) {
75-
setStatus('error')
88+
setAlert('error')
7689
setMessage('Terjadi kesalahan saat mengirim data.')
7790
}
7891
}
@@ -82,8 +95,8 @@ const TambahKasbon = () =>{
8295
<Card>
8396
<CardHeader title='Form Permintaan Kasbon' />
8497
<CardContent>
85-
{status && (
86-
<Alert severity={status} style={{ marginBottom: '1rem' }}>
98+
{alert && (
99+
<Alert severity={alert} style={{ marginBottom: '1rem' }}>
87100
{message}
88101
</Alert>
89102
)}

0 commit comments

Comments
 (0)