monkeytype/functions/index.js

149 lines
4.3 KiB
JavaScript
Raw Normal View History

2020-07-03 08:35:45 +08:00
const functions = require("firebase-functions");
const admin = require("firebase-admin");
2020-09-23 23:30:16 +08:00
let key = "./serviceAccountKey.json";
2021-01-16 01:00:43 +08:00
let origin = "http://localhost:5000";
2020-07-03 08:35:45 +08:00
if (process.env.GCLOUD_PROJECT === "monkey-type") {
key = "./serviceAccountKey_live.json";
2021-01-16 01:00:43 +08:00
origin = "https://monkeytype.com";
}
var serviceAccount = require(key);
admin.initializeApp({
2020-07-03 08:35:45 +08:00
credential: admin.credential.cert(serviceAccount),
});
2020-07-07 20:28:01 +08:00
const db = admin.firestore();
const auth = admin.auth();
2020-10-10 22:48:08 +08:00
const fetch = require("node-fetch");
/*
//this was commented out in the original code, and might not need to be transfered
exports.generatePairingCode = functions
.runWith({
timeoutSeconds: 100,
memory: "2GB",
})
.https.onRequest((request, response) => {
response.set("Access-Control-Allow-Origin", "*");
2021-03-18 05:42:11 +08:00
if (request.method === "OPTIONS") {
// Send response to OPTIONS requests
response.set("Access-Control-Allow-Methods", "POST, GET, OPTIONS");
response.set(
"Access-Control-Allow-Headers",
"Authorization,Content-Type"
);
response.set("Access-Control-Max-Age", "3600");
response.status(204).send("");
return;
}
2021-03-18 05:42:11 +08:00
request = request.body.data;
try {
if (request === null) {
console.error(
`error while trying to generate discord pairing code - no input`
);
response.status(200).send({ data: { status: -999 } });
2021-03-18 05:42:11 +08:00
return;
}
return db
.collection("users")
.doc(request.uid)
.get()
.then(async (userDoc) => {
userDocData = userDoc.data();
if (
userDocData.discordPairingCode !== undefined &&
userDocData.discordPairingCode !== null
) {
console.log(
`user ${request.uid} already has code ${userDocData.discordPairingCode}`
2021-03-18 05:42:11 +08:00
);
response.status(200).send({
data: {
status: -999,
pairingCode: userDocData.discordPairingCode,
},
});
} else {
let stepSize = 1000;
let existingCodes = [];
let query = await db
.collection(`users`)
.where("discordPairingCode", ">", "")
.limit(stepSize)
.get();
let lastDoc;
while (query.docs.length > 0) {
lastDoc = query.docs[query.docs.length - 1];
query.docs.forEach((doc) => {
let docData = doc.data();
if (
docData.discordPairingCode !== undefined &&
docData.discordPairingCode !== null
) {
existingCodes.push(docData.discordPairingCode);
}
});
query = await db
.collection(`users`)
.where("discordPairingCode", ">", "")
.limit(stepSize)
.startAfter(lastDoc)
.get();
2021-03-18 05:42:11 +08:00
}
let randomCode = generate(9);
2021-03-18 05:42:11 +08:00
while (existingCodes.includes(randomCode)) {
randomCode = generate(9);
}
2021-03-18 05:42:11 +08:00
return db
.collection("users")
.doc(request.uid)
.update(
{
discordPairingCode: randomCode,
},
{ merge: true }
)
.then((res) => {
console.log(`generated ${randomCode} for user ${request.uid}`);
response.status(200).send({
data: {
status: 1,
pairingCode: randomCode,
},
});
return;
})
.catch((e) => {
console.error(
`error while trying to set discord pairing code ${randomCode} for user ${request.uid} - ${e}`
);
response.status(200).send({
data: {
status: -999,
},
});
return;
});
}
2021-03-18 05:42:11 +08:00
});
} catch (e) {
console.error(
`error while trying to generate discord pairing code for user ${request.uid} - ${e}`
);
2021-03-18 05:42:11 +08:00
response.status(200).send({
data: {
status: -999,
},
});
return;
2020-07-04 08:39:29 +08:00
}
});
*/