diff --git a/etc/dev-start.sh b/etc/dev-start.sh index 60ddcb6..19d868e 100755 --- a/etc/dev-start.sh +++ b/etc/dev-start.sh @@ -12,6 +12,7 @@ export INBUCKET_SMTP_STOREDOMAINS="important.local" export INBUCKET_WEB_TEMPLATECACHE="false" export INBUCKET_WEB_COOKIEAUTHKEY="not-secret" export INBUCKET_WEB_UIDIR="ui/dist" +#export INBUCKET_WEB_MONITORVISIBLE="false" export INBUCKET_STORAGE_TYPE="file" export INBUCKET_STORAGE_PARAMS="path:/tmp/inbucket" export INBUCKET_STORAGE_RETENTIONPERIOD="3h" diff --git a/ui/src/Data/AppConfig.elm b/ui/src/Data/AppConfig.elm index d86dbe9..b18701f 100644 --- a/ui/src/Data/AppConfig.elm +++ b/ui/src/Data/AppConfig.elm @@ -1,4 +1,4 @@ -module Data.AppConfig exposing (AppConfig, decoder) +module Data.AppConfig exposing (AppConfig, decoder, default) import Json.Decode as D import Json.Decode.Pipeline as P @@ -13,3 +13,8 @@ decoder : D.Decoder AppConfig decoder = D.succeed AppConfig |> P.required "monitor-visible" D.bool + + +default : AppConfig +default = + AppConfig True diff --git a/ui/src/Data/Session.elm b/ui/src/Data/Session.elm index 4e2d72b..c90fe91 100644 --- a/ui/src/Data/Session.elm +++ b/ui/src/Data/Session.elm @@ -13,6 +13,7 @@ module Data.Session exposing ) import Browser.Navigation as Nav +import Data.AppConfig as AppConfig exposing (AppConfig) import Html exposing (Html) import Json.Decode as D import Json.Decode.Pipeline exposing (..) @@ -28,6 +29,7 @@ type alias Session = , flash : Maybe Flash , routing : Bool , zone : Time.Zone + , config : AppConfig , persistent : Persistent } @@ -43,13 +45,14 @@ type alias Persistent = } -init : Nav.Key -> Url -> Persistent -> Session -init key location persistent = +init : Nav.Key -> Url -> AppConfig -> Persistent -> Session +init key location config persistent = { key = key , host = location.host , flash = Nothing , routing = True , zone = Time.utc + , config = config , persistent = persistent } @@ -61,6 +64,7 @@ initError key location error = , flash = Just (Flash "Initialization failed" [ ( "Error", error ) ]) , routing = True , zone = Time.utc + , config = AppConfig.default , persistent = Persistent [] } diff --git a/ui/src/Main.elm b/ui/src/Main.elm index 7bf5b04..87d36cc 100644 --- a/ui/src/Main.elm +++ b/ui/src/Main.elm @@ -52,7 +52,7 @@ init configValue location key = session = case D.decodeValue configDecoder configValue of Ok config -> - Session.init key location config.session + Session.init key location config.appConfig config.session Err error -> Session.initError key location (D.errorToString error) @@ -255,8 +255,20 @@ changeRouteTo route model = |> updateWith Mailbox MailboxMsg model Route.Monitor -> - Monitor.init session - |> updateWith Monitor MonitorMsg model + if session.config.monitorVisible then + Monitor.init session + |> updateWith Monitor MonitorMsg model + + else + let + flash = + { title = "Unknown route requested" + , table = [ ( "Error", "Monitor disabled by configuration." ) ] + } + in + ( applyToModelSession (Session.showFlash flash) model + , Cmd.none + ) Route.Status -> Status.init session diff --git a/ui/src/Views/Page.elm b/ui/src/Views/Page.elm index 4a58cbe..4044e2f 100644 --- a/ui/src/Views/Page.elm +++ b/ui/src/Views/Page.elm @@ -44,7 +44,11 @@ frame controls session page modal content = [ ul [ class "navbar", attribute "role" "navigation" ] [ li [ class "navbar-brand" ] [ a [ Route.href Route.Home ] [ text "@ inbucket" ] ] - , navbarLink page Route.Monitor [ text "Monitor" ] + , if session.config.monitorVisible then + navbarLink page Route.Monitor [ text "Monitor" ] + + else + text "" , navbarLink page Route.Status [ text "Status" ] , navbarRecent page controls , li [ class "navbar-mailbox" ]