-
Notifications
You must be signed in to change notification settings - Fork 4.4k
/
application.hbs
145 lines (131 loc) · 5.01 KB
/
application.hbs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
{{!
Copyright (c) HashiCorp, Inc.
SPDX-License-Identifier: BUSL-1.1
}}
<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}}
{{! Listen out for blocking query/client setting changes }}
<DataSource
@src={{uri 'settings://consul:client'}}
@onchange={{route-action 'onClientChanged'}}
/>
{{! Tell CSS about our theme }}
<DataSource @src={{uri 'settings://consul:theme'}} as |source|>
{{#each-in source.data as |key value|}}
{{#if (and value (includes 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')}}
{{! until we get to the dc route we don't know any permissions }}
{{! as we don't know the dc, any inital permission based }}
{{! redirects are in the dc.show route}}
{{! 2022-04-15: Temporarily reverting the services page to the default }}
{{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 '')
''
)
(if (can 'use nspaces') (or route.params.nspace notfound.nspace token.Namespace '') '')
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
(if nofound.dc (object-at 0 (cached-model 'dc' (hash Name=notfound.dc))))
(object-at 0 (cached-model 'dc' (hash Name=route.params.dc)))
(hash Name=(env 'CONSUL_DATACENTER_LOCAL'))
)
dcs.data
as |dc dcs|
}}
{{#if (and (gt dc.Name.length 0) dcs)}}
{{! figure out our current DC and convert it to a model }}
<DataSource
@src={{uri
'/${partition}/*/${dc}/datacenter-cache/${name}'
(hash dc=dc.Name partition=partition name=dc.Name)
}}
as |dc|
>
{{#if dc.data}}
<DataSource @src={{uri '/${partition}/*/${dc}/hcp-link' (hash dc=dc.Name partition=partition name=dc.Name) }} @open={{true}} as |hcpLink|>
<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>
</DataSource>
{{/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>