octohat-0.1: src/Network/Octohat/Members.hs
{-# LANGUAGE OverloadedStrings #-}
-- | Execute the result of these functions using 'runGitHub' or 'runGitHub''
module Network.Octohat.Members
( membersForOrganization
, membersForTeam
, teamsForOrganization
, addMemberToTeam
, deleteMemberFromTeam
, deleteTeamFromOrganization
, publicKeysForUser
, addTeamToOrganization
, userForUsername
, addPublicKey
) where
import Network.Octohat.Internal
import Network.Octohat.Types
import qualified Data.Text as T
import Data.Monoid ((<>))
-- | Takes a new team name, the description of a team and the organization where to create the team
-- and creates a new team. Regular GitHub authorization/authentication applies.
addTeamToOrganization :: T.Text -- ^ Name of new team
-> T.Text -- ^ Description of new team
-> T.Text -- ^ Organization name where the team will be created
-> GitHub Team
addTeamToOrganization nameOfNewTeam descOfTeam orgName =
postRequestTo (composeEndpoint ["orgs", orgName, "teams"]) (TeamCreateRequest nameOfNewTeam descOfTeam)
-- | Deletes a team from an organization using its team ID.
deleteTeamFromOrganization :: Integer -- ^ ID of Team to delete
-> GitHub DidDelete
deleteTeamFromOrganization idOfTeam = deleteRequestTo (composeEndpoint ["teams", T.pack $ show idOfTeam])
-- | Returns a list of members of an organization with the given name.
membersForOrganization :: T.Text -- ^ The organization name
-> GitHub [Member]
membersForOrganization nameOfOrg = getRequestTo (composeEndpoint ["orgs", nameOfOrg, "members"])
-- | Returns a list of members of a team with the given team ID.
membersForTeam :: Integer -- ^ The team ID
-> GitHub [Member]
membersForTeam idOfTeam = getRequestTo (composeEndpoint ["teams", T.pack $ show idOfTeam, "members"])
-- | Returns a list of teams for the organization with the given name
teamsForOrganization :: T.Text -- ^ The organization name
-> GitHub [Team]
teamsForOrganization nameOfOrg = getRequestTo (composeEndpoint ["orgs", nameOfOrg, "teams"])
-- | Adds a member to a team, might invite or add the member. Refer to 'StatusInTeam'
addMemberToTeam :: T.Text -- ^ The GitHub username to add to a team
-> Integer -- ^ The Team ID
-> GitHub StatusInTeam
addMemberToTeam nameOfUser idOfTeam =
putRequestTo (composeEndpoint ["teams", T.pack $ show idOfTeam, "memberships", nameOfUser])
-- | Deletes a member with the given name from a team with the given ID. Might or might not delete
deleteMemberFromTeam :: T.Text -- ^ GitHub username
-> Integer -- ^ GitHub team ID
-> GitHub DidDelete
deleteMemberFromTeam nameOfUser idOfTeam =
deleteRequestTo (composeEndpoint ["teams", T.pack $ show idOfTeam, "memberships", nameOfUser])
-- | Returns the public keys of the user with the given name
publicKeysForUser :: T.Text -- ^ GitHub username
-> GitHub [PublicKey]
publicKeysForUser nameOfUser = getRequestTo (composeEndpoint ["users", nameOfUser, "keys"])
-- | Finds a user ID given their username
userForUsername :: T.Text -- ^ GitHub username
-> GitHub Member
userForUsername username = getRequestTo (composeEndpoint ["users", username])
-- | Add a key for the currently authenticated user
addPublicKey :: T.Text -- ^ Base64 RSA Key (ssh-rsa AA..)
-> T.Text -- ^ Key title, e.g @octocat@stackbuilders@
-> GitHub PublicKey
addPublicKey newKey newTitle =
postRequestTo (composeEndpoint ["user", "keys"]) (AddPublicKeyRequest ("ssh-rsa " <> newKey) newTitle)