Compare commits

...

7 commits

9 changed files with 292 additions and 139 deletions

1
.env
View file

@ -1,6 +1,7 @@
VITE_BACKEND=http://localhost:4320/api/
# VITE_BACKEND=https://ocboapps.davaocity.gov.ph/esign-server/api/
# VITE_BACKEND=http://192.168.7.163/server/api/
# VITE_BACKEND_=http://192.168.7.165/server/api/
VITE_PESO=
VITE_PUBLICIP=58.69.136.59

View file

@ -3,9 +3,11 @@ package connections
var connectionString string = "root:superuser@tcp(localhost:3306)/iips"
var connectionStringPops string = "root:superuser@tcp(localhost:3306)/pops"
var connectionStringServer string = "iips:iipsuser@tcp(192.168.7.100:3306)/iips"
// var connectionStringServer string = "iips:iipsuser@tcp(192.168.7.100:3306)/iips"
var connectionStringPopsServer string = "pops:Pops2023!@tcp(192.168.76.10:3306)/pops"
var connectionStringServer string = "iips:iipsuser@tcp(192.168.7.165:3306)/iips"
func GetConnectionString() string {
return connectionString
}

View file

@ -37,7 +37,7 @@
"@nanostores/solid": "^1.1.1",
"@types/crypto-js": "^4.2.2",
"@types/node": "^24.10.4",
"sass-embedded": "^1.97.1",
"sass-embedded": "^1.97.2",
"typescript": "~5.8.3",
"vite": "^7.3.0",
"vite-plugin-compression2": "^2.4.0",

184
pnpm-lock.yaml generated
View file

