46 lines
1.6 KiB
Haskell
46 lines
1.6 KiB
Haskell
--------------------------------------------------------------------------------
|
|
-- rofi-bw - a rofi prompt for a bitwarden vault
|
|
--
|
|
-- This is basically a wrapper around the 'bw' command, which is assumed to be
|
|
-- properly configured before running this command. This shows a system of
|
|
-- menus that allows easy lookup of data associated with a vault entry. For now
|
|
-- only lookups (no edits or creation) are supported, and only logins can be
|
|
-- searched. Any searched entry can be copied to the clipboard
|
|
--
|
|
-- In order to manage the session keys, this utility is split into a daemon and
|
|
-- client (the former holds the session keys between calls with the latter).
|
|
-- They communicate via dbus.
|
|
--
|
|
-- Most of the heavy-lifting code for this executable is in Bitwarden.Internal
|
|
-- to allow parts of this greater rofi library to use the DBus API
|
|
|
|
module Main (main) where
|
|
|
|
import Bitwarden.Internal
|
|
import RIO
|
|
import qualified RIO.Text as T
|
|
import Rofi.IO
|
|
import UnliftIO.Environment
|
|
|
|
main :: IO ()
|
|
main = runSimpleApp $ runChecks >> getArgs >>= parse
|
|
|
|
-- TODO check if daemon is running when running client
|
|
parse :: HasLogFunc c => [String] -> RIO c ()
|
|
parse ["-d", t] = case readMaybe t of Just t' -> runDaemon t'; _ -> usage
|
|
parse ("-c" : args) = runClient $ fmap T.pack args
|
|
parse _ = usage
|
|
|
|
usage :: (HasLogFunc c, MonadReader c m, MonadUnliftIO m) => m ()
|
|
usage =
|
|
logInfo $
|
|
displayBytesUtf8 $
|
|
encodeUtf8 $
|
|
T.unlines
|
|
[ "daemon mode: rofi-bw -d TIMEOUT"
|
|
, "client mode: rofi-bw -c [ROFI-ARGS]"
|
|
]
|
|
|
|
runChecks :: (HasLogFunc c, MonadReader c m, MonadUnliftIO m) => m ()
|
|
runChecks = checkExe "bw"
|