- After fetching join code in EnterCode(), it sets networkId attribute on "signup-" (Signup.js)
- Signup.js then includes the attribute in the call body
- Modified all calls to /signout, /profile, /login, /signup to be prefixed by '/auth'
- Added '/auth' to vite config file
- Modified final "else if" statement in .attr in quill.js to return `this.getAttribute(arg1)` instead of `this.getAttribute("")`
147 lines
5.2 KiB
JavaScript
147 lines
5.2 KiB
JavaScript
import { Preferences } from '@capacitor/preferences';
|
|
import util from "../../util.js"
|
|
|
|
class Login extends Shadow {
|
|
inputStyles(el) {
|
|
return el
|
|
.background("var(--main)")
|
|
.color("var(--text)")
|
|
.border("1px solid var(--accent)")
|
|
.fontSize(0.9, rem)
|
|
.backgroundColor("var(--searchbackground)")
|
|
.borderRadius(12, px)
|
|
.outline("none")
|
|
.onTouch((start) => {
|
|
if (start) {
|
|
this.style.backgroundColor = "var(--accent)"
|
|
} else {
|
|
this.style.backgroundColor = "var(--searchbackground)"
|
|
}
|
|
})
|
|
}
|
|
|
|
render() {
|
|
form(() => {
|
|
VStack(() => {
|
|
input("Email", "70vw")
|
|
.attr({ name: "email", type: "email" })
|
|
.margin("auto")
|
|
.marginVertical(1, em)
|
|
.padding(1, em)
|
|
.styles(this.inputStyles)
|
|
|
|
input("Password", "70vw")
|
|
.attr({ name: "password", type: "password" })
|
|
.margin("auto")
|
|
.marginVertical(1, em)
|
|
.padding(1, em)
|
|
.styles(this.inputStyles)
|
|
|
|
HStack(() => {
|
|
button("==>")
|
|
.padding(1, em)
|
|
.fontSize(0.9, rem)
|
|
.borderRadius(12, px)
|
|
.background("var(--searchbackground)")
|
|
.color("var(--text)")
|
|
.border("1px solid var(--accent)")
|
|
.boxSizing("border-box")
|
|
.onTouch(function (start) {
|
|
if (start) {
|
|
this.style.backgroundColor = "var(--accent)"
|
|
} else {
|
|
this.style.backgroundColor = "var(--searchbackground)"
|
|
}
|
|
})
|
|
})
|
|
.width(70, vw)
|
|
.margin("auto")
|
|
.fontSize(0.9, rem)
|
|
.paddingLeft(0, em)
|
|
.paddingRight(2, em)
|
|
.marginVertical(1, em)
|
|
.border("1px solid transparent")
|
|
|
|
p("")
|
|
.state("errortype", function (type) {
|
|
const messages = {
|
|
email: "Please enter a valid email.",
|
|
password: "Please enter a valid password.",
|
|
emailwrong: "Could not find an account with this email.",
|
|
passwordwrong: "Incorrect password.",
|
|
};
|
|
|
|
if(messages[type]) {
|
|
this.display("")
|
|
this.innerText = messages[type]
|
|
} else {
|
|
this.display("none")
|
|
this.innerText = ""
|
|
}
|
|
})
|
|
.margin("auto")
|
|
.marginTop(1, em)
|
|
.color("var(--text)")
|
|
.fontFamily("Arial")
|
|
.opacity(.7)
|
|
.padding(0.5, em)
|
|
.backgroundColor("var(--darkred)")
|
|
.display("none")
|
|
|
|
})
|
|
})
|
|
.height(100, pct)
|
|
.onSubmit(async (e) => {
|
|
e.preventDefault();
|
|
const data = {
|
|
email: e.target.$('[name="email"]').value,
|
|
password: e.target.$('[name="password"]').value,
|
|
};
|
|
await this.requestLogin(data);
|
|
})
|
|
}
|
|
|
|
isValidEmail = (email) => /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email);
|
|
isValidPassword = (password) => password.length >= 7;
|
|
|
|
async requestLogin(data) {
|
|
const emailValid = this.isValidEmail(data.email.trim() || "");
|
|
const passValid = this.isValidPassword(data.password.trim() || "");
|
|
|
|
if (!emailValid || !passValid) {
|
|
console.log("invalid", emailValid)
|
|
const errorType = !emailValid ? 'email' : 'password';
|
|
|
|
this.$("p").attr({ errorType });
|
|
return;
|
|
} else {
|
|
this.$("p").attr({ errorType: "" });
|
|
}
|
|
|
|
const res = await fetch(`${util.HOST}/auth/login`, {
|
|
method: "POST",
|
|
headers: { "Content-Type": "application/json", "X-Client": "mobile" },
|
|
body: JSON.stringify({
|
|
email: data["email"],
|
|
password: data["password"]
|
|
})
|
|
});
|
|
|
|
if (res.ok) {
|
|
const { token } = await res.json();
|
|
await Preferences.set({ key: 'auth_token', value: token });
|
|
global.renderHome();
|
|
} else {
|
|
const { error } = await res.json();
|
|
this.errorMessage = error;
|
|
console.error(error)
|
|
if(error.includes("email")) {
|
|
this.$("p").attr({ errorType: "emailwrong" });
|
|
} else {
|
|
this.$("p").attr({ errorType: "passwordwrong" });
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
register(Login) |