clone

push a directory of html from the terminal and get a four-character url back. a deno cli on cloudflare

main
nzip / cli / commands / auth.ts
auth.ts 1.9K
1import { ApiClient } from "../lib/api.ts";2import { configPath, loadConfig, saveConfig } from "../lib/config.ts";3import { emit, fail, green } from "../lib/fmt.ts";45function prompt2(question: string, fallback?: string): string {6 const answer = prompt(7 fallback ? `${question} [${fallback}]:` : `${question}:`,8 );9 const value = (answer ?? "").trim() || fallback || "";10 if (!value) fail(`${question} is required`);11 return value;12}1314function envDefaultServer(): string | undefined {15 try {16 const server = Deno.env.get("NZIP_SERVER")?.trim();17 if (server) return server;18 const domain = Deno.env.get("NZIP_DOMAIN")?.trim().replace(19 /^https?:\/\//,20 "",21 ).replace(22 /\/$/,23 "",24 );25 return domain ? `https://${domain}` : undefined;26 } catch {27 return undefined;28 }29}3031export async function cmdAuth(32 serverFlag?: string,33 tokenFlag?: string,34): Promise<void> {35 const existing = await loadConfig();36 const server = (serverFlag ?? prompt2("server", existing?.server ?? envDefaultServer()))37 .replace(/\/$/, "");38 const token = tokenFlag ?? prompt2("token", existing?.token);39 const config = { server, token, defaultVault: existing?.defaultVault };4041 const api = new ApiClient(config);42 let status;43 try {44 status = await api.status();45 } catch (e) {46 fail(47 `could not verify token against ${server}/api/status — ${(e as Error).message}`,48 );49 }5051 if (!config.defaultVault && status.vaults.length > 0) {52 config.defaultVault = status.defaultVaults?.temporary ?? status.vaults[0].name;53 }54 await saveConfig(config);55 emit(() => {56 console.log(57 `${green("✓")} authenticated against ${server} — saved to ${configPath()}`,58 );59 if (config.defaultVault) {60 console.log(` temporary default vault: ${config.defaultVault}`);61 }62 }, {63 ok: true,64 server,65 configPath: configPath(),66 defaultVault: config.defaultVault ?? null,67 vaults: status.vaults,68 });69}