module Ecluse.Core.Rules.Types (
Rule (..),
ruleName,
PrecededRule (..),
defaultPrecedence,
atDefaultPrecedence,
defaultAllowIfOlderThanPrecedence,
defaultAllowIfRemediatesCvePrecedence,
defaultAllowScopePrecedence,
defaultAllowByIdentityPrecedence,
defaultDenyInstallTimeExecutionPrecedence,
defaultDenyByIdentityPrecedence,
EvalContext (..),
Reason,
RuleResult (..),
FailureAlignment (..),
Decision (..),
Transience (..),
RetryAfter (..),
) where
import Data.Time (NominalDiffTime, UTCTime)
import Ecluse.Core.Package (Scope)
data Rule
=
AllowScope Scope
|
AllowIfOlderThan NominalDiffTime
|
DenyInstallTimeExecution
|
DenyByIdentity Text
|
AllowByIdentity Text
|
AllowIfRemediatesCve
deriving stock (Rule -> Rule -> Bool
(Rule -> Rule -> Bool) -> (Rule -> Rule -> Bool) -> Eq Rule
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Rule -> Rule -> Bool
== :: Rule -> Rule -> Bool
$c/= :: Rule -> Rule -> Bool
/= :: Rule -> Rule -> Bool
Eq, Int -> Rule -> ShowS
[Rule] -> ShowS
Rule -> String
(Int -> Rule -> ShowS)
-> (Rule -> String) -> ([Rule] -> ShowS) -> Show Rule
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> Rule -> ShowS
showsPrec :: Int -> Rule -> ShowS
$cshow :: Rule -> String
show :: Rule -> String
$cshowList :: [Rule] -> ShowS
showList :: [Rule] -> ShowS
Show)
ruleName :: Rule -> Text
ruleName :: Rule -> Text
ruleName = \case
AllowScope{} -> Text
"AllowScope"
AllowIfOlderThan{} -> Text
"AllowIfOlderThan"
Rule
DenyInstallTimeExecution -> Text
"DenyInstallTimeExecution"
DenyByIdentity{} -> Text
"DenyByIdentity"
AllowByIdentity{} -> Text
"AllowByIdentity"
Rule
AllowIfRemediatesCve -> Text
"AllowIfRemediatesCve"
data PrecededRule = PrecededRule
{ PrecededRule -> Int
rulePrecedence :: Int
, PrecededRule -> Rule
prRule :: Rule
}
deriving stock (PrecededRule -> PrecededRule -> Bool
(PrecededRule -> PrecededRule -> Bool)
-> (PrecededRule -> PrecededRule -> Bool) -> Eq PrecededRule
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: PrecededRule -> PrecededRule -> Bool
== :: PrecededRule -> PrecededRule -> Bool
$c/= :: PrecededRule -> PrecededRule -> Bool
/= :: PrecededRule -> PrecededRule -> Bool
Eq, Int -> PrecededRule -> ShowS
[PrecededRule] -> ShowS
PrecededRule -> String
(Int -> PrecededRule -> ShowS)
-> (PrecededRule -> String)
-> ([PrecededRule] -> ShowS)
-> Show PrecededRule
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> PrecededRule -> ShowS
showsPrec :: Int -> PrecededRule -> ShowS
$cshow :: PrecededRule -> String
show :: PrecededRule -> String
$cshowList :: [PrecededRule] -> ShowS
showList :: [PrecededRule] -> ShowS
Show)
defaultPrecedence :: Rule -> Int
defaultPrecedence :: Rule -> Int
defaultPrecedence = \case
AllowIfOlderThan{} -> Int
defaultAllowIfOlderThanPrecedence
Rule
AllowIfRemediatesCve -> Int
defaultAllowIfRemediatesCvePrecedence
AllowScope{} -> Int
defaultAllowScopePrecedence
AllowByIdentity{} -> Int
defaultAllowByIdentityPrecedence
Rule
DenyInstallTimeExecution -> Int
defaultDenyInstallTimeExecutionPrecedence
DenyByIdentity{} -> Int
defaultDenyByIdentityPrecedence
atDefaultPrecedence :: Rule -> PrecededRule
atDefaultPrecedence :: Rule -> PrecededRule
atDefaultPrecedence Rule
r = Int -> Rule -> PrecededRule
PrecededRule (Rule -> Int
defaultPrecedence Rule
r) Rule
r
defaultAllowIfOlderThanPrecedence :: Int
defaultAllowIfOlderThanPrecedence :: Int
defaultAllowIfOlderThanPrecedence = Int
100
defaultAllowIfRemediatesCvePrecedence :: Int
defaultAllowIfRemediatesCvePrecedence :: Int
defaultAllowIfRemediatesCvePrecedence = Int
150
defaultAllowScopePrecedence :: Int
defaultAllowScopePrecedence :: Int
defaultAllowScopePrecedence = Int
200
defaultAllowByIdentityPrecedence :: Int
defaultAllowByIdentityPrecedence :: Int
defaultAllowByIdentityPrecedence = Int
250
defaultDenyInstallTimeExecutionPrecedence :: Int
defaultDenyInstallTimeExecutionPrecedence :: Int
defaultDenyInstallTimeExecutionPrecedence = Int
300
defaultDenyByIdentityPrecedence :: Int
defaultDenyByIdentityPrecedence :: Int
defaultDenyByIdentityPrecedence = Int
400
newtype EvalContext = EvalContext
{ EvalContext -> UTCTime
ctxNow :: UTCTime
}
deriving stock (EvalContext -> EvalContext -> Bool
(EvalContext -> EvalContext -> Bool)
-> (EvalContext -> EvalContext -> Bool) -> Eq EvalContext
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: EvalContext -> EvalContext -> Bool
== :: EvalContext -> EvalContext -> Bool
$c/= :: EvalContext -> EvalContext -> Bool
/= :: EvalContext -> EvalContext -> Bool
Eq, Int -> EvalContext -> ShowS
[EvalContext] -> ShowS
EvalContext -> String
(Int -> EvalContext -> ShowS)
-> (EvalContext -> String)
-> ([EvalContext] -> ShowS)
-> Show EvalContext
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> EvalContext -> ShowS
showsPrec :: Int -> EvalContext -> ShowS
$cshow :: EvalContext -> String
show :: EvalContext -> String
$cshowList :: [EvalContext] -> ShowS
showList :: [EvalContext] -> ShowS
Show)
type Reason = Text
data RuleResult
=
Allow Reason
|
Deny Reason
|
NoDecision Reason
|
Unavailable Transience FailureAlignment Reason
deriving stock (RuleResult -> RuleResult -> Bool
(RuleResult -> RuleResult -> Bool)
-> (RuleResult -> RuleResult -> Bool) -> Eq RuleResult
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: RuleResult -> RuleResult -> Bool
== :: RuleResult -> RuleResult -> Bool
$c/= :: RuleResult -> RuleResult -> Bool
/= :: RuleResult -> RuleResult -> Bool
Eq, Int -> RuleResult -> ShowS
[RuleResult] -> ShowS
RuleResult -> String
(Int -> RuleResult -> ShowS)
-> (RuleResult -> String)
-> ([RuleResult] -> ShowS)
-> Show RuleResult
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> RuleResult -> ShowS
showsPrec :: Int -> RuleResult -> ShowS
$cshow :: RuleResult -> String
show :: RuleResult -> String
$cshowList :: [RuleResult] -> ShowS
showList :: [RuleResult] -> ShowS
Show)
data FailureAlignment
=
FailDeny
|
FailNoDecision
deriving stock (FailureAlignment -> FailureAlignment -> Bool
(FailureAlignment -> FailureAlignment -> Bool)
-> (FailureAlignment -> FailureAlignment -> Bool)
-> Eq FailureAlignment
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: FailureAlignment -> FailureAlignment -> Bool
== :: FailureAlignment -> FailureAlignment -> Bool
$c/= :: FailureAlignment -> FailureAlignment -> Bool
/= :: FailureAlignment -> FailureAlignment -> Bool
Eq, Int -> FailureAlignment -> ShowS
[FailureAlignment] -> ShowS
FailureAlignment -> String
(Int -> FailureAlignment -> ShowS)
-> (FailureAlignment -> String)
-> ([FailureAlignment] -> ShowS)
-> Show FailureAlignment
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> FailureAlignment -> ShowS
showsPrec :: Int -> FailureAlignment -> ShowS
$cshow :: FailureAlignment -> String
show :: FailureAlignment -> String
$cshowList :: [FailureAlignment] -> ShowS
showList :: [FailureAlignment] -> ShowS
Show)
data Decision
=
Admitted Text Reason
|
Blocked Text Reason
|
BlockedByDefault [Reason]
|
Undecidable Transience Reason
deriving stock (Decision -> Decision -> Bool
(Decision -> Decision -> Bool)
-> (Decision -> Decision -> Bool) -> Eq Decision
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Decision -> Decision -> Bool
== :: Decision -> Decision -> Bool
$c/= :: Decision -> Decision -> Bool
/= :: Decision -> Decision -> Bool
Eq, Int -> Decision -> ShowS
[Decision] -> ShowS
Decision -> String
(Int -> Decision -> ShowS)
-> (Decision -> String) -> ([Decision] -> ShowS) -> Show Decision
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> Decision -> ShowS
showsPrec :: Int -> Decision -> ShowS
$cshow :: Decision -> String
show :: Decision -> String
$cshowList :: [Decision] -> ShowS
showList :: [Decision] -> ShowS
Show)
data Transience
=
WillResolve (Maybe RetryAfter)
|
WontResolve
deriving stock (Transience -> Transience -> Bool
(Transience -> Transience -> Bool)
-> (Transience -> Transience -> Bool) -> Eq Transience
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Transience -> Transience -> Bool
== :: Transience -> Transience -> Bool
$c/= :: Transience -> Transience -> Bool
/= :: Transience -> Transience -> Bool
Eq, Int -> Transience -> ShowS
[Transience] -> ShowS
Transience -> String
(Int -> Transience -> ShowS)
-> (Transience -> String)
-> ([Transience] -> ShowS)
-> Show Transience
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> Transience -> ShowS
showsPrec :: Int -> Transience -> ShowS
$cshow :: Transience -> String
show :: Transience -> String
$cshowList :: [Transience] -> ShowS
showList :: [Transience] -> ShowS
Show)
newtype RetryAfter = RetryAfter Int
deriving stock (RetryAfter -> RetryAfter -> Bool
(RetryAfter -> RetryAfter -> Bool)
-> (RetryAfter -> RetryAfter -> Bool) -> Eq RetryAfter
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: RetryAfter -> RetryAfter -> Bool
== :: RetryAfter -> RetryAfter -> Bool
$c/= :: RetryAfter -> RetryAfter -> Bool
/= :: RetryAfter -> RetryAfter -> Bool
Eq, Eq RetryAfter
Eq RetryAfter =>
(RetryAfter -> RetryAfter -> Ordering)
-> (RetryAfter -> RetryAfter -> Bool)
-> (RetryAfter -> RetryAfter -> Bool)
-> (RetryAfter -> RetryAfter -> Bool)
-> (RetryAfter -> RetryAfter -> Bool)
-> (RetryAfter -> RetryAfter -> RetryAfter)
-> (RetryAfter -> RetryAfter -> RetryAfter)
-> Ord RetryAfter
RetryAfter -> RetryAfter -> Bool
RetryAfter -> RetryAfter -> Ordering
RetryAfter -> RetryAfter -> RetryAfter
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
$ccompare :: RetryAfter -> RetryAfter -> Ordering
compare :: RetryAfter -> RetryAfter -> Ordering
$c< :: RetryAfter -> RetryAfter -> Bool
< :: RetryAfter -> RetryAfter -> Bool
$c<= :: RetryAfter -> RetryAfter -> Bool
<= :: RetryAfter -> RetryAfter -> Bool
$c> :: RetryAfter -> RetryAfter -> Bool
> :: RetryAfter -> RetryAfter -> Bool
$c>= :: RetryAfter -> RetryAfter -> Bool
>= :: RetryAfter -> RetryAfter -> Bool
$cmax :: RetryAfter -> RetryAfter -> RetryAfter
max :: RetryAfter -> RetryAfter -> RetryAfter
$cmin :: RetryAfter -> RetryAfter -> RetryAfter
min :: RetryAfter -> RetryAfter -> RetryAfter
Ord, Int -> RetryAfter -> ShowS
[RetryAfter] -> ShowS
RetryAfter -> String
(Int -> RetryAfter -> ShowS)
-> (RetryAfter -> String)
-> ([RetryAfter] -> ShowS)
-> Show RetryAfter
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> RetryAfter -> ShowS
showsPrec :: Int -> RetryAfter -> ShowS
$cshow :: RetryAfter -> String
show :: RetryAfter -> String
$cshowList :: [RetryAfter] -> ShowS
showList :: [RetryAfter] -> ShowS
Show)