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"