Skip to content

feat: Third Party About page; About pages show product identity, not framework versions - #248

Merged
dfcoffin merged 1 commit into
mainfrom
feat/about-pages
Nov 14, 2026
Merged

dfcoffin merged 1 commit into
mainfrom
feat/about-pages

Conversation

@dfcoffin

Copy link
Copy Markdown
Contributor

Summary

Adds a public About page to the Third Party and makes the Data Custodian's match it. Neither page discloses framework versions any more.

Data Custodian Third Party
/about existed; reworked new: public, footer-linked, GBA layout
Fields Implementation, Version, Build time, Standard (NAESB REQ.21 ESPI 4.1), Status same
Java / Spring Boot version removed not shown
Links GBA, API docs, source (Apache-2.0), SECURITY.md same, plus Terms of Service and Usage Policy

Details

  • Status is derived from the version: a -SNAPSHOT (or unknown) build shows "Pre-release: not for production use", and a released version shows "Release". It will flip at the v4.0.0 release without a code change.
  • Version and build time come from BuildProperties: the spring-boot-maven-plugin:build-info goal, now added to both apps. The jar manifest used before is absent under spring-boot:run, which is why the DC showed "(development build)".
  • No framework versions for anonymous visitors. Exact Java and Spring Boot versions help attackers pick known CVEs, and feat: actuator health on all apps; other endpoints require an admin token #240 made /actuator/info admin-only for the same reason. Admins can still read them there.
  • Removed the legacy VersionRESTController (/about-version) from both apps. It read /META-INF/MANIFEST.MF from the servlet context, which a Spring Boot jar doesn't have. In the DC it filled a model key (aboutInfo) that about.html never read; in the TP it rendered an about template that didn't exist.

Test fix: the #235 regression guard couldn't fail

GbaLayoutPagesTest (from #246) asserted that pages didn't contain href="/about". But MockMvc runs with an empty context path, so a correct th:href="@{/about}" and a broken href="/about" render the same HTML. The new footer link tripped that assertion even though it's correct. The test now renders under the real /ThirdParty context path and asserts that every internal href/src carries it. The pattern was checked against broken forms (/about, /, /images/x.png, /ThirdPartyX/a), which it flags, and correct ones (/ThirdParty/..., //cdn..., https://...), which it passes.

Test plan

  • New AboutControllerTest in DC (3) and TP (4): /about → 200 anonymously; shows implementation, standard, status and SECURITY.md; shows the real BuildProperties version and build time; does not contain "Java version", the running Java version, or the Spring Boot version. Also covers releaseStatus for SNAPSHOT, null and release, and the TP footer link.
  • mvn verify DC: 181 tests pass; TP: 56 pass (2 skipped, pre-existing)
  • Live (local profile): both About pages render 4.0.0-SNAPSHOT, the build time and "Pre-release: not for production use"; /about-version is gone from both apps

🤖 Generated with Claude Code

…framework versions

- Third Party: new public /about (AboutController + about.html on the shared
  GBA layout), linked from the footer, permitted anonymously.
- Data Custodian and Third Party About pages now show the same fields:
  implementation, version, build time, the standard (NAESB REQ.21 ESPI 4.1)
  and a release status derived from the version (a SNAPSHOT is "Pre-release:
  not for production use"), plus links to GBA, the API docs, the source and
  SECURITY.md.
- The Java and Spring Boot versions are no longer shown to anonymous
  visitors: exact framework versions help attackers pick known CVEs, and they
  stay available to admins via /actuator/info (#240).
- Version and build time come from BuildProperties
  (spring-boot-maven-plugin:build-info, added to both apps) instead of the jar
  manifest, which is absent under spring-boot:run ("(development build)").
- Removed the legacy VersionRESTController (/about-version) from both apps.
  It read a servlet-context MANIFEST.MF that a Spring Boot jar does not have,
  and it filled a model key the DC template never read (DC) or rendered a
  template that did not exist (TP).
- Tests: AboutControllerTest in both apps. GbaLayoutPagesTest now renders
  under the real /ThirdParty context path and asserts that every internal
  href/src carries it. With MockMvc's empty context path, a correct
  th:href="@{/about}" and a broken href="/about" rendered identically, so the
  previous #235 guard could not catch the bug.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant