import { createHash } from "crypto";
import { is_valid_uuid_string } from "@cocalc/util/misc";
export function getUid(project_id: string): number {
if (!is_valid_uuid_string(project_id)) {
throw Error(`project_id (=${project_id}) must be a valid v4 uuid`);
}
const sha512sum = createHash("sha512");
let n = parseInt(sha512sum.update(project_id).digest("hex").slice(0, 8), 16);
n = Math.floor(n / 8);
if (n > 65537) {
return n;
} else {
return n + 65537;
}
}
import { re_url, to_human_list } from "@cocalc/util/misc";
export { contains_url } from "@cocalc/util/misc";
export function is_valid_username(str: string): string | undefined {
const name = str.toLowerCase();
const found = name.match(re_url);
if (found) {
return `URLs are not allowed. Found ${to_human_list(found)}`;
}
if (name.indexOf("mailto:") != -1 && name.indexOf("@") != -1) {
return "email addresses are not allowed";
}
return;
}
export function process_env_int(name: string, fallback: number): number {
const val = process.env[name];
if (val == null) return fallback;
try {
return parseInt(val);
} catch {
return fallback;
}
}
export function envForSpawn() {
const env = { ...process.env };
for (const name of ["DEBUG", "DEBUG_CONSOLE", "NODE_ENV", "DEBUG_FILE"]) {
delete env[name];
}
return env;
}
import { callback } from "awaiting";
import { randomBytes } from "crypto";
export async function secureRandomString(length: number): Promise<string> {
return (await callback(randomBytes, length)).toString("base64");
}
export function secureRandomStringSync(length: number): string {
return randomBytes(length).toString("base64");
}