<!-- submit button; position: fixed -->
<button class="button" type="submit">Submit</button>
+ <div v-if="invalidEmail" class="invalid">Invalid Email.</div>
+ <div v-else-if="weakPass" class="invalid">Password must be 8-15 characters long.
+ <br>Password must have at least one:
+ <br>  Upper case letter
+ <br>  Lower case letter
+ <br>  One numeric digit
+ <br>  One special character
+ </div>
+ <div v-else-if="passUnMatch" class="invalid">Passwords dont match.</div>
+
</form>
<!-- back to login button: position: fixed -->
export default defineComponent({
name: "Register",
setup() {
+ const router = useRouter();
+ const { invoke } = useIpc();
+ const { setToken } = useAuth();
+
const email = ref("");
const password = ref("");
const password2 = ref("");
+ const invalidEmail = ref(false);
+ const weakPass = ref(false);
+ const passUnMatch = ref(false);
- const { invoke } = useIpc();
- const { setToken } = useAuth();
- const router = useRouter();
+ // emai must be in '@email.com' format
+ const emailReg = /^(([^<>()\[\]\.,;:\s@\"]+(\.[^<>()\[\]\.,;:\s@\"]+)*)|(\".+\"))@(([^<>()[\]\.,;:\s@\"]+\.)+[^<>()[\]\.,;:\s@\"]{2,})$/i;
+ // password must be 8-15 chars, have one upper, lower, number, and special char
+ const pwReg = /^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[^a-zA-Z0-9])(?!.*\s).{8,15}$/;
- const re = /^(([^<>()\[\]\.,;:\s@\"]+(\.[^<>()\[\]\.,;:\s@\"]+)*)|(\".+\"))@(([^<>()[\]\.,;:\s@\"]+\.)+[^<>()[\]\.,;:\s@\"]{2,})$/i;
+ // call this function on form submit.
+ const submit = async () => {
+ // reset invalid credentials references.
+ invalidEmail.value = false;
+ weakPass.value = false;
+ passUnMatch.value = false;
+
+ // validate email.
+ if (!emailReg.test(email.value)) {
+ invalidEmail.value = true;
+ return;
+ }
- const passwordMatch = () => {
- let match = false;
- if (password.value == password2.value) {
- match = true;
+ // validate password strength.
+ if (!pwReg.test(password.value)) {
+ weakPass.value = true;
+ return;
}
- return match;
- }
- const validate = () => {
- let valid = false;
- if (re.test(email.value) && passwordMatch()) {
- valid = true;
- }
- return valid;
- }
+ // check password match
+ if (password.value !== password2.value) {
+ passUnMatch.value = true;
+ return;
+ }
- const submit = async () => {
+ const payload: RegisterPayload = {
+ request: "register",
+ email: email.value,
+ password: password.value,
+ };
+
+ try {
+ const res = await invoke('auth-session', payload);
+ setToken(res);
+ router.push({ name: "home" });
+ } catch(e) {
+ console.log('Failed to register.')
+ }
- const payload: RegisterPayload = {
- request: "register",
- email: email.value,
- password: password.value,
- };
-
- if (validate()) {
- try {
- const res = await invoke('auth-session', payload);
- setToken(res);
- router.push({ name: "home" });
- } catch(e) {
- console.log('Failed to register.')
- }
- }
};
const switchView = () => {
password2,
switchView,
submit,
+ invalidEmail,
+ weakPass,
+ passUnMatch,
};
},
});
color: #58C4FD;
font-weight: bold;
}
+
+.invalid {
+ font-family: "SF Compact Display";
+ font-weight: bold;
+ font-size: 14px;
+ color: #F53737;
+}
</style>