mirror of
https://github.com/monkeytypegame/monkeytype.git
synced 2025-11-08 05:03:39 +08:00
changed displayName to name, moved from cookies to localstorage
This commit is contained in:
parent
ab13cd439d
commit
12f3b45529
12 changed files with 73 additions and 136 deletions
|
|
@ -589,7 +589,7 @@ app.post("/api/signIn", (req, res) => {
|
|||
user.save();
|
||||
const retUser = {
|
||||
uid: user._id,
|
||||
displayName: user.name,
|
||||
name: user.name,
|
||||
email: user.email,
|
||||
emailVerified: user.emailVerified,
|
||||
metadata: { creationTime: user.createdAt },
|
||||
|
|
@ -644,7 +644,7 @@ app.post("/api/signUp", (req, res) => {
|
|||
user.save();
|
||||
const retUser = {
|
||||
uid: user._id,
|
||||
displayName: user.name,
|
||||
name: user.name,
|
||||
email: user.email,
|
||||
emailVerified: user.emailVerified,
|
||||
metadata: { creationTime: user.createdAt },
|
||||
|
|
@ -1405,6 +1405,7 @@ function addToLeaderboard(lb, result, username) {
|
|||
}
|
||||
}
|
||||
}
|
||||
if (!retData.foundAt) retData.foundAt = 0;
|
||||
//determine if the entry should be hidden
|
||||
|
||||
//add item to leaderboard
|
||||
|
|
@ -1419,8 +1420,12 @@ function addToLeaderboard(lb, result, username) {
|
|||
timestamp: Date.now(),
|
||||
hidden: false,
|
||||
};
|
||||
if (lb.board.length == 0 || lbitem.wpm < lb.board.slice(-1)[0].wpm) {
|
||||
if (lb.board.length == 0) {
|
||||
lb.board.push(lbitem);
|
||||
retData.insertedAt = 1;
|
||||
} else if (lbitem.wpm < lb.board.slice(-1)[0].wpm) {
|
||||
lb.board.push(lbitem);
|
||||
retData.insertedAt = lb.board.length + 1;
|
||||
} else {
|
||||
for (i = 0; i < lb.board.length; i++) {
|
||||
//start from top, if item wpm > lb item wpm, insert before it
|
||||
|
|
|
|||
|
|
@ -18,43 +18,39 @@ const db = admin.firestore();
|
|||
const auth = admin.auth();
|
||||
const fetch = require("node-fetch");
|
||||
|
||||
exports.changeDisplayName = functions.https.onCall(
|
||||
async (request, response) => {
|
||||
try {
|
||||
if (!isUsernameValid(request.name))
|
||||
return { status: -1, message: "Name not valid" };
|
||||
let taken = await db
|
||||
.collection("takenNames")
|
||||
.doc(request.name.toLowerCase())
|
||||
.get();
|
||||
taken = taken.data();
|
||||
if (taken === undefined || taken.taken === false) {
|
||||
//not taken
|
||||
let oldname = admin.auth().getUser(request.uid);
|
||||
oldname = (await oldname).displayName;
|
||||
await admin
|
||||
.auth()
|
||||
.updateUser(request.uid, { displayName: request.name });
|
||||
await db
|
||||
.collection("users")
|
||||
.doc(request.uid)
|
||||
.set({ name: request.name }, { merge: true });
|
||||
await db.collection("takenNames").doc(request.name.toLowerCase()).set(
|
||||
{
|
||||
taken: true,
|
||||
},
|
||||
{ merge: true }
|
||||
);
|
||||
await db.collection("takenNames").doc(oldname.toLowerCase()).delete();
|
||||
return { status: 1, message: "Updated" };
|
||||
} else {
|
||||
return { status: -2, message: "Name taken." };
|
||||
}
|
||||
} catch (e) {
|
||||
return { status: -999, message: "Error: " + e.message };
|
||||
exports.changename = functions.https.onCall(async (request, response) => {
|
||||
try {
|
||||
if (!isUsernameValid(request.name))
|
||||
return { status: -1, message: "Name not valid" };
|
||||
let taken = await db
|
||||
.collection("takenNames")
|
||||
.doc(request.name.toLowerCase())
|
||||
.get();
|
||||
taken = taken.data();
|
||||
if (taken === undefined || taken.taken === false) {
|
||||
//not taken
|
||||
let oldname = admin.auth().getUser(request.uid);
|
||||
oldname = (await oldname).name;
|
||||
await admin.auth().updateUser(request.uid, { name: request.name });
|
||||
await db
|
||||
.collection("users")
|
||||
.doc(request.uid)
|
||||
.set({ name: request.name }, { merge: true });
|
||||
await db.collection("takenNames").doc(request.name.toLowerCase()).set(
|
||||
{
|
||||
taken: true,
|
||||
},
|
||||
{ merge: true }
|
||||
);
|
||||
await db.collection("takenNames").doc(oldname.toLowerCase()).delete();
|
||||
return { status: 1, message: "Updated" };
|
||||
} else {
|
||||
return { status: -2, message: "Name taken." };
|
||||
}
|
||||
} catch (e) {
|
||||
return { status: -999, message: "Error: " + e.message };
|
||||
}
|
||||
);
|
||||
});
|
||||
|
||||
exports.verifyUser = functions.https.onRequest(async (request, response) => {
|
||||
response.set("Access-Control-Allow-Origin", origin);
|
||||
|
|
|
|||
|
|
@ -123,7 +123,7 @@ async function getAllNames() {
|
|||
// .then((data) => {
|
||||
// let names = [];
|
||||
// data.users.forEach((user) => {
|
||||
// names.push(user.displayName);
|
||||
// names.push(user.name);
|
||||
// });
|
||||
// return names;
|
||||
// });
|
||||
|
|
@ -134,7 +134,7 @@ async function getAllNames() {
|
|||
// List batch of users, 1000 at a time.
|
||||
let listUsersResult = await admin.auth().listUsers(1000, nextPageToken);
|
||||
for (let i = 0; i < listUsersResult.users.length; i++) {
|
||||
ret.push(listUsersResult.users[i].displayName);
|
||||
ret.push(listUsersResult.users[i].name);
|
||||
}
|
||||
if (listUsersResult.pageToken) {
|
||||
// List next batch of users.
|
||||
|
|
@ -153,7 +153,7 @@ async function getAllUsers() {
|
|||
// .then((data) => {
|
||||
// let names = [];
|
||||
// data.users.forEach((user) => {
|
||||
// names.push(user.displayName);
|
||||
// names.push(user.name);
|
||||
// });
|
||||
// return names;
|
||||
// });
|
||||
|
|
|
|||
|
|
@ -1,7 +1,6 @@
|
|||
const { task, src, dest, series, watch } = require("gulp");
|
||||
const browserify = require("browserify");
|
||||
const axios = require("axios");
|
||||
const Cookies = require("js-cookie");
|
||||
const babelify = require("babelify");
|
||||
const concat = require("gulp-concat");
|
||||
const del = require("del");
|
||||
|
|
@ -14,7 +13,7 @@ sass.compiler = require("dart-sass");
|
|||
|
||||
let eslintConfig = {
|
||||
parser: "babel-eslint",
|
||||
globals: ["jQuery", "$", "Cookies", "moment", "html2canvas", "ClipboardItem"],
|
||||
globals: ["jQuery", "$", "moment", "html2canvas", "ClipboardItem"],
|
||||
envs: ["es6", "browser", "node"],
|
||||
rules: {
|
||||
"constructor-super": "error",
|
||||
|
|
|
|||
11
package-lock.json
generated
11
package-lock.json
generated
|
|
@ -18,7 +18,6 @@
|
|||
"chartjs-plugin-trendline": "^0.2.2",
|
||||
"dotenv": "^9.0.2",
|
||||
"express": "^4.17.1",
|
||||
"js-cookie": "^2.2.1",
|
||||
"jsonwebtoken": "^8.5.1",
|
||||
"mongoose": "^5.12.8",
|
||||
"tinycolor2": "^1.4.2"
|
||||
|
|
@ -7641,11 +7640,6 @@
|
|||
"integrity": "sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/js-cookie": {
|
||||
"version": "2.2.1",
|
||||
"resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-2.2.1.tgz",
|
||||
"integrity": "sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ=="
|
||||
},
|
||||
"node_modules/js-tokens": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
|
||||
|
|
@ -19481,11 +19475,6 @@
|
|||
"integrity": "sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==",
|
||||
"dev": true
|
||||
},
|
||||
"js-cookie": {
|
||||
"version": "2.2.1",
|
||||
"resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-2.2.1.tgz",
|
||||
"integrity": "sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ=="
|
||||
},
|
||||
"js-tokens": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
|
||||
|
|
|
|||
|
|
@ -51,7 +51,6 @@
|
|||
"chartjs-plugin-trendline": "^0.2.2",
|
||||
"dotenv": "^9.0.2",
|
||||
"express": "^4.17.1",
|
||||
"js-cookie": "^2.2.1",
|
||||
"jsonwebtoken": "^8.5.1",
|
||||
"mongoose": "^5.12.8",
|
||||
"tinycolor2": "^1.4.2"
|
||||
|
|
|
|||
|
|
@ -13,7 +13,6 @@ import * as AllTimeStats from "./all-time-stats";
|
|||
import * as DB from "./db";
|
||||
import * as TestLogic from "./test-logic";
|
||||
import * as UI from "./ui";
|
||||
import Cookies from "js-cookie";
|
||||
import axiosInstance from "./axios-instance";
|
||||
//var gmailProvider = new firebase.auth.GoogleAuthProvider();
|
||||
|
||||
|
|
@ -30,38 +29,14 @@ export function signIn() {
|
|||
// UI.changePage("test");
|
||||
if ($(".pageLogin .login #rememberMe input").prop("checked")) {
|
||||
// TODO: set user login cookie that persists after session
|
||||
Cookies.set("accessToken", response.data.accessToken, { expires: 1 });
|
||||
Cookies.set("refreshToken", response.data.refreshToken, {
|
||||
expires: 100000,
|
||||
});
|
||||
Cookies.set("uid", response.data.user._id, { expires: 100000 });
|
||||
Cookies.set("displayName", response.data.user.name, {
|
||||
expires: 100000,
|
||||
});
|
||||
Cookies.set("email", response.data.user.email, { expires: 100000 });
|
||||
Cookies.set("emailVerified", response.data.user.emailVerified, {
|
||||
expires: 100000,
|
||||
});
|
||||
Cookies.set("creationTime", response.data.user.metadata.creationTime, {
|
||||
expires: 100000,
|
||||
});
|
||||
window.localStorage.setItem("accessToken", response.data.accessToken);
|
||||
window.localStorage.setItem("refreshToken", response.data.refreshToken);
|
||||
window.localStorage.setItem("user", JSON.stringify(response.data.user));
|
||||
} else {
|
||||
//set user login cookie to persist only as long as the session lives
|
||||
Cookies.set("accessToken", response.data.accessToken, { expires: 1 });
|
||||
Cookies.set("refreshToken", response.data.refreshToken, {
|
||||
expires: 100000,
|
||||
});
|
||||
Cookies.set("uid", response.data.user._id, { expires: 100000 });
|
||||
Cookies.set("displayName", response.data.user.name, {
|
||||
expires: 100000,
|
||||
});
|
||||
Cookies.set("email", response.data.user.email, { expires: 100000 });
|
||||
Cookies.set("emailVerified", response.data.user.emailVerified, {
|
||||
expires: 100000,
|
||||
});
|
||||
Cookies.set("creationTime", response.data.user.metadata.creationTime, {
|
||||
expires: 100000,
|
||||
});
|
||||
window.localStorage.setItem("accessToken", response.data.accessToken);
|
||||
window.localStorage.setItem("refreshToken", response.data.refreshToken);
|
||||
window.localStorage.setItem("user", JSON.stringify(response.data.user));
|
||||
}
|
||||
userStateChanged(response.data.user);
|
||||
})
|
||||
|
|
@ -126,10 +101,9 @@ export function linkWithGoogle() {
|
|||
|
||||
export function signOut() {
|
||||
//don't think I need an axios request here if I'm using jwt
|
||||
Cookies.remove("accessToken");
|
||||
Cookies.remove("uid");
|
||||
Cookies.remove("displayName");
|
||||
Cookies.remove("email");
|
||||
window.localStorage.removeItem("accessToken");
|
||||
window.localStorage.removeItem("refreshToken");
|
||||
window.localStorage.removeItem("user");
|
||||
Notifications.add("Signed out", 0, 2);
|
||||
AllTimeStats.clear();
|
||||
Settings.hideAccountSection();
|
||||
|
|
@ -162,17 +136,9 @@ function signUp() {
|
|||
})
|
||||
.then((response) => {
|
||||
let usr = response.data.user;
|
||||
Cookies.set("accessToken", response.data.accessToken, { expires: 1 });
|
||||
Cookies.set("refreshToken", response.data.refreshToken, {
|
||||
expires: 100000,
|
||||
});
|
||||
Cookies.set("uid", usr._id, { expires: 100000 });
|
||||
Cookies.set("displayName", usr.name, { expires: 100000 });
|
||||
Cookies.set("email", usr.email, { expires: 100000 });
|
||||
Cookies.set("emailVerified", usr.emailVerified, { expires: 100000 });
|
||||
Cookies.set("creationTime", response.data.user.metadata.creationTime, {
|
||||
expires: 100000,
|
||||
});
|
||||
window.localStorage.setItem("accessToken", response.data.accessToken);
|
||||
window.localStorage.setItem("refreshToken", response.data.refreshToken);
|
||||
window.localStorage.setItem("user", JSON.stringify(response.data.user));
|
||||
//Cookies.set('refreshToken', response.data.refreshToken);
|
||||
AllTimeStats.clear();
|
||||
Notifications.add("Account created", 1, 3);
|
||||
|
|
@ -258,7 +224,7 @@ export function userStateChanged(user) {
|
|||
AccountButton.update();
|
||||
AccountButton.loading(true);
|
||||
Account.getDataAndInit();
|
||||
// var displayName = user.displayName;
|
||||
// var name = user.name;
|
||||
// var email = user.email;
|
||||
// var emailVerified = user.emailVerified;
|
||||
// var photoURL = user.photoURL;
|
||||
|
|
|
|||
|
|
@ -30,11 +30,11 @@ export function getDataAndInit() {
|
|||
let user = DB.currentUser(); // I think that this should be stored in cookie
|
||||
if (snap.name === undefined) {
|
||||
//verify username
|
||||
if (Misc.isUsernameValid(user.displayName)) {
|
||||
if (Misc.isUsernameValid(user.name)) {
|
||||
//valid, just update
|
||||
snap.name = user.displayName;
|
||||
snap.name = user.name;
|
||||
DB.setSnapshot(snap);
|
||||
DB.updateName(user.uid, user.displayName);
|
||||
DB.updateName(user.uid, user.name);
|
||||
} else {
|
||||
//invalid, get new
|
||||
// Notifications.add("Invalid name", 0);
|
||||
|
|
@ -49,7 +49,7 @@ export function getDataAndInit() {
|
|||
promptVal = prompt(
|
||||
"Your name is either invalid or unavailable (you also need to do this if you used Google Sign Up). Please provide a new display name (cannot be longer than 14 characters, can only contain letters, numbers, underscores, dots and dashes):"
|
||||
);
|
||||
cdnVal = await CloudFunctions.changeDisplayName({
|
||||
cdnVal = await CloudFunctions.changename({
|
||||
uid: user.uid,
|
||||
name: promptVal,
|
||||
});
|
||||
|
|
|
|||
|
|
@ -1,4 +1,3 @@
|
|||
import Cookies from "js-cookie";
|
||||
import axios from "axios";
|
||||
|
||||
const axiosInstance = axios.create();
|
||||
|
|
@ -6,9 +5,7 @@ const axiosInstance = axios.create();
|
|||
// Request interceptor for API calls
|
||||
axiosInstance.interceptors.request.use(
|
||||
async (config) => {
|
||||
const accessToken = Cookies.get("accessToken")
|
||||
? Cookies.get("accessToken")
|
||||
: null;
|
||||
const accessToken = window.localStorage.getItem("accessToken");
|
||||
if (accessToken) {
|
||||
config.headers = {
|
||||
Authorization: `Bearer ${accessToken}`,
|
||||
|
|
@ -37,10 +34,7 @@ axiosInstance.interceptors.response.use(
|
|||
const originalRequest = error.config;
|
||||
if (error.response.status === 401 && !originalRequest._retry) {
|
||||
originalRequest._retry = true;
|
||||
//console.log("Refreshing access token");
|
||||
const refreshToken = Cookies.get("refreshToken")
|
||||
? Cookies.get("refreshToken")
|
||||
: null;
|
||||
const refreshToken = window.localStorage.getItem("refreshToken");
|
||||
await axios
|
||||
.post(
|
||||
`/api/refreshToken`,
|
||||
|
|
@ -48,7 +42,7 @@ axiosInstance.interceptors.response.use(
|
|||
{ headers: { Authorization: `Bearer ${refreshToken}` } }
|
||||
)
|
||||
.then((response) => {
|
||||
Cookies.set("accessToken", response.data.accessToken);
|
||||
window.localStorage.setItem("accessToken", response.data.accessToken);
|
||||
axios.defaults.headers.common["Authorization"] =
|
||||
"Bearer " + response.data.accessToken;
|
||||
})
|
||||
|
|
|
|||
|
|
@ -58,7 +58,7 @@ export function getLeaderboard(input) {
|
|||
export function clearTagPb(input) {
|
||||
console.log("request data here");
|
||||
}
|
||||
export function changeDisplayName(input) {
|
||||
export function changename(input) {
|
||||
console.log("request data here");
|
||||
}
|
||||
|
||||
|
|
|
|||
15
src/js/db.js
15
src/js/db.js
|
|
@ -2,7 +2,6 @@ import { loadTags } from "./result-filters";
|
|||
import * as AccountButton from "./account-button";
|
||||
import * as Notifications from "./notifications";
|
||||
import axiosInstance from "./axios-instance";
|
||||
import Cookies from "js-cookie";
|
||||
|
||||
let dbSnapshot = null;
|
||||
|
||||
|
|
@ -29,19 +28,9 @@ export function setSnapshot(newSnapshot) {
|
|||
}
|
||||
|
||||
export function currentUser() {
|
||||
const token = Cookies.get("accessToken");
|
||||
const token = window.localStorage.getItem("accessToken");
|
||||
if (token) {
|
||||
//maybe user object could be stored in localStorage
|
||||
// I think tokens should continue to stay in cookies though
|
||||
const user = {
|
||||
uid: Cookies.get("uid"),
|
||||
displayName: Cookies.get("displayName"),
|
||||
email: Cookies.get("email"),
|
||||
metadata: {
|
||||
creationTime: Cookies.get("creationTime"),
|
||||
},
|
||||
emailVerified: Cookies.get("emailVerified"),
|
||||
};
|
||||
const user = JSON.parse(window.localStorage.getItem("user"));
|
||||
return user;
|
||||
} else {
|
||||
return null;
|
||||
|
|
|
|||
|
|
@ -29,11 +29,6 @@ function update() {
|
|||
|
||||
let boardinfo = currentLeaderboard.split("_");
|
||||
|
||||
let uid = null;
|
||||
if (DB.currentUser() !== null) {
|
||||
uid = DB.currentUser().uid;
|
||||
}
|
||||
|
||||
Loader.show();
|
||||
Promise.all([
|
||||
axiosInstance.get(
|
||||
|
|
@ -87,7 +82,7 @@ function update() {
|
|||
dailyData.board.forEach((entry) => {
|
||||
if (entry.hidden) return;
|
||||
let meClassString = "";
|
||||
if (entry.name == DB.currentUser().displayName) {
|
||||
if (entry.name == DB.currentUser().name) {
|
||||
meClassString = ' class="me"';
|
||||
$("#leaderboardsWrapper table.daily tfoot").html(`
|
||||
<tr>
|
||||
|
|
@ -170,7 +165,12 @@ function update() {
|
|||
globalData.board.forEach((entry) => {
|
||||
if (entry.hidden) return;
|
||||
let meClassString = "";
|
||||
if (entry.name == DB.currentUser().displayName) {
|
||||
console.log("Should be setting my leaderboard");
|
||||
console.log(entry.name);
|
||||
console.log(DB.currentUser());
|
||||
console.log(DB.currentUser().name);
|
||||
if (entry.name == DB.currentUser().name) {
|
||||
console.log("Setting my leaderboard now");
|
||||
meClassString = ' class="me"';
|
||||
$("#leaderboardsWrapper table.global tfoot").html(`
|
||||
<tr>
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue