From f7b4ef09a79d16a2984da41c22f0ebf2d6cfc084 Mon Sep 17 00:00:00 2001 From: "sigonasr2, Sig, Sigo" Date: Thu, 12 Aug 2021 04:38:23 +0000 Subject: [PATCH] Frontend Registration form and login forms setup. --- src/App.js | 109 +++++++++++++++++++++++++++++++- src/components/ExpandTooltip.js | 3 +- src/style.css | 7 ++ 3 files changed, 115 insertions(+), 4 deletions(-) diff --git a/src/App.js b/src/App.js index 39717aa..4b62618 100644 --- a/src/App.js +++ b/src/App.js @@ -18,6 +18,7 @@ import { HashLink as Link } from 'react-router-hash-link'; import TestHeader from './TestHeader'; // Test Header! import TestPanel from './TestPanel'; // Dudley's Test Panel +import md5 from 'md5'; const axios = require('axios'); const parse = require('csv-parse/lib/sync') @@ -570,11 +571,113 @@ function DamageCalculator(p) { } +function FormField(p) { + return <>{ + p.type==="toggle"?<> :} +} + function LoginForm(p) { const [username,setUsername] = useState("") const [password,setPassword] = useState("") const [rememberMe,setRememberMe] = useState(false) - return <>{setUsername(p.currentTarget.value)}} placeholder="Username"/> + const [error,setError] = useState("") + const [loading,setLoading] = useState(false) + + function SubmitLogin() { + setError("") + setLoading(true) + axios.post(GetBackendURL(p)+"/login",{ + username:username, + password:md5(password) + }) + .then((data)=>{ + if (data.data.verified) { + p.setLOGGEDINUSER(username) + p.setLOGGEDINHASH(md5(password)) + setUsername("") + setPassword("") + setRememberMe(false) + } else { + setError("Could not authenticate!") + } + }) + .catch((err)=>{ + setError(err?.message??err); + }) + .then(()=>{ + setLoading(false) + }) + } + + return <> + + {loading? + + :<>

{error}

+ {setUsername(p.currentTarget.value)}} placeholder="Username"/>
+ {setPassword(p.currentTarget.value)}} placeholder="Password"/>
+ {setRememberMe(p.currentTarget.checked)}}/>
+ + } +
+} + +function RegisterForm(p) { + const [username,setUsername] = useState("") + const [password,setPassword] = useState("") + const [password2,setPassword2] = useState("") + const [rememberMe,setRememberMe] = useState(false) + const [error,setError] = useState("") + const [loading,setLoading] = useState(false) + + function SubmitRegister() { + setError("") + setLoading(true) + try{ + if (username.length<4) {throw "Username must be at least 4 characters in length."} + if (username.length>20) {throw "Username must be less than 21 characters in length."} + if (password.length<6) {throw "Password must contain at least 6 characters."} + if (password!==password2) {throw "Password fields must match."} + }catch(err){ + setError(err) + setLoading(false) + return + } + axios.post(GetBackendURL(p)+"/register",{ + username:username, + password:md5(password) + }) + .then((data)=>{ + if (data.data.verified) { + p.setLOGGEDINUSER(username) + p.setLOGGEDINHASH(md5(password)) + setUsername("") + setPassword("") + setRememberMe(false) + } else { + setError("Could not authenticate!") + } + }) + .catch((err)=>{ + setError(err?.message??err); + }) + .then(()=>{ + setLoading(false) + }) + } + + return <> + + {loading? + + :<>

{error}

+ {setUsername(p.currentTarget.value)}} placeholder="Username" tooltip="Enter a username (4-20 characters, alphanumeric only)"/>
+ {setPassword(p.currentTarget.value)}} placeholder="Password" tooltip="Enter a password (6 or more characters)"/>
+ {setPassword2(p.currentTarget.value)}} placeholder="Verify Password" tooltip="Enter password again."/>
+ {setRememberMe(p.currentTarget.checked)}}/>
+ + } +
} @@ -684,14 +787,14 @@ function App() { {APP_TITLE+" - Login"} - + {APP_TITLE+" - Register"} - Register form here. + diff --git a/src/components/ExpandTooltip.js b/src/components/ExpandTooltip.js index 5f5d9c4..0bc5cc1 100644 --- a/src/components/ExpandTooltip.js +++ b/src/components/ExpandTooltip.js @@ -1,7 +1,8 @@ import ReactTooltip from 'react-tooltip' //https://wwayne.github.io/react-tooltip/ function ExpandTooltip(p) { - return <>{p.children}{p.children} { const d = document.documentElement; diff --git a/src/style.css b/src/style.css index e9c2035..5a27107 100644 --- a/src/style.css +++ b/src/style.css @@ -1239,4 +1239,11 @@ p.adminNav hr { } .formField{ font-weight:bold; +} +.formDescription{ + font-style:italic; +} +.formError{ + color:red; + font-weight:bold; } \ No newline at end of file