diff options
Diffstat (limited to 'utils/secret.ts')
-rw-r--r-- | utils/secret.ts | 66 |
1 files changed, 0 insertions, 66 deletions
diff --git a/utils/secret.ts b/utils/secret.ts deleted file mode 100644 index eb2054b..0000000 --- a/utils/secret.ts +++ /dev/null @@ -1,66 +0,0 @@ -import { getRequiredEnv, getStdout, loggerWithPrefix } from "./mod.ts"; - -const logger = loggerWithPrefix(() => - `[${new Date().toISOString()}] [BitwardenSession]` -); -export class BitwardenSession { - private readonly sessionInitializer: Promise<string>; - - constructor(server = getRequiredEnv("BW_SERVER")) { - ["BW_CLIENTID", "BW_CLIENTSECRET"].forEach(getRequiredEnv); - - this.sessionInitializer = getStdout( - `bw config server ${server} --quiet`, - ) - .then(() => { - logger.log("Logging in via API"); - return getStdout(`bw login --apikey --quiet`); - }) - .then(() => { - logger.log("Unlocking vault in session"); - return getStdout(`bw unlock --passwordenv BW_PASSWORD --raw`); - }) - .then((session) => { - logger.log(`Session ${session}`); - return session.trim(); - }); - } - - public async getItem<T extends LoginItem | SecureNote>( - secretName: string, - ): Promise<T> { - logger.log(`Finding secret ${secretName}`); - return await this.sessionInitializer.then((session) => - getStdout(`bw list items`, { - env: { - BW_SESSION: session, - }, - }) - ).then((items) => JSON.parse(items)).then((items) => - items.find(({ name }: { name: string }) => name === secretName) - ).then((item) => { - if (!item) throw new Error("Could not find bitwarden item " + secretName); - logger.log(`Found secret: ${secretName}`); - return item; - }); - } - - async close(): Promise<void> { - return await this.sessionInitializer.then((session) => - getStdout(`bw lock`, { env: { BW_SESSION: session } }) - ).then(() => { - logger.log("Locked session"); - }); - } -} - -export type LoginItem = { - login: { - username: string; - password: string; - }; -}; - -export type SecureNote = { - notes: string; -}; |