module Network.Octohat ( addUserToTeam
, membersOfTeamInOrganization
, keysOfTeamInOrganization
, teamForTeamNameInOrg) where
import Control.Error.Safe (tryHead)
import Control.Monad (liftM)
import qualified Data.Text as T
import Network.Octohat.Keys
import Network.Octohat.Members
import Network.Octohat.Types
membersOfTeamInOrganization :: OrganizationName
-> TeamName
-> GitHub [Member]
membersOfTeamInOrganization nameOfOrg nameOfTeam = teamId `liftM` teamForTeamNameInOrg nameOfOrg nameOfTeam >>= membersForTeam
addUserToTeam :: T.Text
-> OrganizationName
-> TeamName
-> GitHub StatusInTeam
addUserToTeam nameOfUser nameOfOrg nameOfTeam = teamId `liftM` teamForTeamNameInOrg nameOfOrg nameOfTeam >>= addMemberToTeam nameOfUser
keysOfTeamInOrganization :: OrganizationName
-> TeamName
-> GitHub [MemberWithKey]
keysOfTeamInOrganization nameOfOrg nameOfTeam = do
members <- membersOfTeamInOrganization nameOfOrg nameOfTeam
pubKeys <- mapM keysForMember members
let memberFingerprints = publicKeySetToFingerprints pubKeys
return $ makeMembersWithKey members pubKeys memberFingerprints
teamForTeamNameInOrg :: OrganizationName
-> TeamName
-> GitHub Team
teamForTeamNameInOrg nameOfOrg nameOfTeam = do
teams <- teamsForOrganization nameOfOrg
tryHead NotFound (teamsWithName (unTeamName nameOfTeam) teams)
teamsWithName :: T.Text -> [Team] -> [Team]
teamsWithName nameOfTeam = filter (hasName nameOfTeam)
hasName :: T.Text -> Team -> Bool
hasName name team = name == teamName team
keysForMember :: Member -> GitHub [PublicKey]
keysForMember = publicKeysForUser . memberLogin
makeMembersWithKey :: [Member] -> [[PublicKey]] -> [[PublicKeyFingerprint]] -> [MemberWithKey]
makeMembersWithKey = zipWith3 MemberWithKey
publicKeySetToFingerprints :: [[PublicKey]] -> [[PublicKeyFingerprint]]
publicKeySetToFingerprints = (map.map) fingerprintFor