39 lines
1.4 KiB
Haskell
39 lines
1.4 KiB
Haskell
|
|
module Main where
|
||
|
|
|
||
|
|
import qualified Data.Set as Set
|
||
|
|
import MiniAccessPolicy.Policy
|
||
|
|
( ApprovalReport (ApprovalReport)
|
||
|
|
, Environment (Production, Staging)
|
||
|
|
, accessMatrix
|
||
|
|
, buildApprovalReport
|
||
|
|
, ownershipIndex
|
||
|
|
, parseRequest
|
||
|
|
, renderReport
|
||
|
|
)
|
||
|
|
import System.Exit (die)
|
||
|
|
|
||
|
|
main :: IO ()
|
||
|
|
main =
|
||
|
|
case
|
||
|
|
( parseRequest "api:production:platform,security"
|
||
|
|
, parseRequest "frontend:production:frontend,platform"
|
||
|
|
) of
|
||
|
|
( Right allowedRequest
|
||
|
|
, Right deniedRequest
|
||
|
|
) ->
|
||
|
|
case
|
||
|
|
( buildApprovalReport ownershipIndex accessMatrix allowedRequest
|
||
|
|
, buildApprovalReport ownershipIndex accessMatrix deniedRequest
|
||
|
|
) of
|
||
|
|
( Right allowedReport@(ApprovalReport "api" Production required supplied missing unexpected True)
|
||
|
|
, Right deniedReport@(ApprovalReport "frontend" Production _ _ _ deniedUnexpected False)
|
||
|
|
) | required == Set.fromList ["platform", "security"]
|
||
|
|
&& missing == Set.empty
|
||
|
|
&& unexpected == Set.empty
|
||
|
|
&& deniedUnexpected == Set.fromList ["frontend"]
|
||
|
|
&& renderReport deniedReport
|
||
|
|
== "frontend -> production, required platform, supplied frontend/platform, missing none, unexpected frontend, allowed no" ->
|
||
|
|
putStrLn "test passed"
|
||
|
|
_ -> die "unexpected Map/Set modeling result"
|
||
|
|
_ -> die "unexpected access policy parse result"
|