[OpenNMS/opennms] 24ff8c: NMS-20174: Fix Menubar/SideMenu issues in Firefox ...

mershad-manesh via opennms-cvs <[email protected]>
Newsgroups gmane.network.opennms.cvs
Message-ID <OpenNMS/opennms/push/refs/heads/merge-foundation/foundation-2025-to-release-36.x/[email protected]>
  Branch: refs/heads/merge-foundation/foundation-2025-to-release-36.x
  Home:   https://github.com/OpenNMS/opennms
  Commit: 24ff8c664530b63d55f9238636203e6e47aaffda
      https://github.com/OpenNMS/opennms/commit/24ff8c664530b63d55f9238636203e6e47aaffda
  Author: Scott Theleman <[email protected]>
  Date:   2026-08-07 (Fri, 07 Aug 2026)

  Changed paths:
    M features/springframework-security/src/main/java/org/opennms/web/springframework/security/LoginModuleUtils.java
    A features/springframework-security/src/test/java/org/opennms/web/springframework/security/LoginModuleUtilsTest.java
    M opennms-webapp/src/main/webapp/WEB-INF/applicationContext-spring-security.xml
    M opennms-webapp/src/main/webapp/includes/bootstrap.jsp
    M ui/src/components/Menu/UserSelfServiceMenuItem.vue
    M ui/src/services/localStorageService.ts
    M ui/src/services/themeService.ts
    A ui/tests/components/Menu/UserSelfServiceMenuItem.test.ts
    A ui/tests/services/localStorageService.test.ts
    A ui/tests/services/themeService.test.ts

  Log Message:
  -----------
  NMS-20174: Fix Menubar/SideMenu issues in Firefox and Safari on JSP pages (#8758)

* NMS-20174: Fix Vue menu not rendering in Safari/Firefox on JSP pages

* NMS-20174: Never use saved REST/API requests as post-login redirect target

* NMS-20174: Don't let blocked localStorage prevent the menu app from mounting

* NMS-20174: Fix logout from JSP pages silently failing in Firefox

* NMS-20174: Cache-bust the Vue menu bundle links in bootstrap.jsp

* NMS-20174: Update stale isInvalidSavedRequestUrl javadoc


  Commit: 31d8d8958651456859ddfca8ef1c80245194fda8
      https://github.com/OpenNMS/opennms/commit/31d8d8958651456859ddfca8ef1c80245194fda8
  Author: Marshall Massengill <[email protected]>
  Date:   2026-08-07 (Fri, 07 Aug 2026)

  Changed paths:
    M ui/src/containers/OpenAPI.vue
    A ui/tests/containers/OpenAPI.test.ts

  Log Message:
  -----------
  NMS-20166: Improve the OpenAPI Docs UI page (#8746)

* NMS-20166: Stop the OpenAPI docs page jumping when a nav entry or tab is clicked

Two things on this page call Element.scrollIntoView, and it scrolls every
scrollable ancestor rather than only the intended pane. RapiDoc does it twice per
nav click, for the operation and for the nav link. PrimeVue's Tab does it too, in
scrollInView with block 'nearest', when a tab takes focus.

Which boxes are scrollable is not entirely ours to decide: PrimeVue's theme is
generated at runtime, and a box with overflow hidden on one axis has the other
computed to auto, which quietly makes it a scroll container. So the layout is
tightened where it can be, and the offsets are put back where it cannot.

- Puts each doc in its own tab, so only one is displayed rather than stacking two
  full-height rows and guaranteeing the page overflowed.
- Measures the space left below the breadcrumbs and above the footer, on mount and
  whenever the chrome reflows, rather than subtracting a fixed offset from 100vh.
- Clips the column and the tab boxes. clip rather than hidden, since a hidden box is
  still programmatically scrollable.
- Restores the vertical scroll of every scrollable box in the column's light DOM and
  above it after a click, which is what makes this hold whatever the theme leaves
  scrollable. querySelectorAll does not pierce shadow roots, so RapiDoc's own panes
  are untouched and still scroll to the clicked operation. Horizontal offsets are
  left alone, since the tab strip is legitimately scrollable sideways.
- Holds the document at the top while the column fits. A click is not the only thing
  that moves the page: switching tabs focuses the new tab and panel, and the browser
  scrolls a focused element into view on its own, after the frames the click handler
  watches. Skipped when the viewport is too short to hold the column, since the page
  then does need to scroll.
- Drops the IntersectionObserver that deferred the V1 doc; its tab being opened is
  now the trigger.

Everything here stays inside the page. Nothing is written to documentElement, so the
fixed app chrome and the side menu's flyouts, which need overflow visible, are
unaffected.

* NMS-20166: Share the in-flight OpenAPI spec fetch

Cache the pending promise rather than its result, so opening the V1 tab
before the mount-time fetch resolves joins that request instead of
issuing a second pair. The entry is dropped again if the fetch fails, so
a later call still retries.


  Commit: 783a348874ed5598dd5e4cdea355ba40327df508
      https://github.com/OpenNMS/opennms/commit/783a348874ed5598dd5e4cdea355ba40327df508
  Author: mershad-manesh <[email protected]>
  Date:   2026-08-07 (Fri, 07 Aug 2026)

  Changed paths:
    M .circleci/epoch

  Log Message:
  -----------
  Update epoch


  Commit: ec05fda75d8da50da0edc7f59406c6c461289931
      https://github.com/OpenNMS/opennms/commit/ec05fda75d8da50da0edc7f59406c6c461289931
  Author: Marshall Massengill <[email protected]>
  Date:   2026-08-07 (Fri, 07 Aug 2026)

  Changed paths:
    M docs/modules/operation/nav.adoc
    M docs/modules/operation/pages/deep-dive/notifications/bonus-strategies.adoc
    A docs/modules/operation/pages/deep-dive/notifications/strategies/scripting.adoc
    M docs/modules/releasenotes/pages/changelog.adoc
    M docs/modules/releasenotes/pages/whatsnew.adoc
    M opennms-services/pom.xml
    M opennms-services/src/main/java/org/opennms/netmgt/notifd/BSFNotificationStrategy.java
    M opennms-services/src/test/java/org/opennms/netmgt/notifd/BSFNotificationStrategyIT.java

  Log Message:
  -----------
  NMS-20111: Updates BSF in Notifd to JSR-223 (#8718)

* NMS-20111: Port BSFNotificationStrategy to JSR-223

Apache BSF is retired to the Apache Attic; the strategy now runs
scripts through javax.script. The class name, all 25 script variable
names, the results["status"]=="OK" contract, run-type exec/eval
semantics, and the 0/-1 return mapping are unchanged, so existing
notificationCommands.xml entries and scripts keep working. The engine
is chosen by lang-class (JSR-223 name) or the file extension, with
BSF's .gy alias mapped to Groovy; bsf-engine and file-extensions are
accepted but ignored with a warning.

Compiled scripts are cached per path+engine with lastModified
invalidation (Groovy leaks a class per compilation, same rationale as
provisiond's JSR223ScriptCache); the compile attempt catches Throwable
because BeanShell declares Compilable but its compile() throws
Error("unimplemented"), in which case scripts are evaluated from
source on a fresh per-invocation engine. Bindings are built per
invocation, which drops the old static synchronized serialization of
every scripted notification and the declare/undeclare dance.

The IT grows from one to nine cases (eval, Groovy, .gy, lang-class
resolution, missing file, non-OK status, invalid run-type, deprecated
switches) and uses the database populator's actual node id: node ids
are sequence-assigned, so the hardcoded 1 only worked while the class
had a single test.

* NMS-20111: Document the scripted notification strategy

The strategy was never documented; adds a Scripted Notifications page
(parameters, script variables, the results.status success contract,
BSF migration notes) to the notification strategies section, plus the
release-note entries for the JSR-223 port.

* NMS-20111: Apply adversarial-review findings

- BeanShell scripts see null variables again: bsh's JSR-223 engine
  treats a null binding as an undefined variable, breaking scripts
  that test node fields against null (worked under BSF). The
  BeanShell path now drives bsh.Interpreter directly, as BSF did;
  Interpreter.set defines nulls properly. Reflective, since bsh is a
  runtime-scope dependency.
- The command's <substitution> element is honored when the argument
  value is empty, so the strategy's own switches (file-name,
  lang-class, run-type) can be configured in notificationCommands.xml
  the way the docs show; notifd passes empty values for switches
  without a notification parameter, which previously made the
  documented setup - and the bsf-engine deprecation warning -
  unreachable.
- Compile failures no longer latch the script-cache entry when the
  script itself is at fault: a fixed script compiles again. Only
  engines that cannot compile (BeanShell throws Error) latch. Cache
  keys derive from lang-class/extension so cache hits build no
  throwaway engine, and mtime comparison uses != so restored-older
  files also invalidate.
- Groovy engines come from a runtime-scope groovy-dependencies entry
  instead of relying on provision-persistence keeping groovy on the
  classpath; a GLOBAL_SCOPE bindings object avoids a bsh NPE path.
- IT covers the review gaps: null bindings, substitution-shaped
  config, cache reuse + mtime invalidation, missing file-name.
- Docs: substitution vs notification-parameter configuration spelled
  out, microblog_username listed as deprecated, release note no
  longer overstates engine-state isolation and mentions strict UTF-8.

* NMS-20111: Trim the whats-new entry to a single line

Review feedback on #8718: whats-new items should stay within two lines so the page
is quick to scan, with the detail in the deep-dive documentation.

The entry now states the change and links to Scripted Notifications. Everything it
listed was already covered there, apart from the UTF-8 caveat, which moves into that
page's notes on migrating BSF-era scripts.


  Commit: a6d757ac2dff116ba3caffe6c4faa71d536c436b
      https://github.com/OpenNMS/opennms/commit/a6d757ac2dff116ba3caffe6c4faa71d536c436b
  Author: mershad-manesh <[email protected]>
  Date:   2026-08-07 (Fri, 07 Aug 2026)

  Changed paths:
    M opennms-container/core/plugins.sh

  Log Message:
  -----------
  Update plugins.sh

We don't need Cloudsmith CLI here


  Commit: c686867898112105fa1bfa64ac17251aa5131d8a
      https://github.com/OpenNMS/opennms/commit/c686867898112105fa1bfa64ac17251aa5131d8a
  Author: Marshall Massengill <[email protected]>
  Date:   2026-08-07 (Fri, 07 Aug 2026)

  Changed paths:
    M docs/modules/operation/nav.adoc
    M docs/modules/operation/pages/deep-dive/notifications/bonus-strategies.adoc
    M docs/modules/operation/pages/deep-dive/notifications/introduction.adoc
    R docs/modules/operation/pages/deep-dive/notifications/strategies/mattermost.adoc
    R docs/modules/operation/pages/deep-dive/notifications/strategies/slack.adoc
    A docs/modules/operation/pages/deep-dive/notifications/strategies/webhook.adoc
    M docs/modules/operation/pages/quick-start/beyond-qs.adoc
    M docs/modules/releasenotes/pages/changelog.adoc
    M docs/modules/releasenotes/pages/whatsnew.adoc
    M opennms-services/pom.xml
    R opennms-services/src/main/java/org/opennms/netmgt/notifd/AbstractSlackCompatibleNotificationStrategy.java
    R opennms-services/src/main/java/org/opennms/netmgt/notifd/MattermostNotificationStrategy.java
    R opennms-services/src/main/java/org/opennms/netmgt/notifd/SlackNotificationStrategy.java
    A opennms-services/src/main/java/org/opennms/netmgt/notifd/WebhookNotificationStrategy.java
    R opennms-services/src/test/java/org/opennms/netmgt/notifd/MattermostNotificationStrategyIT.java
    R opennms-services/src/test/java/org/opennms/netmgt/notifd/MattermostNotificationStrategyTestServlet.java
    R opennms-services/src/test/java/org/opennms/netmgt/notifd/SlackCompatibleNotificationStrategyTest.java
    R opennms-services/src/test/java/org/opennms/netmgt/notifd/SlackNotificationStrategyIT.java
    A opennms-services/src/test/java/org/opennms/netmgt/notifd/WebhookNotificationStrategyIT.java
    A opennms-services/src/test/java/org/opennms/netmgt/notifd/WebhookNotificationStrategyTest.java
    A opennms-services/src/test/java/org/opennms/netmgt/notifd/WebhookNotificationStrategyTestServlet.java
    R opennms-services/src/test/resources/MattermostNotificationStrategyTest/WEB-INF/web.xml
    A opennms-services/src/test/resources/WebhookNotificationStrategyTest/WEB-INF/web.xml

  Log Message:
  -----------
  NMS-20113: Replace the Slack and Mattermost notification channels with a generic webhook (#8734)

* NMS-20113: Replace the Slack and Mattermost notification channels with a generic webhook

The Slack and Mattermost strategies shared a base class that built one
hardcoded JSON shape, so no other receiver could be expressed, and it
treated only a literal "ok" response body as success, which meant a
receiver answering 204 with no body was always logged as failed.

Adds WebhookNotificationStrategy, which takes the URL, method, content
type, headers, and body template from the notification command. Values
substituted into a JSON body are escaped, with a |raw modifier for
fragments that are themselves JSON, and the rendered body is parsed
before it is sent so a template mistake is reported locally instead of
as an opaque 400. Any 2xx counts as success, narrowed by an optional
-success-match for receivers that report failure behind a 200.

Template tokens deliberately exclude colons so they cannot collide with
the metadata DSL, which notifd resolves against notification parameters
before the command runs.

Removes the two strategies, their shared base class, and their tests,
and replaces the two documentation pages with a single webhook page
carrying Slack, Mattermost, Microsoft Teams, Discord, and non-chat
examples plus a migration table.

* NMS-20113: Review fixes for the webhook notification strategy

Log only the scheme and host of the webhook URL. Slack, Discord and
Teams URLs carry their credential in the path or query, so the previous
error log wrote a secret to notifd.log on any connection failure.

Reject blank bodies and trailing content when validating a JSON payload.
ObjectMapper.readTree maps blank input to a MissingNode and stops at the
first value, so {"text": "x"} oops was passing the check the strategy
advertises and failing at the receiver instead.

Also warn on an unknown template modifier rather than emitting the token
verbatim, ignore a negative timeout, and document that substitution
applies to the body alone and that a header must be declared as an
argument for its system property to take effect.

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <[email protected]>

* NMS-20113: Fix three escaped tokens in the webhook documentation

AsciiDoc honors a backslash escape before a brace only when the braces
hold a valid attribute name, so ${...}, ${customBlocks|raw} and
${scv:...} kept their backslash and rendered as $\{...} on the page.
None of the three needs escaping, because none of them parses as an
attribute reference in the first place.

---------

Co-authored-by: Copilot Autofix powered by AI <[email protected]>


  Commit: 8b2bc3587b3b95b7560802c682b1b61be833af65
      https://github.com/OpenNMS/opennms/commit/8b2bc3587b3b95b7560802c682b1b61be833af65
  Author: CI/CD System <[email protected]>
  Date:   2026-08-07 (Fri, 07 Aug 2026)

  Changed paths:
    M opennms-container/core/plugins.sh

  Log Message:
  -----------
  Merge remote-tracking branch 'origin/foundation-2024' into foundation-2025


  Commit: a480037d3ce4fbcd3a40563c80c0021b8f1c403e
      https://github.com/OpenNMS/opennms/commit/a480037d3ce4fbcd3a40563c80c0021b8f1c403e
  Author: Scott Theleman <[email protected]>
  Date:   2026-08-07 (Fri, 07 Aug 2026)

  Changed paths:
    M core/web-assets/src/main/assets/style/opennms-theme.scss
    M features/springframework-security/src/test/java/org/opennms/web/springframework/security/LoginModuleUtilsTest.java
    M opennms-services/src/test/resources/opennmsPageSequence.xml
    R opennms-web-api/src/main/java/org/opennms/web/svclayer/NodeListService.java
    R opennms-web-api/src/main/java/org/opennms/web/svclayer/model/NodeListCommand.java
    R opennms-web-api/src/main/java/org/opennms/web/svclayer/model/NodeListModel.java
    R opennms-web-api/src/main/java/org/opennms/web/svclayer/support/DefaultNodeListService.java
    M opennms-webapp-rest/src/main/java/org/opennms/web/rest/v2/NodeRestService.java
    M opennms-webapp-rest/src/main/webapp/WEB-INF/menu/menu-template-alt.json
    M opennms-webapp-rest/src/main/webapp/WEB-INF/menu/menu-template-default.json
    M opennms-webapp-rest/src/main/webapp/WEB-INF/menu/menu-template-legacy.json
    M opennms-webapp-rest/src/main/webapp/WEB-INF/menu/menu-template.json
    M opennms-webapp-rest/src/test/java/org/opennms/web/rest/support/menu/MenuProviderTest.java
    M opennms-webapp-rest/src/test/resources/dispatcher-servlet.xml
    M opennms-webapp-rest/src/test/resources/menu/menu-template.json
    R opennms-webapp/src/main/java/org/opennms/web/controller/node/NodeListController.java
    M opennms-webapp/src/main/java/org/opennms/web/element/ElementIdNotFoundException.java
    M opennms-webapp/src/main/java/org/opennms/web/element/ElementUtil.java
    M opennms-webapp/src/main/resources/org/opennms/web/svclayer/applicationContext-svclayer.xml
    M opennms-webapp/src/main/webapp/WEB-INF/applicationContext-spring-security.xml
    R opennms-webapp/src/main/webapp/WEB-INF/jsp/element/nodeList.jsp
    R opennms-webapp/src/main/webapp/WEB-INF/tags/element/nodelist.tag
    R opennms-webapp/src/main/webapp/WEB-INF/tags/element/pagedList.tag
    M smoke-test/src/main/java/org/opennms/smoketest/selenium/AbstractOpenNMSSeleniumHelper.java
    M smoke-test/src/test/java/org/opennms/smoketest/AdminPasswordGateIT.java
    M smoke-test/src/test/java/org/opennms/smoketest/MenuHeaderIT.java
    R smoke-test/src/test/java/org/opennms/smoketest/NodeListPageIT.java
    M smoke-test/src/test/java/org/opennms/smoketest/ProvisioningNewUIIT.java
    M smoke-test/src/test/java/org/opennms/smoketest/ui/NodeListIT.java
    M ui/src/components/Nodes/hooks/useInterfaceListing.ts
    M ui/src/styles/opennms-styles.scss
    M ui/tests/components/Menu/menu-template-test.json
    M ui/tests/components/Menu/utils.test.ts

  Log Message:
  -----------
  NMS-18217: Remove legacy Node List page (#8761)

* NMS-18217: remove legacy JSP node list page and DefaultNodeListService

* NMS-18217: update smoke tests for legacy node list removal

* NMS-18217: fix remaining smoke tests and stale comments referencing removed node list

* NMS-18217: address PR review feedback

- Drop the dead nodePage() call in ProvisioningNewUIIT (immediately
  overwritten by direct node-detail navigation) and remove the now
  caller-less nodePage() helper
- Replace the last /element/nodeList.htm reference (stale example URL
  in LoginModuleUtilsTest) with a surviving page
- Fix pre-existing ElementIdNotFoundException bug: the 6-arg
  constructor accepted browseUri but never assigned it, so the
  'browse the node list' link on the element-id-not-found error page
  never rendered for those call sites

* NMS-18217: force light color-scheme for native checkboxes and radios on legacy pages

Extends the existing <select> fix: in dark mode PrimeVue sets
color-scheme: dark on the document, making native form controls render
dark on the light-only legacy JSP pages (e.g. the alarm list's Ack
checkboxes).


  Commit: 717c67f6f0857c1a474917d4ab7d9623d94f8787
      https://github.com/OpenNMS/opennms/commit/717c67f6f0857c1a474917d4ab7d9623d94f8787
  Author: Scott Theleman <[email protected]>
  Date:   2026-08-07 (Fri, 07 Aug 2026)

  Changed paths:
    M ui/package.json
    M ui/packages/onms-ui/src/components/OnmsTabs.vue
    M ui/pnpm-lock.yaml
    M ui/src/composables/useDownload.ts
    M ui/src/services/snmpDataCollectionService.ts
    A ui/tests/components/Device/dcbModalConfigDiffContent.test.ts
    M ui/tests/components/Nodes/EventsTable.test.ts
    M ui/tests/components/Nodes/IpInterfacesTable.test.ts
    M ui/tests/components/Nodes/OutagesTable.test.ts
    M ui/tests/components/Nodes/SnmpInterfacesTable.test.ts
    M ui/tests/components/TrapdConfiguration/GeneralConfiguration.test.ts
    M ui/tsconfig.json

  Log Message:
  -----------
  NMS-19725: Dependabot updates for Vue UI (August 2026) (#8763)

* NMS-19725: Update Vue UI dependencies from open Dependabot PRs (August 2026)

Dependency updates in /ui:
- axios 1.15.0 -> 1.19.0, ace-builds -> 1.44.0, fast-xml-parser -> 5.10.1
- fast-xml-builder -> 1.3.0 (transient, pnpm override)
- typescript ~5.4.5 -> ~5.9.3, vue-tsc 2.2.12 -> 3.3.9,
  @vitejs/plugin-vue 5.2.4 -> 6.0.8 (requires moduleResolution: bundler)
- diff 8 -> 9 (removed stale @types/diff; diff ships its own types)
- removed unused uuid + @types/uuid (last usage removed in NMS-18195)
- happy-dom 9.20.3 -> 20.11.2 plus transient overrides (shell-quote,
  immutable, svgo, brace-expansion, js-cookie, js-yaml, postcss) to
  remediate all osv-scanner findings with CVSS >= 4.0

Code adjustments for the updates:
- axios >= 1.19 header typings include null: assert content-type headers
  as string | undefined in useDownload.ts and snmpDataCollectionService.ts
- vue-tsc 3 strictness: non-null assertion on optional value prop passed
  to PrimeVue Tabs in OnmsTabs.vue

Test cleanup:
- GeneralConfiguration.test.ts: pass numbers (not strings) to numeric
  refs bound to OnmsInputNumber, silencing Vue prop type warnings
- Nodes table tests: mock store fetch actions BEFORE mounting so the
  onMounted fetch no longer fires real network requests (silences
  unhandled ECONNREFUSED AggregateErrors); simplified the OutagesTable
  double-mount workaround this enables

* NMS-19725: Address PR review feedback


  Commit: b7aab90f77a7edfbe9fefae2e8c9ef10339b9413
      https://github.com/OpenNMS/opennms/commit/b7aab90f77a7edfbe9fefae2e8c9ef10339b9413
  Author: Morteza E <[email protected]>
  Date:   2026-08-10 (Mon, 10 Aug 2026)

  Changed paths:

  Log Message:
  -----------
  Merge remote-tracking branch 'origin/foundation-2025' into release-36.x


Compare: https://github.com/OpenNMS/opennms/compare/3eef0ac8dffd...b7aab90f77a7

To unsubscribe from these emails, change your notification settings at https://github.com/OpenNMS/opennms/settings/notifications


_______________________________________________
Please read the OpenNMS Mailing List FAQ:
http://www.opennms.org/wiki/index.php?page=MailingListFaq
opennms-cvs mailing list

To *unsubscribe* or change your subscription options, see the bottom of this page:
https://lists.sourceforge.net/lists/listinfo/opennms-cvs
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.