Created 3 new components: <OsqueryOptionsPage /> , <OsqueryOptionsForm />, and <YamlAce />
The <OsqueryOptionsPage /> component is rendered at the new route /admin/osquery. The user navigates to this route by selecting the "Osquery Options" sub-navigation in the admin dropdown menu.
On the Osquery Options page, the user is presented with a ACE editor filled with the current osquery options. The current osquery options are retrieved from the serve when the page component mounts. These current osquery options are stored in the osquery slice of state.
Clicking "UPDATE OPTIONS" will trigger a form submit and hit the v1/kolide/spec/osquery_options endpoint if the yaml is valid. If the yaml is not valid, an error message is presented to the user with details on what the error is and where it occurred. If the yaml is valid, the osquery options will be updated even if the options haven't change.
Updated the 500 page component to render a "SHOW ERROR" button.
This button is only rendered if the errors slice of the state contains an error and the base property exists. Otherwise, the 500 page will not render this button because there is no error message to show the user.
Created a errors500 reducer and actions to update the state tree when a 500 error occurs. When 500 error occurs, the errors slice of state is updated with the error object. When the 500 page component unmounts the error object is removed from state.
Demo: https://www.loom.com/share/b87c4aee42274e7bb553e703d3f950c6
This commit takes advantage of the existing pagination APIs in the Fleet
server, and provides additional APIs to support pagination in the web
UI. Doing this dramatically reduces the response sizes for requests from
the UI, and limits the performance impact of UI clients on the Fleet and
MySQL servers.
Fleet used significant resources storing the full network interface
information for each host. This data was unused, except to get the
IP and MAC of the primary interface. With these changes, only those
pieces of data are stored.
- Calculate and store primary IP and MAC
- Remove transaction for storing full interfaces
- Update targets search to use new IP and MAC columns
- Update frontend to use new new columns
Almost two years ago, we began referring to the project as Fleet, but there are
many occurences of the term "Kolide" throughout the UI and documentation. This
PR attempts to clear up those uses where it is easily achievable.
The term "Kolide" is used throughout the code as well, but modifying this would
be more likely to introduce bugs.
- Hosts with unexpected CPU brand string render properly
- Other unexpected host CPU information renders properly
- Add tests for host CPU parsing
Fixes#1604
Closes issue #1456 This PR adds a single sign on option to the login form, exposes single sign on to the end user, and allows an admin user to set single sign on configuration options.
Closes#1502. This PR adds support for SSO to the new user creation process. An admin now has the option to select SSO when creating a new user. When the confirmation form is submitted, the user is automatically authenticated with the IDP, and if successful, is redirected to the Kolide home page. Password authentication, password change and password reset are not allowed for an SSO user.
Closes issue #1388. The problem here is that previously, the reset button loaded a hard coded list of default options into the component state, instead of the proper behavior which is to reset the options to default values on the back end, and then load them back into the redux store. This PR adds a ResetOptions endpoint on the server, and wires up the UI so that it triggers the endpoint, then loads the default options from the backend server.
This fixes a bug in which the frontend expected the entity ID to be returned in the response body of a deletion request. Because the API does not do this (and we don't want to make it do this), the ID needs to be made available for updating the UI after the request returns.
Fixes#1398
* Isolate each API entity
* Improve code structure in API client and request mocks
* Standardize on a request mock structure
* Use helper for creating request mocks
* Adds Request class to handle API requests
Use the [SockJS Protocol](https://github.com/sockjs/sockjs-protocol) to handle
bidirectional communication instead of plain websockets. This allows
distributed queries to function in situations in which they previously failed
(Load balancers not supporting websockets, issues with Safari and self-signed
certs, etc.).
Also includes fixes to the JS message handling logic where slightly different
message delivery semantics (when using XHR) were exposing bugs.
Fixes#1241, #1327.
* API client for patching a scheduled query
* Change select to check on ScheduledQueriesLists
* Clicking a scheduled query list item selects the scheduled query
* Helpers to format scheduled queries for client/server
* Allow updating a scheduled query
* Form cancel button
* Adds hosts_count attribute to campaign with success/fail/total
* Displays error % in Progress Bar component
* Indicate failed hosts on Query Results table
* Changes ProgressBar background to silver
* API client to create and get an app license
* Fixes unhandled promise rejection errors in redux config
* License Page and Form
* Adds getLicense action
* Adds License key area to App Settings Form
* Use license.token instead of license.license
* Implement API client
* Adds key icon to License Form
* Adds License Success component
* Render License Success on License Page when there is a license
* Adds persistent flash actions and reducer to redux
* Adds nag message middleware
* Moves FlashMessage component to flash_message directory
* Adds Persistent Flash component
* Renders Persistent Flash component from Core Layout
* Adds Kyle's styles
* Change license validation message
* Finishing touches for app config form license area
* Handle revoked licenses
* License Page hits setup endpoint
* Display server errors on license form
* Changes 0 allowed hosts to unlimited
* Trims JWT token before sending to the server
* GET setup page after submitting license
* Update admin API client
* updateAdmin redux action
* Changes UserManagementPage actions for update admin
* Enable user API client
* Enable user redux actions
* Change UserManagementPage to dispatch enable user actions
* Connect change password to API
* Allow form field values to be an array
* Send the server host and label ids on create
* Get and display the targets in a pack
* Adds target_type to labels and hosts
* Allow updating a pack’s targets as well as name and description
* Adds select targets dropdown to edit pack page
* Adds targets to dropdown when pack is edited