2021-03-08 12:15:54 +00:00
|
|
|
<Route
|
|
|
|
@name={{routeName}}
|
2021-09-15 18:50:11 +00:00
|
|
|
as |route|>
|
2021-01-05 17:40:28 +00:00
|
|
|
|
2021-09-15 18:50:11 +00:00
|
|
|
{{! Add the a11y route announcer }}
|
|
|
|
<route.Announcer
|
|
|
|
@title="Consul"
|
|
|
|
/>
|
|
|
|
{{! Tell CSS what we have enabled }}
|
|
|
|
{{#if (can "use acls")}}
|
2020-12-09 09:22:01 +00:00
|
|
|
{{document-attrs class="has-acls"}}
|
|
|
|
{{/if}}
|
2021-09-15 18:50:11 +00:00
|
|
|
{{#if (can "use nspaces")}}
|
2020-12-09 09:22:01 +00:00
|
|
|
{{document-attrs class="has-nspaces"}}
|
|
|
|
{{/if}}
|
2021-09-15 18:50:11 +00:00
|
|
|
{{#if (can "use partitions")}}
|
|
|
|
{{document-attrs class="has-partitions"}}
|
|
|
|
{{/if}}
|
2021-01-05 17:40:28 +00:00
|
|
|
|
2021-09-15 18:50:11 +00:00
|
|
|
{{! Tell CSS about our theme }}
|
2021-01-05 17:40:28 +00:00
|
|
|
<DataSource
|
ui: Make it hard to not URLEncode DataSource srcs/URIs (#11117)
Our DataSource came in very iteratively, when we first started using it we specifically tried not to use it for things that would require portions of the @src="" attribute to be URL encoded (so things like service names couldn't be used, but dc etc would be fine). We then gradually added an easy way to url encode the @src="" attributes with a uri helper and began to use the DataSource component more and more. This meant that some DataSource usage continued to be used without our uri helper.
Recently we hit #10901 which was a direct result of us not encoding @src values/URIs (I didn't realise this was one of the places that required URL encoding) and not going back over things to finish things off once we had implemented our uri helper, resulting in ~half of the codebase using it and ~half of it not.
Now that almost all of the UI uses our DataSource component, this PR makes it even harder to not use the uri helper, by wrapping the string that it requires in a private URI class/object, that is then expected/asserted within the DataSource component/service. This means that as a result of this PR you cannot pass a plain string to the DataSource component without seeing an error in your JS console, which in turn means you have to use the uri helper, and it's very very hard to not URL encode any dynamic/user provided values, which otherwise could lead to bugs/errors similar to the one mentioned above.
The error that you see when you don't use the uri helper is currently a 'soft' dev time only error, but like our other functionality that produces a soft error when you mistakenly pass an undefined value to a uri, at some point soon we will make these hard failing "do not do this" errors.
Both of these 'soft error' DX features have been used this to great effect to implement our Admin Partition feature and these kind of things will minimize the amount of these types of bugs moving forwards in a preventative rather than curative manner. Hopefully these are the some of the kinds of things that get added to our codebase that prevent a multitude of problems and therefore are often never noticed/appreciated.
Additionally here we moved the remaining non-uri using DataSources to use uri (that were now super easy to find), and also fixed up a place where I noticed (due to the soft errors) where we were sometimes passing undefined values to a uri call.
The work here also led me to find another couple of non-important 'bugs' that I've PRed already separately, one of which is yet to be merged (#11105), hence the currently failing tests here. I'll rebase that once that PR is in and the tests here should then pass 🤞
Lastly, I didn't go the whole hog here to make DataSink also be this strict with its uri usage, there is a tiny bit more work on DataSink as a result of recently work, so I may (or may not) make DataSink equally as strict as part of that work in a separate PR.
2021-09-30 14:54:46 +00:00
|
|
|
@src={{uri 'settings://consul:theme'}}
|
2021-01-05 17:40:28 +00:00
|
|
|
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>
|
|
|
|
|
2021-09-15 18:50:11 +00:00
|
|
|
{{! If ACLs are enabled try get a token }}
|
|
|
|
{{#if (can "use acls")}}
|
|
|
|
<DataSource
|
ui: Make it hard to not URLEncode DataSource srcs/URIs (#11117)
Our DataSource came in very iteratively, when we first started using it we specifically tried not to use it for things that would require portions of the @src="" attribute to be URL encoded (so things like service names couldn't be used, but dc etc would be fine). We then gradually added an easy way to url encode the @src="" attributes with a uri helper and began to use the DataSource component more and more. This meant that some DataSource usage continued to be used without our uri helper.
Recently we hit #10901 which was a direct result of us not encoding @src values/URIs (I didn't realise this was one of the places that required URL encoding) and not going back over things to finish things off once we had implemented our uri helper, resulting in ~half of the codebase using it and ~half of it not.
Now that almost all of the UI uses our DataSource component, this PR makes it even harder to not use the uri helper, by wrapping the string that it requires in a private URI class/object, that is then expected/asserted within the DataSource component/service. This means that as a result of this PR you cannot pass a plain string to the DataSource component without seeing an error in your JS console, which in turn means you have to use the uri helper, and it's very very hard to not URL encode any dynamic/user provided values, which otherwise could lead to bugs/errors similar to the one mentioned above.
The error that you see when you don't use the uri helper is currently a 'soft' dev time only error, but like our other functionality that produces a soft error when you mistakenly pass an undefined value to a uri, at some point soon we will make these hard failing "do not do this" errors.
Both of these 'soft error' DX features have been used this to great effect to implement our Admin Partition feature and these kind of things will minimize the amount of these types of bugs moving forwards in a preventative rather than curative manner. Hopefully these are the some of the kinds of things that get added to our codebase that prevent a multitude of problems and therefore are often never noticed/appreciated.
Additionally here we moved the remaining non-uri using DataSources to use uri (that were now super easy to find), and also fixed up a place where I noticed (due to the soft errors) where we were sometimes passing undefined values to a uri call.
The work here also led me to find another couple of non-important 'bugs' that I've PRed already separately, one of which is yet to be merged (#11105), hence the currently failing tests here. I'll rebase that once that PR is in and the tests here should then pass 🤞
Lastly, I didn't go the whole hog here to make DataSink also be this strict with its uri usage, there is a tiny bit more work on DataSink as a result of recently work, so I may (or may not) make DataSink equally as strict as part of that work in a separate PR.
2021-09-30 14:54:46 +00:00
|
|
|
@src={{uri 'settings://consul:token'}}
|
2021-09-15 18:50:11 +00:00
|
|
|
@onchange={{action (mut token) value="data"}}
|
|
|
|
/>
|
|
|
|
{{/if}}
|
|
|
|
|
2021-10-11 15:03:59 +00:00
|
|
|
{{#if (not-eq route.currentName 'oauth-provider-debug')}}
|
|
|
|
|
2021-09-15 18:50:11 +00:00
|
|
|
{{! 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
|
|
|
|
)
|
2021-05-07 11:23:29 +00:00
|
|
|
}}
|
2021-09-15 18:50:11 +00:00
|
|
|
@onchange={{action (mut notfound) value="data"}}
|
|
|
|
/>
|
|
|
|
{{/if}}
|
|
|
|
|
|
|
|
{{! Make sure we guess and default to the right params when not found }}
|
|
|
|
{{#let
|
2021-11-17 15:59:26 +00:00
|
|
|
(if (can "use partitions") (or route.params.partition notfound.partition token.Partition '') '')
|
|
|
|
(if (can "use nspaces") (or route.params.nspace notfound.nspace token.Namespace '') '')
|
2021-09-22 17:26:36 +00:00
|
|
|
as |partition nspace|}}
|
2021-09-15 18:50:11 +00:00
|
|
|
|
|
|
|
{{! Make sure we have enough to show the app chrome}}
|
2021-09-22 17:26:36 +00:00
|
|
|
{{! 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 }}
|
2021-09-15 18:50:11 +00:00
|
|
|
{{#let
|
2021-10-26 18:26:04 +00:00
|
|
|
|
2021-09-22 17:26:36 +00:00
|
|
|
(or
|
|
|
|
|
2021-10-26 18:26:04 +00:00
|
|
|
(if nofound.dc
|
|
|
|
(object-at 0 (cached-model
|
|
|
|
'dc'
|
|
|
|
(hash
|
|
|
|
Name=notfound.dc
|
|
|
|
)
|
2021-09-22 17:26:36 +00:00
|
|
|
)
|
2021-10-26 18:26:04 +00:00
|
|
|
)
|
|
|
|
)
|
2021-09-22 17:26:36 +00:00
|
|
|
|
2021-10-26 18:26:04 +00:00
|
|
|
(object-at 0 (cached-model
|
|
|
|
'dc'
|
2021-09-22 17:26:36 +00:00
|
|
|
(hash
|
|
|
|
Name=route.params.dc
|
|
|
|
)
|
2021-10-26 18:26:04 +00:00
|
|
|
)
|
|
|
|
)
|
2021-09-22 17:26:36 +00:00
|
|
|
|
2021-10-26 18:26:04 +00:00
|
|
|
(hash
|
|
|
|
Name=(env "CONSUL_DATACENTER_LOCAL")
|
|
|
|
)
|
2021-09-22 17:26:36 +00:00
|
|
|
|
|
|
|
)
|
|
|
|
|
2021-09-15 18:50:11 +00:00
|
|
|
dcs.data
|
2021-09-22 17:26:36 +00:00
|
|
|
|
|
|
|
as |dc dcs|}}
|
2021-11-17 15:59:26 +00:00
|
|
|
{{#if (and (gt dc.Name.length 0) dcs)}}
|
2021-09-15 18:50:11 +00:00
|
|
|
|
|
|
|
{{! figure out our current DC and convert it to a model }}
|
|
|
|
<DataSource
|
|
|
|
@src={{uri '/${partition}/*/${dc}/datacenter/${name}'
|
|
|
|
(hash
|
2021-10-26 18:26:04 +00:00
|
|
|
dc=dc.Name
|
2021-09-15 18:50:11 +00:00
|
|
|
partition=partition
|
2021-10-26 18:26:04 +00:00
|
|
|
name=dc.Name
|
2021-09-15 18:50:11 +00:00
|
|
|
)
|
|
|
|
}}
|
|
|
|
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}}
|
2021-09-22 17:26:36 +00:00
|
|
|
</DataSource>
|
2021-09-15 18:50:11 +00:00
|
|
|
{{/let}}
|
UI V2 (#4086)
* Move settings to use the same service/route API as the rest of the app
* Put some ideas down for unit testing on adapters
* Favour `Model` over `Entity`
* Move away from using `reopen` to using Mixins
* Amend messages, comment/document some usage
* Make sure the returns are consistent in normalizePayload, also
Add some todo's in to remind me to think consider this further at a
later date. For example, is normalizePayload to be a hook or an
overridable method
* Start stripping back the HTML to semantics
* Use a variable rather than chaining
* Remove unused helpers
* Start picking through the new designs, start with listing pages
* First draft HTML for every page
* Making progress on the CSS
* Keep plugging away at the catalog css
* Looking at scrolling
* Wire up filtering
* Sort out filter counting, more or less done a few outstanding
* Start knocking the forms into shape
* Add in codemirror
* Keep moving forwards with the form like layouts
* Start looking at ACL editing page, add footer in
* Pull the filters back in, look at an autoresizer for scroll views
* First draft toggles
* 2nd draft healthcheck icons
* Tweak node healthcheck icons
* Looking at healthcheck detail icons
* Tweak the filter-bar and add selections to the in content tabs
* Add ACL create, pill-like acl type highlight
* Tweaking the main nav some more
* Working on the filter-bar and freetext-filter
* Masonry layout
* Stick with `checks` instead of healthy/unhealthy
* Fix up the filter numbers/counts
* Use the thead for a measure
* First draft tomography back in
* First draft DC dropdown
* Add a temporary create buttong to kv's
* Move KV and ACL to use a create page
* Move tags
* Run through old tests
* Injectable server
* Start adding test attributes
* Add some page objects
* More test attributes and pages
* Acl filter objects
* Add a page.. page object
* Clickable items in lists
* Add rest/spread babel plugin, remove mirage for now
* Add fix for ember-collection
* Keep track of acl filters
* ember-cli-page-object
* ember-test-selectors
* ui: update version of ui compile deps
* Update static assets
* Centralize radiogroup helper
* Rejig KV's and begin to clean it up
* Work around lack of Tags for the moment..
* Some little css tweaks and start to remove possibles
* Working on the dc page and incidentals
1. Sort the datacenter-picker list
2. Add a selected state to the datacenter-picker
3. Make dc an {Name: dc}
4. Add an env helper to get to 'env vars' from within templates
* Click outside stuff for the datacenter-picker, is-active on nav
* Make sure the dropdown CTA can be active
* Bump ember add pluralize helper
* Little try at sass based custom queries
* Rejig tablular collection so it deals with resizing, actions
1. WIP: start building actions dropdowns
2. Move tabular collection to deal with resizing to rule out differences
* First draft actions dropdowns
* Add ports, selectable IP's
* Flash messages, plus general cleanup/consistency
1. Add ember-cli-flash for flash messages
2. Move everything to get() instead of item.get
3. Spotted a few things that weren't consistent
* DOn't go lower than zero
* First draft vertical menu
* Missed a get, tweak dropmenu tick
* Big cleanup
1. this.get(), this.set() > get(), set()
2. assign > {...{}, ...{}}
3. Seperator > separator
* WIP: settings
* Moved things into a ui-v2 folder
* Decide on a way to do the settings page whilst maintaining the url + dc's
* Start some error pages
* Remove base64 polyfill
* Tie in settings, fix atob bug, tweak layout css
* Centralize confirmations into a component
* Allow switching between the old and new UI with the CONSUL_UI_BETA env var
Currently all the assets are packaged into a single AssetFS and a prefix is configured to switch between the two.
* Attempt at some updates to integrate the v2 ui build into the main infrastructure
* Add redirect to index.html for unknown paths
* Allow redictor to /index.html for new ui when using -ui-dir
* Take ACLs to the correct place on save
* First pass breadcrumbs
* Remove datacenter selector on the index page
* Tweak overall layout
* Make buttons 'resets'
* Tweak last DC stuff
* Validations plus kv keyname viewing tweaks
* Pull sessions back in
* Tweak the env vars to be more reusable
* Move isAnon to the view
* No items and disabled acl css
* ACL and KV details
1. Unauthorized page
2. Make sure the ACL is always selected when it needs it
3. Check record deletion with a changeset
* Few more acl tweaks/corrections
* Add no items view to node > services
* Tags for node > services
* Make sure we have tags
* Fix up the labels on the tomography graph
* Add node link (agent) to kv sessions
* Duplicate up `create` for KV 'root creation'
* Safety check for health checks
* Fix up the grids
* Truncate td a's, fix kv columns
* Watch for spaces in KV id's
* Move actions to their own mixins for now at least
* Link reset to settings incase I want to type it in
* Tweak error page
* Cleanup healthcheck icons in service listing
* Centralize errors and make getting back easier
* Nice numbers
* Compact buttons
* Some incidental css cleanups
* Use 'Key / Value' for root
* Tweak tomography layout
* Fix single healthcheck unhealthy resource
* Get loading screen ready
* Fix healthy healthcheck tick
* Everything in header starts white
* First draft loader
* Refactor the entire backend to use proper unique keys, plus..
1. Make unique keys form dc + slug (uid)
2. Fun with errors...
* Tweak header colors
* Add noopener noreferrer to external links
* Add supers to setupController
* Implement cloning, using ember-data...
* Move the more expensive down the switch order
* First draft empty record cleanup..
* Add the cusomt store test
* Temporarily use the htmlSafe prototype to remove the console warning
* Encode hashes in urls
* Go back to using title for errors for now
* Start removing unused bulma
* Lint
* WIP: Start looking at failing tests
* Remove single redirect test
* Finish off error message styling
* Add full ember-data cache invalidation to avoid stale data...
* Add uncolorable warning icons
* More info icon
* Rearrange single service, plus tag printing
* Logo
* No quotes
* Add a simple startup logo
* Tweak healthcheck statuses
* Fix border-color for healthchecks
* Tweak node tabs
* Catch 401 ACL errors and rethrow with the provided error message
* Remove old acl unauth and error routes
* Missed a super
* Make 'All' refer to number of checks, not services
* Remove ember-resizer, add autoprefixer
* Don't show tomography if its not worth it, viewify it more also
* Little model cleanup
* Chevrons
* Find a way to reliably set the class of html from the view
* Consistent html
* Make sure session id's are visible as long as possible
* Fix single service check count
* Add filters and searchs to the query string
* Don't remember the selected tab
* Change text
* Eror tweaking
* Use chevrons on all breadcrumbs even in kv's
* Clean up a file
* Tweak some messaging
* Makesure the footer overlays whats in the page
* Tweak KV errors
* Move json toggle over to the right
* feedback-dialog along with copy buttons
* Better confirmation dialogs
* Add git sha comment
* Same title as old UI
* Allow defaults
* Make sure value is a string
* WIP: Scrolling dropdowns/confirmations
* Add to kv's
* Remove set
* First pass trace
* Better table rows
* Pull over the hashi code editor styles
* Editor tweaks
* Responsive tabs
* Add number formatting to tomography
* Review whats left todo
* Lint
* Add a coordinate ember data triplet
* Bump in a v2.0.0
* Update old tests
* Get coverage working again
* Make sure query keys are also encoded
* Don't test console.error
* Unit test some more utils
* Tweak the size of the tabular collections
* Clean up gitignore
* Fix copy button rollovers
* Get healthcheck 'icon icons' onto the text baseline
* Tweak healthcheck padding and alignment
* Make sure commas kick in in rtt, probably never get to that
* Improve vertical menu
* Tweak dropdown active state to not have a bg
* Tweak paddings
* Search entire string not just 'startsWith'
* Button states
* Most buttons have 1px border
* More button tweaks
* You can only view kv folders
* CSS cleanup reduction
* Form input states and little cleanup
* More CSS reduction
* Sort checks by importance
* Fix click outside on datacenter picker
* Make sure table th's also auto calculate properly
* Make sure `json` isn't remembered in KV editing
* Fix recursive deletion in KV's
* Centralize size
* Catch updateRecord
* Don't double envode
* model > item consistency
* Action loading and ACL tweaks
* Add settings dependencies to acl tests
* Better loading
* utf-8 base64 encode/decode
* Don't hang off a prototype for htmlSafe
* Missing base64 files...
* Get atob/btoa polyfill right
* Shadowy rollovers
* Disabled button styling for primaries
* autofocuses only onload for now
* Fix footer centering
* Beginning of 'notices'
* Remove the isLocked disabling as we are letting you do what the API does
* Don't forget the documentation link for sessions
* Updates are more likely
* Use exported constant
* Dont export redirectFS and a few other PR updates
* Remove the old bootstrap config which was used for the old UI skin
* Use curlies for multiple properties
2018-05-10 18:52:53 +00:00
|
|
|
{{/if}}
|
2021-10-11 15:03:59 +00:00
|
|
|
{{else}}
|
|
|
|
{{! Routes with no main navigation }}
|
|
|
|
<Outlet
|
|
|
|
@name="application"
|
|
|
|
@model={{hash
|
|
|
|
user=(hash
|
|
|
|
token=token
|
|
|
|
)
|
|
|
|
}}
|
|
|
|
as |o|>
|
|
|
|
{{outlet}}
|
|
|
|
</Outlet>
|
|
|
|
{{/if}}
|
2021-03-08 12:15:54 +00:00
|
|
|
</Route>
|