import './Login.sass'
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'
import { SHA1, SHA3 } from 'crypto-js'
import { useNavigate } from '@solidjs/router'
import { checkConnection } from '../../utils/functions'
import { _employeeId, _employeeName } from '../../stores/employee'
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 [loggedin, setLoggedin] = createSignal(0)
const [errorMessage, setErrorMessage] = createSignal('')
const [connected, setConnected] = createSignal(true)
const login = async () => {
setConnected(await checkConnection())
if (connected() === false) {
setErrorMessage('No Connection on Server')
return
}
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) {
_employeeId.set(employeeid.result)
_employeeName.set(name())
saveEmployee()
setLoggedin(2)
} else {
setLoggedin(1)
}
}
const securePassword = async () => {
const firstHashing = SHA1(password())
const secondHashing = SHA3(firstHashing)
const thirdHashing = SHA1(secondHashing)
return thirdHashing.toString()
}
const gotoMain = () => {
navigate('/main')
}
const gotoAssessor = () => {
navigate('/assessor')
}
const navigateToRolePage = () => {
if (role() === 'Assessor') gotoAssessor()
else gotoMain()
}
const saveEmployee = () => {
sessionStorage.setItem('id', _employeeId.get().toString())
sessionStorage.setItem('name', _employeeName.get())
}
createEffect(() => {
if (role() === 'Approver') setName(APPROVERNAME)
else if (role() !== 'Approver' && name() === APPROVERNAME) setName('')
})
return (
<>
OCBO e-Sign
Name
Password
{
if (event.key === 'Enter') login()
}}
/>