wazuh-kibana-app/server/controllers/wazuh-hosts.js
Adri Valle 5f34eff198 Migrate API entries from .wazuh index to wazuh.yml (#1811)
* Removed "Pattern" and "First use" sections from Settings

* Simplified API entries table in Settings

* Started "API is down" guide

* Started "Add API" guide

* Loading new components for Settings

* Adapt Settings views for using new components

* Migrate hosts and remove .wazuh index

* Prevent duplicate hosts

* Improve regex

* Cleaning settings.js controller (in progress)

* Prevent try to add again if .wazuh was not deleted

* Add function to check if is busy

* Migrate the cluster_info and extensions to the wazuh-registry

* Replace wazuh-version by wazuh-registry

* Add endpoint to get the host from wazuh-hosts.yml

* Get the APIs from the wazuh-hosts.yml

* Updates the cluster info in the registry when checking connection

* Remove console.error

* Check api connection from wazuh-host data

* Try to connect to another API in case the default fails

* Adapt settings-wizard and api-count

* Adapt wazuh-api.js controller for using wazuh-hosts.yml

* Prevent undefined results

* Clean initialize

* Remove wazuh-api-elastic routes and controllers

* Remove addApiProps

* Change config.yml by wazuh.yml

* Replace config.yml in the kibana plugin helper

* Delete wazuh-api-elastic tests

* Check for orphan registry entries

* Check manager connection before setting as default

* Prevent error toaster when there is any api entry

* Prevent errors when any api is reachable

* Check for new apis and their connection

* Prevent error when update registry of undefined

* Prevent error when no cluster_info

* Remove console.log

* Change state by props

* Fix settings-wizard

* Fix when joinning hosts and registry

* Check for new API entries

* Close add api component

* Remove await

* Improve checks for new apis

* Test if API is down in wazuh-api

* Check down APIs

* Api is down component finish

* Transform hosts in the backend

* Fix key

* Adapt removeOrphanentries

* Adapt settings-wizard

* Improve api-is-down component

* Change  the way to display the helpers components

* Check APIs status when get them

* Remove console.log

* Check manager sets the status to the API entry

* Prevent create wazuh-registry.json without hosts

* FIx extensions

* Add panel

* Change style for wazuh hosts

* Show add api component from the table

* Refresh API entries

* Update wazuh-hosts

* Api is down table loading effect

* Show API is down when accessing to settings if any API is up

* Update cluster info in the settings wizard

* Change color

* Remove wazuh-hosts.yml

* Remove hosts from configuration

* Fix \n in the migration

* Fix api-count

* Fix typo

* Fix API wizard

* Fix example in getting started guide

* Fix typos

* Refresh hosts in api-is-down component

* Set default in props

* Fix API count

* Iterates the api entries to set one as default

* Fix component unmount

* Fix flick

* Fix when refresh and all entries and the yml is corrupt

* Improve handler error when getting error in the yml parser

* Adapt monitoring

* Allow unsigned certs

* Fix when there is not stored api - health check

* Fix when any api entry could be select

* Warning when set an API as default

* Send to settings when achieve connect with an API when trying set as default

* Try to set others API entries

* Preven duplicate hosts: in wazuh.yml

* Improve when stored api is not reachable handler

* Fix typo

* Added ID and the capability to search in the table

* Fix input style

* Fix typo

* Do pararell requests

* Fix when checking entry

* Add cheking spinner while checking api connection

* Spinner while checking in api-is-down component

* Use for instead of forEach

* Change spinner by message while refreshing entries

* Add a spinner by each entry while checking it

* Show the reason why wazuh is down

* Improve message from error 3099

* Add capability to copy to the clipboard the error
2019-10-09 12:13:14 +02:00

112 lines
3.4 KiB
JavaScript

/*
* Wazuh app - Class for Wazuh-API functions
* Copyright (C) 2015-2019 Wazuh, Inc.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* Find more information about this on the LICENSE file.
*/
import { ManageHosts } from '../lib/manage-hosts';
import { UpdateRegistry } from '../lib/update-registry';
import { log } from '../../server/logger';
import { ErrorResponse } from './error-response';
export class WazuhHostsCtrl {
constructor() {
this.manageHosts = new ManageHosts();
this.updateRegistry = new UpdateRegistry();
}
/**
* This get all hosts entries in the wazuh.yml and the related info in the wazuh-registry.json
* @param {Object} req
* @param {Object} reply
* API entries or ErrorResponse
*/
async getHostsEntries(req, reply, removePassword = true) {
try {
const hosts = await this.manageHosts.getHosts(removePassword);
const registry = await this.updateRegistry.getHosts();
const result = this.joinHostRegistry(hosts, registry, removePassword);
return result;
} catch (error) {
log('wazuh-hosts:getHostsEntries', error.message || error);
const errorResponse = reply ? ErrorResponse(error.message || error, 2001, 500, reply) : error;
return errorResponse;
}
}
/**
* Joins the hosts with the related information in the registry
* @param {Object} hosts
* @param {Object} registry
*/
joinHostRegistry(hosts, registry, removePassword = true) {
try {
const joined = [];
hosts.forEach(h => {
const id = Object.keys(h)[0];
const api = Object.assign(h[id], {id: id});
const host = Object.assign(api, registry[id]);
if (removePassword) delete host.password;
joined.push(host);
});
return joined;
} catch (error) {
throw new Error(error);
}
}
/**
* This update an API hostname
* @param {Object} req
* @param {Object} reply
* Status response or ErrorResponse
*/
async updateClusterInfo(req, reply) {
try {
const id = req.params.id;
await this.updateRegistry.updateClusterInfo(id, req.payload.cluster_info);
log(
'wazuh-hosts:updateClusterInfo',
`API entry ${req.params.id} hostname updated`,
'debug'
);
return { statusCode: 200, message: 'ok' };
} catch (error) {
log('wazuh-hosts:updateClusterInfo', error.message || error);
return ErrorResponse(
`Could not update data in wazuh-registry.json due to ${error.message || error}`,
2012,
500,
reply
);
}
}
/**
* Remove the orphan host entries in the registry
* @param {Object} req
* @param {Object} reply
*/
async removeOrphanEntries(req, reply) {
try {
log('wazuh-hosts:cleanRegistry', 'Cleaning registry', 'debug');
if (!req.payload && !req.payload.entries) throw new Error('No entries given to check');
await this.updateRegistry.removeOrphanEntries(req.payload.entries)
return { statusCode: 200, message: 'ok' };
} catch (error) {
log('wazuh-hosts:cleanRegistry', error.message || error);
return ErrorResponse(
`Could not clean entries in the wazuh-registry.json due to ${error.message || error}`,
2013,
500,
reply
);
}
}
}