UNPKG

@cocalc/project

Version:
42 lines 1.71 kB
"use strict"; /* * 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