libjwt-typed-0.1: A Haskell implementation of JSON Web Token (JWT)
Safe HaskellNone
LanguageHaskell2010
Extensions
  • UndecidableInstances
  • MonoLocalBinds
  • ScopedTypeVariables
  • AllowAmbiguousTypes
  • TypeFamilies
  • ViewPatterns
  • PolyKinds
  • DataKinds
  • DefaultSignatures
  • TypeSynonymInstances
  • FlexibleContexts
  • FlexibleInstances
  • ConstrainedClassMethods
  • MultiParamTypeClasses
  • ExistentialQuantification
  • KindSignatures
  • TypeOperators
  • ExplicitNamespaces
  • ExplicitForAll
  • PatternSynonyms
  • TypeApplications

Libjwt.PrivateClaims

Description

Collection of functions, types and type families that are needed to implement type-safe private claims.

This is essentially an implementation of open product type as described in Sandy Maguire "Thinking with Types". The only difference to the book is that the implementation is backed by HashMap to make lookups by name easier. In addition, there are also FromPrivateClaims and ToPrivateClaims type-classes and view pattern :< to help create and deconstruct values.

Synopsis

Kinds

data Claim (a :: Type) Source #

Kind of claims

A claim is made up of a type-level literal and a type (this is essentialy a type-level tuple (Symbol, *))

Constructors

Grant Symbol a 

Instances

