{-# OPTIONS_GHC -Wno-orphans #-} module Data.OpenApi.Compare.Validate.SecurityScheme ( ) where import Control.Monad import Data.OpenApi import Data.OpenApi.Compare.Behavior import Data.OpenApi.Compare.Orphans () import Data.OpenApi.Compare.Subtree import Data.OpenApi.Compare.Validate.OAuth2Flows instance Subtree SecurityScheme where type CheckEnv SecurityScheme = '[] type SubtreeLevel SecurityScheme = 'SecuritySchemeLevel checkStructuralCompatibility :: HList (CheckEnv SecurityScheme) -> ProdCons (Traced SecurityScheme) -> StructuralCompatFormula () checkStructuralCompatibility HList (CheckEnv SecurityScheme) _ ProdCons (Traced SecurityScheme) pc = ProdCons (EnvT (Trace SecuritySchemeType) Identity SecuritySchemeType) -> StructuralCompatFormula () forall a (w :: * -> *). (Eq a, Comonad w) => ProdCons (w a) -> StructuralCompatFormula () structuralEq (ProdCons (EnvT (Trace SecuritySchemeType) Identity SecuritySchemeType) -> StructuralCompatFormula ()) -> ProdCons (EnvT (Trace SecuritySchemeType) Identity SecuritySchemeType) -> StructuralCompatFormula () forall a b. (a -> b) -> a -> b $ Traced SecurityScheme -> EnvT (Trace SecuritySchemeType) Identity SecuritySchemeType tracedSecuritySchemaTypes (Traced SecurityScheme -> EnvT (Trace SecuritySchemeType) Identity SecuritySchemeType) -> ProdCons (Traced SecurityScheme) -> ProdCons (EnvT (Trace SecuritySchemeType) Identity SecuritySchemeType) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> ProdCons (Traced SecurityScheme) pc checkSemanticCompatibility :: HList (CheckEnv SecurityScheme) -> Behavior (SubtreeLevel SecurityScheme) -> ProdCons (Traced SecurityScheme) -> SemanticCompatFormula () checkSemanticCompatibility HList (CheckEnv SecurityScheme) env Behavior (SubtreeLevel SecurityScheme) bhv ProdCons (Traced SecurityScheme) pcSecScheme = case Traced SecurityScheme -> EnvT (Trace SecuritySchemeType) Identity SecuritySchemeType tracedSecuritySchemaTypes (Traced SecurityScheme -> EnvT (Trace SecuritySchemeType) Identity SecuritySchemeType) -> ProdCons (Traced SecurityScheme) -> ProdCons (EnvT (Trace SecuritySchemeType) Identity SecuritySchemeType) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> ProdCons (Traced SecurityScheme) pcSecScheme of (ProdCons (Traced Trace SecuritySchemeType _ (SecuritySchemeHttp HttpSchemeType pType)) (Traced Trace SecuritySchemeType _ (SecuritySchemeHttp HttpSchemeType cType))) -> case (HttpSchemeType pType, HttpSchemeType cType) of (HttpSchemeBearer Maybe BearerFormat _, HttpSchemeBearer Maybe BearerFormat _) -> () -> SemanticCompatFormula () forall (f :: * -> *) a. Applicative f => a -> f a pure () (HttpSchemeType HttpSchemeBasic, HttpSchemeType HttpSchemeBasic) -> () -> SemanticCompatFormula () forall (f :: * -> *) a. Applicative f => a -> f a pure () (HttpSchemeCustom BearerFormat p, HttpSchemeCustom BearerFormat c) -> Bool -> SemanticCompatFormula () -> SemanticCompatFormula () forall (f :: * -> *). Applicative f => Bool -> f () -> f () unless (BearerFormat p BearerFormat -> BearerFormat -> Bool forall a. Eq a => a -> a -> Bool == BearerFormat c) (Paths Behave 'APILevel 'SecuritySchemeLevel -> Issue 'SecuritySchemeLevel -> SemanticCompatFormula () forall (l :: BehaviorLevel) (q :: BehaviorLevel -> BehaviorLevel -> *) (r :: BehaviorLevel) a. Issuable l => Paths q r l -> Issue l -> CompatFormula' q AnIssue r a issueAt Paths Behave 'APILevel 'SecuritySchemeLevel Behavior (SubtreeLevel SecurityScheme) bhv (Issue 'SecuritySchemeLevel -> SemanticCompatFormula ()) -> Issue 'SecuritySchemeLevel -> SemanticCompatFormula () forall a b. (a -> b) -> a -> b $ BearerFormat -> BearerFormat -> Issue 'SecuritySchemeLevel CustomHttpSchemesDontMatch BearerFormat p BearerFormat c) (HttpSchemeType, HttpSchemeType) _ -> Paths Behave 'APILevel 'SecuritySchemeLevel -> Issue 'SecuritySchemeLevel -> SemanticCompatFormula () forall (l :: BehaviorLevel) (q :: BehaviorLevel -> BehaviorLevel -> *) (r :: BehaviorLevel) a. Issuable l => Paths q r l -> Issue l -> CompatFormula' q AnIssue r a issueAt Paths Behave 'APILevel 'SecuritySchemeLevel Behavior (SubtreeLevel SecurityScheme) bhv (Issue 'SecuritySchemeLevel -> SemanticCompatFormula ()) -> Issue 'SecuritySchemeLevel -> SemanticCompatFormula () forall a b. (a -> b) -> a -> b $ HttpSchemeType -> HttpSchemeType -> Issue 'SecuritySchemeLevel HttpSchemeTypesDontMatch HttpSchemeType pType HttpSchemeType cType (ProdCons (Traced Trace SecuritySchemeType _ (SecuritySchemeApiKey ApiKeyParams pParams)) (Traced Trace SecuritySchemeType _ (SecuritySchemeApiKey ApiKeyParams cParams))) -> do Bool -> SemanticCompatFormula () -> SemanticCompatFormula () forall (f :: * -> *). Applicative f => Bool -> f () -> f () unless (ApiKeyParams pParams ApiKeyParams -> ApiKeyParams -> Bool forall a. Eq a => a -> a -> Bool == ApiKeyParams cParams) (Paths Behave 'APILevel 'SecuritySchemeLevel -> Issue 'SecuritySchemeLevel -> SemanticCompatFormula () forall (l :: BehaviorLevel) (q :: BehaviorLevel -> BehaviorLevel -> *) (r :: BehaviorLevel) a. Issuable l => Paths q r l -> Issue l -> CompatFormula' q AnIssue r a issueAt Paths Behave 'APILevel 'SecuritySchemeLevel Behavior (SubtreeLevel SecurityScheme) bhv (Issue 'SecuritySchemeLevel -> SemanticCompatFormula ()) -> Issue 'SecuritySchemeLevel -> SemanticCompatFormula () forall a b. (a -> b) -> a -> b $ ApiKeyParams -> ApiKeyParams -> Issue 'SecuritySchemeLevel ApiKeyParamsDontMatch ApiKeyParams pParams ApiKeyParams cParams) (ProdCons (Traced Trace SecuritySchemeType pT (SecuritySchemeOAuth2 OAuth2Flows pFlows)) (Traced Trace SecuritySchemeType cT (SecuritySchemeOAuth2 OAuth2Flows cFlows))) -> do Behavior (SubtreeLevel OAuth2Flows) -> HList '[] -> ProdCons (Traced OAuth2Flows) -> SemanticCompatFormula () forall t (xs :: [*]). (ReassembleHList xs (CheckEnv t), Subtree t) => Behavior (SubtreeLevel t) -> HList xs -> ProdCons (Traced t) -> SemanticCompatFormula () checkCompatibility Behavior (SubtreeLevel OAuth2Flows) Behavior (SubtreeLevel SecurityScheme) bhv HList '[] HList (CheckEnv SecurityScheme) env (ProdCons (Traced OAuth2Flows) -> SemanticCompatFormula ()) -> (ProdCons (Traced' SecuritySchemeType OAuth2Flows) -> ProdCons (Traced OAuth2Flows)) -> ProdCons (Traced' SecuritySchemeType OAuth2Flows) -> SemanticCompatFormula () forall b c a. (b -> c) -> (a -> b) -> a -> c . (Traced' SecuritySchemeType OAuth2Flows -> Traced OAuth2Flows) -> ProdCons (Traced' SecuritySchemeType OAuth2Flows) -> ProdCons (Traced OAuth2Flows) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b fmap (Step SecuritySchemeType OAuth2Flows -> Traced' SecuritySchemeType OAuth2Flows -> Traced OAuth2Flows forall a a' b. Steppable a a' => Step a a' -> Traced' a b -> Traced' a' b stepTraced Step SecuritySchemeType OAuth2Flows SecurityOAuthFlowsStep) (ProdCons (Traced' SecuritySchemeType OAuth2Flows) -> SemanticCompatFormula ()) -> ProdCons (Traced' SecuritySchemeType OAuth2Flows) -> SemanticCompatFormula () forall a b. (a -> b) -> a -> b $ Traced' SecuritySchemeType OAuth2Flows -> Traced' SecuritySchemeType OAuth2Flows -> ProdCons (Traced' SecuritySchemeType OAuth2Flows) forall a. a -> a -> ProdCons a ProdCons (Trace SecuritySchemeType -> OAuth2Flows -> Traced' SecuritySchemeType OAuth2Flows forall a b. Trace a -> b -> Traced' a b Traced Trace SecuritySchemeType pT OAuth2Flows pFlows) (Trace SecuritySchemeType -> OAuth2Flows -> Traced' SecuritySchemeType OAuth2Flows forall a b. Trace a -> b -> Traced' a b Traced Trace SecuritySchemeType cT OAuth2Flows cFlows) (ProdCons (Traced Trace SecuritySchemeType _ (SecuritySchemeOpenIdConnect URL pUrl)) (Traced Trace SecuritySchemeType _ (SecuritySchemeOpenIdConnect URL cUrl))) -> do Bool -> SemanticCompatFormula () -> SemanticCompatFormula () forall (f :: * -> *). Applicative f => Bool -> f () -> f () unless (URL pUrl URL -> URL -> Bool forall a. Eq a => a -> a -> Bool == URL cUrl) (Paths Behave 'APILevel 'SecuritySchemeLevel -> Issue 'SecuritySchemeLevel -> SemanticCompatFormula () forall (l :: BehaviorLevel) (q :: BehaviorLevel -> BehaviorLevel -> *) (r :: BehaviorLevel) a. Issuable l => Paths q r l -> Issue l -> CompatFormula' q AnIssue r a issueAt Paths Behave 'APILevel 'SecuritySchemeLevel Behavior (SubtreeLevel SecurityScheme) bhv (Issue 'SecuritySchemeLevel -> SemanticCompatFormula ()) -> Issue 'SecuritySchemeLevel -> SemanticCompatFormula () forall a b. (a -> b) -> a -> b $ URL -> URL -> Issue 'SecuritySchemeLevel OpenIdConnectUrlsDontMatch URL pUrl URL cUrl) ProdCons (EnvT (Trace SecuritySchemeType) Identity SecuritySchemeType) _ -> Paths Behave 'APILevel 'SecuritySchemeLevel -> Issue 'SecuritySchemeLevel -> SemanticCompatFormula () forall (l :: BehaviorLevel) (q :: BehaviorLevel -> BehaviorLevel -> *) (r :: BehaviorLevel) a. Issuable l => Paths q r l -> Issue l -> CompatFormula' q AnIssue r a issueAt Paths Behave 'APILevel 'SecuritySchemeLevel Behavior (SubtreeLevel SecurityScheme) bhv Issue 'SecuritySchemeLevel DifferentSecuritySchemes tracedSecuritySchemaTypes :: Traced SecurityScheme -> Traced SecuritySchemeType tracedSecuritySchemaTypes :: Traced SecurityScheme -> EnvT (Trace SecuritySchemeType) Identity SecuritySchemeType tracedSecuritySchemaTypes (Traced Trace SecurityScheme t SecurityScheme x) = Trace SecuritySchemeType -> SecuritySchemeType -> EnvT (Trace SecuritySchemeType) Identity SecuritySchemeType forall a b. Trace a -> b -> Traced' a b Traced (Trace SecurityScheme t Trace SecurityScheme -> Paths Step SecurityScheme SecuritySchemeType -> Trace SecuritySchemeType forall k (cat :: k -> k -> *) (a :: k) (b :: k) (c :: k). Category cat => cat a b -> cat b c -> cat a c >>> Step SecurityScheme SecuritySchemeType -> Paths Step SecurityScheme SecuritySchemeType forall k (q :: k -> k -> *) (a :: k) (b :: k). NiceQuiver q a b => q a b -> Paths q a b step Step SecurityScheme SecuritySchemeType SecuritySchemeTypeStep) (SecurityScheme -> SecuritySchemeType _securitySchemeType SecurityScheme x) instance Steppable SecurityScheme SecuritySchemeType where data Step SecurityScheme SecuritySchemeType = SecuritySchemeTypeStep deriving stock (Step SecurityScheme SecuritySchemeType -> Step SecurityScheme SecuritySchemeType -> Bool (Step SecurityScheme SecuritySchemeType -> Step SecurityScheme SecuritySchemeType -> Bool) -> (Step SecurityScheme SecuritySchemeType -> Step SecurityScheme SecuritySchemeType -> Bool) -> Eq (Step SecurityScheme SecuritySchemeType) forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a /= :: Step SecurityScheme SecuritySchemeType -> Step SecurityScheme SecuritySchemeType -> Bool $c/= :: Step SecurityScheme SecuritySchemeType -> Step SecurityScheme SecuritySchemeType -> Bool == :: Step SecurityScheme SecuritySchemeType -> Step SecurityScheme SecuritySchemeType -> Bool $c== :: Step SecurityScheme SecuritySchemeType -> Step SecurityScheme SecuritySchemeType -> Bool Eq, Eq (Step SecurityScheme SecuritySchemeType) Eq (Step SecurityScheme SecuritySchemeType) -> (Step SecurityScheme SecuritySchemeType -> Step SecurityScheme SecuritySchemeType -> Ordering) -> (Step SecurityScheme SecuritySchemeType -> Step SecurityScheme SecuritySchemeType -> Bool) -> (Step SecurityScheme SecuritySchemeType -> Step SecurityScheme SecuritySchemeType -> Bool) -> (Step SecurityScheme SecuritySchemeType -> Step SecurityScheme SecuritySchemeType -> Bool) -> (Step SecurityScheme SecuritySchemeType -> Step SecurityScheme SecuritySchemeType -> Bool) -> (Step SecurityScheme SecuritySchemeType -> Step SecurityScheme SecuritySchemeType -> Step SecurityScheme SecuritySchemeType) -> (Step SecurityScheme SecuritySchemeType -> Step SecurityScheme SecuritySchemeType -> Step SecurityScheme SecuritySchemeType) -> Ord (Step SecurityScheme SecuritySchemeType) Step SecurityScheme SecuritySchemeType -> Step SecurityScheme SecuritySchemeType -> Bool Step SecurityScheme SecuritySchemeType -> Step SecurityScheme SecuritySchemeType -> Ordering Step SecurityScheme SecuritySchemeType -> Step SecurityScheme SecuritySchemeType -> Step SecurityScheme SecuritySchemeType forall a. Eq a -> (a -> a -> Ordering) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> a) -> (a -> a -> a) -> Ord a min :: Step SecurityScheme SecuritySchemeType -> Step SecurityScheme SecuritySchemeType -> Step SecurityScheme SecuritySchemeType $cmin :: Step SecurityScheme SecuritySchemeType -> Step SecurityScheme SecuritySchemeType -> Step SecurityScheme SecuritySchemeType max :: Step SecurityScheme SecuritySchemeType -> Step SecurityScheme SecuritySchemeType -> Step SecurityScheme SecuritySchemeType $cmax :: Step SecurityScheme SecuritySchemeType -> Step SecurityScheme SecuritySchemeType -> Step SecurityScheme SecuritySchemeType >= :: Step SecurityScheme SecuritySchemeType -> Step SecurityScheme SecuritySchemeType -> Bool $c>= :: Step SecurityScheme SecuritySchemeType -> Step SecurityScheme SecuritySchemeType -> Bool > :: Step SecurityScheme SecuritySchemeType -> Step SecurityScheme SecuritySchemeType -> Bool $c> :: Step SecurityScheme SecuritySchemeType -> Step SecurityScheme SecuritySchemeType -> Bool <= :: Step SecurityScheme SecuritySchemeType -> Step SecurityScheme SecuritySchemeType -> Bool $c<= :: Step SecurityScheme SecuritySchemeType -> Step SecurityScheme SecuritySchemeType -> Bool < :: Step SecurityScheme SecuritySchemeType -> Step SecurityScheme SecuritySchemeType -> Bool $c< :: Step SecurityScheme SecuritySchemeType -> Step SecurityScheme SecuritySchemeType -> Bool compare :: Step SecurityScheme SecuritySchemeType -> Step SecurityScheme SecuritySchemeType -> Ordering $ccompare :: Step SecurityScheme SecuritySchemeType -> Step SecurityScheme SecuritySchemeType -> Ordering $cp1Ord :: Eq (Step SecurityScheme SecuritySchemeType) Ord, Int -> Step SecurityScheme SecuritySchemeType -> ShowS [Step SecurityScheme SecuritySchemeType] -> ShowS Step SecurityScheme SecuritySchemeType -> String (Int -> Step SecurityScheme SecuritySchemeType -> ShowS) -> (Step SecurityScheme SecuritySchemeType -> String) -> ([Step SecurityScheme SecuritySchemeType] -> ShowS) -> Show (Step SecurityScheme SecuritySchemeType) forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a showList :: [Step SecurityScheme SecuritySchemeType] -> ShowS $cshowList :: [Step SecurityScheme SecuritySchemeType] -> ShowS show :: Step SecurityScheme SecuritySchemeType -> String $cshow :: Step SecurityScheme SecuritySchemeType -> String showsPrec :: Int -> Step SecurityScheme SecuritySchemeType -> ShowS $cshowsPrec :: Int -> Step SecurityScheme SecuritySchemeType -> ShowS Show) instance Steppable SecuritySchemeType OAuth2Flows where data Step SecuritySchemeType OAuth2Flows = SecurityOAuthFlowsStep deriving stock (Step SecuritySchemeType OAuth2Flows -> Step SecuritySchemeType OAuth2Flows -> Bool (Step SecuritySchemeType OAuth2Flows -> Step SecuritySchemeType OAuth2Flows -> Bool) -> (Step SecuritySchemeType OAuth2Flows -> Step SecuritySchemeType OAuth2Flows -> Bool) -> Eq (Step SecuritySchemeType OAuth2Flows) forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a /= :: Step SecuritySchemeType OAuth2Flows -> Step SecuritySchemeType OAuth2Flows -> Bool $c/= :: Step SecuritySchemeType OAuth2Flows -> Step SecuritySchemeType OAuth2Flows -> Bool == :: Step SecuritySchemeType OAuth2Flows -> Step SecuritySchemeType OAuth2Flows -> Bool $c== :: Step SecuritySchemeType OAuth2Flows -> Step SecuritySchemeType OAuth2Flows -> Bool Eq, Eq (Step SecuritySchemeType OAuth2Flows) Eq (Step SecuritySchemeType OAuth2Flows) -> (Step SecuritySchemeType OAuth2Flows -> Step SecuritySchemeType OAuth2Flows -> Ordering) -> (Step SecuritySchemeType OAuth2Flows -> Step SecuritySchemeType OAuth2Flows -> Bool) -> (Step SecuritySchemeType OAuth2Flows -> Step SecuritySchemeType OAuth2Flows -> Bool) -> (Step SecuritySchemeType OAuth2Flows -> Step SecuritySchemeType OAuth2Flows -> Bool) -> (Step SecuritySchemeType OAuth2Flows -> Step SecuritySchemeType OAuth2Flows -> Bool) -> (Step SecuritySchemeType OAuth2Flows -> Step SecuritySchemeType OAuth2Flows -> Step SecuritySchemeType OAuth2Flows) -> (Step SecuritySchemeType OAuth2Flows -> Step SecuritySchemeType OAuth2Flows -> Step SecuritySchemeType OAuth2Flows) -> Ord (Step SecuritySchemeType OAuth2Flows) Step SecuritySchemeType OAuth2Flows -> Step SecuritySchemeType OAuth2Flows -> Bool Step SecuritySchemeType OAuth2Flows -> Step SecuritySchemeType OAuth2Flows -> Ordering Step SecuritySchemeType OAuth2Flows -> Step SecuritySchemeType OAuth2Flows -> Step SecuritySchemeType OAuth2Flows forall a. Eq a -> (a -> a -> Ordering) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> a) -> (a -> a -> a) -> Ord a min :: Step SecuritySchemeType OAuth2Flows -> Step SecuritySchemeType OAuth2Flows -> Step SecuritySchemeType OAuth2Flows $cmin :: Step SecuritySchemeType OAuth2Flows -> Step SecuritySchemeType OAuth2Flows -> Step SecuritySchemeType OAuth2Flows max :: Step SecuritySchemeType OAuth2Flows -> Step SecuritySchemeType OAuth2Flows -> Step SecuritySchemeType OAuth2Flows $cmax :: Step SecuritySchemeType OAuth2Flows -> Step SecuritySchemeType OAuth2Flows -> Step SecuritySchemeType OAuth2Flows >= :: Step SecuritySchemeType OAuth2Flows -> Step SecuritySchemeType OAuth2Flows -> Bool $c>= :: Step SecuritySchemeType OAuth2Flows -> Step SecuritySchemeType OAuth2Flows -> Bool > :: Step SecuritySchemeType OAuth2Flows -> Step SecuritySchemeType OAuth2Flows -> Bool $c> :: Step SecuritySchemeType OAuth2Flows -> Step SecuritySchemeType OAuth2Flows -> Bool <= :: Step SecuritySchemeType OAuth2Flows -> Step SecuritySchemeType OAuth2Flows -> Bool $c<= :: Step SecuritySchemeType OAuth2Flows -> Step SecuritySchemeType OAuth2Flows -> Bool < :: Step SecuritySchemeType OAuth2Flows -> Step SecuritySchemeType OAuth2Flows -> Bool $c< :: Step SecuritySchemeType OAuth2Flows -> Step SecuritySchemeType OAuth2Flows -> Bool compare :: Step SecuritySchemeType OAuth2Flows -> Step SecuritySchemeType OAuth2Flows -> Ordering $ccompare :: Step SecuritySchemeType OAuth2Flows -> Step SecuritySchemeType OAuth2Flows -> Ordering $cp1Ord :: Eq (Step SecuritySchemeType OAuth2Flows) Ord, Int -> Step SecuritySchemeType OAuth2Flows -> ShowS [Step SecuritySchemeType OAuth2Flows] -> ShowS Step SecuritySchemeType OAuth2Flows -> String (Int -> Step SecuritySchemeType OAuth2Flows -> ShowS) -> (Step SecuritySchemeType OAuth2Flows -> String) -> ([Step SecuritySchemeType OAuth2Flows] -> ShowS) -> Show (Step SecuritySchemeType OAuth2Flows) forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a showList :: [Step SecuritySchemeType OAuth2Flows] -> ShowS $cshowList :: [Step SecuritySchemeType OAuth2Flows] -> ShowS show :: Step SecuritySchemeType OAuth2Flows -> String $cshow :: Step SecuritySchemeType OAuth2Flows -> String showsPrec :: Int -> Step SecuritySchemeType OAuth2Flows -> ShowS $cshowsPrec :: Int -> Step SecuritySchemeType OAuth2Flows -> ShowS Show)