{-# LANGUAGE OverloadedStrings #-} module System.Taffybar.Auth where import Control.Arrow import Control.Monad.IO.Class import Data.Maybe import System.Taffybar.Util import Text.Regex fieldRegex :: Regex fieldRegex = mkRegexWithOpts "^(.*?): *(.*?)$" True True passGet :: MonadIO m => String -> m (Either String (String, [(String, String)])) passGet credentialName = right (getPassComponents . lines) <$> runCommandFromPath ["pass", "show", credentialName] where getPassComponents passLines = let entries = map buildEntry $ catMaybes $ matchRegex fieldRegex <$> tail passLines buildEntry [fieldName, fieldValue] = (fieldName, fieldValue) buildEntry _ = ("", "") in (head passLines, entries)