docs(15.9): SSO authentication moved to fess-sso-* plugins - #529
Merged
Conversation
All four authenticators left the distribution, so each sso.type value now comes from its own plugin: saml from fess-sso-saml, spnego from fess-sso-spnego, entraid and the legacy aad from fess-sso-entraid, and oic from fess-sso-oidc. That last pair is the one place the plugin name and the sso.type value differ, so the upgrade section, the config page note and the commit message all say it outright. One section rather than four, because the mapping is the point and four near-identical sections would triple the page. It sits after the S3 section, so the three "moved to a plugin" changes read together, and the GCS section's pointer to the next one still lands on S3. What survives an upgrade is stated: sso.type and the saml.*, spnego.*, entraid.*, aad.* and oic.* keys live in WEB-INF/conf/system.properties. So does what does not change: the General screen still offers all four types and still shows their settings, because a plugin cannot supply a JSP, so nothing there reports a missing plugin. The symptom is described from the code rather than from the summary I was given. With the plugin absent, SsoAction.index() saves errors.sso_login_error before redirecting, so the login page does say "SSO login process failed" -- a message that names neither the cause nor the remedy. 15.9 adds the warning in fess.log that names the component and the plugin; up to 15.8 there was only a debug line. The 28 config/sso-*.rst notes sit at the end of each Overview, the same relationship the storage-guide note has to the settings it qualifies, and the 28 general-guide option rows take the "(requires the X plugin)" suffix already used for the storage types in that file. No size figure. The adjacent GCS and S3 sections give none, and adding one only here would make this look like the largest of the three. The woodstox and StAX side effect is likewise not here: XMLInputFactory falling back to the JDK provider asks nothing of the reader, and every section in this block ends by telling them what to do. Wording comes from each tree rather than fresh translation, down to two house styles found by comparing: config/sso-*.rst spells the term without a space (SAML認証, Windows集成认证) where install/upgrade.rst spells it with one, and ko puts the comma tight against a literal's end-string. The ko section is also structured so that no 은/는 or 을/를 particle ever follows a Latin code literal, since agreement depends on a Korean reading that saml, spnego and oic do not have -- which is how the existing ko tree already avoids it. Verified with docutils 0.22.4 across the 42 files, before and after, parsed the way Sphinx parses: system messages identical per file as counters with line prefixes stripped, no new unparsed markup, one document-level section each, the section count up by exactly the declared seven and the note count by exactly the declared 28, all 266 new inline literals parsed as literal nodes, and heading rules matching their titles by display width, ko included. The checks were proven non-vacuous in both directions, after establishing docutils 0.22.4's actual behaviour rather than assuming it -- two of the first assertions were wrong, not the harness: fullwidth punctuation after an end-string is accepted, while a CJK character directly before a start-string is dropped with no system message at all, which only the literal-node and residue checks catch. Mutating the seven edited upgrade.rst files drops their literal count and raises residue; running the whole harness against four deliberate mutations of the ja file turns it red four times, and green again once the file is restored byte-identical by sha256.
marevol
added this pull request to stack #530
September 10, 2026 04:17
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
All four authenticators left the distribution in codelibs/fess#3430, so each
sso.typevalue comes from its own plugin. 42 files, all seven languages, 15.9 development trees only.sso.typesamlfess-sso-samlspnegofess-sso-spnegoentraid, and the legacyaadfess-sso-entraidoicfess-sso-oidcThat last pair is the one place the plugin name and the
sso.typevalue differ, so the upgrade section and thesso-oidcnote both say it outright rather than leaving a reader to installfess-sso-oic.One section, not four. The mapping is the point, and four near-identical sections would triple the page. It sits after the S3 section so the three "moved to a plugin" changes read together, and the GCS section's "see the next section" still lands on S3. Every hunk in each
upgrade.rstis a pure insertion — the S3 and GCS sections are byte-for-byte untouched.What the section says
sso.typeand thesaml.*,spnego.*,entraid.*,aad.*andoic.*keys live inWEB-INF/conf/system.properties.SsoAction.index()callssaveError(errors.sso_login_error)before redirecting, so the login page does say "SSO login process failed." — a message that names neither the cause nor the remedy. 15.9 adds the warning infess.lognaming the component and the plugin; up to 15.8 there was only a debug line.Every claim was checked against
refs/remotes/pr/3430rather thanmaster, sincemasterstill has the authenticators in core.FessProp.javaandadmin_general.jspare not in that PR's diff at all, which is what makes the two "unchanged" statements above safe to print.Also: 28 notes at the end of each
config/sso-*.rstOverview — the same relationship the storage-guide note has to the settings it qualifies — and 28general-guide.rstoption rows taking the(requires the X plugin)suffix already used there for the storage types.Deliberately absent
No size figure. The adjacent GCS and S3 sections give none; adding one only here would make this look like the largest of the three.
The woodstox / StAX side effect is not here.
woodstox-coreandstax2-apileave with java-saml, andXMLInputFactoryfalls back to the JDK provider. That asks nothing of the reader — the JDK implementation is complete, and no remaining runtime artifact registers ajavax.xml.streamprovider, so there is one answer regardless of which plugins are installed. Every section in this block ends by telling an admin what to do; this one would manufacture a work item that does not exist. It is recorded in #3430. A third-party plugin importingcom.ctc.wstxororg.codehaus.stax2would now fail, which belongs in release notes ordev/plugin-architecture.rstrather than an upgrade checklist, and is unverified for any code outside this workspace.api/admin/api-admin-general.rstunchanged. It documentsssoTypewith its five values. #528 did not annotatestorageTypein the same table, so annotatingssoTypealone would make the two inconsistent — both rows or neither.Wording
Taken from each tree, not translated afresh: the heading frame and the "no longer part of the distribution / comes from the X plugin" sentence from the GCS and S3 sections, the install phrasing and the
system.propertiessentence from S3, the admin-screen reference from the SPNEGO migration section further down the same file, the.. note::frame from the storage-guide note, and the(requires …)suffix from general-guide's storage rows.Two house styles were found by comparing rather than assuming:
config/sso-*.rstspells the term without a space (SAML認証,Windows集成认证, 10:1 and 9:1 against the spaced form) whereinstall/upgrade.rstspells it with one, andkoputs the comma tight against a literal's end-string.Korean particles. 은/는 and 을/를 agree with the Korean reading of the preceding token, which
saml,spnegoandoicdo not have — sospnego는is wrong whichever form is chosen. The ko section is structured so no such particle ever follows a Latin code literal, which is how the existing ko tree already avoids it.Verification
docutils 0.22.4 across the 42 files, before and after, parsed the way Sphinx parses. 301 assertions, 0 failures, with the expected deltas declared before the run.
path:lineno:prefixes stripped — insertions shift every later line, so a raw diff would be useless.upgrade.rst(the**bold**/|Fess|defect at en:345) unchanged.upgrade.rst, +0 on the other 35, each added node printed by name.literalnodes — the check for a start-string against a CJK character.config/sso-*.rst, +0 elsewhere, which is what catches a mis-indented note body.W.Non-vacuity, 51 assertions across two scripts, both green. docutils 0.22.4's real behaviour was established first, and two of the initial assertions were wrong rather than the harness: fullwidth punctuation after an end-string is accepted (so the
\ ,escapes in the zh-cn tree are house style, not a requirement), while a CJK character directly before a start-string is dropped with no system message at all — only the literal-node and residue checks see it.Proven in both directions: synthetic controls for ja/ko/zh in both adjacency directions, note bodies indented and not, heading rules short and correct; then the real edited files mutated — jamming a word character against
WEB-INF/conf/system.propertiesin each of the sevenupgrade.rstdrops its literal nodes 2 → 0 and raises residue 1 → 5; and finally the whole harness run against four deliberate mutations of the ja file (jammed literal, short rule, deleted section, unindented note), red all four times, green again after restoring the file byte-identical by sha256.One figure still needs measuring
install/upgrade.rstsays the ZIP drops from 438.5 MiB to 204.7 MiB, in the Node.js section. The GCS change updated that number (218.9 → 204.7) with a measured compressed delta, so updating it is the established convention here — but the S3 change did not, and neither does this one. It cannot be derived: #3430's 5,827,073 is uncompressed jar bytes, not archive entries, and no built distribution is available to weigh. Recommend one measured update covering S3 and SSO together before release.