module Fedora.Krb (
krbTicket,
maybeFasIdFromKrb,
fasIdFromKrb
)
where
import Control.Monad
import qualified Data.List as L
import Data.Maybe
import SimpleCmd
krbTicket :: IO ()
krbTicket :: IO ()
krbTicket = do
entry <- IO [String]
klistEntryFedora
if null entry
then error' "No krb5 ticket found for FEDORAPROJECT.ORG"
else
when (last entry == "(Expired)") $ do
putStrLn $ unwords entry
fkinit $ extractFasId entry
putStrLn ""
where
fkinit :: Maybe String -> IO ()
fkinit Maybe String
muser = do
let opts :: [String]
opts = [String] -> (String -> [String]) -> Maybe String -> [String]
forall b a. b -> (a -> b) -> Maybe a -> b
maybe [] (\String
user -> [String
"-u", String
user]) Maybe String
muser
ok <- String -> [String] -> IO Bool
cmdBool String
"fkinit" [String]
opts
unless ok $ fkinit muser
extractFasId :: [String] -> Maybe String
=
(String -> String) -> Maybe String -> Maybe String
forall a b. (a -> b) -> Maybe a -> Maybe b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (String -> String -> String
removeSuffix String
"@FEDORAPROJECT.ORG") (Maybe String -> Maybe String)
-> ([String] -> Maybe String) -> [String] -> Maybe String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (String -> Bool) -> [String] -> Maybe String
forall (t :: * -> *) a. Foldable t => (a -> Bool) -> t a -> Maybe a
L.find (String
"@FEDORAPROJECT.ORG" String -> String -> Bool
forall a. Eq a => [a] -> [a] -> Bool
`L.isSuffixOf`)
maybeFasIdFromKrb :: IO (Maybe String)
maybeFasIdFromKrb :: IO (Maybe String)
maybeFasIdFromKrb = [String] -> Maybe String
extractFasId ([String] -> Maybe String) -> IO [String] -> IO (Maybe String)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> IO [String]
klistEntryFedora
fasIdFromKrb :: IO String
fasIdFromKrb :: IO String
fasIdFromKrb = do
mfasid <- IO (Maybe String)
maybeFasIdFromKrb
case mfasid of
Maybe String
Nothing -> String -> IO String
forall a. String -> a
error' String
"Could not determine FAS id from klist"
Just String
fasid -> String -> IO String
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return String
fasid
klistEntryFedora :: IO [String]
klistEntryFedora :: IO [String]
klistEntryFedora = do
mres <- String -> [String] -> IO (Maybe String)
cmdMaybe String
"klist" [String
"-l"]
return $
maybe []
(words . fromMaybe "" . L.find ("@FEDORAPROJECT.ORG" `L.isInfixOf`) . lines)
mres