Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
sagemathinc
GitHub Repository: sagemathinc/cocalc
Path: blob/master/src/packages/database/postgres/central-log.ts
1503 views
1
import getPool from "@cocalc/database/pool";
2
import { pii_expire } from "./pii";
3
import { uuid } from "@cocalc/util/misc";
4
5
// log events, which contain personal information (email, account_id, ...)
6
const PII_EVENTS = new Set([
7
"create_account",
8
"change_password",
9
"change_email_address",
10
"webapp-add_passport",
11
"get_user_auth_token",
12
"successful_sign_in",
13
"webapp-email_sign_up",
14
"create_account_registration_token",
15
]);
16
17
export default async function centralLog({
18
event,
19
value,
20
}: {
21
event: string;
22
value: object;
23
}) {
24
const pool = getPool();
25
26
let expire;
27
if (value["ip_address"] || value["email_address"] || PII_EVENTS.has(event)) {
28
const date = await pii_expire();
29
if (date == null) {
30
expire = "NOW() + INTERVAL '6 MONTHS'";
31
} else {
32
expire = `NOW() + INTERVAL '${(date.valueOf() - Date.now()) / 1000} seconds'`;
33
}
34
} else if (event == "uncaught_exception") {
35
expire = "NOW() + INTERVAL '1 MONTH'";
36
} else {
37
expire = "NOW() + INTERVAL '1 YEAR'";
38
}
39
await pool.query(
40
`INSERT INTO central_log(id,event,value,time,expire) VALUES($1,$2,$3,NOW(),${expire})`,
41
[uuid(), event, value],
42
);
43
}
44
45