Skip to content

Manage orgs in GitHub Enterprise #420

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions github.cabal
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,8 @@ library
GitHub.Data.DeployKeys
GitHub.Data.Deployments
GitHub.Data.Email
GitHub.Data.Enterprise
GitHub.Data.Enterprise.Organizations
GitHub.Data.Events
GitHub.Data.Gists
GitHub.Data.GitData
Expand All @@ -116,6 +118,7 @@ library
GitHub.Endpoints.Activity.Notifications
GitHub.Endpoints.Activity.Starring
GitHub.Endpoints.Activity.Watching
GitHub.Endpoints.Enterprise.Organizations
GitHub.Endpoints.Gists
GitHub.Endpoints.Gists.Comments
GitHub.Endpoints.GitData.Blobs
Expand Down Expand Up @@ -151,6 +154,7 @@ library
GitHub.Endpoints.Users.Emails
GitHub.Endpoints.Users.Followers
GitHub.Endpoints.Users.PublicSSHKeys
GitHub.Enterprise
GitHub.Internal.Prelude
GitHub.Request

Expand Down
30 changes: 30 additions & 0 deletions samples/Enterprise/CreateOrganization.hs
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE OverloadedStrings #-}
module Main (main) where

import Common

import qualified GitHub
import qualified GitHub.Enterprise as GitHub

main :: IO ()
main = do
args <- getArgs
result <- case args of
[api_endpoint, token, org_login, org_admin, org_profile_name] ->
GitHub.github
(GitHub.EnterpriseOAuth
(fromString api_endpoint)
(fromString token)
)
GitHub.createOrganizationR
(GitHub.CreateOrganization
(GitHub.mkOrganizationName $ fromString org_login)
(GitHub.mkUserName $ fromString org_admin)
(Just $ fromString org_profile_name)
)
_ ->
error "usage: CreateOrganization <api_endpoint> <token> <org_login> <org_admin> <org_profile_name>"
case result of
Left err -> putStrLn $ "Error: " <> tshow err
Right org -> putStrLn $ tshow org
29 changes: 29 additions & 0 deletions samples/Enterprise/RenameOrganization.hs
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE OverloadedStrings #-}
module Main (main) where

import Common

import qualified GitHub
import qualified GitHub.Enterprise as GitHub

main :: IO ()
main = do
args <- getArgs
result <- case args of
[api_endpoint, token, current_name, new_name] ->
GitHub.github
(GitHub.EnterpriseOAuth
(fromString api_endpoint)
(fromString token)
)
GitHub.renameOrganizationR
(GitHub.mkOrganizationName $ fromString current_name)
(GitHub.RenameOrganization
(GitHub.mkOrganizationName $ fromString new_name)
)
_ ->
error "usage: RenameOrganization <api_endpoint> <token> <current_name> <new_name>"
case result of
Left err -> putStrLn $ "Error: " <> tshow err
Right x -> putStrLn $ tshow x
10 changes: 10 additions & 0 deletions samples/github-samples.cabal
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,16 @@ executable github-create-deploy-key
-- main-is: DeleteTeamMembershipFor.hs
-- hs-source-dirs: Teams/Memberships

executable github-enterprise-create-organization
import: deps
main-is: CreateOrganization.hs
hs-source-dirs: Enterprise

executable github-enterprise-rename-organization
import: deps
main-is: RenameOrganization.hs
hs-source-dirs: Enterprise

