open-consul/ui/packages/consul-ui/app/templates/application.hbs
John Cowen 569c92c10c
ui: Improve dev-time SSO/OIDC visibility (#11248)
This commit tries to make the development experience of working on our OIDC support a little more realistic, essentially by creating our own OIDC provider in our application (only during development builds). You can still provide a real OIDC provider to work with via our dev time environment/cookie variables as before, just now we default to the behaviour in this commit. Overall this makes it much easier to verify our OIDC support in the UI, and also opens up avenues for us to be able to test more scenarios that we couldn't before (for example not only successful logins, but also erroneous, potentially with multiple error reasons).
2021-10-11 16:03:59 +01:00

175 lines
3.8 KiB
Handlebars

<Route
@name={{routeName}}
as |route|>
{{! Add the a11y route announcer }}
<route.Announcer
@title="Consul"
/>
{{! Tell CSS what we have enabled }}
{{#if (can "use acls")}}
{{document-attrs class="has-acls"}}
{{/if}}
{{#if (can "use nspaces")}}
{{document-attrs class="has-nspaces"}}
{{/if}}
{{#if (can "use partitions")}}
{{document-attrs class="has-partitions"}}
{{/if}}
{{! Tell CSS about our theme }}
<DataSource
@src={{uri 'settings://consul:theme'}}
as |source|>
{{#each-in source.data as |key value|}}
{{#if (and value (contains key (array "color-scheme" "contrast")))}}
{{document-attrs class=(concat 'prefers-' key '-' value)}}
{{/if}}
{{/each-in}}
</DataSource>
{{! If ACLs are enabled try get a token }}
{{#if (can "use acls")}}
<DataSource
@src={{uri 'settings://consul:token'}}
@onchange={{action (mut token) value="data"}}
/>
{{/if}}
{{#if (not-eq route.currentName 'oauth-provider-debug')}}
{{! redirect if we aren't on a URL with dc information }}
{{#if (eq route.currentName 'index')}}
{{did-insert (route-action 'replaceWith' 'dc.services.index'
(hash
dc=(env 'CONSUL_DATACENTER_LOCAL')
)
)}}
{{else}}
{{! If we are notfound, guess the params we need }}
{{#if (eq route.currentName 'notfound')}}
<DataSource
@src={{uri '/*/*/*/notfound/${path}'
(hash
path=route.params.notfound
)
}}
@onchange={{action (mut notfound) value="data"}}
/>
{{/if}}
{{! Make sure we guess and default to the right params when not found }}
{{#let
(if (can "use partitions") (or route.params.partition notfound.partition token.Partition 'default') 'default')
(if (can "use nspaces") (or route.params.nspace notfound.nspace token.Namespace 'default') 'default')
as |partition nspace|}}
{{! Make sure we have enough to show the app chrome}}
{{! Don't show anything until we have a list of DCs }}
<DataSource
@src={{uri '/*/*/*/datacenters'}}
as |dcs|>
{{! Once we have a list of DCs make sure the DC we are asking for exists }}
{{! If not use the DC that the UI is running in }}
{{#let
(or
(get (object-at 0 (cached-model
'dc'
(hash
Name=notfound.dc
)
)) 'Name')
(get (object-at 0 (cached-model
'dc'
(hash
Name=route.params.dc
)
)) 'Name')
(env "CONSUL_DATACENTER_LOCAL")
)
dcs.data
as |dc dcs|}}
{{#if (and (gt dc.length 0) dcs nspace partition)}}
{{! figure out our current DC and convert it to a model }}
<DataSource
@src={{uri '/${partition}/*/${dc}/datacenter/${name}'
(hash
dc=dc
partition=partition
name=dc
)
}}
as |dc|>
{{#if dc.data}}
<HashicorpConsul
id="wrapper"
@dcs={{dcs}}
@dc={{dc.data}}
@partition={{partition}}
@nspace={{nspace}}
@user={{hash
token=token
}}
@onchange={{action "reauthorize"}}
as |consul|>
{{#if error}}
{{! If we got an error from anything, show an error page }}
<AppError
@error={{error}}
@login={{consul.login.open}}
/>
{{else}}
{{! Otherwise show the rest of the app}}
<Outlet
@name="application"
@model={{hash
app=consul
user=(hash
token=token
)
dc=dc.data
dcs=dcs
}}
as |o|>
{{outlet}}
</Outlet>
{{! loading component for when we need it}}
<Consul::Loader
class="view-loader"
/>
{{/if}}
</HashicorpConsul>
{{/if}}
</DataSource>
{{/if}}
{{/let}}
</DataSource>
{{/let}}
{{/if}}
{{else}}
{{! Routes with no main navigation }}
<Outlet
@name="application"
@model={{hash
user=(hash
token=token
)
}}
as |o|>
{{outlet}}
</Outlet>
{{/if}}
</Route>