ca15998b51
* 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
163 lines
5 KiB
JavaScript
163 lines
5 KiB
JavaScript
import Adapter, {
|
|
REQUEST_CREATE,
|
|
REQUEST_UPDATE,
|
|
REQUEST_DELETE,
|
|
DATACENTER_KEY as API_DATACENTER_KEY,
|
|
} from './application';
|
|
import EmberError from '@ember/error';
|
|
import { PRIMARY_KEY, SLUG_KEY } from 'consul-ui/models/acl';
|
|
import { FOREIGN_KEY as DATACENTER_KEY } from 'consul-ui/models/dc';
|
|
import { PUT as HTTP_PUT } from 'consul-ui/utils/http/method';
|
|
import { OK as HTTP_OK, UNAUTHORIZED as HTTP_UNAUTHORIZED } from 'consul-ui/utils/http/status';
|
|
|
|
import makeAttrable from 'consul-ui/utils/makeAttrable';
|
|
const REQUEST_CLONE = 'cloneRecord';
|
|
export default Adapter.extend({
|
|
urlForQuery: function(query, modelName) {
|
|
// https://www.consul.io/api/acl.html#list-acls
|
|
return this.appendURL('acl/list', [], this.cleanQuery(query));
|
|
},
|
|
urlForQueryRecord: function(query, modelName) {
|
|
// https://www.consul.io/api/acl.html#read-acl-token
|
|
return this.appendURL('acl/info', [query.id], this.cleanQuery(query));
|
|
},
|
|
urlForCreateRecord: function(modelName, snapshot) {
|
|
// https://www.consul.io/api/acl.html#create-acl-token
|
|
return this.appendURL('acl/create', [], {
|
|
[API_DATACENTER_KEY]: snapshot.attr(DATACENTER_KEY),
|
|
});
|
|
},
|
|
urlForUpdateRecord: function(id, modelName, snapshot) {
|
|
// the id is in the payload, don't add it in here
|
|
// https://www.consul.io/api/acl.html#update-acl-token
|
|
return this.appendURL('acl/update', [], {
|
|
[API_DATACENTER_KEY]: snapshot.attr(DATACENTER_KEY),
|
|
});
|
|
},
|
|
urlForDeleteRecord: function(id, modelName, snapshot) {
|
|
// https://www.consul.io/api/acl.html#delete-acl-token
|
|
return this.appendURL('acl/destroy', [snapshot.attr(SLUG_KEY)], {
|
|
[API_DATACENTER_KEY]: snapshot.attr(DATACENTER_KEY),
|
|
});
|
|
},
|
|
urlForCloneRecord: function(modelName, snapshot) {
|
|
// https://www.consul.io/api/acl.html#clone-acl-token
|
|
return this.appendURL('acl/clone', [snapshot.attr(SLUG_KEY)], {
|
|
[API_DATACENTER_KEY]: snapshot.attr(DATACENTER_KEY),
|
|
});
|
|
},
|
|
urlForRequest: function({ type, snapshot, requestType }) {
|
|
switch (requestType) {
|
|
case 'cloneRecord':
|
|
return this.urlForCloneRecord(type.modelName, snapshot);
|
|
}
|
|
return this._super(...arguments);
|
|
},
|
|
clone: function(store, modelClass, id, snapshot) {
|
|
const params = {
|
|
store: store,
|
|
type: modelClass,
|
|
id: id,
|
|
snapshot: snapshot,
|
|
requestType: 'cloneRecord',
|
|
};
|
|
// _requestFor is private... but these methods aren't, until they disappear..
|
|
const request = {
|
|
method: this.methodForRequest(params),
|
|
url: this.urlForRequest(params),
|
|
headers: this.headersForRequest(params),
|
|
data: this.dataForRequest(params),
|
|
};
|
|
// TODO: private..
|
|
return this._makeRequest(request);
|
|
},
|
|
dataForRequest: function(params) {
|
|
const data = this._super(...arguments);
|
|
switch (params.requestType) {
|
|
case REQUEST_UPDATE:
|
|
case REQUEST_CREATE:
|
|
return data.acl;
|
|
}
|
|
return data;
|
|
},
|
|
methodForRequest: function(params) {
|
|
switch (params.requestType) {
|
|
case REQUEST_DELETE:
|
|
case REQUEST_CREATE:
|
|
case REQUEST_CLONE:
|
|
return HTTP_PUT;
|
|
}
|
|
return this._super(...arguments);
|
|
},
|
|
isCreateRecord: function(url) {
|
|
return (
|
|
url.pathname ===
|
|
this.parseURL(this.urlForCreateRecord('acl', makeAttrable({ [DATACENTER_KEY]: '' }))).pathname
|
|
);
|
|
},
|
|
isCloneRecord: function(url) {
|
|
return (
|
|
url.pathname ===
|
|
this.parseURL(
|
|
this.urlForCloneRecord(
|
|
'acl',
|
|
makeAttrable({ [SLUG_KEY]: this.slugFromURL(url), [DATACENTER_KEY]: '' })
|
|
)
|
|
).pathname
|
|
);
|
|
},
|
|
isUpdateRecord: function(url) {
|
|
return (
|
|
url.pathname ===
|
|
this.parseURL(this.urlForUpdateRecord(null, 'acl', makeAttrable({ [DATACENTER_KEY]: '' })))
|
|
.pathname
|
|
);
|
|
},
|
|
handleResponse: function(status, headers, payload, requestData) {
|
|
let response = payload;
|
|
if (status === HTTP_OK) {
|
|
const url = this.parseURL(requestData.url);
|
|
switch (true) {
|
|
case response === true:
|
|
response = {
|
|
[PRIMARY_KEY]: this.uidForURL(url),
|
|
};
|
|
break;
|
|
case this.isQueryRecord(url):
|
|
response = {
|
|
...response[0],
|
|
...{
|
|
[PRIMARY_KEY]: this.uidForURL(url),
|
|
},
|
|
};
|
|
break;
|
|
case this.isUpdateRecord(url):
|
|
case this.isCreateRecord(url):
|
|
case this.isCloneRecord(url):
|
|
response = {
|
|
...response,
|
|
...{
|
|
[PRIMARY_KEY]: this.uidForURL(url, response[SLUG_KEY]),
|
|
},
|
|
};
|
|
break;
|
|
default:
|
|
response = response.map((item, i, arr) => {
|
|
return {
|
|
...item,
|
|
...{
|
|
[PRIMARY_KEY]: this.uidForURL(url, item[SLUG_KEY]),
|
|
},
|
|
};
|
|
});
|
|
}
|
|
} else if (status === HTTP_UNAUTHORIZED) {
|
|
const e = new EmberError();
|
|
e.code = status;
|
|
e.message = payload;
|
|
throw e;
|
|
}
|
|
return this._super(status, headers, response, requestData);
|
|
},
|
|
});
|