{-# LANGUAGE OverloadedStrings #-}
module GitLab
( runGitLab,
runGitLabPassPrompt,
runGitLabDbg,
runGitLabWithManager,
module GitLab.Types,
module GitLab.API.Pipelines,
module GitLab.API.Groups,
module GitLab.API.Members,
module GitLab.API.Commits,
module GitLab.API.Projects,
module GitLab.API.Users,
module GitLab.API.Issues,
module GitLab.API.Branches,
module GitLab.API.Jobs,
module GitLab.API.MergeRequests,
module GitLab.API.Repositories,
module GitLab.API.RepositoryFiles,
module GitLab.API.Tags,
module GitLab.API.Todos,
module GitLab.API.Version,
module GitLab.API.Notes,
module GitLab.API.Boards,
module GitLab.API.Discussions,
module GitLab.SystemHooks.GitLabSystemHooks,
module GitLab.SystemHooks.Types,
module GitLab.SystemHooks.Rules,
)
where
import Control.Monad.IO.Class
import Control.Monad.Trans.Reader
import qualified Data.Text as T
import GitLab.API.Boards
import GitLab.API.Branches
import GitLab.API.Commits
import GitLab.API.Discussions
import GitLab.API.Groups
import GitLab.API.Issues
import GitLab.API.Jobs
import GitLab.API.Members
import GitLab.API.MergeRequests
import GitLab.API.Notes
import GitLab.API.Pipelines
import GitLab.API.Projects
import GitLab.API.Repositories
import GitLab.API.RepositoryFiles
import GitLab.API.Tags
import GitLab.API.Todos
import GitLab.API.Users
import GitLab.API.Version
import GitLab.SystemHooks.GitLabSystemHooks
import GitLab.SystemHooks.Rules
import GitLab.SystemHooks.Types
import GitLab.Types
import Network.Connection (TLSSettings (..))
import Network.HTTP.Conduit
import Network.HTTP.Types.Status
import System.IO
runGitLab :: GitLabServerConfig -> GitLab a -> IO a
runGitLab :: forall a. GitLabServerConfig -> GitLab a -> IO a
runGitLab GitLabServerConfig
cfg GitLab a
action = do
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO forall a b. (a -> b) -> a -> b
$ Handle -> BufferMode -> IO ()
hSetBuffering Handle
stdout BufferMode
LineBuffering
let settings :: ManagerSettings
settings = TLSSettings -> Maybe SockSettings -> ManagerSettings
mkManagerSettings (Bool -> Bool -> Bool -> TLSSettings
TLSSettingsSimple Bool
True Bool
False Bool
False) forall a. Maybe a
Nothing
Manager
manager <- forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO forall a b. (a -> b) -> a -> b
$ ManagerSettings -> IO Manager
newManager ManagerSettings
settings
forall a. Manager -> GitLabServerConfig -> GitLab a -> IO a
runGitLabWithManager Manager
manager GitLabServerConfig
cfg GitLab a
action
runGitLabPassPrompt :: GitLabServerConfig -> GitLab a -> IO a
runGitLabPassPrompt :: forall a. GitLabServerConfig -> GitLab a -> IO a
runGitLabPassPrompt GitLabServerConfig
cfg GitLab a
action = do
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO forall a b. (a -> b) -> a -> b
$ Handle -> BufferMode -> IO ()
hSetBuffering Handle
stdout BufferMode
NoBuffering
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (String -> IO ()
putStr String
"Enter GitLab server URL\n> ")
String
hostUrl <- IO String
getLine
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (String -> IO ()
putStr String
"Enter GitLab access token\n> ")
String
pass <- IO String
getLine
forall a. GitLabServerConfig -> GitLab a -> IO a
runGitLab (GitLabServerConfig
cfg {url :: Text
url = String -> Text
T.pack String
hostUrl, token :: Text
token = String -> Text
T.pack String
pass}) GitLab a
action
runGitLabWithManager :: Manager -> GitLabServerConfig -> GitLab a -> IO a
runGitLabWithManager :: forall a. Manager -> GitLabServerConfig -> GitLab a -> IO a
runGitLabWithManager Manager
manager GitLabServerConfig
cfg (GitLabT ReaderT GitLabState IO a
action) = do
let (GitLabT ReaderT
GitLabState IO (Either (Response ByteString) (Maybe Version))
versionCheck) = GitLabT IO (Either (Response ByteString) (Maybe Version))
gitlabVersion
Either (Response ByteString) (Maybe Version)
tokenTest <- forall r (m :: * -> *) a. ReaderT r m a -> r -> m a
runReaderT ReaderT
GitLabState IO (Either (Response ByteString) (Maybe Version))
versionCheck (GitLabServerConfig -> Manager -> GitLabState
GitLabState GitLabServerConfig
cfg Manager
manager)
case Either (Response ByteString) (Maybe Version)
tokenTest of
Left Response ByteString
response ->
case forall body. Response body -> Status
responseStatus Response ByteString
response of
(Status Int
401 ByteString
"Unauthorized") -> forall a. HasCallStack => String -> a
error String
"access token not accepted."
Status
st -> forall a. HasCallStack => String -> a
error (String
"unexpected HTTP status: " forall a. Semigroup a => a -> a -> a
<> forall a. Show a => a -> String
show Status
st)
Right Maybe Version
_versionInfo ->
forall r (m :: * -> *) a. ReaderT r m a -> r -> m a
runReaderT ReaderT GitLabState IO a
action (GitLabServerConfig -> Manager -> GitLabState
GitLabState GitLabServerConfig
cfg Manager
manager)
runGitLabDbg :: GitLab a -> IO a
runGitLabDbg :: forall a. GitLab a -> IO a
runGitLabDbg (GitLabT ReaderT GitLabState IO a
action) = do
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO forall a b. (a -> b) -> a -> b
$ Handle -> BufferMode -> IO ()
hSetBuffering Handle
stdout BufferMode
LineBuffering
forall r (m :: * -> *) a. ReaderT r m a -> r -> m a
runReaderT ReaderT GitLabState IO a
action forall a. HasCallStack => a
undefined