import './Register.sass' import { Logo, Link, Page, Row, Padding, Combobox, Box, Button, Modal, Column, QR, Input } from '../../components' import { IoChevronBack } from 'solid-icons/io' import { Show, createSignal, createEffect } from 'solid-js' 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 const APPROVERNAME = import.meta.env.VITE_HEAD 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('') const [hashPassword, setHashPassword] = createSignal('') const [id, setId] = createSignal(0) const [signature, setSignature] = createSignal('') const [saved, setSaved] = createSignal(false) const [file, setFile] = createSignal() const [base64image, setBase64image] = createSignal('') const [allow, setAllow] = createSignal(0) const getEmployeeId = async (val: string) => { try { setName(val) const id = await ofetch(API + 'get-employeeid/' + val, { parseResponse: JSON.parse }) setId(parseInt(id.result)) await checkRegistered() } catch { setId(0) } } const generateSignature = () => { if (role() === 'APPROVER') { setId(276) setName(APPROVERNAME) } const hash = SHA3(id().toString()) setSignature(`Use OCBO e-Sign Validator - scanid=${hash.toString()}`) try { register() setSaved(true) updateRegistered() } catch { setSaved(false) } } const register = async () => { await securePassword() const blob = new Blob(file()) const base64 = await convertBase64(blob) setBase64image(base64 as string) await ofetch(API + 'post-registration', { method: 'POST', body: { data: id(), data2: hashPassword(), data3: signature(), data4: base64 }, }) } const getDate = () => { const today = new Date() const formattedDate = dayjs(today).format('YYYY-MM-DD HH:mm:ss Z') return formattedDate } const securePassword = async () => { const firstHashing = SHA1(password()) const secondHashing = SHA3(firstHashing) const thirdHashing = SHA1(secondHashing) setHashPassword(thirdHashing.toString()) } const convertBase64 = (blob: Blob) => { return new Promise((resolve, _) => { const reader = new FileReader() reader.onloadend = () => resolve(reader.result) reader.readAsDataURL(blob) }) } const checkRegistered = async () => { const employeeid = id() try { const registered = await ofetch(API + 'check-registered/' + employeeid, { parseResponse: JSON.parse }) if (registered.result > 0) { setAllow(1) } else { setAllow(2) } } catch { setAllow(2) } } 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 { const registered = await ofetch(API + 'check-registered/' + 276, { parseResponse: JSON.parse }) if (registered.result > 0) { setAllow(1) } else { setAllow(2) } } catch { setAllow(2) } } }) return ( <>

OCBO e-Sign

Back
Registration

Role

List of Assessors

getEmployeeId(val!)} />

Password

Upload Signature

setFile(data)} accept=".jpg, .jpeg, .png, .webp, .avif"> Drag and drop or click to upload file {() => ( setFile()}> Delete )} = 4}>