From 69a64879b6a33886e6b57ea8d251cc6bee6abadb Mon Sep 17 00:00:00 2001 From: Patrick Alvin Alcala Date: Tue, 30 Sep 2025 09:15:55 +0800 Subject: [PATCH 1/6] Fixed registration --- src/pages/RegisterPage/Register.sass | 5 ++ src/pages/RegisterPage/Register.tsx | 81 +++++++++++++++++++--------- 2 files changed, 62 insertions(+), 24 deletions(-) diff --git a/src/pages/RegisterPage/Register.sass b/src/pages/RegisterPage/Register.sass index e4f1a10..7804287 100644 --- a/src/pages/RegisterPage/Register.sass +++ b/src/pages/RegisterPage/Register.sass @@ -29,6 +29,11 @@ width: 100% text-align: center +.sub-message + padding: 3rem 0 0 0 + font-size: 0.75rem + font-weight: 500 + .filefield display: flex flex-direction: column diff --git a/src/pages/RegisterPage/Register.tsx b/src/pages/RegisterPage/Register.tsx index 72632b2..b1cbda5 100644 --- a/src/pages/RegisterPage/Register.tsx +++ b/src/pages/RegisterPage/Register.tsx @@ -6,6 +6,7 @@ import { ofetch } from 'ofetch' import { SHA3, SHA1 } from 'crypto-js' import dayjs from 'dayjs' import { FileField } from '@kobalte/core/file-field' +import { useNavigate } from '@solidjs/router' export default () => { const API = import.meta.env.VITE_BACKEND @@ -13,6 +14,8 @@ export default () => { const assessors = JSON.parse(sessionStorage.getItem('assessors')!) const roles = ['ASSESSOR', 'APPROVER'] + const navigate = useNavigate() + const [role, setRole] = createSignal('') const [name, setName] = createSignal('') const [password, setPassword] = createSignal('') @@ -46,6 +49,7 @@ export default () => { try { register() setSaved(true) + updateRegistered() } catch { setSaved(false) } @@ -99,6 +103,27 @@ export default () => { } } + const getAssessors = async (): Promise => { + let assessorsNameList: string[] = [] + + try { + const assessors = await ofetch(API + 'get-list-assessors', { parseResponse: JSON.parse }) + assessorsNameList = [...assessors.result] + return [...assessorsNameList] + } catch { + return [] + } + } + + const updateRegistered = async () => { + const registered = await getAssessors() + sessionStorage.setItem('assessors', JSON.stringify([...registered])) + } + + const gotoIndex = () => { + navigate('/') + } + createEffect(async () => { if (role() === 'APPROVER') { try { @@ -210,7 +235,7 @@ export default () => {

Upload Signature

- setFile(data)} accept=".jpg, .jpeg, .png, .webp, .avif"> + setFile(data)} accept=".png"> Drag and drop or click to upload file @@ -256,30 +281,38 @@ export default () => { - - - - -

e-Sign Registration Completed

-
- -

Your Digital Signature

-
+
+ + + + + +

e-Sign Registration Completed

+
+
+ +

Representation of your digital signature

+
- - -
-
- Image of signature -
- Digitally signed by: - {name()} - Date: {getDate()} -
-
-
-
-
+ + +
+
+ Image of signature +
+ Digitally signed by: + {name()} + Date: {getDate()} +
+
+ + + Click anywhere to close + + + + +
) } From b6f85461147666f8ecc8f4c479cc9e5c55dafbdd Mon Sep 17 00:00:00 2001 From: Patrick Alvin Alcala Date: Tue, 30 Sep 2025 09:37:48 +0800 Subject: [PATCH 2/6] Updated backend --- backend/main.go | 33 ++++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/backend/main.go b/backend/main.go index 8757460..5b692b6 100644 --- a/backend/main.go +++ b/backend/main.go @@ -158,6 +158,26 @@ func connect() { "result2": array2, }) + case "get-list-registered": + array := []string{} + + results, err := db.Query("SELECT IFNULL(employeeid, 0) AS result FROM esign WHERE employeeid <> ?", 276) + if err != nil { + c.AbortWithError(http.StatusBadRequest, err) + c.String(http.StatusBadRequest, err.Error()) + } + for results.Next() { + err = results.Scan(&result) + if err != nil { + c.AbortWithError(http.StatusBadRequest, err) + c.String(http.StatusBadRequest, err.Error()) + } + array = append(array, result) + } + c.JSON(http.StatusOK, gin.H{ + "result": array, + }) + } }) @@ -466,7 +486,7 @@ func connect() { "result": result, }) - case "get-password": + case "get-password": err := db.QueryRow("SELECT IFNULL(password, '') AS result FROM esign WHERE employeeid = ?", data).Scan(&result) if err != nil { if err == sql.ErrNoRows { @@ -480,6 +500,17 @@ func connect() { c.JSON(http.StatusOK, gin.H{ "result": result, }) + + case "get-employeename": + err := db.QueryRow("SELECT IFNULL(employeename, '') AS result FROM employee WHERE employeeid = ?", data).Scan(&result) + if err != nil { + c.AbortWithError(http.StatusBadRequest, err) + c.String(http.StatusBadRequest, err.Error()) + } + c.JSON(http.StatusOK, gin.H{ + "result": result, + }) + } }) From aa31a79b6dd09d6adf79921b83a1a8bac170c8ae Mon Sep 17 00:00:00 2001 From: Patrick Alvin Alcala Date: Tue, 30 Sep 2025 09:38:07 +0800 Subject: [PATCH 3/6] Fixed modal --- src/components/Modal/Modal.tsx | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/src/components/Modal/Modal.tsx b/src/components/Modal/Modal.tsx index a695cab..c91b46c 100644 --- a/src/components/Modal/Modal.tsx +++ b/src/components/Modal/Modal.tsx @@ -7,24 +7,27 @@ interface Props { color?: string border?: string opacity?: number + trigger: boolean } export default (props: Props) => { return ( <> - +
) } From 439083a55be80a4d925084acaf7cb47718c39f62 Mon Sep 17 00:00:00 2001 From: Patrick Alvin Alcala Date: Tue, 30 Sep 2025 09:38:21 +0800 Subject: [PATCH 4/6] Added close-text --- src/index.sass | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/index.sass b/src/index.sass index 65b2f13..329dc78 100644 --- a/src/index.sass +++ b/src/index.sass @@ -15,6 +15,11 @@ z-index: -1 opacity: 1 +.close-text + padding: 3rem 0 0 0 + font-size: 0.75rem + font-weight: 500 + .inter @extend .body font-family: fonts.$Inter From a8d1c1fdf94683309a952fea0dd41685ff83c89f Mon Sep 17 00:00:00 2001 From: Patrick Alvin Alcala Date: Tue, 30 Sep 2025 09:38:30 +0800 Subject: [PATCH 5/6] Fixed login --- src/pages/LoginPage/Login.tsx | 61 ++++++++++++++++++++++++++++++++--- 1 file changed, 57 insertions(+), 4 deletions(-) diff --git a/src/pages/LoginPage/Login.tsx b/src/pages/LoginPage/Login.tsx index 2598a44..7f19f1f 100644 --- a/src/pages/LoginPage/Login.tsx +++ b/src/pages/LoginPage/Login.tsx @@ -1,5 +1,5 @@ import './Login.sass' -import { Logo, Link, Page, Row, Padding, Box, Radio, Combobox, Input, Button } from '../../components' +import { Logo, Link, Page, Row, Padding, Box, Radio, Combobox, Input, Button, Modal, Column } from '../../components' import { IoChevronBack } from 'solid-icons/io' import { createSignal, Show, createEffect } from 'solid-js' import { ofetch } from 'ofetch' @@ -9,22 +9,31 @@ import { useNavigate } from '@solidjs/router' export default () => { const API = import.meta.env.VITE_BACKEND const APPROVERNAME = import.meta.env.VITE_HEAD + const navigate = useNavigate() const assessors = JSON.parse(sessionStorage.getItem('registered')!) const roles = ['Assessor', 'Approver'] const [role, setRole] = createSignal('Assessor') const [name, setName] = createSignal('') const [password, setPassword] = createSignal('') - - const navigate = useNavigate() + const [loggedin, setLoggedin] = createSignal(0) + const [errorMessage, setErrorMessage] = createSignal('') const login = async () => { const employeeid = await ofetch(API + 'get-employeeid/' + name(), { parseResponse: JSON.parse }) const dbpassword = await ofetch(API + 'get-password/' + employeeid.result, { parseResponse: JSON.parse }) const hashPassword = await securePassword() + if (dbpassword.result === '0') { + setErrorMessage('Not yet registered. Please proceed to Registration.') + } else { + setErrorMessage('Invalid Password, Try again.') + } + if (dbpassword.result === hashPassword) { - navigate('/notification') + setLoggedin(2) + } else { + setLoggedin(1) } } @@ -36,6 +45,10 @@ export default () => { return thirdHashing.toString() } + const gotoMain = () => { + navigate('/main') + } + createEffect(() => { if (role() === 'Approver') setName(APPROVERNAME) else if (role() !== 'Approver' && name() === APPROVERNAME) setName('') @@ -112,6 +125,46 @@ export default () => { + +
+ + + + + +

Login Successful

+
+
+ + + Click anywhere to close + +
+
+
+
+ +
setLoggedin(0)}> + + + + + +

Login Failed

+
+
+ + +

{errorMessage()}

+
+ + + Click anywhere to close + +
+
+
+
) } From 3ed25c9cee4426114f989601e06508d678e2d557 Mon Sep 17 00:00:00 2001 From: Patrick Alvin Alcala Date: Tue, 30 Sep 2025 09:38:49 +0800 Subject: [PATCH 6/6] Added list of registered names --- src/pages/IndexPage/Index.tsx | 40 ++++++++++++++++++----------------- 1 file changed, 21 insertions(+), 19 deletions(-) diff --git a/src/pages/IndexPage/Index.tsx b/src/pages/IndexPage/Index.tsx index 208f9bb..f97052b 100644 --- a/src/pages/IndexPage/Index.tsx +++ b/src/pages/IndexPage/Index.tsx @@ -1,10 +1,11 @@ import './Index.sass' -import { Button, Page, Padding, Display, Row, Logo, Column, Box } from '../../components' +import { Button, Page, Padding, Display, Row, Logo } from '../../components' import { onMount } from 'solid-js' import { ofetch } from 'ofetch' const API = import.meta.env.VITE_BACKEND let assessorsNameList: string[] +let registeredNameList: string[] export default () => { const getAssessors = async () => { @@ -17,8 +18,27 @@ export default () => { sessionStorage.setItem('assessors', JSON.stringify([...assessorsNameList])) } + const getRegistered = async () => { + let nameList: string[] = [] + + try { + const registered = await ofetch(API + 'get-list-registered', { parseResponse: JSON.parse }) + + for (let i = 0; i < registered.result.length; i++) { + const name = await ofetch(API + 'get-employeename/' + registered.result[i], { parseResponse: JSON.parse }) + nameList.push(name.result) + } + + registeredNameList = [...nameList] + } catch (error) { + console.error(error) + } + sessionStorage.setItem('registered', JSON.stringify([...registeredNameList])) + } + onMount(async () => { await getAssessors() + await getRegistered() }) return ( @@ -38,24 +58,6 @@ export default () => { - - - - -

OCBO e-Sign

- -