Skip to content

Commit

Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add compatibility with OpenSearch 2.11.0 (#31) (#35)
Browse files Browse the repository at this point in the history
* Bump version Security Dashboards Plugin 2.9.0.0 (#21)

* Upgrade to version 2.8.0 of Security Dashboards Plugin (#20)

* Patch actions and workflows. Skip integration tests that fail (#4)

* Change plugin name in actions and workflows

* Patch install-dashboards action

* Change jest config path

* Skip tests

---------




* Change Wazuh logo and titles (#3)

* Change Wazuh logo and titles

* Don't force custom logo to have 100% width

* Add comment

* Fix lint

* Fix prettier

* Update snapshots

---------





* Disable tenant popup (#5)



* Replace readme (#16)

* Replace readme

* Replace Opensearch to Wazuh

* Update README.md



---------



* Add GitHub workflow for automated build  (#15)

* Manual build

* Workflow for automated build

* Update .github/workflows/dev-environment.yml



---------




* Create codeql.yml



* Revert changes in cypress-test.yml

* Revert changes in integration-test.yml

* Fix integration test

* Fix cypress test tenancy disabled

---------







* Skip overview page test

* Skip test for issue

* Skip test for issue

---------







* Fix home image and lint

* Fix lint

* Fix snapshot

* Fix integration test

* Revert selector

---------

Signed-off-by: Ian Yenien Serrano <[email protected]>
Signed-off-by: Álex Ruiz <[email protected]>
Co-authored-by: Álex Ruiz <[email protected]>
Co-authored-by: Federico Rodriguez <[email protected]>
3 people authored Dec 22, 2023

Partially verified

This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
We cannot verify signatures from co-authors, and some of the co-authors attributed to this commit require their commits to be signed.
1 parent 5def2a4 commit eebb0fe
Showing 21 changed files with 357 additions and 87 deletions.
19 changes: 11 additions & 8 deletions .github/actions/install-dashboards/action.yml
Original file line number Diff line number Diff line change
@@ -5,6 +5,9 @@ inputs:
plugin_name:
description: 'The the name of the plugin to use, such as security-dashboards-plugin'
required: true
app_reference:
description: 'The reference to the app to use, such as main, v1.13, etc.'
required: true

outputs:
dashboards-directory:
@@ -29,8 +32,8 @@ runs:
- uses: actions/checkout@v2
with:
path: OpenSearch-Dashboards
repository: opensearch-project/OpenSearch-Dashboards
ref: 'main'
repository: wazuh/wazuh-dashboard
ref: ${{ inputs.app_reference }}
fetch-depth: 0

- uses: actions/checkout@v2
@@ -44,12 +47,12 @@ runs:
working-directory: ${{ steps.determine-plugin-directory.outputs.plugin-directory }}
shell: bash

- id: branch-switch-if-possible
continue-on-error: true # Defaults onto main if the branch switch doesn't work
if: ${{ steps.osd-version.outputs.osd-version }}
run: git checkout ${{ steps.osd-version.outputs.osd-version }} || git checkout ${{ steps.osd-version.outputs.osd-x-version }}
working-directory: ./OpenSearch-Dashboards
shell: bash
# - id: branch-switch-if-possible
# continue-on-error: true # Defaults onto main if the branch switch doesn't work
# if: ${{ steps.osd-version.outputs.osd-version }}
# run: git checkout ${{ steps.osd-version.outputs.osd-version }} || git checkout ${{ steps.osd-version.outputs.osd-x-version }}x
# working-directory: ./OpenSearch-Dashboards
# shell: bash

- id: tool-versions
run: |
19 changes: 19 additions & 0 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# This workflow builds a production-ready package when a tag is created.
#
# This workflow is based on the `dev-environment` workflow.

name: Build

on:
push:
tags:
- 'v*'
jobs:
build:
name: Build app package (auto)
uses: ./.github/workflows/dev-environment.yml
with:
reference: ${{ github.ref_name }}
command: 'yarn build'
artifact_name: 'wazuh-security-dashboards-plugin-${{ github.ref_name }}'
artifact_path: './wazuh-security-plugin/build'
77 changes: 77 additions & 0 deletions .github/workflows/codeql.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
# For most projects, this workflow file will not need changing; you simply need
# to commit it to your repository.
#
# You may wish to alter this file to override the set of languages analyzed,
# or to provide custom queries or build logic.
#
# ******** NOTE ********
# We have attempted to detect the languages in your repository. Please check
# the `language` matrix defined below to confirm you have the correct set of
# supported CodeQL languages.
#
name: "CodeQL"

on:
push:
branches: [ "main", "[0-9].[0-9]", "[0-9].x" ]
pull_request:
# The branches below must be a subset of the branches above
branches: [ "main" ]
schedule:
- cron: '00 8 * * 5'
workflow_dispatch:

jobs:
analyze:
name: Analyze
runs-on: ${{ (matrix.language == 'swift' && 'macos-latest') || 'ubuntu-latest' }}
permissions:
actions: read
contents: read
security-events: write

strategy:
fail-fast: false
matrix:
language: [ 'javascript' ]
# CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ]
# Use only 'java' to analyze code written in Java, Kotlin or both
# Use only 'javascript' to analyze code written in JavaScript, TypeScript or both
# Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support

steps:
- name: Checkout repository
uses: actions/checkout@v3

# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@v2
with:
languages: ${{ matrix.language }}
# If you wish to specify custom queries, you can do so here or in a config file.
# By default, queries listed here will override any specified in a config file.
# Prefix the list here with "+" to use these queries and those in the config file.

# For more details on CodeQL's query packs, refer to: https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs
# queries: security-extended,security-and-quality


# Autobuild attempts to build any compiled languages (C/C++, C#, Go, or Java).
# If this step fails, then you should remove it and run the build manually (see below)
- name: Autobuild
uses: github/codeql-action/autobuild@v2

# ℹ️ Command-line programs to run using the OS shell.
# 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun

# If the Autobuild fails above, remove it and uncomment the following three lines.
# modify them (or add more) to build your code if your project, please refer to the EXAMPLE below for guidance.

# - run: |
# echo "Run, Build Application using script"
# ./location_of_script_within_repo/buildscript.sh

- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v2
with:
category: "/language:${{matrix.language}}"
1 change: 1 addition & 0 deletions .github/workflows/cypress-test-tenancy-disabled.yml
Original file line number Diff line number Diff line change
@@ -56,6 +56,7 @@ jobs:
uses: ./.github/actions/install-dashboards
with:
plugin_name: security-dashboards-plugin
app_reference: ${{ vars.WZD_REF }}

- name: Configure and Run OpenSearch Dashboards with Cypress Test Cases
run: |
1 change: 1 addition & 0 deletions .github/workflows/cypress-test.yml
Original file line number Diff line number Diff line change
@@ -56,6 +56,7 @@ jobs:
uses: ./.github/actions/install-dashboards
with:
plugin_name: security-dashboards-plugin
app_reference: ${{ vars.WZD_REF }}

- name: Configure and Run OpenSearch Dashboards with Cypress Test Cases
run: |
91 changes: 91 additions & 0 deletions .github/workflows/dev-environment.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
# This workflow downloads the source code at the given git reference
# (branch, tag or commit), an sets up an environment (Kibana or OpenSearch)
# to run this code and a command (build, test, ...).
#
# This workflow is used as a base for other workflows.

name: Base workflow - Environment

on:
workflow_call:
inputs:
reference:
required: true
type: string
default: master
description: Source code reference (branch, tag or commit SHA).
command:
required: true
type: string
default: 'yarn build'
description: Command to run in the environment
docker_run_extra_args:
type: string
default: ''
description: Additional paramaters for the docker run command.
required: false
artifact_name:
type: string
default: ''
description: Artifact name (will be automatically suffixed with .zip)
required: false
artifact_path:
type: string
default: ''
description: Folder to include in the archive.
required: false
notify_jest_coverage_summary:
type: boolean
default: false
required: false

jobs:
# Deploy the plugin in a development environment and run a command
# using a pre-built Docker image, hosted in Quay.io.
deploy_and_run_command:
name: Deploy and run command
runs-on: ubuntu-latest
steps:
- name: Step 01 - Download the plugin's source code
uses: actions/checkout@v3
with:
ref: ${{ inputs.reference }}
path: wazuh-security-plugin

# Fix source code ownership so the internal user of the Docker
# container is also owner.
- name: Step 02 - Change code ownership
run: sudo chown 1000:1000 -R wazuh-security-plugin;

- name: Step 03 - Set up the environment and run the command
run: |
# Read the platform version from the package.json file
echo "Reading the platform version from the package.json...";
platform_version=$(jq -r '.opensearchDashboards.version | select(. != null)' wazuh-security-plugin/package.json);
echo "Plugin platform version: $platform_version";
# Up the environment and run the command
docker run -t --rm \
-e OPENSEARCH_DASHBOARDS_VERSION=${platform_version} \
-v `pwd`/wazuh-security-plugin:/home/node/kbn/plugins/wazuh-security-plugin \
${{ inputs.docker_run_extra_args }} \
quay.io/wazuh/osd-dev:${platform_version} \
bash -c '
yarn config set registry https://registry.yarnpkg.com;
cd /home/node/kbn/plugins/wazuh-security-plugin && yarn && ${{ inputs.command }};
'
- name: Step 04 - Upload artifact to GitHub
if: ${{ inputs.artifact_name && inputs.artifact_path }}
uses: actions/upload-artifact@v3
with:
name: ${{ inputs.artifact_name }}
path: ${{ inputs.artifact_path }}

- name: Step 05 - Upload coverage results to GitHub
if: ${{ inputs.notify_jest_coverage_summary && github.event_name == 'pull_request' }}
uses: AthleticNet/[email protected]
with:
token: ${{ secrets.GITHUB_TOKEN }}
path: ./wazuh-security-plugin/target/test-coverage/coverage-summary.json
title: "Code coverage (Jest)"
3 changes: 2 additions & 1 deletion .github/workflows/integration-test.yml
Original file line number Diff line number Diff line change
@@ -69,7 +69,8 @@ jobs:
- id: install-dashboards
uses: ./.github/actions/install-dashboards
with:
plugin_name: security-dashboards-plugin
plugin_name: wazuh-security-dashboards-plugin
app_reference: ${{ vars.WZD_REF }}

- name: Start Dashboards in background
run: node scripts/build_opensearch_dashboards_platform_plugins.js
27 changes: 27 additions & 0 deletions .github/workflows/manual-build.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
# This workflow builds a production-ready package from the given Git reference.
# Any branch, tag or commit SHA existing in the origin can be used.
#
# This workflow is based on the `dev-environment` workflow.

name: Manual build

on:
workflow_dispatch:
inputs:
reference:
required: true
type: string
default: master
description: Source code reference (branch, tag or commit SHA)

jobs:
# Build an app package from the given source code reference.
build:
name: Build app package
uses: ./.github/workflows/dev-environment.yml
with:
reference: ${{ github.event.inputs.reference }}
command: 'yarn build'
artifact_name: 'wazuh-security-dashboards-plugin-${{ github.event.inputs.reference }}.zip'
artifact_path: './wazuh-security-plugin/build'
secrets: inherit
5 changes: 3 additions & 2 deletions .github/workflows/unit-test.yml
Original file line number Diff line number Diff line change
@@ -8,7 +8,7 @@ jobs:
strategy:
fail-fast: false
matrix:
os: [ ubuntu-latest , windows-latest, macos-latest ]
os: [ubuntu-latest, windows-latest, macos-latest]
runs-on: ${{ matrix.os }}

steps:
@@ -22,7 +22,8 @@ jobs:
- id: install-dashboards
uses: ./.github/actions/install-dashboards
with:
plugin_name: security-dashboards-plugin
plugin_name: wazuh-security-dashboards-plugin
app_reference: ${{ vars.WZD_REF }}

- name: Run lint
run: yarn lint
34 changes: 16 additions & 18 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,31 +1,32 @@
[![Unit tests](https://github.com/opensearch-project/security-dashboards-plugin/workflows/Unit%20Tests/badge.svg?branch=main)](https://github.com/opensearch-project/security-dashboards-plugin/actions)[![Integration tests](https://github.com/opensearch-project/security-dashboards-plugin/workflows/Integration%20Tests/badge.svg?branch=main)](https://github.com/opensearch-project/security-dashboards-plugin/actions)[![codecov](https://codecov.io/gh/opensearch-project/security-dashboards-plugin/branch/main/graphs/badge.svg)](https://github.com/opensearch-project/security-dashboards-plugin)
<div style="text-align:center">
<img src="https://wazuh.com/uploads/2022/05/Logo-blogpost.png"/>
</div>

<img src="https://opensearch.org/assets/brand/SVG/Logo/opensearch_logo_default.svg" height="64px"/>
# Wazuh Security Dashboards Plugin

# OpenSearch Dashboards Security Plugin
Wazuh Security Dashboards Plugin is a fork of the OpenSearch Dashboards Security Plugin which incorporate changes to make it easier to use for Wazuh users. Our aim is to contribute back any work not tied specifically to Wazuh.

This plugin for OpenSearch Dashboards adds a configuration management UI for the OpenSearch Security features, as well as authentication, session management and multi-tenancy support to your secured cluster.
This plugin for Wazuh Dashboard adds a configuration management UI for the Wazuh Security features, as well as authentication, session management and multi-tenancy support to your secured cluster.

- [Features](#features)
- [Installation](#installation)
- [Contributing](#contributing)
- [Getting Help](#getting-help)
- [Code of Conduct](#code-of-conduct)
- [Security](#security)
- [License](#license)
- [Copyright](#copyright)

## Features

* OpenSearch Dashboards authentication for OpenSearch
* OpenSearch Dashboards session management
* OpenSearch Security configuration UI
* Multi-tenancy support for OpenSearch Dashboards
* OpenSearch audit logging configuration UI
* Wazuh Dashboard authentication for OpenSearch
* Wazuh Dashboard session management
* Wazuh Security configuration UI
* Multi-tenancy support for Wazuh Dashboard
* Wazuh audit logging configuration UI

## Installation

The OpenSearch Dashboards Security Plugin comes bundled by default as part of the OpenSearch Dashboards distribution. Please refer to the [installation guide](https://opensearch.org/docs/latest/dashboards/install/index/) and [technical documentation](https://opensearch.org/docs/latest/security-plugin/index/) for detailed information on installing and configuring the OpenSearch Security Plugin.
The Wazuh Security Dashboards Plugin comes bundled by default as part of the Wazuh Dashboards distribution. Please refer to the [installation guide](https://documentation.wazuh.com/current/installation-guide/index.html).

## Contributing

@@ -35,20 +36,17 @@ See [developer guide](DEVELOPER_GUIDE.md) and [how to contribute to this project

If you find a bug, or have a feature request, please don't hesitate to open an issue in this repository.

For more information, see [project website](https://opensearch.org/) and [documentation](https://opensearch.org/docs/latest). If you need help and are unsure where to open an issue, try [forums](https://discuss.opendistrocommunity.dev/).

## Code of Conduct

This project has adopted the [Amazon Open Source Code of Conduct](CODE_OF_CONDUCT.md). For more information see the [Code of Conduct FAQ](https://aws.github.io/code-of-conduct-faq), or contact [[email protected]](mailto:[email protected]) with any additional questions or comments.
For more information, see [project website](https://wazuh.com/) and [documentation](https://documentation.wazuh.com/current/index.html). If you need help and are unsure where to open an [issue](https://github.com/wazuh/wazuh-security-dashboards-plugin/issues).

## Security

If you discover a potential security issue in this project we ask that you notify AWS/Amazon Security via our [vulnerability reporting page](http://aws.amazon.com/security/vulnerability-reporting/). Please do **not** create a public GitHub issue.
If you discover a potential security issue in this project we ask that you notify AWS/Amazon Security via our [vulnerability reporting page](https://github.com/wazuh/wazuh-security-dashboards-plugin/issues/new/choose). Please do **not** create a public GitHub issue.

## License

This code is licensed under the Apache 2.0 License.

## Copyright

Copyright OpenSearch Contributors. See [NOTICE](NOTICE.txt) for details.
- Copyright OpenSearch Contributors. See [NOTICE](NOTICE.txt) for details.
- Copyright Wazuh, Inc.
2 changes: 1 addition & 1 deletion public/apps/account/account-app.tsx
Original file line number Diff line number Diff line change
@@ -96,7 +96,7 @@ export async function setupTopNavButton(coreStart: CoreStart, config: ClientConf
}
}

setShouldShowTenantPopup(shouldShowTenantPopup);
setShouldShowTenantPopup(false);

coreStart.chrome.navControls.registerRight({
// Pin to rightmost, since newsfeed plugin is using 1000, here needs a number > 1000
4 changes: 2 additions & 2 deletions public/apps/account/test/account-app.test.tsx
Original file line number Diff line number Diff line change
@@ -105,14 +105,14 @@ describe('Account app', () => {
});
});

it('Should show tenant selection popup when neither securitytenant in url nor saved tenant', (done) => {
it('Should not show tenant selection popup', (done) => {
(getSavedTenant as jest.Mock).mockReturnValueOnce(null);

setupTopNavButton(mockCoreStart, mockConfig as any);

process.nextTick(() => {
expect(getSavedTenant).toBeCalledTimes(1);
expect(setShouldShowTenantPopup).toBeCalledWith(true);
expect(setShouldShowTenantPopup).toBeCalledWith(false);
done();
});
});
9 changes: 5 additions & 4 deletions public/apps/login/login-page.tsx
Original file line number Diff line number Diff line change
@@ -28,6 +28,7 @@ import {
} from '@elastic/eui';
import { CoreStart } from '../../../../../src/core/public';
import { ClientConfigType } from '../../types';
import defaultBrandImage from '../../assets/ui/wazuh_logo.svg';
import { validateCurrentPassword } from '../../utils/login-utils';
import {
ANONYMOUS_AUTH_LOGIN,
@@ -253,23 +254,23 @@ export function LoginPage(props: LoginPageDeps) {
};

// TODO: Get brand image from server config
// Don't force custom logo to have 100% width. It should be handled in the svg properties if needed. (Removed fullWidth in the image)
return (
<EuiListGroup className="login-wrapper">
{props.config.ui.basicauth.login.showbrandimage && (
<EuiImage
size="fullWidth"
alt=""
url={props.config.ui.basicauth.login.brandimage || props.chrome.logos.OpenSearch.url}
url={props.config.ui.basicauth.login.brandimage || defaultBrandImage}
/>
)}
<EuiSpacer size="s" />
<EuiText size="m" textAlign="center">
{props.config.ui.basicauth.login.title || 'Log in to OpenSearch Dashboards'}
{props.config.ui.basicauth.login.title || ''}
</EuiText>
<EuiSpacer size="s" />
<EuiText size="s" textAlign="center">
{props.config.ui.basicauth.login.subtitle ||
'If you have forgotten your username or password, contact your system administrator.'}
{props.config.ui.basicauth.login.subtitle || ''}
</EuiText>
<EuiSpacer size="s" />
<EuiForm component="form">
20 changes: 6 additions & 14 deletions public/apps/login/test/__snapshots__/login-page.test.tsx.snap
Original file line number Diff line number Diff line change
@@ -366,26 +366,22 @@ exports[`Login page renders renders with default value: string 1`] = `
<EuiImage
alt=""
size="fullWidth"
url="/ui/logos/opensearch_on_light.svg"
url="test-file-stub"
/>
<EuiSpacer
size="s"
/>
<EuiText
size="m"
textAlign="center"
>
Log in to OpenSearch Dashboards
</EuiText>
/>
<EuiSpacer
size="s"
/>
<EuiText
size="s"
textAlign="center"
>
If you have forgotten your username or password, contact your system administrator.
</EuiText>
/>
<EuiSpacer
size="s"
/>
@@ -469,26 +465,22 @@ exports[`Login page renders renders with default value: string array 1`] = `
<EuiImage
alt=""
size="fullWidth"
url="/ui/logos/opensearch_on_light.svg"
url="test-file-stub"
/>
<EuiSpacer
size="s"
/>
<EuiText
size="m"
textAlign="center"
>
Log in to OpenSearch Dashboards
</EuiText>
/>
<EuiSpacer
size="s"
/>
<EuiText
size="s"
textAlign="center"
>
If you have forgotten your username or password, contact your system administrator.
</EuiText>
/>
<EuiSpacer
size="s"
/>
51 changes: 51 additions & 0 deletions public/assets/ui/wazuh_logo.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
14 changes: 4 additions & 10 deletions server/index.ts
Original file line number Diff line number Diff line change
@@ -132,11 +132,8 @@ export const configSchema = schema.object({
}),
loadbalancer_url: schema.maybe(schema.string()),
login: schema.object({
title: schema.string({ defaultValue: 'Log in to OpenSearch Dashboards' }),
subtitle: schema.string({
defaultValue:
'If you have forgotten your username or password, contact your system administrator.',
}),
title: schema.string({ defaultValue: '' }),
subtitle: schema.string({ defaultValue: '' }),
showbrandimage: schema.boolean({ defaultValue: true }),
brandimage: schema.string({ defaultValue: '' }), // TODO: update brand image
buttonstyle: schema.string({ defaultValue: '' }),
@@ -234,11 +231,8 @@ export const configSchema = schema.object({
// the login config here is the same as old config `_security.basicauth.login`
// Since we are now rendering login page to browser app, so move these config to browser side.
login: schema.object({
title: schema.string({ defaultValue: 'Log in to OpenSearch Dashboards' }),
subtitle: schema.string({
defaultValue:
'If you have forgotten your username or password, contact your system administrator.',
}),
title: schema.string({ defaultValue: '' }),
subtitle: schema.string({ defaultValue: '' }),
showbrandimage: schema.boolean({ defaultValue: true }),
brandimage: schema.string({ defaultValue: '' }),
buttonstyle: schema.string({ defaultValue: '' }),
18 changes: 9 additions & 9 deletions test/jest.config.server.js
Original file line number Diff line number Diff line change
@@ -17,24 +17,24 @@ import config from '../../../src/dev/jest/config';

export default {
...config,
roots: ['<rootDir>/plugins/security-dashboards-plugin'],
roots: ['<rootDir>/plugins/wazuh-security-dashboards-plugin'],
testMatch: ['**/test/jest_integration/**/*.test.ts', '**/server/**/*.test.ts'],
testPathIgnorePatterns: config.testPathIgnorePatterns.filter(
(pattern) => !pattern.includes('integration_tests')
),
setupFilesAfterEnv: [
'<rootDir>/src/dev/jest/setup/after_env.integration.js',
'<rootDir>/plugins/security-dashboards-plugin/test/setup/after_env.js',
'<rootDir>/plugins/wazuh-security-dashboards-plugin/test/setup/after_env.js',
],
collectCoverageFrom: [
'<rootDir>/plugins/security-dashboards-plugin/server/**/*.{ts,tsx}',
'!<rootDir>/plugins/security-dashboards-plugin/server/**/*.test.{ts,tsx}',
'!<rootDir>/plugins/security-dashboards-plugin/server/auth/types/jwt/**/*.{ts,tsx}',
'!<rootDir>/plugins/security-dashboards-plugin/server/auth/types/openid/**/*.{ts,tsx}',
'!<rootDir>/plugins/security-dashboards-plugin/server/auth/types/saml/**/*.{ts,tsx}',
'!<rootDir>/plugins/security-dashboards-plugin/server/auth/types/proxy/**/*.{ts,tsx}',
'<rootDir>/plugins/wazuh-security-dashboards-plugin/server/**/*.{ts,tsx}',
'!<rootDir>/plugins/wazuh-security-dashboards-plugin/server/**/*.test.{ts,tsx}',
'!<rootDir>/plugins/wazuh-security-dashboards-plugin/server/auth/types/jwt/**/*.{ts,tsx}',
'!<rootDir>/plugins/wazuh-security-dashboards-plugin/server/auth/types/openid/**/*.{ts,tsx}',
'!<rootDir>/plugins/wazuh-security-dashboards-plugin/server/auth/types/saml/**/*.{ts,tsx}',
'!<rootDir>/plugins/wazuh-security-dashboards-plugin/server/auth/types/proxy/**/*.{ts,tsx}',
],
coverageDirectory:
'<rootDir>/plugins/security-dashboards-plugin/opensearch-dashboards-coverage/jest_server',
'<rootDir>/plugins/wazuh-security-dashboards-plugin/opensearch-dashboards-coverage/jest_server',
coverageReporters: ['lcov', 'text', 'cobertura', 'html'],
};
12 changes: 6 additions & 6 deletions test/jest.config.ui.js
Original file line number Diff line number Diff line change
@@ -17,19 +17,19 @@ import config from '../../../src/dev/jest/config';

export default {
...config,
roots: ['<rootDir>/plugins/security-dashboards-plugin'],
roots: ['<rootDir>/plugins/wazuh-security-dashboards-plugin'],
testMatch: ['**/public/**/*.test.{ts,tsx,js,jsx}', '**/common/*.test.{ts, tsx}'],
testPathIgnorePatterns: [
'<rootDir>/plugins/security-dashboards-plugin/build/',
'<rootDir>/plugins/security-dashboards-plugin/node_modules/',
'<rootDir>/plugins/wazuh-security-dashboards-plugin/build/',
'<rootDir>/plugins/wazuh-security-dashboards-plugin/node_modules/',
],
setupFilesAfterEnv: ['<rootDir>/src/dev/jest/setup/after_env.integration.js'],
collectCoverageFrom: [
'<rootDir>/plugins/security-dashboards-plugin/public/**/*.{ts,tsx}',
'!<rootDir>/plugins/security-dashboards-plugin/public/**/*.test.{ts,tsx}',
'<rootDir>/plugins/wazuh-security-dashboards-plugin/public/**/*.{ts,tsx}',
'!<rootDir>/plugins/wazuh-security-dashboards-plugin/public/**/*.test.{ts,tsx}',
],
coverageDirectory:
'<rootDir>/plugins/security-dashboards-plugin/opensearch-dashboards-coverage/jest_ui',
'<rootDir>/plugins/wazuh-security-dashboards-plugin/opensearch-dashboards-coverage/jest_ui',
clearMocks: true,
coverageReporters: ['lcov', 'text', 'cobertura', 'html'],
};
12 changes: 6 additions & 6 deletions test/jest_integration/jwt_auth.test.ts
Original file line number Diff line number Diff line change
@@ -219,8 +219,8 @@ describe('start OpenSearch Dashboards server', () => {
// shutdown OpenSearchDashboards server
await root.shutdown();
});

it('Login to app/opensearch_dashboards_overview#/ when JWT is enabled', async () => {
// Wazuh: Skip test because overview page is disabled
it.skip('Login to app/opensearch_dashboards_overview#/ when JWT is enabled', async () => {
const payload = {
sub: 'jwt_test',
roles: 'admin,kibanauser',
@@ -267,8 +267,8 @@ describe('start OpenSearch Dashboards server', () => {
await driver.manage().deleteAllCookies();
await driver.quit();
});

it('Login to app/opensearch_dashboards_overview#/ when JWT is enabled with invalid token', async () => {
// Wazuh: Skip test because overview page is disabled
it.skip('Login to app/opensearch_dashboards_overview#/ when JWT is enabled with invalid token', async () => {
const payload = {
sub: 'jwt_test',
roles: 'admin,kibanauser',
@@ -294,8 +294,8 @@ describe('start OpenSearch Dashboards server', () => {
await driver.manage().deleteAllCookies();
await driver.quit();
});

it('Login to app/dev_tools#/console when JWT is enabled with invalid token', async () => {
// Wazuh: Skip test because this issue https://github.com/opensearch-project/security-dashboards-plugin/issues/1540
it.skip('Login to app/dev_tools#/console when JWT is enabled with invalid token', async () => {
const payload = {
sub: 'jwt_test',
roles: 'admin,kibanauser',
17 changes: 14 additions & 3 deletions test/jest_integration/saml_auth.test.ts
Original file line number Diff line number Diff line change
@@ -47,6 +47,7 @@ describe('start OpenSearch Dashboards server', () => {
plugins: {
scanDirs: [resolve(__dirname, '../..')],
},
home: { disableWelcomeScreen: true },
server: {
host: 'localhost',
port: 5601,
@@ -237,7 +238,12 @@ describe('start OpenSearch Dashboards server', () => {
await root.shutdown();
});

it('Login to app/opensearch_dashboards_overview#/ when SAML is enabled', async () => {
// ---------------------------------------------------------------------
// As we disabled the opensearch_dashboards_overview in Wazuh Dashboard,
// this test will never success. Also, multi-tenancy was disabled.
// ---------------------------------------------------------------------

it.skip('Login to app/opensearch_dashboards_overview#/ when SAML is enabled', async () => {
const driver = getDriver(browser, options).build();
await driver.get('http://localhost:5601/app/opensearch_dashboards_overview#/');
await driver.findElement(By.id('btn-sign-in')).click();
@@ -265,8 +271,13 @@ describe('start OpenSearch Dashboards server', () => {
await driver.quit();
});

it('Login to Dashboard with Hash', async () => {
const urlWithHash = `http://localhost:5601/app/dashboards#/view/7adfa750-4c81-11e8-b3d7-01146121b73d?_g=(filters:!(),refreshInterval:(pause:!f,value:900000),time:(from:now-24h,to:now))&_a=(description:'Analyze%20mock%20flight%20data%20for%20OpenSearch-Air,%20Logstash%20Airways,%20OpenSearch%20Dashboards%20Airlines%20and%20BeatsWest',filters:!(),fullScreenMode:!f,options:(hidePanelTitles:!f,useMargins:!t),query:(language:kuery,query:''),timeRestore:!t,title:'%5BFlights%5D%20Global%20Flight%20Dashboard',viewMode:view)`;
// ---------------------------------------------------------------------
// As we disabled the opensearch_dashboards_overview in Wazuh Dashboard,
// this test will never success. Also, multi-tenancy was disabled.
// ---------------------------------------------------------------------

it.skip('Login to Dashboard with Hash', async () => {
const urlWithHash = `http://localhost:5601/app/security-dashboards-plugin#/getstarted`;
const driver = getDriver(browser, options).build();
await driver.manage().deleteAllCookies();
await driver.get(urlWithHash);
8 changes: 5 additions & 3 deletions test/jest_integration/saml_multiauth.test.ts
Original file line number Diff line number Diff line change
@@ -43,6 +43,7 @@ describe('start OpenSearch Dashboards server', () => {
plugins: {
scanDirs: [resolve(__dirname, '../..')],
},
home: { disableWelcomeScreen: true },
server: {
host: 'localhost',
port: 5601,
@@ -235,8 +236,8 @@ describe('start OpenSearch Dashboards server', () => {
});

it('Login to Dashboards and resume from nextUrl', async () => {
const urlWithHash = `http://localhost:5601/app/dashboards#/view/7adfa750-4c81-11e8-b3d7-01146121b73d?_g=(filters:!(),refreshInterval:(pause:!f,value:900000),time:(from:now-24h,to:now))&_a=(description:'Analyze%20mock%20flight%20data%20for%20OpenSearch-Air,%20Logstash%20Airways,%20OpenSearch%20Dashboards%20Airlines%20and%20BeatsWest',filters:!(),fullScreenMode:!f,options:(hidePanelTitles:!f,useMargins:!t),query:(language:kuery,query:''),timeRestore:!t,title:'%5BFlights%5D%20Global%20Flight%20Dashboard',viewMode:view)`;
const loginUrlWithNextUrl = `http://localhost:5601/app/login?nextUrl=%2Fapp%2Fdashboards#/view/7adfa750-4c81-11e8-b3d7-01146121b73d?_g=(filters:!(),refreshInterval:(pause:!f,value:900000),time:(from:now-24h,to:now))&_a=(description:'Analyze%20mock%20flight%20data%20for%20OpenSearch-Air,%20Logstash%20Airways,%20OpenSearch%20Dashboards%20Airlines%20and%20BeatsWest',filters:!(),fullScreenMode:!f,options:(hidePanelTitles:!f,useMargins:!t),query:(language:kuery,query:''),timeRestore:!t,title:'%5BFlights%5D%20Global%20Flight%20Dashboard',viewMode:view)`;
const urlWithHash = `http://localhost:5601/app/security-dashboards-plugin#/getstarted`;
const loginUrlWithNextUrl = `http://localhost:5601/app/login?nextUrl=%2Fapp%2Fsecurity-dashboards-plugin#/getstarted`;
const driver = getDriver(browser, options).build();
await driver.manage().deleteAllCookies();
await driver.get(loginUrlWithNextUrl);
@@ -259,7 +260,7 @@ describe('start OpenSearch Dashboards server', () => {
});

it('Login to Dashboards without nextUrl', async () => {
const urlWithoutHash = `http://localhost:5601/app/home`;
const urlWithoutHash = `http://localhost:5601/app/home#/`;
const loginUrl = `http://localhost:5601/app/login`;
const driver = getDriver(browser, options).build();
await driver.manage().deleteAllCookies();
@@ -273,6 +274,7 @@ describe('start OpenSearch Dashboards server', () => {
until.elementsLocated(By.xpath('/html/body/div[1]/div/header/div/div[2]')),
20000
);
await driver.wait(until.elementsLocated(By.css('img[data-test-subj="defaultLogo"]')), 20000);
const windowHash = await driver.getCurrentUrl();
console.log('windowHash: ' + windowHash);
expect(windowHash).toEqual(urlWithoutHash);

0 comments on commit eebb0fe

Please sign in to comment.