Commit graph

49 commits

Author SHA1 Message Date
Anton Dosov
175916ef23
Sustainable Kibana Architecture: Move packages under packages/shared-ux/ (#205602) 2025-01-07 09:46:25 +00:00
Julia Rechkunova
40c90550f1
[Discover] Rename Saved Search to Discover Session (#202217)
- Closes https://github.com/elastic/kibana/issues/174144

## Summary

This PR renames Saved Search into Discover Session in UI.

- [x] Discover
- [x] Saved Objects page and modal
- [x] Docs
- [x] Other occurrences 

<img width="810" alt="Screenshot 2024-12-16 at 15 20 10"
src="https://github.com/user-attachments/assets/e39083da-f496-4ed5-bbdc-8e184897fc41"
/>
<img width="1220" alt="Screenshot 2024-12-11 at 14 40 15"
src="https://github.com/user-attachments/assets/a6dc3e29-e1a5-4304-8148-0108231cc9de"
/>
<img width="1476" alt="Screenshot 2024-12-16 at 14 57 39"
src="https://github.com/user-attachments/assets/4b34c70e-e21a-4d82-85f2-f5a3cb7a3826"
/>


### Checklist

- [x] Any text added follows [EUI's writing
guidelines](https://elastic.github.io/eui/#/guidelines/writing), uses
sentence case text and includes [i18n
support](https://github.com/elastic/kibana/blob/main/packages/kbn-i18n/README.md)
- [x]
[Documentation](https://www.elastic.co/guide/en/kibana/master/development-documentation.html)
was added for features that require explanation or tutorials
- [x] [Unit or functional
tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html)
were updated or added to match the most common scenarios
- [x] The PR description includes the appropriate Release Notes section,
and the correct `release_note:*` label is applied per the
[guidelines](https://www.elastic.co/guide/en/kibana/master/contributing.html#kibana-release-notes-process)

---------

Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com>
Co-authored-by: wajihaparvez <wajiha.parvez@elastic.co>
Co-authored-by: Davis McPhee <davismcphee@hotmail.com>
Co-authored-by: Julia Bardi <90178898+juliaElastic@users.noreply.github.com>
2024-12-18 13:45:32 +01:00
Elena Shostak
52dd7e17c4
[Authz] Operator privileges (#196583)
## Summary

This PR adds support for explicit indication whether endpoint is
restricted to operator only users.

### Context
1. If user has [all operator
privileges](https://github.com/elastic/elasticsearch/blob/main/x-pack/plugin/security/src/main/java/org/elasticsearch/xpack/security/operator/DefaultOperatorOnlyRegistry.java#L35-#L53)
granted, but is not listed as operator in `operator_users.yml`, ES would
throw an unauthorized error.
2. If user is listed as operator in `operator_users.yml`, but doesn't
have necessary privileges granted, ES would throw an unauthorized error.
3. It’s not possible to determine if a user is operator via any ES API,
i.e. `_has_privileges`.
4. If operator privileges are disabled we skip the the check for it,
that's why we require to explicitly specify additional privileges to
ensure that the route is protected even when operator privileges are
disabled.

### Checklist

- [x]
[Documentation](https://www.elastic.co/guide/en/kibana/master/development-documentation.html)
was added for features that require explanation or tutorials
- [x] [Unit or functional
tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html)
were updated or added to match the most common scenarios

__Relates: https://github.com/elastic/kibana/issues/196271__

### How to test

1. Add your user to the operators list
1bd8144924/packages/kbn-es/src/serverless_resources/operator_users.yml (L4)
or use existing user from the list to log in.
2. Run ES and Kibana serverless
3. Change any endpoint or create a new one with the following security
config
```
      security: {
        authz: {
          requiredPrivileges: [ReservedPrivilegesSet.operator],
        },
      },
```
4. Check with enabled and disabled operator privileges (set
`xpack.security.operator_privileges.enabled`)

## Release Note
Added support for explicit indication whether endpoint is restricted to
operator only users at the route definition level.

---------

Co-authored-by: Elastic Machine <elasticmachine@users.noreply.github.com>
2024-12-12 23:55:04 +01:00
Sid
4ffdb35b14
[Docs] Update feature privilege docs to reflect new route authorization (#201017)
## Summary

Updates developer documentation on Feature privileges to reflect changes
to Route Authorization.


### Screenshots
Before
<img width="400" alt="Screenshot 2024-11-20 at 18 52 02"
src="https://github.com/user-attachments/assets/0bb01bd0-e41a-48ee-bcaf-bd4119037f1b">

After
<img width="400" alt="Screenshot 2024-11-20 at 18 49 26"
src="https://github.com/user-attachments/assets/2d5712ce-c277-4ecd-831e-750df8309933">


### Checklist

Check the PR satisfies following conditions. 

Reviewers should verify this PR satisfies this list as well.

- [x]
[Documentation](https://www.elastic.co/guide/en/kibana/master/development-documentation.html)
was added for features that require explanation or tutorials
2024-11-20 14:52:58 -06:00
Elena Shostak
71a298ef7b
[Authz] Added section for migration routes created by utility function (#198401)
## Summary

- Added section for migrating routes created by utility function.
- Added `patch` method to route methods in eslint rule.


### Checklist
- [x]
[Documentation](https://www.elastic.co/guide/en/kibana/master/development-documentation.html)
was added for features that require explanation or tutorials
2024-10-30 13:05:38 -05:00
Elena Shostak
300678ca85
[Docs] Security Route Configuration (#193994)
## Summary

Added documentation for the security route configuration.


### Checklist

- [x]
[Documentation](https://www.elastic.co/guide/en/kibana/master/development-documentation.html)
was added for features that require explanation or tutorials

---------

Co-authored-by: Elastic Machine <elasticmachine@users.noreply.github.com>
2024-10-22 06:30:53 -05:00
Clint Andrew Hall
37251b0925
[docs] Plugin optimization, case studies (#192285)
## Summary

As titled. This PR outlines several use cases around plugin optimization
that can be helpful to engineers. This PR is part of a series, but
divided to make review easier.

It also reworks the navigation a bit to make the optimization section a
bit more clear.
2024-09-10 14:28:18 -04:00
Jeramy Soucy
2c8201dcde
Implements 'Key concepts' developer documentation for Encrypted Saved Objects (#184334)
Closes #176097

## Summary

Adds 'Key concepts' developer documentation for Encrypted Saved Objects,
covering the basic theory, usage, and maintenance for encrypted saved
objects in Kibana.
2024-06-07 14:34:58 +02:00
Nathan Reese
3ecd73c2e5
embeddable overview guiding principles and best practices (#183099)
Paired with @ThomThomson to expand Embeddable documentation with
"Guiding principles" and "Best practices"

PR also moves overview to src/plugins/embeddables/README.md. Then, this
markdown is displayed in the embeddable example application as well.

---------

Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com>
Co-authored-by: Devon Thomson <devon.thomson@elastic.co>
2024-05-14 12:03:45 -06:00
Nathan Reese
e400221138
[embeddable rebuild] Consolidate embeddable documenation (#183088)
Having the same thing in multiple places is confusing and hard to
maintain. Embeddable documentation is exposed via developer examples.
This PR removes embeddable documentation in README and dev-docs and
points those locations to the single location for embeddable
documenation.

---------

Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com>
2024-05-09 16:17:31 -06:00
Christiane (Tina) Heiligers
bfee4d79e8
Updates internal dev docs for Saved Objects (#178058)
fix [#178060](https://github.com/elastic/kibana/issues/178060)
Updates the internal developer docs for transitions to new model
versions.
The end-user docs were updated in
https://github.com/elastic/kibana/pull/176970

---------

Co-authored-by: Jean-Louis Leysens <jloleysens@gmail.com>
2024-03-07 08:16:28 -07:00
Alejandro Fernández Haro
fd09c26d15
async-import plugins in the server side (#170856)
Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com>
2023-11-15 00:55:56 -07:00
Eyo O. Eyo
f27427b949
Removes duplicated RedirectAppLinks component (#170304)
## Summary

This PR removes the [duplicated RedirectAppLinks
component](https://github.com/elastic/kibana/blob/v8.10.4/src/plugins/kibana_react/public/app_links/redirect_app_link.tsx)
which has been marked as deprecated since
74a00fad20.

All references to the previous import declaration from
`@kbn/kibana-react-plugin/public` have been replaced with
`@kbn/shared-ux-link-redirect-app`, this change ensures that the current
app behaviour is preserved, and changes to match the expectation of the
new component have been applied where necessary.

Changes relating to the new `RedirectAppLinks` component; 
- The component does not accept a `className` anymore as it is not a
presentational component despite it being used as one previously,
there's change to make accommodation for how it had been used.
- The component introduces a`data-test-subj` attribute with the value
`kbnRedirectAppLink` on the dom node that wraps it's children.


### Checklist

<!--
Delete any items that are not applicable to this PR.

~- [ ] Any text added follows [EUI's writing
guidelines](https://elastic.github.io/eui/#/guidelines/writing), uses
sentence case text and includes [i18n
support](https://github.com/elastic/kibana/blob/main/packages/kbn-i18n/README.md)~
-->
- [x]
[Documentation](https://www.elastic.co/guide/en/kibana/master/development-documentation.html)
was added for features that require explanation or tutorials
- [x] [Unit or functional
tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html)
were updated or added to match the most common scenarios

<!--
~- [ ] Any UI touched in this PR is usable by keyboard only (learn more
about [keyboard
accessibility](https://webaim.org/techniques/keyboard/))~
~- [ ] Any UI touched in this PR does not create any new axe failures
(run axe in browser:
[FF](https://addons.mozilla.org/en-US/firefox/addon/axe-devtools/),
[Chrome](https://chrome.google.com/webstore/detail/axe-web-accessibility-tes/lhdoppojpmngadmnindnejefpokejbdd?hl=en-US))~
~- [ ] If a plugin configuration key changed, check if it needs to be
allowlisted in the cloud and added to the [docker
list](https://github.com/elastic/kibana/blob/main/src/dev/build/tasks/os_packages/docker_generator/resources/base/bin/kibana-docker)~
~- [ ] This renders correctly on smaller devices using a responsive
layout. (You can test this [in your
browser](https://www.browserstack.com/guide/responsive-testing-on-local-server))~
~- [ ] This was checked for [cross-browser
compatibility](https://www.elastic.co/support/matrix#matrix_browsers)~


### Risk Matrix

Delete this section if it is not applicable to this PR.

Before closing this PR, invite QA, stakeholders, and other developers to
identify risks that should be tested prior to the change/feature
release.

When forming the risk matrix, consider some of the following examples
and how they may potentially impact the change:

| Risk | Probability | Severity | Mitigation/Notes |

|---------------------------|-------------|----------|-------------------------|
| Multiple Spaces&mdash;unexpected behavior in non-default Kibana Space.
| Low | High | Integration tests will verify that all features are still
supported in non-default Kibana Space and when user switches between
spaces. |
| Multiple nodes&mdash;Elasticsearch polling might have race conditions
when multiple Kibana nodes are polling for the same tasks. | High | Low
| Tasks are idempotent, so executing them multiple times will not result
in logical error, but will degrade performance. To test for this case we
add plenty of unit tests around this logic and document manual testing
procedure. |
| Code should gracefully handle cases when feature X or plugin Y are
disabled. | Medium | High | Unit tests will verify that any feature flag
or plugin combination still results in our service operational. |
| [See more potential risk
examples](https://github.com/elastic/kibana/blob/main/RISK_MATRIX.mdx) |


### For maintainers

- [ ] This was checked for breaking API changes and was [labeled
appropriately](https://www.elastic.co/guide/en/kibana/master/contributing.html#kibana-release-notes-process)
-->

---------

Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com>
2023-11-13 10:17:13 +01:00
Vadim Kibana
f2bfbbd23b
Set correct ownership of older app-services code (#168209)
## Summary

Removes `@elastic/kibana-app-services` from `CODEOWNERS` file.

---------

Co-authored-by: Clint Andrew Hall <clint@clintandrewhall.com>
2023-10-09 18:57:26 +02:00
Sid
de0e1eb0d4
Developer documentation for designing feature privileges (#166716)
## Summary

Closes #162263

Introduces a new `Feature Privileges` section to the developer
documentation. The documentation includes a tutorial on how to control
access to features of plugin being developed. Introduces a few sections:

- Controlling access to UI features
- Controlling access to server side APIs
- Documentation for configuration options

## Testing
To build this locally, run ./scripts/dev_docs from a local checkout of
this PR. A server will eventually start on http://localhost:3000 where
you can preview the changes.

---------

Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com>
2023-09-27 13:43:55 +02:00
Larry Gregory
9b506c927c
Adds docs for kibana_system privileges (#161697)
Introduces a new `Security` Key Concepts page to the developer
documentation, with two sections:
1. API Authorization, adapted from
https://github.com/elastic/kibana/pull/160351#discussion_r1253519358.
2. `kibana_system` privilege guidelines, adapted from our team's
internal documentation. There are two notable changes from the previous
version:

1) Removal of internal discussions, as this now exists within a public
repository.
2) Recreated the existing mermaid diagram into a public Whimsical
diagram. The new docs system supports the latter, but not the former.


## Testing
To build this locally, run `./scripts/dev_docs` from a local checkout of
this PR. A server will eventually start on `http://localhost:3000` where
you can preview the changes.

## Screenshots


<img width="1632" alt="CleanShot 2023-07-12 at 08 32 23@2x"
src="1b7c5053-a1bf-434f-bdfd-3eeeee692e18">


![CleanShot 2023-07-12 at 08 33
21@2x](b15083af-f2b4-4daf-93a7-d6f43c73f3f2)
2023-07-26 13:05:22 -04:00
Joe Reuter
15c12bdd39
Rename all vis-editors and datavis to visualizations (#144589)
* rename all the vis-editors

* rename datavis to visualizations
2022-11-05 19:16:20 -04:00
Michael Dokolin
047d11ea13
[Embeddable] Provide a Redux store adapter for the embeddable input (#136319)
* Add embeddable store factory
* Update embeddable storybook to use store instead of input updates
* Fix embeddable implementation to initialize observables before the constructor
* Add Redux store documentation
* Add missing navigation link to the embeddables documentation
2022-08-18 16:27:22 +02:00
Spencer
6c438b331c
[api-docs] follow the correct schema for frontmatter (#138348)
* [api-docs] follow the correct schema for frontmatter

* rename non-generated summary: usage

* fix yaml comment syntax
2022-08-10 17:17:50 -05:00
Michael Dokolin
cb341b4a1c
[Embeddables] Update documentation (#137302)
* Add a developer documentation page to cover embeddables concept
* Update generic embeddable documentation
2022-07-29 14:33:24 +02:00
Spencer
03f1a218c5
[core] remove root index.ts file (#137001)
* [core] remove root index.ts file

* remove support for `kibana/*` imports, replace instances in docs
2022-07-22 15:04:23 -07:00
Shivindera Singh
bcc17e178b
update docs for hasData service (#134899)
* update docs for hasData service

* fix typo

* change wording from primitive to managed
2022-06-22 18:35:02 +02:00
Larry Gregory
a795237b61
Move audit logging docs to new docs system (#134499)
* Forklift of existing audit logging docs into new docs system

* Add introduction

* Remove old content

* Update dev_docs/key_concepts/audit_logging.mdx
2022-06-16 07:30:05 -04:00
Christiane (Tina) Heiligers
3bb27f21fa
[docs] Adds paragraphs on inter-app navigation with application service (#129421) 2022-04-05 07:22:22 -07:00
Christiane (Tina) Heiligers
7aa89aac3b
Fix typos in dev docs (#128400) 2022-03-23 11:52:52 -07:00
Kellen
8625b8dfbf
Add missing quote 2022-02-17 14:11:10 -08:00
Christiane (Tina) Heiligers
ec323617b5
Adds section on Advanced Settings (#124915)
Co-authored-by: Kaarina Tungseth <kaarina.tungseth@elastic.co>
2022-02-08 14:37:22 -07:00
Stacey Gammon
dbde0a75f9
Update performance docs to touch on server-side considerations (#120356)
* Update performance docs to touch on server-side considerations

* update edited date
2021-12-03 15:43:32 -05:00
Matthew Kime
eb2ddcd7c6
[data views] data view api docs - index patterns => data views (#119415)
* initial pass at changing urls and anchors

* update api.asciidoc

* upate a few more anchor tags

* upate a few more anchor tags

* update data view api docs

* Update delete.asciidoc

* Update default-get.asciidoc

* add redirects

* fix redirects

* remove duplicate redirect

Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com>
2021-12-01 07:32:05 -06:00
Tyler Smalley
c4815d319e
Updates Github link references from master to main (#116789)
Signed-off-by: Tyler Smalley <tyler.smalley@elastic.co>
2021-10-29 09:53:08 -07:00
Stacey Gammon
feed7391a0
Update kibana_platform_plugin_intro with more details on packages vs plugins (#114713)
* Update kibana_platform_plugin_intro.mdx

* updates

* Update kibana_platform_plugin_intro.mdx

* Update kibana_platform_plugin_intro.mdx

* Update kibana_platform_plugin_intro.mdx

* Update dev_docs/key_concepts/kibana_platform_plugin_intro.mdx

Co-authored-by: Tyler Smalley <tylersmalley@gmail.com>

* Update dev_docs/key_concepts/kibana_platform_plugin_intro.mdx

Co-authored-by: Tyler Smalley <tylersmalley@gmail.com>

* Update dev_docs/key_concepts/kibana_platform_plugin_intro.mdx

Co-authored-by: Tyler Smalley <tylersmalley@gmail.com>

* Update dev_docs/key_concepts/kibana_platform_plugin_intro.mdx

Co-authored-by: Brandon Kobel <brandon.kobel@gmail.com>

* Update dev_docs/key_concepts/kibana_platform_plugin_intro.mdx

Co-authored-by: Brandon Kobel <brandon.kobel@gmail.com>

Co-authored-by: Tyler Smalley <tylersmalley@gmail.com>
Co-authored-by: Brandon Kobel <brandon.kobel@gmail.com>
2021-10-13 14:01:46 -04:00
Pierre Gayvallet
b6f1682635
Fix dev doc pages (#114297)
* fix doc page

* fix doc page bis
2021-10-08 10:59:27 +02:00
garanews
58f6d9002a
Fix typos in docs & dev_docs (#113746) 2021-10-07 14:30:32 -04:00
Pierre Gayvallet
855d2f1094
Migrate routing and navigation docs to new developer guide (#113919)
* Migrate routing and navigation doc to new doc system

* address feedback
2021-10-07 12:45:15 +02:00
Stacey Gammon
e9fc5196ab
fix docs build (#113948) 2021-10-05 13:02:08 -04:00
Stacey Gammon
cc00f3f279
Update kibana plugin, platform and package overview doc (#112894)
* udpate

* Update kibana_platform_plugin_intro.mdx

* Update kibana_platform_plugin_intro.mdx

* Update kibana_platform_plugin_intro.mdx

Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com>
2021-10-05 10:02:46 -04:00
Stacey Gammon
eddbc8db6f
Update doc slugs to improve analytic tracking, move to appropriate folders (#113630)
* Update the slugs to improve google analytics drilldown tracking

* more slug updates

* Fix some formatting issues in building blocks

* update paths

Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com>
2021-10-04 13:36:45 -04:00
Kellen
56f5c179e0
Fix the other one... (#112873) 2021-09-22 14:38:20 -07:00
Kellen
409d7e2796
Removes space, fix build (#112856) 2021-09-22 11:31:49 -07:00
Peter Pisljar
3907d53df5
persistable state docs (#105202) 2021-09-22 13:22:38 +02:00
Spencer
eaf70a0b4e
[kbn/ui-shared-deps] split into two packages (#110558)
* [kbn/ui-shared-deps] split into two packages

* fix asset categorizer

* update snapshots

* reference npm dll from optimizer

Co-authored-by: spalger <spalger@users.noreply.github.com>
2021-09-16 12:06:46 -07:00
Dzmitry Lemechko
b324ca3115
[jest] update config files to get coverage per plugin (#111299)
* [jest] update config files to get coverage per plugin

* [docs] add details about plugin coverage collection

* fix path for newsfeed jest config

* fix lint error

* update documentation

* fix lint errors again

* update doc

* fix another lint error

* Update src/plugins/telemetry_management_section/jest.config.js

Co-authored-by: Luke Elmers <lukeelmers@gmail.com>

* Update src/plugins/telemetry_management_section/jest.config.js

Co-authored-by: Luke Elmers <lukeelmers@gmail.com>

* [kibana_legacy] fix path

Co-authored-by: Luke Elmers <lukeelmers@gmail.com>
Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com>
2021-09-09 08:14:56 +02:00
Luke Elmers
98a67c07cc
Port performance docs to new docs system. (#111063) 2021-09-07 14:04:08 -04:00
Stacey Gammon
52ee65b8d5
Make owner attribute required on kibana.json (#108231)
* make owner attribute required

* Add owner properties in more places

* add test for owner attribute

* add error check too in the test

* Fix tests

* fix tests and update docs

* wip

* More test fixes

* Fix All The Errorz

* Adding more owner attributes

* Update x-pack/test/saved_object_api_integration/common/fixtures/saved_object_test_plugin/kibana.json

Co-authored-by: Larry Gregory <lgregorydev@gmail.com>

* Update x-pack/test/ui_capabilities/common/fixtures/plugins/foo_plugin/kibana.json

Co-authored-by: Larry Gregory <lgregorydev@gmail.com>

* commeeeooonnnn

* Update docs

* soooo many kibanajsons

* adjust plugin generator to add an owner

* Add owner to the plugin generator scripts

* update snapshot

* Fix snapshot

* review updates

Co-authored-by: Larry Gregory <lgregorydev@gmail.com>
Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com>
2021-08-24 10:02:32 -04:00
Matthew Kime
2e68ce1a05
Developer guide - index patterns key concepts (#96017)
* add index patterns key concepts
2021-08-15 08:48:51 -05:00
Stacey Gammon
21b080b61b
Clean up Developer Guide (#108259)
* update plugin docs

* address code review feedback
2021-08-12 14:05:43 -04:00
Joe Portner
c21272cc5b
Sharing saved objects developer guide (#107099) 2021-08-10 16:02:45 -04:00
Stacey Gammon
b9f398875a
Add more information on kibana.json properties, update example plugins (#107600)
* Add more information on kibana.json properties, update example plugin kibana.jsons

* fix auto save fix

* Update anatomy_of_a_plugin.mdx

* Update anatomy_of_a_plugin.mdx

* update based on review comments

* Update anatomy_of_a_plugin.mdx

* Put kibanaVersion back and adjust the explanations of the fields

Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com>
2021-08-09 13:32:07 -04:00
Stacey Gammon
9fca7a9012
Add saved object docs (#90860)
* iwp

* add docs on saved objects

* add saved object docs

* Update dev_docs/key_concepts/saved_objects.mdx

Co-authored-by: Brandon Kobel <brandon.kobel@gmail.com>

* Update dev_docs/tutorials/saved_objects.mdx

Co-authored-by: Brandon Kobel <brandon.kobel@gmail.com>

* Update dev_docs/tutorials/saved_objects.mdx

Co-authored-by: Brandon Kobel <brandon.kobel@gmail.com>

* Update dev_docs/tutorials/saved_objects.mdx

Co-authored-by: Brandon Kobel <brandon.kobel@gmail.com>

* Update dev_docs/tutorials/saved_objects.mdx

Co-authored-by: Brandon Kobel <brandon.kobel@gmail.com>

* Update dev_docs/tutorials/saved_objects.mdx

Co-authored-by: Brandon Kobel <brandon.kobel@gmail.com>

* Update dev_docs/tutorials/saved_objects.mdx

Co-authored-by: Brandon Kobel <brandon.kobel@gmail.com>

* review updates

* remove this line, support being added

Co-authored-by: Brandon Kobel <brandon.kobel@gmail.com>
2021-02-11 11:27:46 -05:00