@cocalc/project
Version:
CoCalc: project daemon
42 lines • 1.71 kB
JavaScript
;
/*
* This file is part of CoCalc: Copyright © 2022 Sagemath, Inc.
* License: AGPLv3 s.t. "Commons Clause" – see LICENSE.md for details
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.secretToken = void 0;
/*
Generate the "secret_token" file if it does not already exist.
*/
const fs_1 = require("fs");
const crypto_1 = require("crypto");
const awaiting_1 = require("awaiting");
const logger_1 = require("@cocalc/project/logger");
const data_1 = require("@cocalc/project/data");
const winston = (0, logger_1.getLogger)("secret-token");
// We use an n-character cryptographic random token, where n
// is given below. If you want to change this, changing only
// the following line should be safe.
const LENGTH = 128;
let secretToken = ""; // not yet initialized
exports.secretToken = secretToken;
async function createSecretToken() {
winston.info(`creating '${data_1.secretToken}'`);
exports.secretToken = secretToken = (await (0, awaiting_1.callback)(crypto_1.randomBytes, LENGTH)).toString("base64");
await (0, awaiting_1.callback)(fs_1.writeFile, data_1.secretToken, secretToken);
// set restrictive permissions; shouldn't be necessary
await (0, awaiting_1.callback)(fs_1.chmod, data_1.secretToken, 0o600);
return secretToken;
}
async function init() {
try {
winston.info(`checking for secret token in "${data_1.secretToken}"`);
exports.secretToken = secretToken = (await (0, awaiting_1.callback)(fs_1.readFile, data_1.secretToken)).toString();
return secretToken;
}
catch (err) {
return await createSecretToken();
}
}
exports.default = init;
//# sourceMappingURL=secret-token.js.map