module Network.MtGoxAPI.Credentials
( initMtGoxCredentials
, MtGoxCredentials(..)
) where
import Data.Word
import qualified Data.ByteString as B
import qualified Data.ByteString.Base16 as B16
import qualified Data.ByteString.Base64 as B64
data MtGoxCredentials = MtGoxCredentials { mgcAuthKey :: B.ByteString
, mgcAuthKeyDecoded :: B.ByteString
, mgcAuthSecret :: B.ByteString
, mgcAuthSecretDecoded :: B.ByteString
}
deriving (Show)
dash :: Word8
dash = B.head "-"
fromRight :: String -> Either t t1 -> t1
fromRight msg (Left _) = error msg
fromRight _ (Right a) = a
fromFst :: String -> (B.ByteString, B.ByteString) -> B.ByteString
fromFst msg (a, b)
| B.null b = a
| otherwise = error msg
initMtGoxCredentials :: B.ByteString -> B.ByteString -> MtGoxCredentials
initMtGoxCredentials authKey authSecret =
let errMsg arg base = arg ++ " needs to be encoded in base " ++ base
authKeyFiltered = B.filter (/= dash) authKey
authKeyDecoded = fromFst (errMsg "authKey" "16")
. B16.decode $ authKeyFiltered
authSecretDecoded = fromRight (errMsg "authSecret" "64")
. B64.decode $ authSecret
in MtGoxCredentials { mgcAuthKey = authKey
, mgcAuthKeyDecoded = authKeyDecoded
, mgcAuthSecret = authSecret
, mgcAuthSecretDecoded = authSecretDecoded
}