mirror of
https://github.com/monkeytypegame/monkeytype.git
synced 2025-10-06 05:26:54 +08:00
Fixed account results bug, add leaderboard verification/ban checks
This commit is contained in:
parent
7845135c8a
commit
cb8785fa69
4 changed files with 79 additions and 42 deletions
|
@ -1,17 +1,21 @@
|
|||
# Mongo todo
|
||||
|
||||
## Todo
|
||||
|
||||
Make sure that the branch is ready for deployment
|
||||
|
||||
- Add deploy script(s) to package.json
|
||||
- Make sure that firebase hosted app can connect to api when deployed
|
||||
- Create a plan for apache/nginx server
|
||||
- Api should probably be accessible via api.monkeytype.com or monkeytype.com/api
|
||||
- Probably the previous since firebase might not work with seperate linux server
|
||||
|
||||
## Bugs
|
||||
|
||||
- Graph bugs out when new result is added but page is not refreshed
|
||||
- Graph loops back from earliest point to the new points
|
||||
- Results list isn't updated either
|
||||
- Result is added to end of list instead of front I think
|
||||
- Could be fixed if list wasn't reversed and results were just rendered backwards
|
||||
- Some methods in functions/index.js may be broken
|
||||
- I think bot commands like lbUpdate and such
|
||||
- Leaderboard entries that should be hidden are not
|
||||
- If you are in first place and you place on the leaderboard but not above yourself, you get glb undefined error
|
||||
- Might also occur if you are simply on the leaderboard and make the leaderboard but not above your current position
|
||||
- Make sure discord can work
|
||||
- Might just want to call the api from discord bot instead of firebase functions
|
||||
|
||||
### Minor/efficiency bugs
|
||||
|
||||
|
@ -24,7 +28,15 @@
|
|||
- Can't navigate to user until page is refreshed
|
||||
- After refresh, pr is not saved
|
||||
- Can't induce this error and doesn't occur often so adding it as minor bug
|
||||
- Does lbMemory work exactly like it did before
|
||||
- lbmemory undefined if page not refreshed after user sign up?
|
||||
- If you are in first place and you place on the leaderboard but not above yourself, you get glb undefined error
|
||||
- Might also occur if you are simply on the leaderboard and make the leaderboard but not above your current position
|
||||
- Doesn't happen all the time
|
||||
- Hidden property of leaderboard is unused
|
||||
- Verified property of user is unused, set at false by default
|
||||
- Can't find where the property would be set in the code
|
||||
- Is this discord verified, if so, why do you need discord verified to be on leaderboard?
|
||||
- Temporarily removed from leaderboard requirements
|
||||
|
||||
### Possibilities
|
||||
|
||||
|
@ -33,3 +45,4 @@
|
|||
- After an hour without a new request they can be removed from memory
|
||||
- Create a backup system to prevent loss of data
|
||||
- Users should be able to export their data themselves
|
||||
- Pretty much is just the user snap but without uid
|
||||
|
|
|
@ -625,7 +625,6 @@ app.post("/api/passwordReset", (req, res) => {
|
|||
|
||||
app.get("/api/fetchSnapshot", authenticateToken, (req, res) => {
|
||||
/* Takes token and returns snap */
|
||||
console.log("UID: " + req.uid);
|
||||
User.findOne({ uid: req.uid }, (err, user) => {
|
||||
if (err) res.status(500).send({ error: err });
|
||||
if (!user) res.status(200).send({ message: "No user found" }); //client doesn't do anything with this
|
||||
|
@ -1394,34 +1393,64 @@ app.post("/api/attemptAddToLeaderboards", authenticateToken, (req, res) => {
|
|||
const result = req.body.result;
|
||||
let retData = {};
|
||||
User.findOne({ uid: req.uid }, (err, user) => {
|
||||
Leaderboard.find(
|
||||
{
|
||||
mode: result.mode,
|
||||
mode2: result.mode2,
|
||||
},
|
||||
(err, lbs) => {
|
||||
//for all leaderboards queried, determine if it qualifies, and add if it does
|
||||
lbs.forEach((lb) => {
|
||||
if (
|
||||
lb.board.length == 0 ||
|
||||
lb.board.length < lb.size ||
|
||||
result.wpm > lb.board.slice(-1)[0].wpm
|
||||
) {
|
||||
lb, (lbPosData = addToLeaderboard(lb, result, user.name)); //should uid be added instead of name?
|
||||
console.log(user.lbMemory[lb.mode + lb.mode2][lb.type]);
|
||||
//lbPosData.foundAt = user.lbMemory[lb.mode+lb.mode2][lb.type];
|
||||
retData[lb.type] = lbPosData;
|
||||
lb.save();
|
||||
user.lbMemory[lb.mode + lb.mode2][lb.type] =
|
||||
retData[lb.type].insertedAt;
|
||||
admin
|
||||
.auth()
|
||||
.getUser(req.uid)
|
||||
.then((fbUser) => {
|
||||
return fbUser.emailVerified;
|
||||
})
|
||||
.then((emailVerified) => {
|
||||
if (user.emailVerified === false) {
|
||||
if (emailVerified === true) {
|
||||
user.emailVerified = true;
|
||||
} else {
|
||||
res.status(200).send({ needsToVerifyEmail: true });
|
||||
return;
|
||||
}
|
||||
}
|
||||
if (user.name === undefined) {
|
||||
//cannot occur since name is required, why is this here?
|
||||
res.status(200).send({ noName: true });
|
||||
return;
|
||||
}
|
||||
if (user.banned) {
|
||||
res.status(200).send({ banned: true });
|
||||
return;
|
||||
}
|
||||
/*
|
||||
if (user.verified === false) {
|
||||
res.status(200).send({ needsToVerify: true });
|
||||
return;
|
||||
}*/
|
||||
Leaderboard.find(
|
||||
{
|
||||
mode: result.mode,
|
||||
mode2: result.mode2,
|
||||
},
|
||||
(err, lbs) => {
|
||||
//for all leaderboards queried, determine if it qualifies, and add if it does
|
||||
lbs.forEach((lb) => {
|
||||
if (
|
||||
lb.board.length == 0 ||
|
||||
lb.board.length < lb.size ||
|
||||
result.wpm > lb.board.slice(-1)[0].wpm
|
||||
) {
|
||||
lb, (lbPosData = addToLeaderboard(lb, result, user.name)); //should uid be added instead of name?
|
||||
console.log(user.lbMemory[lb.mode + lb.mode2][lb.type]);
|
||||
//lbPosData.foundAt = user.lbMemory[lb.mode+lb.mode2][lb.type];
|
||||
retData[lb.type] = lbPosData;
|
||||
lb.save();
|
||||
user.lbMemory[lb.mode + lb.mode2][lb.type] =
|
||||
retData[lb.type].insertedAt;
|
||||
}
|
||||
});
|
||||
}
|
||||
).then((e) => {
|
||||
retData.status = 2;
|
||||
user.save();
|
||||
res.json(retData);
|
||||
});
|
||||
}
|
||||
).then((e) => {
|
||||
retData.status = 2;
|
||||
user.save();
|
||||
res.json(retData);
|
||||
});
|
||||
});
|
||||
});
|
||||
res.status(200);
|
||||
});
|
||||
|
|
|
@ -171,11 +171,6 @@ function signUp() {
|
|||
})
|
||||
.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);
|
||||
|
|
|
@ -1616,7 +1616,7 @@ export function finish(difficultyFailed = false) {
|
|||
DB.getSnapshot() !== null &&
|
||||
DB.getSnapshot().results !== undefined
|
||||
) {
|
||||
DB.getSnapshot().results.unshift(completedEvent);
|
||||
DB.getSnapshot().results.push(completedEvent);
|
||||
if (DB.getSnapshot().globalStats.time == undefined) {
|
||||
DB.getSnapshot().globalStats.time =
|
||||
testtime +
|
||||
|
|
Loading…
Add table
Reference in a new issue