Instances details
(Eq a, KnownSymbol name, Eq (PrivateClaims tl ns)) => Eq (PrivateClaims ((name ->> a) ': tl) ns) Source # 
Instance details

Defined in Libjwt.PrivateClaims

Methods

(==) :: PrivateClaims ((name ->> a) ': tl) ns -> PrivateClaims ((name ->> a) ': tl) ns -> Bool #

(/=) :: PrivateClaims ((name ->> a) ': tl) ns -> PrivateClaims ((name ->> a) ': tl) ns -> Bool #

Eq (PrivateClaims Empty any) Source # 
Instance details

Defined in Libjwt.PrivateClaims

Showable (PrivateClaims ((name ->> a) ': tl) ns) => Show (PrivateClaims ((name ->> a) ': tl) ns) Source # 
Instance details

Defined in Libjwt.PrivateClaims

Methods

showsPrec :: Int -> PrivateClaims ((name ->> a) ': tl) ns -> ShowS #

show :: PrivateClaims ((name ->> a) ': tl) ns -> String #

showList :: [PrivateClaims ((name ->> a) ': tl) ns] -> ShowS #

Show (PrivateClaims Empty ns) Source # 
Instance details

Defined in Libjwt.PrivateClaims

(ClaimEncoder a, KnownSymbol name, KnownNamespace ns, Encode (PrivateClaims tl ns)) => Encode (PrivateClaims ((name ->> a) ': tl) ns) Source # 
Instance details

Defined in Libjwt.PrivateClaims

Methods

encode :: PrivateClaims ((name ->> a) ': tl) ns -> JwtT -> EncodeResult Source #

Encode (PrivateClaims Empty ns) Source # 
Instance details

Defined in Libjwt.PrivateClaims

(ty ~ DecodeAuxDef a, DecodeAux ty ns name a, CanAdd name tl, Decode (PrivateClaims tl ns)) => Decode (PrivateClaims ((name ->> a) ': tl) ns) Source # 
Instance details

Defined in Libjwt.PrivateClaims

Methods

decode :: JwtT -> JwtIO (PrivateClaims ((name ->> a) ': tl) ns) Source #

Decode (PrivateClaims Empty ns) Source # 
Instance details

Defined in Libjwt.PrivateClaims

type (->>) name a = 'Grant name a infix 6 Source #

A convenient alias. Let's you write '["claimName" ->> Int, "anotherName" ->> String] to indicate a list of types of kind Claim, instead of '[Grant "claimName" Int, Grant "anotherName" String],

data Namespace Source #

Kind of namespaces

These types represent a URL-like claim prefix

Constructors

NoNs 
SomeNs Symbol 

class KnownNamespace (ns :: Namespace) where Source #

Class of Namespace with known compile-time value

Methods

namespaceValue :: proxy ns -> Maybe String Source #

Convert namespace to a string (if any)

Instances

Instances details
KnownNamespace 'NoNs Source # 
Instance details

Defined in Libjwt.PrivateClaims

Methods

namespaceValue :: proxy 'NoNs -> Maybe String Source #

KnownSymbol ns => KnownNamespace ('SomeNs ns) Source # 
Instance details

Defined in Libjwt.PrivateClaims

Methods

namespaceValue :: proxy ('SomeNs ns) -> Maybe String Source #

Value-level counterparts

data ClaimName (name :: Symbol) Source #

Type-level literal representing a claim name

Can be used with -XOverloadedLabels

Constructors

ClaimName 

Instances

Instances details
name ~ name' => IsLabel name (ClaimName name') Source # 
Instance details

Defined in Libjwt.PrivateClaims

Methods

fromLabel :: ClaimName name' #

claimNameVal :: forall name. KnownSymbol name => ClaimName name -> String Source #

Retrieve the string associated with ClaimName

data Ns (ns :: Symbol) Source #

Type-level literal representing a namespace

Can be used with -XOverloadedLabels (the limited label syntax makes this rarely possibble though, a more common use is to write Ns @"https:example.com")

Constructors

Ns 

Instances

Instances details
name ~ name' => IsLabel name (Ns name') Source # 
Instance details

Defined in Libjwt.PrivateClaims

Methods

fromLabel :: Ns name' #

data ClaimWitness (name :: Symbol) a Source #

Keeps the value of type a and the name (type-level) with which it is associated

Instances

Instances details
(KnownSymbol n1, KnownSymbol n2) => FromPrivateClaims (ClaimWitness n1 a, ClaimWitness n2 b) Source # 
Instance details

Defined in Libjwt.PrivateClaims

Methods

fromPrivateClaims :: forall (ts :: [Claim Type]) (ns :: Namespace). ts ~ Claims (ClaimWitness n1 a, ClaimWitness n2 b) => PrivateClaims ts ns -> (ClaimWitness n1 a, ClaimWitness n2 b) Source #

(CanAdd n2 ('[] :: [Claim Type]), CanAdd n1 '[n2 ->> b]) => ToPrivateClaims (ClaimWitness n1 a, ClaimWitness n2 b) Source # 
Instance details

Defined in Libjwt.PrivateClaims

Associated Types

type Claims (ClaimWitness n1 a, ClaimWitness n2 b) :: [Claim Type] Source #

type OutNs (ClaimWitness n1 a, ClaimWitness n2 b) :: Namespace Source #

CanAdd n ('[] :: [Claim Type]) => ToPrivateClaims (ClaimWitness n a) Source # 
Instance details

Defined in Libjwt.PrivateClaims

Associated Types

type Claims (ClaimWitness n a) :: [Claim Type] Source #

type OutNs (ClaimWitness n a) :: Namespace Source #

(KnownSymbol n1, KnownSymbol n2, KnownSymbol n3) => FromPrivateClaims (ClaimWitness n1 a, ClaimWitness n2 b, ClaimWitness n3 c) Source # 
Instance details

Defined in Libjwt.PrivateClaims

Methods

fromPrivateClaims :: forall (ts :: [Claim Type]) (ns :: Namespace). ts ~ Claims (ClaimWitness n1 a, ClaimWitness n2 b, ClaimWitness n3 c) => PrivateClaims ts ns -> (ClaimWitness n1 a, ClaimWitness n2 b, ClaimWitness n3 c) Source #

(CanAdd n1 '[n2 ->> b, n3 ->> c], CanAdd n2 '[n3 ->> c], CanAdd n3 ('[] :: [Claim Type])) => ToPrivateClaims (ClaimWitness n1 a, ClaimWitness n2 b, ClaimWitness n3 c) Source # 
Instance details

Defined in Libjwt.PrivateClaims

Associated Types

type Claims (ClaimWitness n1 a, ClaimWitness n2 b, ClaimWitness n3 c) :: [Claim Type] Source #

type OutNs (ClaimWitness n1 a, ClaimWitness n2 b, ClaimWitness n3 c) :: Namespace Source #

(KnownSymbol n1, KnownSymbol n2, KnownSymbol n3, KnownSymbol n4) => FromPrivateClaims (ClaimWitness n1 a, ClaimWitness n2 b, ClaimWitness n3 c, ClaimWitness n4 d) Source # 
Instance details

Defined in Libjwt.PrivateClaims

Methods

fromPrivateClaims :: forall (ts :: [Claim Type]) (ns :: Namespace). ts ~ Claims (ClaimWitness n1 a, ClaimWitness n2 b, ClaimWitness n3 c, ClaimWitness n4 d) => PrivateClaims ts ns -> (ClaimWitness n1 a, ClaimWitness n2 b, ClaimWitness n3 c, ClaimWitness n4 d) Source #

(CanAdd n1 '[n2 ->> b, n3 ->> c, n4 ->> d], CanAdd n2 '[n3 ->> c, n4 ->> d], CanAdd n3 '[n4 ->> d], CanAdd n4 ('[] :: [Claim Type])) => ToPrivateClaims (ClaimWitness n1 a, ClaimWitness n2 b, ClaimWitness n3 c, ClaimWitness n4 d) Source # 
Instance details

Defined in Libjwt.PrivateClaims

Associated Types

type Claims (ClaimWitness n1 a, ClaimWitness n2 b, ClaimWitness n3 c, ClaimWitness n4 d) :: [Claim Type] Source #

type OutNs (ClaimWitness n1 a, ClaimWitness n2 b, ClaimWitness n3 c, ClaimWitness n4 d) :: Namespace Source #

(KnownSymbol n1, KnownSymbol n2, KnownSymbol n3, KnownSymbol n4, KnownSymbol n5) => FromPrivateClaims (ClaimWitness n1 a, ClaimWitness n2 b, ClaimWitness n3 c, ClaimWitness n4 d, ClaimWitness n5 e) Source # 
Instance details

Defined in Libjwt.PrivateClaims

Methods

fromPrivateClaims :: forall (ts :: [Claim Type]) (ns :: Namespace). ts ~ Claims (ClaimWitness n1 a, ClaimWitness n2 b, ClaimWitness n3 c, ClaimWitness n4 d, ClaimWitness n5 e) => PrivateClaims ts ns -> (ClaimWitness n1 a, ClaimWitness n2 b, ClaimWitness n3 c, ClaimWitness n4 d, ClaimWitness n5 e) Source #

(CanAdd n1 '[n2 ->> b, n3 ->> c, n4 ->> d, n5 ->> e], CanAdd n2 '[n3 ->> c, n4 ->> d, n5 ->> e], CanAdd n3 '[n4 ->> d, n5 ->> e], CanAdd n4 '[n5 ->> e], CanAdd n5 ('[] :: [Claim Type])) => ToPrivateClaims (ClaimWitness n1 a, ClaimWitness n2 b, ClaimWitness n3 c, ClaimWitness n4 d, ClaimWitness n5 e) Source # 
Instance details

Defined in Libjwt.PrivateClaims

Associated Types

type Claims (ClaimWitness n1 a, ClaimWitness n2 b, ClaimWitness n3 c, ClaimWitness n4 d, ClaimWitness n5 e) :: [Claim Type] Source #

type OutNs (ClaimWitness n1 a, ClaimWitness n2 b, ClaimWitness n3 c, ClaimWitness n4 d, ClaimWitness n5 e) :: Namespace Source #

(KnownSymbol n1, KnownSymbol n2, KnownSymbol n3, KnownSymbol n4, KnownSymbol n5, KnownSymbol n6) => FromPrivateClaims (ClaimWitness n1 a, ClaimWitness n2 b, ClaimWitness n3 c, ClaimWitness n4 d, ClaimWitness n5 e, ClaimWitness n6 f) Source # 
Instance details

Defined in Libjwt.PrivateClaims

Methods

fromPrivateClaims :: forall (ts :: [Claim Type]) (ns :: Namespace). ts ~ Claims (ClaimWitness n1 a, ClaimWitness n2 b, ClaimWitness n3 c, ClaimWitness n4 d, ClaimWitness n5 e, ClaimWitness n6 f) => PrivateClaims ts ns -> (ClaimWitness n1 a, ClaimWitness n2 b, ClaimWitness n3 c, ClaimWitness n4 d, ClaimWitness n5 e, ClaimWitness n6 f) Source #

(CanAdd n1 '[n2 ->> b, n3 ->> c, n4 ->> d, n5 ->> e, n6 ->> f], CanAdd n2 '[n3 ->> c, n4 ->> d, n5 ->> e, n6 ->> f], CanAdd n3 '[n4 ->> d, n5 ->> e, n6 ->> f], CanAdd n4 '[n5 ->> e, n6 ->> f], CanAdd n5 '[n6 ->> f], CanAdd n6 ('[] :: [Claim Type])) => ToPrivateClaims (ClaimWitness n1 a, ClaimWitness n2 b, ClaimWitness n3 c, ClaimWitness n4 d, ClaimWitness n5 e, ClaimWitness n6 f) Source # 
Instance details

Defined in Libjwt.PrivateClaims

Associated Types

type Claims (ClaimWitness n1 a, ClaimWitness n2 b, ClaimWitness n3 c, ClaimWitness n4 d, ClaimWitness n5 e, ClaimWitness n6 f) :: [Claim Type] Source #

type OutNs (ClaimWitness n1 a, ClaimWitness n2 b, ClaimWitness n3 c, ClaimWitness n4 d, ClaimWitness n5 e, ClaimWitness n6 f) :: Namespace Source #

(KnownSymbol n1, KnownSymbol n2, KnownSymbol n3, KnownSymbol n4, KnownSymbol n5, KnownSymbol n6, KnownSymbol n7) => FromPrivateClaims (ClaimWitness n1 a, ClaimWitness n2 b, ClaimWitness n3 c, ClaimWitness n4 d, ClaimWitness n5 e, ClaimWitness n6 f, ClaimWitness n7 g) Source # 
Instance details

Defined in Libjwt.PrivateClaims

Methods

fromPrivateClaims :: forall (ts :: [Claim Type]) (ns :: Namespace). ts ~ Claims (ClaimWitness n1 a, ClaimWitness n2 b, ClaimWitness n3 c, ClaimWitness n4 d, ClaimWitness n5 e, ClaimWitness n6 f, ClaimWitness n7 g) => PrivateClaims ts ns -> (ClaimWitness n1 a, ClaimWitness n2 b, ClaimWitness n3 c, ClaimWitness n4 d, ClaimWitness n5 e, ClaimWitness n6 f, ClaimWitness n7 g) Source #

(CanAdd n1 '[n2 ->> b, n3 ->> c, n4 ->> d, n5 ->> e, n6 ->> f, n7 ->> g], CanAdd n2 '[n3 ->> c, n4 ->> d, n5 ->> e, n6 ->> f, n7 ->> g], CanAdd n3 '[n4 ->> d, n5 ->> e, n6 ->> f, n7 ->> g], CanAdd n4 '[n5 ->> e, n6 ->> f, n7 ->> g], CanAdd n5 '[n6 ->> f, n7 ->> g], CanAdd n6 '[n7 ->> g], CanAdd n7 ('[] :: [Claim Type])) => ToPrivateClaims (ClaimWitness n1 a, ClaimWitness n2 b, ClaimWitness n3 c, ClaimWitness n4 d, ClaimWitness n5 e, ClaimWitness n6 f, ClaimWitness n7 g) Source # 
Instance details

Defined in Libjwt.PrivateClaims

Associated Types

type Claims (ClaimWitness n1 a, ClaimWitness n2 b, ClaimWitness n3 c, ClaimWitness n4 d, ClaimWitness n5 e, ClaimWitness n6 f, ClaimWitness n7 g) :: [Claim Type] Source #

type OutNs (ClaimWitness n1 a, ClaimWitness n2 b, ClaimWitness n3 c, ClaimWitness n4 d, ClaimWitness n5 e, ClaimWitness n6 f, ClaimWitness n7 g) :: Namespace Source #

type Claims (ClaimWitness n1 a, ClaimWitness n2 b) Source # 
Instance details

Defined in Libjwt.PrivateClaims

type Claims (ClaimWitness n1 a, ClaimWitness n2 b) = '[n1 ->> a, n2 ->> b]
type Claims (ClaimWitness n a) Source # 
Instance details

Defined in Libjwt.PrivateClaims

type Claims (ClaimWitness n a) = '[n ->> a]
type OutNs (ClaimWitness n1 a, ClaimWitness n2 b) Source # 
Instance details

Defined in Libjwt.PrivateClaims

type OutNs (ClaimWitness n1 a, ClaimWitness n2 b) = 'NoNs
type OutNs (ClaimWitness n a) Source # 
Instance details

Defined in Libjwt.PrivateClaims

type OutNs (ClaimWitness n a) = 'NoNs
type Claims (ClaimWitness n1 a, ClaimWitness n2 b, ClaimWitness n3 c) Source # 
Instance details

Defined in Libjwt.PrivateClaims

type Claims (ClaimWitness n1 a, ClaimWitness n2 b, ClaimWitness n3 c) = '[n1 ->> a, n2 ->> b, n3 ->> c]
type OutNs (ClaimWitness n1 a, ClaimWitness n2 b, ClaimWitness n3 c) Source # 
Instance details

Defined in Libjwt.PrivateClaims

type OutNs (ClaimWitness n1 a, ClaimWitness n2 b, ClaimWitness n3 c) = 'NoNs
type Claims (ClaimWitness n1 a, ClaimWitness n2 b, ClaimWitness n3 c, ClaimWitness n4 d) Source # 
Instance details

Defined in Libjwt.PrivateClaims

type Claims (ClaimWitness n1 a, ClaimWitness n2 b, ClaimWitness n3 c, ClaimWitness n4 d) = '[n1 ->> a, n2 ->> b, n3 ->> c, n4 ->> d]
type OutNs (ClaimWitness n1 a, ClaimWitness n2 b, ClaimWitness n3 c, ClaimWitness n4 d) Source # 
Instance details

Defined in Libjwt.PrivateClaims

type OutNs (ClaimWitness n1 a, ClaimWitness n2 b, ClaimWitness n3 c, ClaimWitness n4 d) = 'NoNs
type Claims (ClaimWitness n1 a, ClaimWitness n2 b, ClaimWitness n3 c, ClaimWitness n4 d, ClaimWitness n5 e) Source # 
Instance details

Defined in Libjwt.PrivateClaims

type Claims (ClaimWitness n1 a, ClaimWitness n2 b, ClaimWitness n3 c, ClaimWitness n4 d, ClaimWitness n5 e) = '[n1 ->> a, n2 ->> b, n3 ->> c, n4 ->> d, n5 ->> e]
type OutNs (ClaimWitness n1 a, ClaimWitness n2 b, ClaimWitness n3 c, ClaimWitness n4 d, ClaimWitness n5 e) Source # 
Instance details

Defined in Libjwt.PrivateClaims

type Claims (ClaimWitness n1 a, ClaimWitness n2 b, ClaimWitness n3 c, ClaimWitness n4 d, ClaimWitness n5 e, ClaimWitness n6 f) Source # 
Instance details

Defined in Libjwt.PrivateClaims

type Claims (ClaimWitness n1 a, ClaimWitness n2 b, ClaimWitness n3 c, ClaimWitness n4 d, ClaimWitness n5 e, ClaimWitness n6 f) = '[n1 ->> a, n2 ->> b, n3 ->> c, n4 ->> d, n5 ->> e, n6 ->> f]
type OutNs (ClaimWitness n1 a, ClaimWitness n2 b, ClaimWitness n3 c, ClaimWitness n4 d, ClaimWitness n5 e, ClaimWitness n6 f) Source # 
Instance details

Defined in Libjwt.PrivateClaims

type Claims (ClaimWitness n1 a, ClaimWitness n2 b, ClaimWitness n3 c, ClaimWitness n4 d, ClaimWitness n5 e, ClaimWitness n6 f, ClaimWitness n7 g) Source # 
Instance details

Defined in Libjwt.PrivateClaims

type Claims (ClaimWitness n1 a, ClaimWitness n2 b, ClaimWitness n3 c, ClaimWitness n4 d, ClaimWitness n5 e, ClaimWitness n6 f, ClaimWitness n7 g) = '[n1 ->> a, n2 ->> b, n3 ->> c, n4 ->> d, n5 ->> e, n6 ->> f, n7 ->> g]
type OutNs (ClaimWitness n1 a, ClaimWitness n2 b, ClaimWitness n3 c, ClaimWitness n4 d, ClaimWitness n5 e, ClaimWitness n6 f, ClaimWitness n7 g) Source # 
Instance details

Defined in Libjwt.PrivateClaims

testify :: ClaimWitness name a -> a Source #

(->>) :: ClaimName name -> a -> ClaimWitness name a infix 6 Source #

Associate name with a value

With -XOverloadedLabels

>>> :t #someName ->> True
#someName ->> True :: ClaimWitness "someName" Bool

Private claims type

data PrivateClaims (ts :: [Claim Type]) (ns :: Namespace) Source #

Container of named claims ts, possibly prefixed with some namespace ns

For example PrivateClaims '["string" ->> String, "int" ->> Int] 'NoNs denotes a structure containing a String under the "string" key plus an int under the "int" key. There is no namespace, so the keys will not be prefixed by any prefix when serializing the structure

Instances

Instances details
(Eq a, KnownSymbol name, Eq (PrivateClaims tl ns)) => Eq (PrivateClaims ((name ->> a) ': tl) ns) Source # 
Instance details

Defined in Libjwt.PrivateClaims

Methods

(==) :: PrivateClaims ((name ->> a) ': tl) ns -> PrivateClaims ((name ->> a) ': tl) ns -> Bool #

(/=) :: PrivateClaims ((name ->> a) ': tl) ns -> PrivateClaims ((name ->> a) ': tl) ns -> Bool #

Eq (PrivateClaims Empty any) Source # 
Instance details

Defined in Libjwt.PrivateClaims

Showable (PrivateClaims ((name ->> a) ': tl) ns) => Show (PrivateClaims ((name ->> a) ': tl) ns) Source # 
Instance details

Defined in Libjwt.PrivateClaims

Methods

showsPrec :: Int -> PrivateClaims ((name ->> a) ': tl) ns -> ShowS #

show :: PrivateClaims ((name ->> a) ': tl) ns -> String #

showList :: [PrivateClaims ((name ->> a) ': tl) ns] -> ShowS #

Show (PrivateClaims Empty ns) Source # 
Instance details

Defined in Libjwt.PrivateClaims

(ts ~ Empty, ns ~ 'NoNs) => Default (PrivateClaims ts ns) Source # 
Instance details

Defined in Libjwt.PrivateClaims

Methods

def :: PrivateClaims ts ns #

(ClaimEncoder a, KnownSymbol name, KnownNamespace ns, Encode (PrivateClaims tl ns)) => Encode (PrivateClaims ((name ->> a) ': tl) ns) Source # 
Instance details

Defined in Libjwt.PrivateClaims

Methods

encode :: PrivateClaims ((name ->> a) ': tl) ns -> JwtT -> EncodeResult Source #

Encode (PrivateClaims Empty ns) Source # 
Instance details

Defined in Libjwt.PrivateClaims

(ty ~ DecodeAuxDef a, DecodeAux ty ns name a, CanAdd name tl, Decode (PrivateClaims tl ns)) => Decode (PrivateClaims ((name ->> a) ': tl) ns) Source # 
Instance details

Defined in Libjwt.PrivateClaims

Methods

decode :: JwtT -> JwtIO (PrivateClaims ((name ->> a) ': tl) ns) Source #

Decode (PrivateClaims Empty ns) Source # 
Instance details

Defined in Libjwt.PrivateClaims

ToPrivateClaims (PrivateClaims ts ns) Source # 
Instance details

Defined in Libjwt.PrivateClaims

Associated Types

type Claims (PrivateClaims ts ns) :: [Claim Type] Source #

type OutNs (PrivateClaims ts ns) :: Namespace Source #

type Claims (PrivateClaims ts ns) Source # 
Instance details

Defined in Libjwt.PrivateClaims

type Claims (PrivateClaims ts ns) = ts
type OutNs (PrivateClaims ts ns) Source # 
Instance details

Defined in Libjwt.PrivateClaims

type OutNs (PrivateClaims ts ns) = ns

type Empty = '[] :: [Claim Type] Source #

Construction

addClaim :: forall name a ts ns. CanAdd name ts => ClaimName name -> a -> PrivateClaims ts ns -> PrivateClaims ((name ->> a) ': ts) ns Source #

Insert the claim.

The claim can be safely added iff:

  • there is no claim of the same name in the container,
  • its name is not the name of any public claim (like iss or sub)

Otherwise it is a compile-time error (see CanAdd constraint)

With -XOverloadedLabels

>>> addClaim #string "Value of claim" nullClaims
(#string ->> "Value of claim")

With -XTypeApplications and -XDataKinds

>>> addClaim (ClaimName @"string") "Value of claim" nullClaims
(#string ->> "Value of claim")

(.:) :: forall name a ts ns. CanAdd name ts => ClaimWitness name a -> PrivateClaims ts ns -> PrivateClaims ((name ->> a) ': ts) ns infixr 5 Source #

Alias for addClaim (binds to the right)

With -XOverloadedLabels

>>> #string ->> "Value of claim" .: nullClaims
(#string ->> "Value of claim")

type family CanAdd n ns :: Constraint where ... Source #

Constraint specifying when a claim named n can be added to the list of claims ns

Satisfied iff:

  • n is a type-level literal,
  • in the names of ns claims there is no n (uniqueness),
  • n is not one of the restricted names (see RestrictedName)
>>> :kind! CanAdd "name" '["n1" ->> Int, "n2" ->> String]
CanAdd "name" '["n1" ->> Int, "n2" ->> String] :: Constraint
= (GHC.TypeLits.KnownSymbol "name", () :: Constraint,
  () :: Constraint)
>>> :kind! CanAdd "n1" '["n1" ->> Int, "n2" ->> String]
CanAdd "n1" '["n1" ->> Int, "n2" ->> String] :: Constraint
= (GHC.TypeLits.KnownSymbol "n1", () :: Constraint,
  (TypeError ...))

Equations

CanAdd n ns = (KnownSymbol n, DisallowRestrictedName (RestrictedName n) n, RequireUniqueName (UniqueName n ns) n) 

type family RestrictedName (name :: Symbol) :: Bool where ... Source #

Equations

RestrictedName "iss" = 'True 
RestrictedName "sub" = 'True 
RestrictedName "aud" = 'True 
RestrictedName "exp" = 'True 
RestrictedName "nbf" = 'True 
RestrictedName "iat" = 'True 
RestrictedName "jti" = 'True 
RestrictedName _ = 'False 

Lookup

getClaim :: forall name ts ns. CanGet name ts => ClaimName name -> PrivateClaims ts ns -> LookupClaimType name ts Source #

Look up the claim value associated with name.

Value can be retrieved if proven to exists in the container. Otherwise it is a compile-time error (see CanGet constraint)

With -XOverloadedLabels

>>> getClaim #bool $ #string ->> "Value of claim" .: #bool ->> False .: nullClaims
False

(.!) :: forall name ts ns. CanGet name ts => PrivateClaims ts ns -> ClaimName name -> LookupClaimType name ts Source #

Alias for getClaim (container goes first)

With -XOverloadedLabels

>>> (#string ->> "Value of claim" .: #bool ->> False .: nullClaims) .! #bool
False

type family CanGet n ns :: Constraint where ... Source #

Constraint specifying when a claim named n can be looked up in the list of claims ns

Satisfied iff ns contains a claim named n and n is a type-level literal

>>> :kind! CanGet "n1" '["n1" ->> Int, "n2" ->> String]
CanGet "n1" '["n1" ->> Int, "n2" ->> String] :: Constraint
= (GHC.TypeLits.KnownSymbol "n1", () :: Constraint)
>>> :kind! CanGet "n" '["n1" ->> Int, "n2" ->> String]
CanGet "n" '["n1" ->> Int, "n2" ->> String] :: Constraint
= (GHC.TypeLits.KnownSymbol "n", (TypeError ...))

Equations

CanGet n ns = (KnownSymbol n, RequireExists (NameExists n ns) n) 

type family LookupClaimType (name :: Symbol) (ts :: [Claim Type]) :: Type where ... Source #

Looks up the type associated with name in the '[n1 ->> a, n2 ->> b, ...] pairs list. Gets stuck if name is not in ts

>>> :kind! LookupClaimType "n1" '["n1" ->> Int, "n2" ->> String]
LookupClaimType "n1" '["n1" ->> Int, "n2" ->> String] :: *
= Int

Equations

LookupClaimType n ((n ->> a) ': _) = a 
LookupClaimType n (_ ': rest) = LookupClaimType n rest 

Patern matching

pattern (:<) :: KnownSymbol name => a -> PrivateClaims tl ns -> PrivateClaims ((name ->> a) ': tl) ns infixr 5 Source #

Extract values from the container in the order in which they appear in the claim list

Namespaces

withNs :: ToPrivateClaims a => Ns ns -> a -> PrivateClaims (Claims a) ('SomeNs ns) Source #

Convert to private claims with some namespace

someNs :: Ns ns -> PrivateClaims ts 'NoNs -> PrivateClaims ts ('SomeNs ns) Source #

Set namespace

noNs :: PrivateClaims ts any -> PrivateClaims ts 'NoNs Source #

Unset namespace

Conversions

class ToPrivateClaims a where Source #

Class of types that can be converted to PrivateClaims

Minimal complete definition

Nothing

Associated Types

type Claims a :: [Claim Type] Source #

type Claims a = ClaimsFromRecord (Rep a)

type OutNs a :: Namespace Source #

type OutNs a = 'NoNs

Methods

toPrivateClaims :: a -> PrivateClaims (Claims a) (OutNs a) Source #

Convert to claims

default toPrivateClaims :: (Generic a, RecordToPrivateClaims (Rep a), Claims a ~ ClaimsFromRecord (Rep a), OutNs a ~ 'NoNs) => a -> PrivateClaims (Claims a) (OutNs a) Source #

Instances

Instances details
ToPrivateClaims () Source # 
Instance details

Defined in Libjwt.PrivateClaims

Associated Types

type Claims () :: [Claim Type] Source #

type OutNs () :: Namespace Source #

Methods

toPrivateClaims :: () -> PrivateClaims (Claims ()) (OutNs ()) Source #

(CanAdd n2 ('[] :: [Claim Type]), CanAdd n1 '[n2 ->> b]) => ToPrivateClaims (ClaimWitness n1 a, ClaimWitness n2 b) Source # 
Instance details

Defined in Libjwt.PrivateClaims

Associated Types

type Claims (ClaimWitness n1 a, ClaimWitness n2 b) :: [Claim Type] Source #

type OutNs (ClaimWitness n1 a, ClaimWitness n2 b) :: Namespace Source #

ToPrivateClaims (PrivateClaims ts ns) Source # 
Instance details

Defined in Libjwt.PrivateClaims

Associated Types

type Claims (PrivateClaims ts ns) :: [Claim Type] Source #

type OutNs (PrivateClaims ts ns) :: Namespace Source #

CanAdd n ('[] :: [Claim Type]) => ToPrivateClaims (ClaimWitness n a) Source # 
Instance details

Defined in Libjwt.PrivateClaims

Associated Types

type Claims (ClaimWitness n a) :: [Claim Type] Source #

type OutNs (ClaimWitness n a) :: Namespace Source #

(CanAdd n1 '[n2 ->> b, n3 ->> c], CanAdd n2 '[n3 ->> c], CanAdd n3 ('[] :: [Claim Type])) => ToPrivateClaims (ClaimWitness n1 a, ClaimWitness n2 b, ClaimWitness n3 c) Source # 
Instance details

Defined in Libjwt.PrivateClaims

Associated Types

type Claims (ClaimWitness n1 a, ClaimWitness n2 b, ClaimWitness n3 c) :: [Claim Type] Source #

type OutNs (ClaimWitness n1 a, ClaimWitness n2 b, ClaimWitness n3 c) :: Namespace Source #

(CanAdd n1 '[n2 ->> b, n3 ->> c, n4 ->> d], CanAdd n2 '[n3 ->> c, n4 ->> d], CanAdd n3 '[n4 ->> d], CanAdd n4 ('[] :: [Claim Type])) => ToPrivateClaims (ClaimWitness n1 a, ClaimWitness n2 b, ClaimWitness n3 c, ClaimWitness n4 d) Source # 
Instance details

Defined in Libjwt.PrivateClaims

Associated Types

type Claims (ClaimWitness n1 a, ClaimWitness n2 b, ClaimWitness n3 c, ClaimWitness n4 d) :: [Claim Type] Source #

type OutNs (ClaimWitness n1 a, ClaimWitness n2 b, ClaimWitness n3 c, ClaimWitness n4 d) :: Namespace Source #

(CanAdd n1 '[n2 ->> b, n3 ->> c, n4 ->> d, n5 ->> e], CanAdd n2 '[n3 ->> c, n4 ->> d, n5 ->> e], CanAdd n3 '[n4 ->> d, n5 ->> e], CanAdd n4 '[n5 ->> e], CanAdd n5 ('[] :: [Claim Type])) => ToPrivateClaims (ClaimWitness n1 a, ClaimWitness n2 b, ClaimWitness n3 c, ClaimWitness n4 d, ClaimWitness n5 e) Source # 
Instance details

Defined in Libjwt.PrivateClaims

Associated Types

type Claims (ClaimWitness n1 a, ClaimWitness n2 b, ClaimWitness n3 c, ClaimWitness n4 d, ClaimWitness n5 e) :: [Claim Type] Source #

type OutNs (ClaimWitness n1 a, ClaimWitness n2 b, ClaimWitness n3 c, ClaimWitness n4 d, ClaimWitness n5 e) :: Namespace Source #

(CanAdd n1 '[n2 ->> b, n3 ->> c, n4 ->> d, n5 ->> e, n6 ->> f], CanAdd n2 '[n3 ->> c, n4 ->> d, n5 ->> e, n6 ->> f], CanAdd n3 '[n4 ->> d, n5 ->> e, n6 ->> f], CanAdd n4 '[n5 ->> e, n6 ->> f], CanAdd n5 '[n6 ->> f], CanAdd n6 ('[] :: [Claim Type])) => ToPrivateClaims (ClaimWitness n1 a, ClaimWitness n2 b, ClaimWitness n3 c, ClaimWitness n4 d, ClaimWitness n5 e, ClaimWitness n6 f) Source # 
Instance details

Defined in Libjwt.PrivateClaims

Associated Types

type Claims (ClaimWitness n1 a, ClaimWitness n2 b, ClaimWitness n3 c, ClaimWitness n4 d, ClaimWitness n5 e, ClaimWitness n6 f) :: [Claim Type] Source #

type OutNs (ClaimWitness n1 a, ClaimWitness n2 b, ClaimWitness n3 c, ClaimWitness n4 d, ClaimWitness n5 e, ClaimWitness n6 f) :: Namespace Source #

(CanAdd n1 '[n2 ->> b, n3 ->> c, n4 ->> d, n5 ->> e, n6 ->> f, n7 ->> g], CanAdd n2 '[n3 ->> c, n4 ->> d, n5 ->> e, n6 ->> f, n7 ->> g], CanAdd n3 '[n4 ->> d, n5 ->> e, n6 ->> f, n7 ->> g], CanAdd n4 '[n5 ->> e, n6 ->> f, n7 ->> g], CanAdd n5 '[n6 ->> f, n7 ->> g], CanAdd n6 '[n7 ->> g], CanAdd n7 ('[] :: [Claim Type])) => ToPrivateClaims (ClaimWitness n1 a, ClaimWitness n2 b, ClaimWitness n3 c, ClaimWitness n4 d, ClaimWitness n5 e, ClaimWitness n6 f, ClaimWitness n7 g) Source # 
Instance details

Defined in Libjwt.PrivateClaims

Associated Types

type Claims (ClaimWitness n1 a, ClaimWitness n2 b, ClaimWitness n3 c, ClaimWitness n4 d, ClaimWitness n5 e, ClaimWitness n6 f, ClaimWitness n7 g) :: [Claim Type] Source #

type OutNs (ClaimWitness n1 a, ClaimWitness n2 b, ClaimWitness n3 c, ClaimWitness n4 d, ClaimWitness n5 e, ClaimWitness n6 f, ClaimWitness n7 g) :: Namespace Source #

class FromPrivateClaims a where Source #

Class of types that can be constructed from PrivateClaims

Minimal complete definition

Nothing

Methods

fromPrivateClaims :: ts ~ Claims a => PrivateClaims ts ns -> a Source #

Convert from claims

default fromPrivateClaims :: (Generic a, RecordFromPrivateClaims (Rep a), ts ~ ClaimsFromRecord (Rep a)) => PrivateClaims ts ns -> a Source #

Instances

Instances details
(KnownSymbol n1, KnownSymbol n2) => FromPrivateClaims (ClaimWitness n1 a, ClaimWitness n2 b) Source # 
Instance details

Defined in Libjwt.PrivateClaims

Methods

fromPrivateClaims :: forall (ts :: [Claim Type]) (ns :: Namespace). ts ~ Claims (ClaimWitness n1 a, ClaimWitness n2 b) => PrivateClaims ts ns -> (ClaimWitness n1 a, ClaimWitness n2 b) Source #

(KnownSymbol n1, KnownSymbol n2, KnownSymbol n3) => FromPrivateClaims (ClaimWitness n1 a, ClaimWitness n2 b, ClaimWitness n3 c) Source # 
Instance details

Defined in Libjwt.PrivateClaims

Methods

fromPrivateClaims :: forall (ts :: [Claim Type]) (ns :: Namespace). ts ~ Claims (ClaimWitness n1 a, ClaimWitness n2 b, ClaimWitness n3 c) => PrivateClaims ts ns -> (ClaimWitness n1 a, ClaimWitness n2 b, ClaimWitness n3 c) Source #

(KnownSymbol n1, KnownSymbol n2, KnownSymbol n3, KnownSymbol n4) => FromPrivateClaims (ClaimWitness n1 a, ClaimWitness n2 b, ClaimWitness n3 c, ClaimWitness n4 d) Source # 
Instance details

Defined in Libjwt.PrivateClaims

Methods

fromPrivateClaims :: forall (ts :: [Claim Type]) (ns :: Namespace). ts ~ Claims (ClaimWitness n1 a, ClaimWitness n2 b, ClaimWitness n3 c, ClaimWitness n4 d) => PrivateClaims ts ns -> (ClaimWitness n1 a, ClaimWitness n2 b, ClaimWitness n3 c, ClaimWitness n4 d) Source #

(KnownSymbol n1, KnownSymbol n2, KnownSymbol n3, KnownSymbol n4, KnownSymbol n5) => FromPrivateClaims (ClaimWitness n1 a, ClaimWitness n2 b, ClaimWitness n3 c, ClaimWitness n4 d, ClaimWitness n5 e) Source # 
Instance details

Defined in Libjwt.PrivateClaims

Methods

fromPrivateClaims :: forall (ts :: [Claim Type]) (ns :: Namespace). ts ~ Claims (ClaimWitness n1 a, ClaimWitness n2 b, ClaimWitness n3 c, ClaimWitness n4 d, ClaimWitness n5 e) => PrivateClaims ts ns -> (ClaimWitness n1 a, ClaimWitness n2 b, ClaimWitness n3 c, ClaimWitness n4 d, ClaimWitness n5 e) Source #

(KnownSymbol n1, KnownSymbol n2, KnownSymbol n3, KnownSymbol n4, KnownSymbol n5, KnownSymbol n6) => FromPrivateClaims (ClaimWitness n1 a, ClaimWitness n2 b, ClaimWitness n3 c, ClaimWitness n4 d, ClaimWitness n5 e, ClaimWitness n6 f) Source # 
Instance details

Defined in Libjwt.PrivateClaims

Methods

fromPrivateClaims :: forall (ts :: [Claim Type]) (ns :: Namespace). ts ~ Claims (ClaimWitness n1 a, ClaimWitness n2 b, ClaimWitness n3 c, ClaimWitness n4 d, ClaimWitness n5 e, ClaimWitness n6 f) => PrivateClaims ts ns -> (ClaimWitness n1 a, ClaimWitness n2 b, ClaimWitness n3 c, ClaimWitness n4 d, ClaimWitness n5 e, ClaimWitness n6 f) Source #

(KnownSymbol n1, KnownSymbol n2, KnownSymbol n3, KnownSymbol n4, KnownSymbol n5, KnownSymbol n6, KnownSymbol n7) => FromPrivateClaims (ClaimWitness n1 a, ClaimWitness n2 b, ClaimWitness n3 c, ClaimWitness n4 d, ClaimWitness n5 e, ClaimWitness n6 f, ClaimWitness n7 g) Source # 
Instance details

Defined in Libjwt.PrivateClaims

Methods

fromPrivateClaims :: forall (ts :: [Claim Type]) (ns :: Namespace). ts ~ Claims (ClaimWitness n1 a, ClaimWitness n2 b, ClaimWitness n3 c, ClaimWitness n4 d, ClaimWitness n5 e, ClaimWitness n6 f, ClaimWitness n7 g) => PrivateClaims ts ns -> (ClaimWitness n1 a, ClaimWitness n2 b, ClaimWitness n3 c, ClaimWitness n4 d, ClaimWitness n5 e, ClaimWitness n6 f, ClaimWitness n7 g) Source #