packages feed

hadoop-rpc-1.1.0.0: src/Network/Hadoop/Sasl.hs

{-# LANGUAGE DataKinds #-}
{-# LANGUAGE DeriveDataTypeable #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}

module Network.Hadoop.Sasl where

import           Network.Protocol.SASL.GNU
import           Data.ProtocolBuffers

import           Control.Exception (Exception)

import           GHC.Generics
import           Data.ByteString
import           Data.Text
import           Data.Typeable
import           Data.Word

------------------------------------------------------------------------

newtype SaslException = SaslException Error
    deriving (Show, Typeable)

instance Exception SaslException

data SaslNegotiationError
    = FailedNegotiation
    | NoSharedMechanism
    | NoToken
    | UnexptededState
    deriving (Show, Typeable)

instance Exception SaslNegotiationError

rpcSaslProto :: Text
rpcSaslProto = "RpcSaslProto"

data RpcSaslProto = RpcSaslProto
    { spVersion :: Optional 1 (Value Word32)
    , spState   :: Required 2 (Enumeration SaslState)
    , spToken   :: Optional 3 (Value ByteString)
    , spAuths   :: Repeated 4 (Message SaslAuth)
    } deriving (Eq, Ord, Show, Generic)

data SaslAuth = SaslAuth
    { saMethod    :: Required 1 (Value ByteString)
    , saMechanism :: Required 2 (Value ByteString)
    , saProtocol  :: Optional 3 (Value ByteString)
    , saServerId  :: Optional 4 (Value ByteString)
    , saChallenge :: Optional 5 (Value ByteString)
    } deriving (Eq, Ord, Show, Generic)

data SaslState
    = Success
    | Negotiate
    | Initiate
    | Challenge
    | Response
    | Wrap
    deriving (Eq, Ord, Show, Enum, Bounded)

instance Encode SaslAuth
instance Decode SaslAuth
instance Encode RpcSaslProto
instance Decode RpcSaslProto