From ce2258679ebe108217b0ea125ea94205436c5fc0 Mon Sep 17 00:00:00 2001 From: traxys Date: Mon, 12 Dec 2022 13:08:29 +0100 Subject: [PATCH] Switch to python implementation of hbw for TOTP --- home.nix | 3 ++- pkgs/default.nix | 1 + pkgs/hbw/default.nix | 27 +++++++++++++++++++++++++++ pkgs/hbw/hbw.py | 34 ++++++++++++++++++++++++++++++++++ scripts/hbw | 14 -------------- 5 files changed, 64 insertions(+), 15 deletions(-) create mode 100644 pkgs/hbw/default.nix create mode 100755 pkgs/hbw/hbw.py delete mode 100755 scripts/hbw diff --git a/home.nix b/home.nix index 57909f2..4a0a08c 100644 --- a/home.nix +++ b/home.nix @@ -40,7 +40,8 @@ in { comma raclette oscclip - nvfetcher + nvfetcher + hbw ]; services = { diff --git a/pkgs/default.nix b/pkgs/default.nix index 30a4bf2..60ad175 100644 --- a/pkgs/default.nix +++ b/pkgs/default.nix @@ -7,6 +7,7 @@ wowup = callPackage ./wowup.nix {}; simulationcraft = callPackage ./simulationcraft.nix {simulationcraft-src = sources.simulationcraft;}; proton-ge = callPackage ./proton-ge.nix {proton-ge-src = sources.proton-ge;}; + hbw = callPackage ./hbw {}; kabalist_cli = callPackage ./kabalist.nix { inherit naersk; kabalist-src = sources.kabalist; diff --git a/pkgs/hbw/default.nix b/pkgs/hbw/default.nix new file mode 100644 index 0000000..5f66c72 --- /dev/null +++ b/pkgs/hbw/default.nix @@ -0,0 +1,27 @@ +{ + stdenv, + lib, + python3, + bitwarden-cli, + makeWrapper, + ... +}: +stdenv.mkDerivation { + pname = "hbw"; + version = "0.1"; + src = ./hbw.py; + + buildInputs = [ + (python3.withPackages (ps: with ps; [pyotp])) + bitwarden-cli + makeWrapper + ]; + + dontUnpack = true; + dontBuild = true; + installPhase = '' + mkdir -p $out/bin + cp $src $out/bin/hbw + wrapProgram $out/bin/hbw --prefix PATH : ${lib.makeBinPath [bitwarden-cli]} + ''; +} diff --git a/pkgs/hbw/hbw.py b/pkgs/hbw/hbw.py new file mode 100755 index 0000000..df5f39e --- /dev/null +++ b/pkgs/hbw/hbw.py @@ -0,0 +1,34 @@ +#!/usr/bin/env python3 + +import sys +import subprocess +import json +import pyotp +import datetime + +if len(sys.argv) < 2: + print("Missing search term") + sys.exit(1) + +search = sys.argv[1] + +process = subprocess.Popen( + ["bw", "list", "items", "--search", search], stdout=subprocess.PIPE +) +process.wait() +data, _ = process.communicate() +if process.returncode != 0: + sys.exit(1) + +data = json.loads(data) + +for item in data: + print(f"==== {item['name']} ====") + print(f" {item['login']['username']}") + print(f" {item['login']['password']}") + if "totp" in item["login"] and item["login"]["totp"] is not None: + totp = pyotp.TOTP(item["login"]["totp"]) + time_remaining = ( + totp.interval - datetime.datetime.now().timestamp() % totp.interval + ) + print(f" {totp.now()} ({int(time_remaining)})") diff --git a/scripts/hbw b/scripts/hbw deleted file mode 100755 index e18fe08..0000000 --- a/scripts/hbw +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/sh - -NAME=$1 -if [ -z $1 ]; then - exit 0 -fi - -bw list items --search $NAME |\ - jq 'reduce .[] as $item ( - ""; - . + "=====" + $item.name + "====\n " - + $item.login.username + "\n " - + $item.login.password + "\n\n")' -r |\ - head -n -2