diff --git a/backend/main.go b/backend/main.go index 6b04b54..da3b115 100644 --- a/backend/main.go +++ b/backend/main.go @@ -450,30 +450,14 @@ func connect() { c.JSON(http.StatusOK, gin.H{ "result": result, }) - - case "check-registered": - err := db.QueryRow("SELECT IFNULL(esignid, 0) AS result FROM esign WHERE employeeid = ?", data).Scan(&result) - if err != nil { - if err == sql.ErrNoRows { - result = "0" - } else { - c.AbortWithError(http.StatusBadRequest, err) - c.String(http.StatusBadRequest, err.Error()) - } - - } - c.JSON(http.StatusOK, gin.H{ - "result": result, - }) } }) router.POST("/api/post-registration", func(c *gin.Context) { type RegistrationData struct { - Data int `json:"data"` + Data int `json:"data"` Data2 string `json:"data2"` - Data3 string `json:"data3"` - Data4 string `json:"data4"` + Data3 string `json:"data3"` } var registrationData RegistrationData if err := c.ShouldBindJSON(®istrationData); err != nil { @@ -488,13 +472,13 @@ func connect() { c.Writer.Header().Set("X-Download-Options", "noopen") c.Writer.Header().Set("Referrer-Policy", "no-referrer") - dbpost, err := db.Prepare("INSERT INTO esign (esignid, employeeid, password, signature, image) VALUES (NULL, ?, ?, ?, ?)") + dbpost, err := db.Prepare("INSERT INTO esign (esignid, employeeid, signature, image) VALUES (NULL, ?, ?, ?)") if err != nil { panic(err.Error()) } defer dbpost.Close() - exec, err := dbpost.Exec(registrationData.Data, registrationData.Data2, registrationData.Data3, registrationData.Data4) + exec, err := dbpost.Exec(registrationData.Data, registrationData.Data2, registrationData.Data3) if err != nil { panic(err.Error()) } diff --git a/src/components/index.ts b/src/components/index.ts index e630022..2882f28 100644 --- a/src/components/index.ts +++ b/src/components/index.ts @@ -18,7 +18,7 @@ export { default as Table } from './Table/Table' export { default as Combobox } from './Combobox/Combobox' export { default as File } from './File/File' export { default as QR } from './QR/QR' -export { default as Input } from './Input/Input' + // export { default as OptimizeBackground } from './Optimizers/OptimizeBackground' // export { default as OptimizeImage } from './Optimizers/OptimizeImage' // export { default as OptimizeLogo } from './Optimizers/OptimizeLogo' diff --git a/src/pages/RegisterPage/Register.sass b/src/pages/RegisterPage/Register.sass index 94e8415..c875b7a 100644 --- a/src/pages/RegisterPage/Register.sass +++ b/src/pages/RegisterPage/Register.sass @@ -1,6 +1,3 @@ -@use '/src/styles/variables' as vars -@use 'sass:color' - .back-button-text font-size: 1rem @@ -9,132 +6,4 @@ .box-title font-size: 1.75rem - font-weight: 700 - -.digital-sign-details - display: flex - flex-direction: column - gap: 0.25rem - font-size: 0.8rem - - &__image - margin: 0 0 1rem 0 - width: 14rem - -.already-registered - padding: 1rem - border-radius: 8px - background-color: color.adjust(#0D64E4, $blackness: 20%) - opacity: 0.6 - -.filefield - display: flex - flex-direction: column - align-items: center - justify-content: center - height: 250px - width: 100% - row-gap: 5px - border: 1px solid #ffffff6c - border-radius: 8px - - &__label - color: white - font-size: 14px - font-weight: 500 - user-select: none - - &__dropzone - display: flex - flex-direction: column - row-gap: 10px - align-items: center - justify-content: center - width: 100% - height: 100% - color: #5f8ebebf - cursor: pointer - font-size: 1rem - - // &__trigger - // background-color: vars.$primaryColor - // border: none - // border-radius: 8px - // color: white - // padding: 0.5rem 1.25rem - // text-align: center - // text-decoration: none - // display: inline-block - // font-size: 1rem - // font-weight: 500 - // cursor: pointer - // transition: all 0.2s ease-out - - // &:hover - // background-color: color.adjust(vars.$primaryColor, $blackness: 20%) - - // &:active - // transform: scale(0.95) - - &__itemList - display: flex - flex-direction: column - gap: 3px - width: 100% - - &__item - width: 82% - display: grid - // padding: 1rem - column-gap: 10px - border-radius: 8px - grid-template-columns: auto 1fr auto - grid-template-areas: "preview name delete" "preview size delete" - column-gap: 5px - // border: 1px solid rgba(187, 187, 187, 0.706) - padding: 10px - background-color: #2b405542 - margin: 0 1rem - - &__itemPreview - grid-area: preview - - &__itemPreviewImage - width: 6rem - object-fit: scale-down - height: auto - aspect-ratio: 1 - - &__itemName - font-weight: 500 - grid-area: name - font-size: 1rem - color: #fff - - &__itemSize - grid-area: size - font-size: 14px - color: rgb(181, 179, 173) - - &__itemDeleteTrigger - grid-area: delete - background-color: #a23434 - border: none - border-radius: 8px - color: white - padding: 0.5rem 1.25rem - text-align: center - text-decoration: none - display: inline-block - font-size: 1rem - font-weight: 500 - cursor: pointer - transition: all 0.2s ease-out - height: max-content - align-self: center - - &:hover - background-color: color.adjust(#a23434, $blackness: 20%) - - &:active - transform: scale(0.95) + font-weight: 700 \ No newline at end of file diff --git a/src/pages/RegisterPage/Register.tsx b/src/pages/RegisterPage/Register.tsx index b29eb5b..e4d84d8 100644 --- a/src/pages/RegisterPage/Register.tsx +++ b/src/pages/RegisterPage/Register.tsx @@ -1,48 +1,34 @@ import './Register.sass' -import { Logo, Link, Page, Row, Padding, Combobox, Box, Button, Modal, Column, QR, Input } from '../../components' +import { Logo, Link, Page, Row, Padding, Combobox, Box, File, Button, Modal, Column } from '../../components' import { IoChevronBack } from 'solid-icons/io' -import { Show, createSignal, createEffect } from 'solid-js' +import { Show, createSignal } 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 bcrypt from 'bcryptjs' +import { SHA3 } from 'crypto-js' export default () => { const API = import.meta.env.VITE_BACKEND - const APPROVERNAME = 'ARCH. KHASHAYAR L. TOGHYANI' const assessors = JSON.parse(sessionStorage.getItem('assessors')!) const roles = ['ASSESSOR', 'APPROVER'] const [role, setRole] = createSignal('') const [name, setName] = createSignal('') - const [password, setPassword] = createSignal('') - const [hashPassword, setHashPassword] = createSignal('') - const [id, setId] = createSignal(0) + 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() + setId(id.result) } catch { setId(0) } } const generateSignature = () => { - if (role() === 'APPROVER') { - setId(276) - setName(APPROVERNAME) - } const hash = SHA3(id().toString()) - setSignature(`Scan this using OCBO e-Sign Validator - scanid=${hash.toString()}`) + setSignature(hash.toString()) try { register() @@ -53,68 +39,12 @@ export default () => { } 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 }, + body: { data: id(), data2: signature() }, }) } - const getDate = () => { - const today = new Date() - const formattedDate = dayjs(today).format('YYYY-MM-DD HH:mm:ss Z') - return formattedDate - } - - const securePassword = async () => { - const salt = bcrypt.genSaltSync(9) - const hash = bcrypt.hashSync(password(), salt) - const sha = SHA1(hash) - setHashPassword(sha.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) - } - } - - 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 ( <> @@ -143,85 +73,29 @@ export default () => {

Role

-

List of Assessors

getEmployeeId(val!)} /> +

Upload Signature

+ - -

Password

- -

Upload Signature

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