Compare commits

...

2 Commits

Author SHA1 Message Date
adueck e09f3b7d14 cleanup 2024-03-02 23:13:11 -05:00
adueck e0ef03a944 add ntfy 2024-03-02 22:46:48 -05:00
4 changed files with 65 additions and 45 deletions

View File

@ -1,40 +1,45 @@
const names = [ const names = [
"LINGDOCS_EMAIL_HOST", "LINGDOCS_EMAIL_HOST",
"LINGDOCS_EMAIL_USER", "LINGDOCS_EMAIL_USER",
"LINGDOCS_EMAIL_PASS", "LINGDOCS_EMAIL_PASS",
"LINGDOCS_COUCHDB", "LINGDOCS_COUCHDB",
"LINGDOCS_ACCOUNT_COOKIE_SECRET", "LINGDOCS_ACCOUNT_COOKIE_SECRET",
"LINGDOCS_ACCOUNT_GOOGLE_CLIENT_SECRET", "LINGDOCS_ACCOUNT_GOOGLE_CLIENT_SECRET",
"LINGDOCS_ACCOUNT_TWITTER_CLIENT_SECRET", "LINGDOCS_ACCOUNT_TWITTER_CLIENT_SECRET",
"LINGDOCS_ACCOUNT_GITHUB_CLIENT_SECRET", "LINGDOCS_ACCOUNT_GITHUB_CLIENT_SECRET",
"LINGDOCS_ACCOUNT_RECAPTCHA_SECRET", "LINGDOCS_ACCOUNT_RECAPTCHA_SECRET",
"LINGDOCS_ACCOUNT_UPGRADE_PASSWORD", "LINGDOCS_ACCOUNT_UPGRADE_PASSWORD",
"STRIPE_SECRET_KEY", "STRIPE_SECRET_KEY",
"STRIPE_WEBHOOK_SECRET", "STRIPE_WEBHOOK_SECRET",
"NTFY_TOPIC",
]; ];
const values = names.map((name) => ({ const values = names.map((name) => ({
name, name,
value: process.env[name] || "", value: process.env[name] || "",
})); }));
const missing = values.filter((v) => !v.value); const missing = values.filter((v) => !v.value);
if (missing.length) { if (missing.length) {
console.error("Missing evironment variable(s):", missing.map((m) => m.name).join(", ")); console.error(
process.exit(1); "Missing evironment variable(s):",
missing.map((m) => m.name).join(", ")
);
process.exit(1);
} }
export default { export default {
emailHost: values[0].value, emailHost: values[0].value,
emailUser: values[1].value, emailUser: values[1].value,
emailPass: values[2].value, emailPass: values[2].value,
couchDbURL: values[3].value, couchDbURL: values[3].value,
cookieSecret: values[4].value, cookieSecret: values[4].value,
googleClientSecret: values[5].value, googleClientSecret: values[5].value,
twitterClientSecret: values[6].value, twitterClientSecret: values[6].value,
githubClientSecret: values[7].value, githubClientSecret: values[7].value,
recaptchaSecret: values[8].value, recaptchaSecret: values[8].value,
upgradePassword: values[9].value, upgradePassword: values[9].value,
stripeSecretKey: values[10].value, stripeSecretKey: values[10].value,
stripeWebhookSecret: values[11].value, stripeWebhookSecret: values[11].value,
ntfyTopic: values[12].value,
}; };

9
account/src/lib/ntfy.ts Normal file
View File

@ -0,0 +1,9 @@
import fetch from "node-fetch";
import envVars from "./env-vars";
export async function ntfy(message: string) {
fetch(`https://ntfy.sh/${envVars.ntfyTopic}`, {
method: "POST",
body: message,
}).catch(console.error);
}

View File

@ -15,6 +15,7 @@ import { outsideProviders } from "../middleware/setup-passport";
import * as T from "../../../website/src/types/account-types"; import * as T from "../../../website/src/types/account-types";
import env from "../lib/env-vars"; import env from "../lib/env-vars";
import Stripe from "stripe"; import Stripe from "stripe";
import { ntfy } from "./ntfy";
const stripe = new Stripe(env.stripeSecretKey, { const stripe = new Stripe(env.stripeSecretKey, {
apiVersion: "2022-08-01", apiVersion: "2022-08-01",
@ -163,6 +164,7 @@ export async function createNewUser(
email: input.email || "", email: input.email || "",
token: email.token, token: email.token,
}); });
ntfy(`new LingDocs user ${input.name} - ${input.email}`);
const user = await insertLingdocsUser(newUser); const user = await insertLingdocsUser(newUser);
return user; return user;
} }

View File

@ -1,12 +1,13 @@
import express, { Response } from "express"; import express, { Response } from "express";
import * as T from "../../../website/src/types/account-types"; import * as T from "../../../website/src/types/account-types";
import { addFeedback } from "../lib/couch-db"; import { addFeedback } from "../lib/couch-db";
import { ntfy } from "../lib/ntfy";
// import env from "../lib/env-vars"; // import env from "../lib/env-vars";
// TODO: ADD PROPER ERROR HANDLING THAT WILL RETURN JSON ALWAYS // TODO: ADD PROPER ERROR HANDLING THAT WILL RETURN JSON ALWAYS
function sendResponse(res: Response, payload: T.APIResponse) { function sendResponse(res: Response, payload: T.APIResponse) {
return res.send(payload); return res.send(payload);
} }
const feedbackRouter = express.Router(); const feedbackRouter = express.Router();
@ -15,22 +16,25 @@ const feedbackRouter = express.Router();
* receives a piece of feedback * receives a piece of feedback
*/ */
feedbackRouter.put("/", (req, res, next) => { feedbackRouter.put("/", (req, res, next) => {
const { anonymous, ...feedback } = req.body; const { anonymous, ...feedback } = req.body;
const user = anonymous const user = anonymous
? "anonymous" ? "anonymous"
: req.user : req.user
? req.user.name ? req.user.name
: "not logged in"; : "not logged in";
addFeedback({ addFeedback({
user, user,
feedback, feedback,
}).then(() => { })
res.send({ ok: true, message: "feedback received" }); .then(() => {
}).catch((e) => { ntfy(JSON.stringify(feedback));
console.error("error receiving feedback"); res.send({ ok: true, message: "feedback received" });
console.error("feedback missed", feedback); })
console.error(e); .catch((e) => {
next("error receiving feedback"); console.error("error receiving feedback");
console.error("feedback missed", feedback);
console.error(e);
next("error receiving feedback");
}); });
}); });