@ -85,20 +85,20 @@ importers:
specifier: ^24.10.4
version: 24.10.4
sass-embedded:
specifier: ^1.97.1
version: 1.97.1
specifier: ^1.97.2
version: 1.97.2
typescript:
specifier: ~5.8.3
version: 5.8.3
vite:
specifier: ^7.3.0
version: 7.3.0(@types/node@24.10.4)(sass-embedded@1.97.1)(sass@1.97.1)
version: 7.3.0(@types/node@24.10.4)(sass-embedded@1.97.2)(sass@1.97.2)
vite-plugin-compression2:
specifier: ^2.4.0
version: 2.4.0(rollup@4.52.1)
vite-plugin-solid:
specifier: ^2.11.10
version: 2.11.10(solid-js@1.9.10)(vite@7.3.0(@types/node@24.10.4)(sass-embedded@1.97.1)(sass@1.97.1))
version: 2.11.10(solid-js@1.9.10)(vite@7.3.0(@types/node@24.10.4)(sass-embedded@1.97.2)(sass@1.97.2))
packages:
@ -1534,117 +1534,117 @@ packages:
safe-buffer@5.2.1:
resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
sass-embedded-all-unknown@1.97.1:
resolution: {integrity: sha512-0au5gUNibfob7W/g+ycBx74O22CL8vwHiZdEDY6J0uzMkHPiSJk//h0iRf5AUnMArFHJjFd3urIiQIaoRKYa1Q==}
sass-embedded-all-unknown@1.97.2:
resolution: {integrity: sha512-Fj75+vOIDv1T/dGDwEpQ5hgjXxa2SmMeShPa8yrh2sUz1U44bbmY4YSWPCdg8wb7LnwiY21B2KRFM+HF42yO4g==}
cpu: ['!arm', '!arm64', '!riscv64', '!x64']
sass-embedded-android-arm64@1.97.1:
resolution: {integrity: sha512-h62DmOiS2Jn87s8+8GhJcMerJnTKa1IsIa9iIKjLiqbAvBDKCGUs027RugZkM+Zx7I+vhPq86PUXBYZ9EkRxdw==}
sass-embedded-android-arm64@1.97.2:
resolution: {integrity: sha512-pF6I+R5uThrscd3lo9B3DyNTPyGFsopycdx0tDAESN6s+dBbiRgNgE4Zlpv50GsLocj/lDLCZaabeTpL3ubhYA==}
engines: {node: '>=14.0.0'}
cpu: [arm64]
os: [android]
sass-embedded-android-arm@1.97.1:
resolution: {integrity: sha512-B5dlv4utJ+yC8ZpBeWTHwSZPVKRlqA8pcaD0FAzeNm/DelIFgQUQtt0UwgYoAI6wDIiie5uSVpMK9l2DaCbiBQ==}
sass-embedded-android-arm@1.97.2:
resolution: {integrity: sha512-BPT9m19ttY0QVHYYXRa6bmqmS3Fa2EHByNUEtSVcbm5PkIk1ntmYkG9fn5SJpIMbNmFDGwHx+pfcZMmkldhnRg==}
engines: {node: '>=14.0.0'}
cpu: [arm]
os: [android]
sass-embedded-android-riscv64@1.97.1:
resolution: {integrity: sha512-tGup88vgaXPnUHEgDMujrt5rfYadvkiVjRb/45FJTx2hQFoGVbmUXz5XqUFjIIbEjQ3kAJqp86A2jy11s43UiQ==}
sass-embedded-android-riscv64@1.97.2:
resolution: {integrity: sha512-fprI8ZTJdz+STgARhg8zReI2QhhGIT9G8nS7H21kc3IkqPRzhfaemSxEtCqZyvDbXPcgYiDLV7AGIReHCuATog==}
engines: {node: '>=14.0.0'}
cpu: [riscv64]
os: [android]
sass-embedded-android-x64@1.97.1:
resolution: {integrity: sha512-CAzKjjzu90LZduye2O9+UGX1oScMyF5/RVOa5CxACKALeIS+3XL3LVdV47kwKPoBv5B1aFUvGLscY0CR7jBAbg==}
sass-embedded-android-x64@1.97.2:
resolution: {integrity: sha512-RswwSjURZxupsukEmNt2t6RGvuvIw3IAD5sDq1Pc65JFvWFY3eHqCmH0lG0oXqMg6KJcF0eOxHOp2RfmIm2+4w==}
engines: {node: '>=14.0.0'}
cpu: [x64]
os: [android]
sass-embedded-darwin-arm64@1.97.1:
resolution: {integrity: sha512-tyDzspzh5PbqdAFGtVKUXuf0up6Lff3c1U8J7+4Y7jW6AWRBnq95vTzIIxfnNifGCTI2fW5e7GAZpYygKpNwcw==}
sass-embedded-darwin-arm64@1.97.2:
resolution: {integrity: sha512-xcsZNnU1XZh21RE/71OOwNqPVcGBU0qT9A4k4QirdA34+ts9cDIaR6W6lgHOBR/Bnnu6w6hXJR4Xth7oFrefPA==}
engines: {node: '>=14.0.0'}
cpu: [arm64]
os: [darwin]
sass-embedded-darwin-x64@1.97.1:
resolution: {integrity: sha512-FMrRuSPI2ICt2M2SYaLbiG4yxn86D6ae+XtrRdrrBMhWprAcB7Iyu67bgRzZkipMZNIKKeTR7EUvJHgZzi5ixQ==}
sass-embedded-darwin-x64@1.97.2:
resolution: {integrity: sha512-T/9DTMpychm6+H4slHCAsYJRJ6eM+9H9idKlBPliPrP4T8JdC2Cs+ZOsYqrObj6eOtAD0fGf+KgyNhnW3xVafA==}
engines: {node: '>=14.0.0'}
cpu: [x64]
os: [darwin]
sass-embedded-linux-arm64@1.97.1:
resolution: {integrity: sha512-im80gfDWRivw9Su3r3YaZmJaCATcJgu3CsCSLodPk1b1R2+X/E12zEQayvrl05EGT9PDwTtuiqKgS4ND4xjwVg==}
sass-embedded-linux-arm64@1.97.2:
resolution: {integrity: sha512-Wh+nQaFer9tyE5xBPv5murSUZE/+kIcg8MyL5uqww6be9Iq+UmZpcJM7LUk+q8klQ9LfTmoDSNFA74uBqxD6IA==}
engines: {node: '>=14.0.0'}
cpu: [arm64]
os: [linux]
sass-embedded-linux-arm@1.97.1:
resolution: {integrity: sha512-48VxaTUApLyx1NXFdZhKqI/7FYLmz8Ju3Ki2V/p+mhn5raHgAiYeFgn8O1WGxTOh+hBb9y3FdSR5a8MNTbmKMQ==}
sass-embedded-linux-arm@1.97.2:
resolution: {integrity: sha512-yDRe1yifGHl6kibkDlRIJ2ZzAU03KJ1AIvsAh4dsIDgK5jx83bxZLV1ZDUv7a8KK/iV/80LZnxnu/92zp99cXQ==}
engines: {node: '>=14.0.0'}
cpu: [arm]
os: [linux]
sass-embedded-linux-musl-arm64@1.97.1:
resolution: {integrity: sha512-kD35WSD9o0279Ptwid3Jnbovo1FYnuG2mayYk9z4ZI4mweXEK6vTu+tlvCE/MdF/zFKSj11qaxaH+uzXe2cO5A==}
sass-embedded-linux-musl-arm64@1.97.2:
resolution: {integrity: sha512-NfUqZSjHwnHvpSa7nyNxbWfL5obDjNBqhHUYmqbHUcmqBpFfHIQsUPgXME9DKn1yBlBc3mWnzMxRoucdYTzd2Q==}
engines: {node: '>=14.0.0'}
cpu: [arm64]
os: [linux]
sass-embedded-linux-musl-arm@1.97.1:
resolution: {integrity: sha512-FUFs466t3PVViVOKY/60JgLLtl61Pf7OW+g5BeEfuqVcSvYUECVHeiYHtX1fT78PEVa0h9tHpM6XpWti+7WYFA==}
sass-embedded-linux-musl-arm@1.97.2:
resolution: {integrity: sha512-GIO6xfAtahJAWItvsXZ3MD1HM6s8cKtV1/HL088aUpKJaw/2XjTCveiOO2AdgMpLNztmq9DZ1lx5X5JjqhS45g==}
engines: {node: '>=14.0.0'}
cpu: [arm]
os: [linux]
sass-embedded-linux-musl-riscv64@1.97.1:
resolution: {integrity: sha512-ZgpYps5YHuhA2+KiLkPukRbS5298QObgUhPll/gm5i0LOZleKCwrFELpVPcbhsSBuxqji2uaag5OL+n3JRBVVg==}
sass-embedded-linux-musl-riscv64@1.97.2:
resolution: {integrity: sha512-qtM4dJ5gLfvyTZ3QencfNbsTEShIWImSEpkThz+Y2nsCMbcMP7/jYOA03UWgPfEOKSehQQ7EIau7ncbFNoDNPQ==}
engines: {node: '>=14.0.0'}
cpu: [riscv64]
os: [linux]
sass-embedded-linux-musl-x64@1.97.1:
resolution: {integrity: sha512-wcAigOyyvZ6o1zVypWV7QLZqpOEVnlBqJr9MbpnRIm74qFTSbAEmShoh8yMXBymzuVSmEbThxAwW01/TLf62tA==}
sass-embedded-linux-musl-x64@1.97.2:
resolution: {integrity: sha512-ZAxYOdmexcnxGnzdsDjYmNe3jGj+XW3/pF/n7e7r8y+5c6D2CQRrCUdapLgaqPt1edOPQIlQEZF8q5j6ng21yw==}
engines: {node: '>=14.0.0'}
cpu: [x64]
os: [linux]
sass-embedded-linux-riscv64@1.97.1:
resolution: {integrity: sha512-9j1qE1ZrLMuGb+LUmBzw93Z4TNfqlRkkxjPVZy6u5vIggeSfvGbte7eRoYBNWX6SFew/yBCL90KXIirWFSGrlQ==}
sass-embedded-linux-riscv64@1.97.2:
resolution: {integrity: sha512-reVwa9ZFEAOChXpDyNB3nNHHyAkPMD+FTctQKECqKiVJnIzv2EaFF6/t0wzyvPgBKeatA8jszAIeOkkOzbYVkQ==}
engines: {node: '>=14.0.0'}
cpu: [riscv64]
os: [linux]
sass-embedded-linux-x64@1.97.1:
resolution: {integrity: sha512-7nrLFYMH/UgvEgXR5JxQJ6y9N4IJmnFnYoDxN0nw0jUp+CQWQL4EJ4RqAKTGelneueRbccvt2sEyPK+X0KJ9Jg==}
sass-embedded-linux-x64@1.97.2:
resolution: {integrity: sha512-bvAdZQsX3jDBv6m4emaU2OMTpN0KndzTAMgJZZrKUgiC0qxBmBqbJG06Oj/lOCoXGCxAvUOheVYpezRTF+Feog==}
engines: {node: '>=14.0.0'}
cpu: [x64]
os: [linux]
sass-embedded-unknown-all@1.97.1:
resolution: {integrity: sha512-oPSeKc7vS2dx3ZJHiUhHKcyqNq0GWzAiR8zMVpPd/kVMl5ZfVyw+5HTCxxWDBGkX02lNpou27JkeBPCaneYGAQ==}
sass-embedded-unknown-all@1.97.2:
resolution: {integrity: sha512-86tcYwohjPgSZtgeU9K4LikrKBJNf8ZW/vfsFbdzsRlvc73IykiqanufwQi5qIul0YHuu9lZtDWyWxM2dH/Rsg==}
os: ['!android', '!darwin', '!linux', '!win32']
sass-embedded-win32-arm64@1.97.1:
resolution: {integrity: sha512-L5j7J6CbZgHGwcfVedMVpM3z5MYeighcyZE8GF2DVmjWzZI3JtPKNY11wNTD/P9o1Uql10YPOKhGH0iWIXOT7Q==}
sass-embedded-win32-arm64@1.97.2:
resolution: {integrity: sha512-Cv28q8qNjAjZfqfzTrQvKf4JjsZ6EOQ5FxyHUQQeNzm73R86nd/8ozDa1Vmn79Hq0kwM15OCM9epanDuTG1ksA==}
engines: {node: '>=14.0.0'}
cpu: [arm64]
os: [win32]
sass-embedded-win32-x64@1.97.1:
resolution: {integrity: sha512-rfaZAKXU8cW3E7gvdafyD6YtgbEcsDeT99OEiHXRT0UGFuXT8qCOjpAwIKaOA3XXr2d8S42xx6cXcaZ1a+1fgw==}
sass-embedded-win32-x64@1.97.2:
resolution: {integrity: sha512-DVxLxkeDCGIYeyHLAvWW3yy9sy5Ruk5p472QWiyfyyG1G1ASAR8fgfIY5pT0vE6Rv+VAKVLwF3WTspUYu7S1/Q==}
engines: {node: '>=14.0.0'}
cpu: [x64]
os: [win32]
sass-embedded@1.97.1:
resolution: {integrity: sha512-wH3CbOThHYGX0bUyqFf7laLKyhVWIFc2lHynitkqMIUCtX2ixH9mQh0bN7+hkUu5BFt/SXvEMjFbkEbBMpQiSQ==}
sass-embedded@1.97.2:
resolution: {integrity: sha512-lKJcskySwAtJ4QRirKrikrWMFa2niAuaGenY2ElHjd55IwHUiur5IdKu6R1hEmGYMs4Qm+6rlRW0RvuAkmcryg==}
engines: {node: '>=16.0.0'}
hasBin: true
sass@1.97.1:
resolution: {integrity: sha512-uf6HoO8fy6ClsrShvMgaKUn14f2EHQLQRtpsZZLeU/Mv0Q1K5P0+x2uvH6Cub39TVVbWNSrraUhDAoFph6vh0A==}
sass@1.97.2:
resolution: {integrity: sha512-y5LWb0IlbO4e97Zr7c3mlpabcbBtS+ieiZ9iwDooShpFKWXf62zz5pEPdwrLYm+Bxn1fnbwFGzHuCLSA9tBmrw==}
engines: {node: '>=14.0.0'}
hasBin: true
@ -3249,65 +3249,65 @@ snapshots:
safe-buffer@5.2.1: {}
sass-embedded-all-unknown@1.97.1:
sass-embedded-all-unknown@1.97.2:
dependencies:
sass: 1.97.1
sass: 1.97.2
optional: true
sass-embedded-android-arm64@1.97.1:
sass-embedded-android-arm64@1.97.2:
optional: true
sass-embedded-android-arm@1.97.1:
sass-embedded-android-arm@1.97.2:
optional: true
sass-embedded-android-riscv64@1.97.1:
sass-embedded-android-riscv64@1.97.2:
optional: true
sass-embedded-android-x64@1.97.1:
sass-embedded-android-x64@1.97.2:
optional: true
sass-embedded-darwin-arm64@1.97.1:
sass-embedded-darwin-arm64@1.97.2:
optional: true
sass-embedded-darwin-x64@1.97.1:
sass-embedded-darwin-x64@1.97.2:
optional: true
sass-embedded-linux-arm64@1.97.1:
sass-embedded-linux-arm64@1.97.2:
optional: true
sass-embedded-linux-arm@1.97.1:
sass-embedded-linux-arm@1.97.2:
optional: true
sass-embedded-linux-musl-arm64@1.97.1:
sass-embedded-linux-musl-arm64@1.97.2:
optional: true
sass-embedded-linux-musl-arm@1.97.1:
sass-embedded-linux-musl-arm@1.97.2:
optional: true
sass-embedded-linux-musl-riscv64@1.97.1:
sass-embedded-linux-musl-riscv64@1.97.2:
optional: true
sass-embedded-linux-musl-x64@1.97.1:
sass-embedded-linux-musl-x64@1.97.2:
optional: true
sass-embedded-linux-riscv64@1.97.1:
sass-embedded-linux-riscv64@1.97.2:
optional: true
sass-embedded-linux-x64@1.97.1:
sass-embedded-linux-x64@1.97.2:
optional: true
sass-embedded-unknown-all@1.97.1:
sass-embedded-unknown-all@1.97.2:
dependencies:
sass: 1.97.1
sass: 1.97.2
optional: true
sass-embedded-win32-arm64@1.97.1:
sass-embedded-win32-arm64@1.97.2:
optional: true
sass-embedded-win32-x64@1.97.1:
sass-embedded-win32-x64@1.97.2:
optional: true
sass-embedded@1.97.1:
sass-embedded@1.97.2:
dependencies:
'@bufbuild/protobuf': 2.9.0
buffer-builder: 0.2.0
@ -3318,26 +3318,26 @@ snapshots:
sync-child-process: 1.0.2
varint: 6.0.0
optionalDependencies:
sass-embedded-all-unknown: 1.97.1
sass-embedded-android-arm: 1.97.1
sass-embedded-android-arm64: 1.97.1
sass-embedded-android-riscv64: 1.97.1
sass-embedded-android-x64: 1.97.1
sass-embedded-darwin-arm64: 1.97.1
sass-embedded-darwin-x64: 1.97.1
sass-embedded-linux-arm: 1.97.1
sass-embedded-linux-arm64: 1.97.1
sass-embedded-linux-musl-arm: 1.97.1
sass-embedded-linux-musl-arm64: 1.97.1
sass-embedded-linux-musl-riscv64: 1.97.1
sass-embedded-linux-musl-x64: 1.97.1
sass-embedded-linux-riscv64: 1.97.1
sass-embedded-linux-x64: 1.97.1
sass-embedded-unknown-all: 1.97.1
sass-embedded-win32-arm64: 1.97.1
sass-embedded-win32-x64: 1.97.1
sass-embedded-all-unknown: 1.97.2
sass-embedded-android-arm: 1.97.2
sass-embedded-android-arm64: 1.97.2
sass-embedded-android-riscv64: 1.97.2
sass-embedded-android-x64: 1.97.2
sass-embedded-darwin-arm64: 1.97.2
sass-embedded-darwin-x64: 1.97.2
sass-embedded-linux-arm: 1.97.2
sass-embedded-linux-arm64: 1.97.2
sass-embedded-linux-musl-arm: 1.97.2
sass-embedded-linux-musl-arm64: 1.97.2
sass-embedded-linux-musl-riscv64: 1.97.2
sass-embedded-linux-musl-x64: 1.97.2
sass-embedded-linux-riscv64: 1.97.2
sass-embedded-linux-x64: 1.97.2
sass-embedded-unknown-all: 1.97.2
sass-embedded-win32-arm64: 1.97.2
sass-embedded-win32-x64: 1.97.2
sass@1.97.1:
sass@1.97.2:
dependencies:
chokidar: 4.0.3
immutable: 5.1.3
@ -3524,7 +3524,7 @@ snapshots:
transitivePeerDependencies:
- rollup
vite-plugin-solid@2.11.10(solid-js@1.9.10)(vite@7.3.0(@types/node@24.10.4)(sass-embedded@1.97.1)(sass@1.97.1)):
vite-plugin-solid@2.11.10(solid-js@1.9.10)(vite@7.3.0(@types/node@24.10.4)(sass-embedded@1.97.2)(sass@1.97.2)):
dependencies:
'@babel/core': 7.28.4
'@types/babel__core': 7.20.5
@ -3532,12 +3532,12 @@ snapshots:
merge-anything: 5.1.7
solid-js: 1.9.10
solid-refresh: 0.6.3(solid-js@1.9.10)
vite: 7.3.0(@types/node@24.10.4)(sass-embedded@1.97.1)(sass@1.97.1)
vitefu: 1.1.1(vite@7.3.0(@types/node@24.10.4)(sass-embedded@1.97.1)(sass@1.97.1))
vite: 7.3.0(@types/node@24.10.4)(sass-embedded@1.97.2)(sass@1.97.2)
vitefu: 1.1.1(vite@7.3.0(@types/node@24.10.4)(sass-embedded@1.97.2)(sass@1.97.2))
transitivePeerDependencies:
- supports-color
vite@7.3.0(@types/node@24.10.4)(sass-embedded@1.97.1)(sass@1.97.1):
vite@7.3.0(@types/node@24.10.4)(sass-embedded@1.97.2)(sass@1.97.2):
dependencies:
esbuild: 0.27.2
fdir: 6.5.0(picomatch@4.0.3)
@ -3548,12 +3548,12 @@ snapshots:
optionalDependencies:
'@types/node': 24.10.4
fsevents: 2.3.3
sass: 1.97.1
sass-embedded: 1.97.1
sass: 1.97.2
sass-embedded: 1.97.2
vitefu@1.1.1(vite@7.3.0(@types/node@24.10.4)(sass-embedded@1.97.1)(sass@1.97.1)):
vitefu@1.1.1(vite@7.3.0(@types/node@24.10.4)(sass-embedded@1.97.2)(sass@1.97.2)):
optionalDependencies:
vite: 7.3.0(@types/node@24.10.4)(sass-embedded@1.97.1)(sass@1.97.1)
vite: 7.3.0(@types/node@24.10.4)(sass-embedded@1.97.2)(sass@1.97.2)
webworkify@1.5.0: {}

View file

@ -9,6 +9,7 @@ interface Props {
border?: string
opacity?: number
trigger: boolean
width?: string
}
export default (props: Props) => {
@ -17,18 +18,18 @@ export default (props: Props) => {
<Show when={props.trigger}>
<div class="modal">
<Show when={props.border}>
<div class="modal__content" style={`background-color: ${props.background}; color: ${props.color}; border: 2px solid ${props.border}; opacity: ${props.opacity || 1}`}>
<div class="modal__content" style={`background-color: ${props.background}; color: ${props.color}; border: 2px solid ${props.border}; opacity: ${props.opacity || 1}; width: ${props.width || 'auto'}`}>
{props.children}
</div>
</Show>
<Show when={!props.border}>
<div class="modal__content" style={`background-color: ${props.background}; color: ${props.color}; opacity: ${props.opacity || 1}; box-shadow: 5px 4px 6px rgba(0, 0, 0, 0.5)`}>
<div class="modal__content" style={`background-color: ${props.background}; color: ${props.color}; opacity: ${props.opacity || 1}; box-shadow: 5px 4px 6px rgba(0, 0, 0, 0.5); width: ${props.width || 'auto'}`}>
{props.children}
</div>
</Show>
</div>
</Show>
</Show >
</>
)
}

View file

@ -32,7 +32,7 @@ import {
_type,
_units,
} from '../../stores/pdfinfo.ts';
import { checkConnection, createPdfElectrical, createPdfOccupancy, getApi, getApiMulti, postApi, statusPopsApi, voidPopsApi, saveNewName, saveNewPassword } from '../../utils/functions/index.ts';
import { checkConnection, createPdfElectrical, createPdfOccupancy, getApi, getApiMulti, postApi, statusPopsApi, voidPopsApi, saveNewName, saveNewPassword, securePassword } from '../../utils/functions/index.ts';
import './Assessor.sass';
import { FaSolidUserGear } from 'solid-icons/fa'
@ -517,8 +517,50 @@ export default () => {
setConfigNotification(true)
}
const checkCurrentPassword = async () => {
const encCurrentPasswordV1 = await securePassword(configPassword(), 'v1')
const encCurrentPasswordV2 = await securePassword(configPassword(), 'v2')
if (encCurrentPasswordV1 === configEncPassword() || encCurrentPasswordV2 === configEncPassword()) {
if (configNewPassword() === '') {
setConfigError('New Password not provided')
setConfigNewEncPassword('')
} else {
setConfigError('')
encryptNewPassword()
}
} else {
setConfigError('Invalid Password')
setConfigNewEncPassword('')
}
}
const encryptNewPassword = async () => {
const encNewPassword = await securePassword(configNewPassword(), 'v2')
setConfigNewEncPassword(encNewPassword)
}
const getPassword = async () => {
const response = await getApi('get-password', employeeId())
setConfigEncPassword(response)
}
const closeConfig = () => {
setConfigNotification(false)
setOpenConfig(false)
setConfigEncPassword('')
setConfigNewName('')
setConfigPassword('')
setConfigNewPassword('')
setConfigNewEncPassword('')
setConfigError('')
}
onMount(async () => {
const logged = await checkLogged()
await getPassword()
if (logged) {
setSelectedType('Print')
@ -542,6 +584,17 @@ export default () => {
}
})
createEffect(() => {
if (configPassword() !== '') {
checkCurrentPassword();
} else checkCurrentPassword();
if (configNewPassword() !== '') {
encryptNewPassword()
} else encryptNewPassword()
})
return (
<>
<Page alignment="column">
@ -554,21 +607,21 @@ export default () => {
</Row>
</Link>
<Row content="left" gap={1}>
<Row content="left" gap={1.75}>
<Box curved thickness={0} padding="1.25rem 2.25rem" background="#0f131d56">
<span class="profile">
{employeeName()}
</span>
</Box>
<Clickable onClick={() => setOpenConfig(true)}>
<Row gap={0.5}>
<FaSolidUserGear size={25} />
<Row gap={0.25}>
<FaSolidUserGear size={20} />
<span>Config</span>
</Row>
</Clickable>
<Clickable onClick={logout}>
<Row gap={0.5}>
<FiLogOut size={25} />
<Row gap={0.25}>
<FiLogOut size={20} />
<span>Logout</span>
</Row>
</Clickable>
@ -963,7 +1016,8 @@ export default () => {
</Modal>
</div>
<Modal trigger={openConfig()} background="#16212c" color="#ffffffed" opacity={0.8}>
<Modal trigger={openConfig()} background="#16212c" color="#ffffffed" opacity={0.8} width='30rem'>
<Padding top={1} bottom={1} left={4} right={4}>
<section class='config'>
<div class='config__row'>
@ -971,11 +1025,6 @@ export default () => {
<span>{employeeName()}</span>
</div>
<div class='config__row'>
Encrypted Password:
<span>{configEncPassword()}</span>
</div>
<div class='config__edit'>
<span class='config__edit__title'>Change Displayed Name</span>
<Input value={configNewName()} onChange={setConfigNewName} placeholder='Enter new name' />
@ -984,11 +1033,14 @@ export default () => {
<div class='config__edit'>
<span class='config__edit__title'>Change Password</span>
<Input value={configPassword()} onChange={setConfigPassword} placeholder='Enter current password' />
<Input value={configNewPassword()} onChange={setConfigNewPassword} placeholder='Enter new password' />
<Input isPassword value={configPassword()} onChange={setConfigPassword} placeholder='Enter current password' />
<Input isPassword value={configNewPassword()} onChange={setConfigNewPassword} placeholder='Enter new password' />
<Show when={configNewPassword().length !== 0}>
<span style="padding: 1rem 0 0 0">New Encrypted Password:</span>
<span style="padding: 1.75rem 0 0 0">Current Encrypted Password:</span>
<span>{configEncPassword()}</span>
<span style="padding: 0.75rem 0 0 0">New Encrypted Password:</span>
<span>{configNewEncPassword()}</span>
</Show>
</div>
@ -1007,6 +1059,28 @@ export default () => {
</section>
</Padding>
</Modal >
{/* <div onClick={closeConfig}>
<Modal trigger={configNotification() === true} background="#123220ff" color="#cdfbe1f0" opacity={0.8}>
<Padding top={1} bottom={1} left={4} right={4}>
<Column>
<Row gap={4}>
<FaSolidThumbsUp size={75} />
<Box curved thickness={3} color="#cdfbe1f0" padding="1rem">
<span class="approval">Approved</span>
</Box>
</Row>
<Row padding="2rem 0 0 0">
<h2>{approvedApplication()}</h2>
</Row>
<Row>
<span class="close-text">Click anywhere to proceed</span>
</Row>
</Column>
</Padding>
</Modal >
</div> */}
</>
)
}

View file

@ -14,3 +14,19 @@
opacity: 0.6
width: 100%
text-align: center
.modal-tooltip
display: flex
flex-direction: column
&__group
display: flex
flex-direction: column
padding: 0 0 1rem 0
&__title
font-weight: bold
padding: 0 0 0.25rem 0
&__info
padding: 0 0 0.15rem 0

View file

@ -2,13 +2,14 @@ import { useNavigate } from '@solidjs/router'
import { IoChevronBack } from 'solid-icons/io'
import { createEffect, createSignal } from 'solid-js'
import { Show } from 'solid-js/web'
import { Box, Button, Column, Combobox, Display, Input, Link, Logo, Modal, Padding, Page, Radio, Row, Switch } from '../../components'
import { Box, Button, Clickable, Column, Combobox, Display, Input, Link, Logo, Modal, Padding, Page, Radio, Row, Switch } from '../../components'
import { _employeeId, _employeeName } from '../../stores/employee'
import { checkConnection, getApi, securePassword } from '../../utils/functions'
import { VsQuestion } from 'solid-icons/vs'
import './Login.sass'
export default () => {
const APPROVERNAME = sessionStorage.getItem('head')
const APPROVERNAME = sessionStorage.getItem('head')!
const navigate = useNavigate()
const assessors = JSON.parse(sessionStorage.getItem('registered')!)
const roles = ['Assessor', 'Approver']
@ -20,6 +21,7 @@ export default () => {
const [errorMessage, setErrorMessage] = createSignal('')
const [connected, setConnected] = createSignal(true)
const [encryptionVersion, setEncryptionVersion] = createSignal('v1')
const [openTooltip, setOpenTooltip] = createSignal(false)
const login = async () => {
setConnected(await checkConnection())
@ -106,8 +108,11 @@ export default () => {
<Row>
<span class="box-title">Login</span>
</Row>
<Row content='right'>
<Row content='right' gap={0.5}>
<Switch label={`Enc ${encryptionVersion()}`} checked={encryptionVersion() === 'v1' ? false : true} onChange={() => encryptionVersion() === 'v1' ? setEncryptionVersion('v2') : setEncryptionVersion('v1')} />
<Clickable onClick={() => setOpenTooltip(true)}>
<VsQuestion size={28} style="cursor: pointer" />
</Clickable>
</Row>
<Padding top={2} left={2} right={2} bottom={0}>
@ -225,6 +230,40 @@ export default () => {
</Padding>
</Modal>
</div>
<div onClick={() => setOpenTooltip(false)}>
<Modal trigger={openTooltip()} background="#252525ff" color="#dfe7fbf0" opacity={0.8} width='52rem'>
<Padding top={1} bottom={1} left={1.5} right={1.5}>
<section class='modal-tooltip'>
<div class='modal-tooltip__group'>
<span class='modal-tooltip__title'>Enc v1 (Encryption Version 1)</span>
<span class='modal-tooltip__info'>Use this mode if your password has not been changed.</span>
<span class='modal-tooltip__info'>It is recommended that you update your password after logging in. Open the 'Config' menu in the upper right.</span>
</div>
<div class='modal-tooltip__group'>
<span class='modal-tooltip__title'>Enc v2 (Encryption Version 2)</span>
<span class='modal-tooltip__info'>The new default password encryption.</span>
<span class='modal-tooltip__info'>Use this mode if you've recently registered or changed your password.</span>
</div>
<div class='modal-tooltip__group'>
<span class='modal-tooltip__title'>Note:</span>
<span class='modal-tooltip__info'>To ensure security and privacy, avoid sharing your password.</span>
<span class='modal-tooltip__info'>Your password's encryption is irreversible, which means it cannot be decrypted.</span>
<span class='modal-tooltip__info'>Only encrypted passwords are saved in the database.</span>
<span class='modal-tooltip__info'>Only you know your password. If forgotten, the account will be locked.</span>
<span class='modal-tooltip__info'>If this happens, contact the IT department and request that your account be reset. You will be required to register again.</span>
</div>
<Row>
<span class="close-text">Click anywhere to close</span>
</Row>
</section>
</Padding>
</Modal>
</div>
</>
)
}

View file

@ -1,7 +1,6 @@
import { Tabs } from '@kobalte/core/tabs'
import { useNavigate } from '@solidjs/router'
import dayjs from 'dayjs'
import { BiRegularErrorAlt } from 'solid-icons/bi'
import { FaSolidThumbsUp } from 'solid-icons/fa'
import { FiLogOut } from 'solid-icons/fi'
import { VsRefresh } from 'solid-icons/vs'
@ -13,7 +12,7 @@ import { Show } from 'solid-js/web'
import './Main.sass'
const PESO = import.meta.env.VITE_PESO
const ID = sessionStorage.get('headid')
const ID = sessionStorage.getItem('id')!
const PUBLICIP = import.meta.env.VITE_PUBLICIP
export default () => {
@ -25,6 +24,7 @@ export default () => {
const [location, setLocation] = createSignal('')
const [type, setType] = createSignal('')
const [applicationId, setApplicationId] = createSignal(0)
// const [assessorId, setAssessorId] = createSignal(0)
// const [gflgu, setGflgu] = createSignal<number[]>([])
@ -48,7 +48,7 @@ export default () => {
const [employeeId, setEmployeeId] = createSignal(0)
const [employeeName, setEmployeeName] = createSignal('')
const [apology, setApology] = createSignal(false)
// const [apology, setApology] = createSignal(false)
const [openConfig, setOpenConfig] = createSignal(false)
const [configEncPassword, setConfigEncPassword] = createSignal('')
const [configNewName, setConfigNewName] = createSignal('')
@ -279,6 +279,11 @@ export default () => {
return true
}
const deleteHeadName = async () => {
sessionStorage.removeItem('head')
sessionStorage.removeItem('headid')
}
const geteSignId = async () => {
try {
const response = await getApi('get-esignid', ID)
@ -321,8 +326,10 @@ export default () => {
}
const checkCurrentPassword = async () => {
const encCurrentPassword = await securePassword(configPassword(), 'v2')
if (encCurrentPassword === configEncPassword()) {
const encCurrentPasswordV1 = await securePassword(configPassword(), 'v1')
const encCurrentPasswordV2 = await securePassword(configPassword(), 'v2')
if (encCurrentPasswordV1 === configEncPassword() || encCurrentPasswordV2 === configEncPassword()) {
if (configNewPassword() === '') {
setConfigError('New Password not provided')
setConfigNewEncPassword('')
@ -372,7 +379,20 @@ export default () => {
// navigate('/profile')
// }
const closeConfig = () => {
setConfigNotification(false)
setOpenConfig(false)
setConfigEncPassword('')
setConfigNewName('')
setConfigPassword('')
setConfigNewPassword('')
setConfigNewEncPassword('')
setConfigError('')
}
onMount(async () => {
await deleteHeadName()
const logged = await checkLogged()
if (logged) {
@ -381,7 +401,9 @@ export default () => {
})
createEffect(() => {
if (configPassword !== '') {
if (configPassword() !== '') {
checkCurrentPassword()
} else {
checkCurrentPassword()
}
@ -404,19 +426,19 @@ export default () => {
</Row>
</Link>
<Row content="left" gap={1.5}>
<Row content="left" gap={1.75}>
<Box curved thickness={0} padding="1.25rem 2.25rem" background="#0f131d56">
<span class="name">{employeeName()}</span>
</Box>
<Clickable onClick={() => setOpenConfig(true)}>
<Row gap={0.5}>
<FaSolidUserGear size={25} />
<Row gap={0.25}>
<FaSolidUserGear size={20} />
<span>Config</span>
</Row>
</Clickable>
<Clickable onClick={logout}>
<Row gap={0.5}>
<FiLogOut size={25} />
<Row gap={0.25}>
<FiLogOut size={20} />
<span>Logout</span>
</Row>
</Clickable>
@ -496,8 +518,6 @@ export default () => {
background="#121e2acc"
color="#ffffffec"
function={async () => {
// setApology(true)
// setErrorMessage('Modification of Occupancy Printing has not yet finished')
await getopdetails('occupancy', item)
}}
>
@ -709,7 +729,7 @@ export default () => {
</Modal>
</div>
<div onClick={() => setApology(false)}>
{/* <div onClick={() => setApology(false)}>
<Modal trigger={apology()} background="#562020ff" color="#ffebebe6" opacity={0.8}>
<Padding top={1} bottom={1} left={4} right={4}>
<Column>
@ -736,9 +756,9 @@ export default () => {
</Column>
</Padding>
</Modal>
</div>
</div> */}
<Modal trigger={openConfig()} background="#16212c" color="#ffffffed" opacity={0.8}>
<Modal trigger={openConfig()} background="#16212c" color="#ffffffed" opacity={0.8} width='30rem'>
<Padding top={1} bottom={1} left={4} right={4}>
<section class='config'>
<div class='config__row'>
@ -746,10 +766,7 @@ export default () => {
<span>{employeeName()}</span>
</div>
<div class='config__row'>
Encrypted Password:
<span>{configEncPassword()}</span>
</div>
<div class='config__edit'>
<span class='config__edit__title'>Change Displayed Name</span>
@ -759,11 +776,14 @@ export default () => {
<div class='config__edit'>
<span class='config__edit__title'>Change Password</span>
<Input value={configPassword()} onChange={setConfigPassword} placeholder='Enter current password' />
<Input value={configNewPassword()} onChange={setConfigNewPassword} placeholder='Enter new password' />
<Input isPassword value={configPassword()} onChange={setConfigPassword} placeholder='Enter current password' />
<Input isPassword value={configNewPassword()} onChange={setConfigNewPassword} placeholder='Enter new password' />
<Show when={configNewPassword().length !== 0}>
<span style="padding: 1rem 0 0 0">New Encrypted Password:</span>
<span style="padding: 1.75rem 0 0 0">Current Encrypted Password:</span>
<span>{configEncPassword()}</span>
<span style="padding: 0.75rem 0 0 0">New Encrypted Password:</span>
<span>{configNewEncPassword()}</span>
</Show>
</div>
@ -783,7 +803,7 @@ export default () => {
</Padding>
</Modal >
<div onClick={setConfigNotification(false)}>
<div onClick={closeConfig}>
<Modal trigger={configNotification() === true} background="#123220ff" color="#cdfbe1f0" opacity={0.8}>
<Padding top={1} bottom={1} left={4} right={4}>
<Column>