mirror of
https://github.com/monkeytypegame/monkeytype.git
synced 2025-10-09 23:25:53 +08:00
364 lines
11 KiB
JavaScript
364 lines
11 KiB
JavaScript
import * as Notifications from "./notifications";
|
|
import * as UpdateConfig from "./config";
|
|
import * as AccountButton from "./account-button";
|
|
import * as Account from "./account";
|
|
import * as CommandlineLists from "./commandline-lists";
|
|
import * as VerificationController from "./verification-controller";
|
|
import * as Misc from "./misc";
|
|
import * as Settings from "./settings";
|
|
import * as ChallengeController from "./challenge-controller";
|
|
import Config from "./config";
|
|
import * as CloudFunctions from "./cloud-functions";
|
|
import * as AllTimeStats from "./all-time-stats";
|
|
import * as DB from "./db";
|
|
import * as TestLogic from "./test-logic";
|
|
import * as UI from "./ui";
|
|
import axiosInstance from "./axios-instance";
|
|
|
|
var gmailProvider = new firebase.auth.GoogleAuthProvider();
|
|
|
|
export function signIn() {
|
|
$(".pageLogin .preloader").removeClass("hidden");
|
|
let email = $(".pageLogin .login input")[0].value;
|
|
let password = $(".pageLogin .login input")[1].value;
|
|
|
|
if ($(".pageLogin .login #rememberMe input").prop("checked")) {
|
|
//remember me
|
|
firebase
|
|
.auth()
|
|
.setPersistence(firebase.auth.Auth.Persistence.LOCAL)
|
|
.then(function () {
|
|
return firebase
|
|
.auth()
|
|
.signInWithEmailAndPassword(email, password)
|
|
.then((e) => {
|
|
// UI.changePage("test");
|
|
})
|
|
.catch(function (error) {
|
|
Notifications.add(error.message, -1);
|
|
$(".pageLogin .preloader").addClass("hidden");
|
|
});
|
|
});
|
|
} else {
|
|
//dont remember
|
|
firebase
|
|
.auth()
|
|
.setPersistence(firebase.auth.Auth.Persistence.SESSION)
|
|
.then(function () {
|
|
return firebase
|
|
.auth()
|
|
.signInWithEmailAndPassword(email, password)
|
|
.then((e) => {
|
|
// UI.changePage("test");
|
|
})
|
|
.catch(function (error) {
|
|
Notifications.add(error.message, -1);
|
|
$(".pageLogin .preloader").addClass("hidden");
|
|
});
|
|
});
|
|
}
|
|
}
|
|
|
|
export async function signInWithGoogle() {
|
|
$(".pageLogin .preloader").removeClass("hidden");
|
|
|
|
if ($(".pageLogin .login #rememberMe input").prop("checked")) {
|
|
//remember me
|
|
await firebase.auth().setPersistence(firebase.auth.Auth.Persistence.LOCAL);
|
|
firebase
|
|
.auth()
|
|
.signInWithPopup(gmailProvider)
|
|
.then((result) => {
|
|
console.log(result);
|
|
})
|
|
.catch((error) => {
|
|
Notifications.add(error.message, -1);
|
|
$(".pageLogin .preloader").addClass("hidden");
|
|
});
|
|
} else {
|
|
//dont remember
|
|
await firebase
|
|
.auth()
|
|
.setPersistence(firebase.auth.Auth.Persistence.SESSION);
|
|
firebase
|
|
.auth()
|
|
.signInWithPopup(gmailProvider)
|
|
.then((result) => {
|
|
console.log(result);
|
|
})
|
|
.catch((error) => {
|
|
Notifications.add(error.message, -1);
|
|
$(".pageLogin .preloader").addClass("hidden");
|
|
});
|
|
}
|
|
}
|
|
|
|
export function linkWithGoogle() {
|
|
firebase
|
|
.auth()
|
|
.currentUser.linkWithPopup(gmailProvider)
|
|
.then(function (result) {
|
|
console.log(result);
|
|
})
|
|
.catch(function (error) {
|
|
console.log(error);
|
|
});
|
|
}
|
|
|
|
export function signOut() {
|
|
firebase
|
|
.auth()
|
|
.signOut()
|
|
.then(function () {
|
|
Notifications.add("Signed out", 0, 2);
|
|
AllTimeStats.clear();
|
|
Settings.hideAccountSection();
|
|
AccountButton.update();
|
|
UI.changePage("login");
|
|
DB.setSnapshot(null);
|
|
})
|
|
.catch(function (error) {
|
|
Notifications.add(error.message, -1);
|
|
});
|
|
}
|
|
|
|
function signUp() {
|
|
$(".pageLogin .register .button").addClass("disabled");
|
|
$(".pageLogin .preloader").removeClass("hidden");
|
|
let nname = $(".pageLogin .register input")[0].value;
|
|
let email = $(".pageLogin .register input")[1].value;
|
|
let password = $(".pageLogin .register input")[2].value;
|
|
let passwordVerify = $(".pageLogin .register input")[3].value;
|
|
|
|
if (password != passwordVerify) {
|
|
Notifications.add("Passwords do not match", 0, 3);
|
|
$(".pageLogin .preloader").addClass("hidden");
|
|
$(".pageLogin .register .button").removeClass("disabled");
|
|
return;
|
|
}
|
|
axiosInstance.get(`/api/nameCheck/${nname}`).then((d) => {
|
|
console.log(d.data);
|
|
if (d.data.resultCode === -1) {
|
|
Notifications.add("Name unavailable", -1);
|
|
$(".pageLogin .preloader").addClass("hidden");
|
|
$(".pageLogin .register .button").removeClass("disabled");
|
|
return;
|
|
} else if (d.data.resultCode === -2) {
|
|
Notifications.add(
|
|
"Name cannot contain special characters or contain more than 14 characters. Can include _ . and -",
|
|
-1
|
|
);
|
|
$(".pageLogin .preloader").addClass("hidden");
|
|
$(".pageLogin .register .button").removeClass("disabled");
|
|
return;
|
|
} else if (d.data.resultCode === 1) {
|
|
firebase
|
|
.auth()
|
|
.createUserWithEmailAndPassword(email, password)
|
|
.then((user) => {
|
|
// Account has been created here.
|
|
// dontCheckUserName = true;
|
|
let usr = user.user;
|
|
//maybe there's a better place for the api call
|
|
axiosInstance.post("/api/signUp", {
|
|
name: nname,
|
|
uid: usr.uid,
|
|
email: email,
|
|
});
|
|
usr
|
|
.updateProfile({
|
|
displayName: nname,
|
|
})
|
|
.then(async function () {
|
|
// Update successful.
|
|
await firebase
|
|
.firestore()
|
|
.collection("users")
|
|
.doc(usr.uid)
|
|
.set({ name: nname }, { merge: true });
|
|
usr.sendEmailVerification();
|
|
AllTimeStats.clear();
|
|
Notifications.add("Account created", 1, 3);
|
|
$("#menu .icon-button.account .text").text(nname);
|
|
try {
|
|
firebase.analytics().logEvent("accountCreated", usr.uid);
|
|
} catch (e) {
|
|
console.log("Analytics unavailable");
|
|
}
|
|
$(".pageLogin .preloader").addClass("hidden");
|
|
DB.setSnapshot({
|
|
results: [],
|
|
personalBests: {},
|
|
tags: [],
|
|
globalStats: {
|
|
time: undefined,
|
|
started: undefined,
|
|
completed: undefined,
|
|
},
|
|
});
|
|
if (TestLogic.notSignedInLastResult !== null) {
|
|
TestLogic.setNotSignedInUid(usr.uid);
|
|
CloudFunctions.testCompleted({
|
|
uid: usr.uid,
|
|
obj: TestLogic.notSignedInLastResult,
|
|
});
|
|
DB.getSnapshot().results.push(TestLogic.notSignedInLastResult);
|
|
}
|
|
UI.changePage("account");
|
|
usr.sendEmailVerification();
|
|
$(".pageLogin .register .button").removeClass("disabled");
|
|
})
|
|
.catch(function (error) {
|
|
// An error happened.
|
|
$(".pageLogin .register .button").removeClass("disabled");
|
|
console.error(error);
|
|
usr
|
|
.delete()
|
|
.then(function () {
|
|
// User deleted.
|
|
Notifications.add(
|
|
"Account not created. " + error.message,
|
|
-1
|
|
);
|
|
$(".pageLogin .preloader").addClass("hidden");
|
|
})
|
|
.catch(function (error) {
|
|
// An error happened.
|
|
$(".pageLogin .preloader").addClass("hidden");
|
|
Notifications.add(
|
|
"Something went wrong. " + error.message,
|
|
-1
|
|
);
|
|
console.error(error);
|
|
});
|
|
});
|
|
})
|
|
.catch(function (error) {
|
|
// Handle Errors here.
|
|
$(".pageLogin .register .button").removeClass("disabled");
|
|
Notifications.add(error.message, -1);
|
|
$(".pageLogin .preloader").addClass("hidden");
|
|
});
|
|
} else {
|
|
$(".pageLogin .preloader").addClass("hidden");
|
|
Notifications.add(
|
|
"Something went wrong when checking name: " + d.data.message,
|
|
-1
|
|
);
|
|
}
|
|
});
|
|
}
|
|
|
|
$(".pageLogin #forgotPasswordButton").click((e) => {
|
|
let email = prompt("Email address");
|
|
if (email) {
|
|
firebase
|
|
.auth()
|
|
.sendPasswordResetEmail(email)
|
|
.then(function () {
|
|
// Email sent.
|
|
Notifications.add("Email sent", 1, 2);
|
|
})
|
|
.catch(function (error) {
|
|
// An error happened.
|
|
Notifications.add(error.message, -1);
|
|
});
|
|
}
|
|
});
|
|
|
|
$(".pageLogin .login input").keyup((e) => {
|
|
if (e.key == "Enter") {
|
|
UpdateConfig.setChangedBeforeDb(false);
|
|
signIn();
|
|
}
|
|
});
|
|
|
|
$(".pageLogin .login .button.signIn").click((e) => {
|
|
UpdateConfig.setChangedBeforeDb(false);
|
|
signIn();
|
|
});
|
|
|
|
$(".pageLogin .login .button.signInWithGoogle").click((e) => {
|
|
UpdateConfig.setChangedBeforeDb(false);
|
|
signInWithGoogle();
|
|
});
|
|
|
|
$(".signOut").click((e) => {
|
|
signOut();
|
|
});
|
|
|
|
firebase.auth().onAuthStateChanged(function (user) {
|
|
if (user) {
|
|
// User is signed in.
|
|
$(".pageAccount .content p.accountVerificatinNotice").remove();
|
|
if (user.emailVerified === false) {
|
|
$(".pageAccount .content").prepend(
|
|
`<p class="accountVerificatinNotice" style="text-align:center">Your account is not verified. Click <a onClick="sendVerificationEmail()">here</a> to resend the verification email.`
|
|
);
|
|
}
|
|
AccountButton.update();
|
|
AccountButton.loading(true);
|
|
Account.getDataAndInit();
|
|
// var displayName = user.displayName;
|
|
// var email = user.email;
|
|
// var emailVerified = user.emailVerified;
|
|
// var photoURL = user.photoURL;
|
|
// var isAnonymous = user.isAnonymous;
|
|
// var uid = user.uid;
|
|
// var providerData = user.providerData;
|
|
$(".pageLogin .preloader").addClass("hidden");
|
|
|
|
// showFavouriteThemesAtTheTop();
|
|
CommandlineLists.updateThemeCommands();
|
|
|
|
let text = "Account created on " + user.metadata.creationTime;
|
|
|
|
const date1 = new Date(user.metadata.creationTime);
|
|
const date2 = new Date();
|
|
const diffTime = Math.abs(date2 - date1);
|
|
const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24));
|
|
|
|
text += ` (${diffDays} day${diffDays != 1 ? "s" : ""} ago)`;
|
|
|
|
$(".pageAccount .group.createdDate").text(text);
|
|
|
|
if (VerificationController.data !== null) {
|
|
VerificationController.verify(user);
|
|
}
|
|
}
|
|
let theme = Misc.findGetParameter("customTheme");
|
|
if (theme !== null) {
|
|
try {
|
|
theme = theme.split(",");
|
|
UpdateConfig.setCustomThemeColors(theme);
|
|
Notifications.add("Custom theme applied.", 1);
|
|
} catch (e) {
|
|
Notifications.add(
|
|
"Something went wrong. Reverting to default custom colors.",
|
|
0
|
|
);
|
|
UpdateConfig.setCustomThemeColors(Config.defaultConfig.customThemeColors);
|
|
}
|
|
UpdateConfig.setCustomTheme(true);
|
|
Settings.setCustomThemeInputs();
|
|
}
|
|
if (/challenge_.+/g.test(window.location.pathname)) {
|
|
Notifications.add("Loading challenge", 0);
|
|
let challengeName = window.location.pathname.split("_")[1];
|
|
setTimeout(() => {
|
|
ChallengeController.setup(challengeName);
|
|
}, 1000);
|
|
}
|
|
});
|
|
|
|
$(".pageLogin .register input").keyup((e) => {
|
|
if ($(".pageLogin .register .button").hasClass("disabled")) return;
|
|
if (e.key == "Enter") {
|
|
signUp();
|
|
}
|
|
});
|
|
|
|
$(".pageLogin .register .button").click((e) => {
|
|
if ($(".pageLogin .register .button").hasClass("disabled")) return;
|
|
signUp();
|
|
});
|