Идём по киберследу: Анализ защищенности Active Directory c помощью утилиты BloodHound — страница 18 из 46

#E69717',

},

Дальше ищем строку

lowResPalette
и добавляем название метки и цвет. Этот параметр отвечает за отображение узлов в низком разрешении.

lowResPalette:{

colorScheme:{

User:'#17E625',

Computer:'#E67873',

Group:'#DBE617',

Domain:'#17E6B9',

OU:'#FFAA00',

GPO:'#7F72FD',

Base:'#E6E600',

LocalUser:'#E69717',

},

Сохраняем измененный файл.

Теперь переходим в директорию

src\js
и открываем на редактирование файл
utils.js
. В самом начале, в разделе
const labels = [
, добавляем новую метку после
Domain
.

const labels = [

'Base',

'Container',

'OU',

'GPO',

'User',

'Computer',

'Group',

'Domain',

'LocalUser',

Находим строку

export async function setSchema()
и в массив
label
добавляем название новой метки.

export async function setSchema() {

const luceneIndexProvider = "lucene+native-3.0"

let labels = ["User","Group", "Computer", "GPO", "OU",

"Domain", "Container", "Base", 
"LocalUser"
,

Сохраняем измененный файл.

Теперь нужно добавить метку, чтобы она отображалась на графе. Для этого переходим в директорию

components
и открываем файл
Graph.jsx.
Находим строку
switch (type)
и добавляем в нее код:

switch (type) {

case 'OU':

node.type_ou = true;

break;

case 'LocalUser':

node.type_localuser = true;

break;

}

Сохраняем измененный файл.

Для отображения метки в строке поиска нужно открыть файл

SearchRow.jsx,
который находится в директории
src\components\SearchContainer
. Находим строку
switch (type)
и после блока
Container
добавляем код:

switch (type) {

case 'Container':

icon.className = 'fa fa-box'

break
;

case 'LocalUser':

icon.className = 'fa fa-user';

break;

Сохраняем измененный файл.

Кроме отображения самой метки нужно добавить визуализацию свойств узла. В той же директории открываем файл

TabContainer.jsx
и добавим импорт вкладки после импорта
OuNodeData
, саму вкладку создадим позже:

import GpoNodeData from './Tabs/GPONodeData';

import OuNodeData from './Tabs/OUNodeData';

import LocalUserNodeData from './Tabs/LocalUserNodeData';

До нажатия на сам узел его свойства будут скрыты. Для этого в классе

TabContainer
находим строку
this.state
и добавляем строку:

class TabContainer extends Component {

constructor(props) {

super(props);

this.state = {

containerVisible: false,

localuserVisible: false,

Дальше нужно добавить обработку при нажатии на узел. Для этого находим строку

nodeClickHandler(type)
и добавляем код:

nodeClickHandler(type) {

} else if (type === 'GPO') {

this._gpoNodeClicked();

} else if (type === 'LocalUser') {

this._localuserNodeClicked();

Ниже находим изменение состояния видимости вкладки для каждой метки. Код начинается с

_labelNodeClicked
. Для локального пользователя код будет выглядеть следующим образом:

_ouNodeClicked() {

this.clearVisible()

this.setState({

ouVisible: true,

selected:2

});

}

_localuserNodeClicked() {

this.clearVisible()

this.setState({

localuserVisible: true,

selected:2

});

}

И ниже в функции отображения

render()
находим строку
NoNodeData
и добавляем следующий код:

render() {

visible={

!this.state.gpoVisible &&

!this.state.ouVisible &&

!this.state.localuserVisible &&

И еще ниже добавим отображение вкладки со свойствами для

LocalUserNodeData:

Сохраняем измененный файл.

Переходим в директорию

src\components\Spotlight
и открываем на редактирование файл
SpotlightRow.jsx.
В функции
render
находим строку
switch (this.props.nodeType)
, добавляем код:

render() {

let nodeIcon;

let parentIcon = '';

switch (this.props.nodeType) {

case 'GPO':

nodeIcon = 'fa fa-list';

break;

case 'LocalUser':

nodeIcon = 'fa fa-user';

break;

default:

nodeIcon = '';

break;

}

Ниже находим строку

switch (this.props.parentNodeType)
и добавляем отображение родительской иконки:

switch (this.props.parentNodeType) {

case 'GPO':

nodeIcon = 'fa fa-list';

break;

case 'LocalUser':

parentIcon = 'fa fa-user';

break;

default:

parentIcon = '';

break;

}

Сохраняем измененный файл.

В заключение осталось создать вкладку с отображением свойств для локального пользователя. Переходим в директорию

src\components\SearchContainer\Tabs
. Создадим копию файла
UserNodeData.jsx и назовем ее LocalUserNodeData.jsx