executable github-edit-team
import: deps
main-is: EditTeam.hs
Expand Down
11 changes: 10 additions & 1 deletion src/GitHub.hs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
-- License : BSD-3-Clause
-- Maintainer : Oleg Grenrus <[email protected]>
--
-- This module re-exports all request constructrors and data definitions from
-- This module re-exports all request constructors and data definitions from
-- this package.
--
-- See "GitHub.Request" module for executing 'Request', in short
Expand Down Expand Up @@ -56,6 +56,14 @@ module GitHub (
watchersForR,
reposWatchedByR,

-- * Enterprise
-- | See <https://developer.github.com/enterprise/v3/enterprise-admin/>

-- ** Organizations
-- | See <https://developer.github.com/enterprise/v3/enterprise-admin/orgs/>
createOrganizationR,
renameOrganizationR,

-- * Gists
-- | See <https://developer.github.com/v3/gists/>
--
Expand Down Expand Up @@ -401,6 +409,7 @@ import GitHub.Endpoints.Activity.Events
import GitHub.Endpoints.Activity.Notifications
import GitHub.Endpoints.Activity.Starring
import GitHub.Endpoints.Activity.Watching
import GitHub.Endpoints.Enterprise.Organizations
import GitHub.Endpoints.Gists
import GitHub.Endpoints.Gists.Comments
import GitHub.Endpoints.GitData.Blobs
Expand Down
12 changes: 12 additions & 0 deletions src/GitHub/Data/Enterprise.hs
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
-----------------------------------------------------------------------------
-- |
-- License : BSD-3-Clause
-- Maintainer : Oleg Grenrus <[email protected]>
--
-- This module re-exports the @GitHub.Data.Enterprise.@ submodules.
module GitHub.Data.Enterprise (
-- * Module re-exports
module GitHub.Data.Enterprise.Organizations,
) where

import GitHub.Data.Enterprise.Organizations
64 changes: 64 additions & 0 deletions src/GitHub/Data/Enterprise/Organizations.hs
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
-----------------------------------------------------------------------------
-- |
-- License : BSD-3-Clause
-- Maintainer : Oleg Grenrus <[email protected]>
--
module GitHub.Data.Enterprise.Organizations where

import GitHub.Data.Definitions
import GitHub.Data.Name (Name)
import GitHub.Data.URL (URL)
import GitHub.Internal.Prelude
import Prelude ()

data CreateOrganization = CreateOrganization
{ createOrganizationLogin :: !(Name Organization)
, createOrganizationAdmin :: !(Name User)
, createOrganizationProfileName :: !(Maybe Text)
}
deriving (Show, Data, Typeable, Eq, Ord, Generic)

instance NFData CreateOrganization where rnf = genericRnf
instance Binary CreateOrganization

data RenameOrganization = RenameOrganization
{ renameOrganizationLogin :: !(Name Organization)
}
deriving (Show, Data, Typeable, Eq, Ord, Generic)

instance NFData RenameOrganization where rnf = genericRnf
instance Binary RenameOrganization

data RenameOrganizationResponse = RenameOrganizationResponse
{ renameOrganizationResponseMessage :: !Text
, renameOrganizationResponseUrl :: !URL
}
deriving (Show, Data, Typeable, Eq, Ord, Generic)

instance NFData RenameOrganizationResponse where rnf = genericRnf
instance Binary RenameOrganizationResponse

-- JSON Instances

instance ToJSON CreateOrganization where
toJSON (CreateOrganization login admin profileName) =
object $ filter notNull
[ "login" .= login
, "admin" .= admin
, "profile_name" .= profileName
]
where
notNull (_, Null) = False
notNull (_, _) = True

instance ToJSON RenameOrganization where
toJSON (RenameOrganization login) =
object
[ "login" .= login
]

instance FromJSON RenameOrganizationResponse where
parseJSON = withObject "RenameOrganizationResponse" $ \o ->
RenameOrganizationResponse
<$> o .: "message"
<*> o .: "url"
28 changes: 28 additions & 0 deletions src/GitHub/Endpoints/Enterprise/Organizations.hs
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
-----------------------------------------------------------------------------
-- |
-- License : BSD-3-Clause
-- Maintainer : Oleg Grenrus <[email protected]>
--
-- The GitHub Enterprise orgs API as described on <https://developer.github.com/enterprise/v3/enterprise-admin/orgs/>.
module GitHub.Endpoints.Enterprise.Organizations (
createOrganizationR,
renameOrganizationR,
module GitHub.Data,
) where

import GitHub.Data
import GitHub.Data.Enterprise
import GitHub.Internal.Prelude
import Prelude ()

-- | Create an organization.
-- See <https://developer.github.com/enterprise/v3/enterprise-admin/orgs/#create-an-organization>
createOrganizationR :: CreateOrganization -> Request 'RW SimpleOrganization
createOrganizationR =
command Post ["admin", "organizations"] . encode

-- | Rename an organization.
-- See <https://developer.github.com/enterprise/v3/enterprise-admin/orgs/#rename-an-organization>
renameOrganizationR :: Name Organization -> RenameOrganization -> Request 'RW RenameOrganizationResponse
renameOrganizationR org =
command Patch ["admin", "organizations", toPathPart org] . encode
23 changes: 23 additions & 0 deletions src/GitHub/Enterprise.hs
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
-----------------------------------------------------------------------------
-- |
-- License : BSD-3-Clause
-- Maintainer : Oleg Grenrus <[email protected]>
--
-- This module re-exports all request constructors and data definitions for
-- working with GitHub Enterprise.
--
module GitHub.Enterprise (
-- * Enterprise Admin
-- | See <https://developer.github.com/enterprise/v3/enterprise-admin/>

-- ** Organizations
-- | See <https://developer.github.com/enterprise/v3/enterprise-admin/orgs/>
createOrganizationR,
renameOrganizationR,

-- * Data definitions
module GitHub.Data.Enterprise,
) where

import GitHub.Data.Enterprise
import GitHub.Endpoints.Enterprise.Organizations