Skip to content

Instantly share code, notes, and snippets.

@codedmart
Created January 18, 2016 18:11
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save codedmart/ab884166cfc66c94c4f4 to your computer and use it in GitHub Desktop.
Save codedmart/ab884166cfc66c94c4f4 to your computer and use it in GitHub Desktop.
case mc of
Nothing -> return $ FailFatal $ serverErr' Forbidden
Just jwt -> do
mcs <- verifyClaims $ decodeUtf8 jwt
case mcs of
Nothing -> return $ FailFatal $ serverErr' Forbidden
Just clms -> do
let user = lookup "user" $ toList $ unregisteredClaims clms :: Maybe Value
case user of
Nothing -> return $ FailFatal $ serverErr' Forbidden
Just user' -> do
let usr = handleCTypeH (Proxy :: Proxy list) (cs contentTypeH) (encode user')
case usr of
Nothing -> return $ FailFatal $ serverErr' Forbidden
Just (Left e) -> return $ FailFatal err403
Just (Right v) -> return $ Route v
@Gurkenglas
Copy link

fromMaybeT (FailFatal $ serverErr' Forbidden) $ do
  jwt <- MaybeT $ return mc
  clms <- MaybeT $ verifyClaims $ decodeUtf8 jwt
  user <- MaybeT $ return $ lookup "user" $ toList $ unregisteredClaims clms :: Maybe Value
  usr <- MaybeT $ return $ handleCTypeH (Proxy :: Proxy list) (cs contentTypeH) (encode user')
  case usr of
    Left e -> return $ FailFatal err403
    Right v -> return $ Route v

fromMaybeT :: Monad m => m a -> MaybeT m a -> m a
fromMaybeT x y = y <|> lift x

@codedmart
Copy link
Author

@Gurkenglas wrote this as well. Putting here for reference:

fromMaybe (FailFatal $ serverErr' Forbidden) <$> (ala EndoT . alaf MaybeT) foldMap
  [ return . Just . either (const $ FailFatal err403) Route
  , return . handleCTypeH (Proxy :: Proxy list) (cs contentTypeH) . encode
  , return . lookup "user" . toList . unregisteredClaims
  , verifyClaims . decodeUtf8 jwt
  , return
  ] mc

newtype EndoT m a = EndoT {runEndoT :: a -> m a} deriving Wrapped

instance Monad m => Monoid (EndoT m) where
  mempty = coerce return
  mappend = coerce (<=<)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment