rofi-extras/app/rofi-bw.hs

59 lines
1.8 KiB
Haskell
Raw Permalink Normal View History

2020-04-23 23:32:29 -04:00
{-# LANGUAGE OverloadedStrings #-}
2020-05-01 23:44:36 -04:00
--------------------------------------------------------------------------------
-- | 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
2020-05-01 23:44:36 -04:00
2020-04-23 23:32:29 -04:00
module Main (main) where
import Bitwarden.Internal
2020-04-23 23:32:29 -04:00
import Control.Monad
import Data.Maybe
import Rofi.Command
import Text.Read
import System.Directory
import System.Environment
import System.Exit
main :: IO ()
main = runChecks >> getArgs >>= parse
2020-05-02 00:13:45 -04:00
-- TODO check if daemon is running when running client
2020-04-23 23:32:29 -04:00
parse :: [String] -> IO ()
parse ["-d", t] = case readMaybe t of { Just t' -> runDaemon t'; _ -> usage }
parse ("-c":args) = runClient args
parse _ = usage
usage :: IO ()
usage = putStrLn $ joinNewline
[ "daemon mode: rofi-bw -d TIMEOUT"
, "client mode: rofi-bw -c [ROFI-ARGS]"
]
runChecks :: IO ()
runChecks = checkExe "bw" >> checkExe "rofi"
checkExe :: String -> IO ()
checkExe cmd = do
res <- findExecutable cmd
unless (isJust res) $ do
putStrLn $ "Could not find executable: " ++ cmd
exitWith $ ExitFailure 1