569c92c10c
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).
175 lines
3.8 KiB
Handlebars
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>
|