octohat-0.1.3: src/Network/Octohat/Members.hs
{-# LANGUAGE OverloadedStrings #-}
-- | Execute the result of these functions using 'runGitHub' or 'runGitHub''
module Network.Octohat.Members
( membersForOrganization
, teamsForOrganization
, membersForTeam
, reposForTeam
, addMemberToTeam
, addRepoToTeam
, deleteMemberFromTeam
, deleteTeamFromOrganization
, publicKeysForUser
, addTeamToOrganization
, organizations
, userForUsername
, repoForReponame
, 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 :: TeamName -- ^ Name of new team
-> T.Text -- ^ Description of new team
-> TeamPermission -- ^ Permission setting for team (push, pull, or admin)
-> OrganizationName -- ^ Organization name where the team will be created
-> GitHub Team
addTeamToOrganization (TeamName nameOfNewTeam) descOfTeam teamPerm (OrganizationName org) =
postRequestTo (composeEndpoint ["orgs", org, "teams"]) (TeamCreateRequest nameOfNewTeam descOfTeam teamPerm)
-- | 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 :: OrganizationName -- ^ The organization name
-> GitHub [Member]
membersForOrganization (OrganizationName 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 repos of a team with the given team ID.
reposForTeam :: Integer -- ^ The team ID
-> GitHub [Repo]
reposForTeam idOfTeam = getRequestTo (composeEndpoint ["teams", T.pack $ show idOfTeam, "repos"])
-- | Returns a list of teams for the organization with the given name
teamsForOrganization :: OrganizationName -- ^ The organization name
-> GitHub [Team]
teamsForOrganization (OrganizationName nameOfOrg) = getRequestTo (composeEndpoint ["orgs", nameOfOrg, "teams"])
-- | Returns a list of all organizations for the user
organizations :: GitHub [Organization]
organizations = getRequestTo (composeEndpoint ["user", "orgs"])
-- | 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])
-- | Adds a repo to a team, might invite or add the member. Refer to 'StatusInTeam'
addRepoToTeam :: OrganizationName -- ^ The GitHub organization name
-> T.Text -- ^ The GitHub repo name
-> Integer -- ^ The Team ID
-> GitHub StatusInTeam
addRepoToTeam (OrganizationName nameOfOrg) nameOfRepo idOfTeam =
putRequestTo (composeEndpoint ["teams", T.pack $ show idOfTeam, "repos", nameOfOrg, nameOfRepo])
-- | 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])
-- | Finds a repo ID given their reponame
repoForReponame :: T.Text -- ^ GitHub org
-> T.Text -- ^ GitHub repo
-> GitHub Repo
repoForReponame org repo = getRequestTo (composeEndpoint ["repos", org, repo])
-- | 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)