packages feed

fedora-krb-0.1.0: src/Fedora/Krb.hs

module Fedora.Krb (
  krbTicket,
  maybeFasIdFromKrb,
  fasIdFromKrb
  )
where

import Control.Monad
import qualified Data.List as L
import Data.Maybe
import SimpleCmd

krbTicket :: IO ()
krbTicket = do
  entry <- 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 muser = do
      let opts = maybe [] (\user -> ["-u", user]) muser
      -- FIXME test for fkinit
      ok <- cmdBool "fkinit" opts
      unless ok $ fkinit muser

extractFasId :: [String] -> Maybe String
extractFasId =
  fmap (removeSuffix "@FEDORAPROJECT.ORG") . L.find ("@FEDORAPROJECT.ORG" `L.isSuffixOf`)

maybeFasIdFromKrb :: IO (Maybe String)
maybeFasIdFromKrb = extractFasId <$> klistEntryFedora

fasIdFromKrb :: IO String
fasIdFromKrb = do
  mfasid <- maybeFasIdFromKrb
  case mfasid of
    Nothing -> error' "Could not determine FAS id from klist"
    Just fasid -> return fasid

-- gets first FEDORAPROJECT.ORG entry
klistEntryFedora :: IO [String]
klistEntryFedora = do
  -- FIXME test for klist
  mres <- cmdMaybe "klist" ["-l"]
  return $
    maybe []
    (words . fromMaybe "" . L.find ("@FEDORAPROJECT.ORG" `L.isInfixOf`) . lines)
    mres