Copyright | (c) Joseph Abrahamson 2013 |
---|---|
License | MIT |
Maintainer | me@jspha.com |
Stability | experimental |
Portability | non-portable |
Safe Haskell | None |
Language | Haskell2010 |
Credentials, Cred
s, are built from Token
s, public/private key pairs, and
come in 3 varieties.
Client
: Represents a particular client or consumer, used as part of every transaction that client signs.Temporary
: Resource token representing a short-lived grant to access a restricted set of server resources on behalf of the user. Typically used as part of a authorization negotiation protocol.Permanent
: Resource token representing a long-lived grant to access an authorized set of server resources on behalf of the user. Outside of access negotiation this is the most common kind of resourceToken
.
Synopsis
- data Token ty = Token !Key !Secret
- type Key = ByteString
- type Secret = ByteString
- data Client
- data Temporary
- data Permanent
- class ResourceToken tk
- fromUrlEncoded :: ByteString -> Maybe (Bool, Token ty)
- data Cred ty
- clientCred :: Token Client -> Cred Client
- temporaryCred :: Token Temporary -> Cred Client -> Cred Temporary
- permanentCred :: Token Permanent -> Cred Client -> Cred Permanent
- upgradeCred :: ResourceToken tk => Token tk -> Cred tk' -> Cred tk
- key :: Functor f => (Key -> f Key) -> Token ty -> f (Token ty)
- secret :: Functor f => (Secret -> f Secret) -> Token ty -> f (Token ty)
- clientToken :: Functor f => (Token Client -> f (Token Client)) -> Cred ty -> f (Cred ty)
- resourceToken :: (ResourceToken ty, ResourceToken ty', Functor f) => (Token ty -> f (Token ty')) -> Cred ty -> f (Cred ty')
- getResourceTokenDef :: Cred ty -> Token ty
- signingKey :: Cred ty -> ByteString
Tokens and their parameterization
Instances
Eq (Token ty) Source # | |
Data ty => Data (Token ty) Source # | |
Defined in Network.OAuth.Types.Credentials gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Token ty -> c (Token ty) # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c (Token ty) # toConstr :: Token ty -> Constr # dataTypeOf :: Token ty -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c (Token ty)) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (Token ty)) # gmapT :: (forall b. Data b => b -> b) -> Token ty -> Token ty # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Token ty -> r # gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Token ty -> r # gmapQ :: (forall d. Data d => d -> u) -> Token ty -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> Token ty -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> Token ty -> m (Token ty) # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Token ty -> m (Token ty) # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Token ty -> m (Token ty) # | |
Ord (Token ty) Source # | |
Defined in Network.OAuth.Types.Credentials | |
Show (Token ty) Source # | |
ToJSON (Token ty) Source # | Produces a JSON object using keys named |
Defined in Network.OAuth.Types.Credentials | |
FromJSON (Token ty) Source # | Parses a JSON object with keys |
type Key = ByteString Source #
type Secret = ByteString Source #
Client
Cred
entials and Token
s are assigned to a particular client by
the server and are used for all requests sent by that client. They form the
core component of resource specific credentials.
Instances
Data Client Source # | |
Defined in Network.OAuth.Types.Credentials gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Client -> c Client # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c Client # toConstr :: Client -> Constr # dataTypeOf :: Client -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c Client) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Client) # gmapT :: (forall b. Data b => b -> b) -> Client -> Client # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Client -> r # gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Client -> r # gmapQ :: (forall d. Data d => d -> u) -> Client -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> Client -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> Client -> m Client # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Client -> m Client # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Client -> m Client # |
Temporary
Token
s and Cred
entials are created during authorization
protocols and are rarely meant to be kept for more than a few minutes.
Typically they are authorized to access only a very select set of server
resources. During "three-legged authorization" in OAuth 1.0 they are used
to generate the authorization request URI the client sends and, after that,
in the Permanent
Token
request.
Instances
Data Temporary Source # | |
Defined in Network.OAuth.Types.Credentials gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Temporary -> c Temporary # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c Temporary # toConstr :: Temporary -> Constr # dataTypeOf :: Temporary -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c Temporary) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Temporary) # gmapT :: (forall b. Data b => b -> b) -> Temporary -> Temporary # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Temporary -> r # gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Temporary -> r # gmapQ :: (forall d. Data d => d -> u) -> Temporary -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> Temporary -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> Temporary -> m Temporary # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Temporary -> m Temporary # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Temporary -> m Temporary # | |
ResourceToken Temporary Source # | |
Defined in Network.OAuth.Types.Credentials |
Permanent
Token
s and Cred
entials are the primary means of accessing
server resources. They must be maintained by the client for each user who
authorizes that client to access resources on their behalf.
Instances
Data Permanent Source # | |
Defined in Network.OAuth.Types.Credentials gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Permanent -> c Permanent # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c Permanent # toConstr :: Permanent -> Constr # dataTypeOf :: Permanent -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c Permanent) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Permanent) # gmapT :: (forall b. Data b => b -> b) -> Permanent -> Permanent # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Permanent -> r # gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Permanent -> r # gmapQ :: (forall d. Data d => d -> u) -> Permanent -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> Permanent -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> Permanent -> m Permanent # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Permanent -> m Permanent # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Permanent -> m Permanent # | |
ResourceToken Permanent Source # | |
Defined in Network.OAuth.Types.Credentials |
class ResourceToken tk Source #
Instances
ResourceToken Permanent Source # | |
Defined in Network.OAuth.Types.Credentials | |
ResourceToken Temporary Source # | |
Defined in Network.OAuth.Types.Credentials |
Deserialization
fromUrlEncoded :: ByteString -> Maybe (Bool, Token ty) Source #
Parses a www-form-urlencoded
stream to produce a Token
if possible.
The first result value is whether or not the token data is OAuth 1.0a
compatible.
>>>
fromUrlEncoded "oauth_token=key&oauth_token_secret=secret"
Just (False, Token "key" "secret")
>>>
fromUrlEncoded "oauth_token=key&oauth_token_secret=secret&oauth_callback_confirmed=true"
Just (True, Token "key" "secret")
Credentials and credential construction
Cred
entials pair a Client
Token
and either a Temporary
or
Permanent
token corresponding to a particular set of user
resources on the server.
Instances
Eq (Cred ty) Source # | |
Data ty => Data (Cred ty) Source # | |
Defined in Network.OAuth.Types.Credentials gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Cred ty -> c (Cred ty) # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c (Cred ty) # toConstr :: Cred ty -> Constr # dataTypeOf :: Cred ty -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c (Cred ty)) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (Cred ty)) # gmapT :: (forall b. Data b => b -> b) -> Cred ty -> Cred ty # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Cred ty -> r # gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Cred ty -> r # gmapQ :: (forall d. Data d => d -> u) -> Cred ty -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> Cred ty -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> Cred ty -> m (Cred ty) # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Cred ty -> m (Cred ty) # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Cred ty -> m (Cred ty) # | |
Ord (Cred ty) Source # | |
Defined in Network.OAuth.Types.Credentials | |
Show (Cred ty) Source # | |
upgradeCred :: ResourceToken tk => Token tk -> Cred tk' -> Cred tk Source #
Accessors
key :: Functor f => (Key -> f Key) -> Token ty -> f (Token ty) Source #
Lens on the key component of a Token
.
secret :: Functor f => (Secret -> f Secret) -> Token ty -> f (Token ty) Source #
Lens on the key secret component of a Token
.
resourceToken :: (ResourceToken ty, ResourceToken ty', Functor f) => (Token ty -> f (Token ty')) -> Cred ty -> f (Cred ty') Source #
getResourceTokenDef :: Cred ty -> Token ty Source #
signingKey :: Cred ty -> ByteString Source #
Produce a signingKey
from a set of credentials. This is a URL
encoded string built from the client secret and the token
secret.
If no token secret exists then the blank string is used.
\secret -> signingKey (clientCred $ Token "key" secret) == (pctEncode secret <> "&" <> "")