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.
* 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
* 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
* AppSettingsPage at /admin/settings
* Adds App Settings to site nav items
* SMTP not configured warning
* Creates AppConfigForm
* Avatar preview
* API client to update app config
* Creates OrgLogoIcon component
* Hide username/password when no auth type
* Creates new PackComposerPage at /packs/new
* Creates PackForm component
* Adds PackForm to PackComposerPage
* Creates QueriesListItem
* Creates QueriesList
* Creates QueriesListWrapper
* Get all queries when the Packs Composer Page loads
* Form HOC handles updates to formData prop
* Creates form to configure scheduled queries
* QueriesListWrapper renders ConfigurePackQueryForm
* search queries input filters queries list
* Empty state text
* create pack when user submits the new pack form
* Adds Edit pack page to /packs/:pack_id/edit
* API client - get scheduled queries for a pack
* API client - create scheduled query
* Redux config for scheduled queries
* Remove scheduled queries from packs
* Add labels to pack on create
* Add disabled state to the select targets dropdown
* Adds edit route and pushes to new route on edit click
* Adds cancel button to edit pack form
* Adds Checkbox that selects all scheduled queries in table
* Adds campaigns to redux state
* Update campaign with web socket data
* Destroy the current campaign when creating a new one
* close the socket when leaving the page or creating a new campaign
* Allow stopping a running query
* Update campaign with query results
* Adds QueryResultsTable
* Display flash message if campaign can't be created
* Allow filtering query results
* Adds filter icon
* Prevent query text updates when the query is running
* initial scaffolding
* pack info sidebar
* fixing the merge of the routes
* Remove radium from pack info sidepanel
* lint
* cards!
* redux entity config
* pack interface
* wiring up redux with fake dev data
* Add description attribute to packs
* move redux to top level page component to isolate data fetching
* initial scaffolding of all packs table
* adding redux entities back
* minimal
* alpha order in packs.js
* no newlines in HTML
* onclick handler to function on component class
* alpha order in router
* alpha order in paths.js
* no newline in side panel
* removing input field
* lint fixes
* Host side panel
* Query form handles labels
* QueryComposer handles labels
* ManageHostsPage add label transitions
* Stop preventing default on click outside of ellipsis menu
* get labels from API
* use real label data in hosts side panel
* create label on label form submit
* adds platform dropdown
* Validate query text
* Label header
* validate presence of query text
* API call to create queries
* Add queries to redux
* create query when query form is submitted
* Redirect to ShowQueryPage after creating query
* Removes theme dropdown and NewQuery component header
* Extract NewQueryPage component state to redux state
* Pass logic down to NewQuery component as props
* Changes NewQuery component name to QueryComposer
* Render NewQueryPage for /queries/:id route
* Update ReduxConfig for loading a single resource
* QueryPage tests
* Get query when the query page loads
* catch errors when query is invalid
* Renames UpdateQueryForm to QueryForm to re-usability
* Changes InputField to a controlled component
* Always render the Query Form on Query Pages
* Api client get targets
* Allow entities to parse full api response
* responsive nav style fixes
* Add disabled prop to button
* Add targets from API to target select input
* customize target rendering in input field
* call API on select target input change
* display # hosts selected
* Adds new icons to icon font
* Customize select targets input options
* Update directory structure
* restructure select targets input
* Adds hosts to labels
* Host modal styles
* ShadowBoxInput component
* TargetInfoModal for labels
* consistent entity response in api client stubs
* Fix bug removing multiple hosts in target select input
* change Button component to use css classes
* Updates eslint packages
* Expected parentheses around arrow function argument having a body with curly braces
* Prop type `object` is forbidden
* Visible, non-interactive elements should not have mouse or keyboard event listeners
* Prop type is defined but not used
* Unexpected use of file extension "jsx"
* Expected 'this' to be used by class method
* HTML entities must be escaped
* Prevent default behavior on more options button click