changed displayName to name, moved from cookies to localstorage

This commit is contained in:
lukew3 2021-05-26 19:06:03 -04:00
parent ab13cd439d
commit 12f3b45529
12 changed files with 73 additions and 136 deletions

View file

@ -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

View file

@ -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);

View file

@ -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;
// });

View file

@ -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
View file

@ -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",

View file

@ -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"

View file

@ -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;

View file

@ -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,
});

View file

@ -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;
})

View file

@ -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");
}

View file

@ -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;

View file

@ -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>