From 511e04e42a73cb78df4b658e330c00c558f6b6b0 Mon Sep 17 00:00:00 2001 From: Adam Rauch Date: Sat, 16 May 2026 13:21:23 -0700 Subject: [PATCH 1/3] Support renew=true parameter for our CAS IdP --- api/src/org/labkey/api/security/AuthFilter.java | 17 +++++++++-------- .../api/security/AuthenticatedRequest.java | 13 ++++++++----- 2 files changed, 17 insertions(+), 13 deletions(-) diff --git a/api/src/org/labkey/api/security/AuthFilter.java b/api/src/org/labkey/api/security/AuthFilter.java index aac2863e5c5..966a7357d1b 100644 --- a/api/src/org/labkey/api/security/AuthFilter.java +++ b/api/src/org/labkey/api/security/AuthFilter.java @@ -199,14 +199,9 @@ else if (!AppProps.getInstance().isDevMode()) } if (null == user) - { - if (AppProps.getInstance().isOptionalFeatureEnabled(AppProps.EXPERIMENTAL_NO_GUESTS)) - user = User.nobody; - else - user = User.guest; - } + user = getGuestUser(); else - UserManager.updateRecentUser(user.isImpersonated() ? user.getImpersonatingUser() : user); // TODO: Sanity check this with Matt... treat impersonating admin as active, not impersonated user + UserManager.updateRecentUser(user.isImpersonated() ? user.getImpersonatingUser() : user); req = AuthenticatedRequest.create(req, user); @@ -262,7 +257,13 @@ private void addRandomHeader(HttpServletRequest req, HttpServletResponse resp) resp.addHeader("X-LK-NONCE", sb.toString()); } - + public static User getGuestUser() + { + if (AppProps.getInstance().isOptionalFeatureEnabled(AppProps.EXPERIMENTAL_NO_GUESTS)) + return User.nobody; + else + return User.guest; + } private boolean clearRequestAttributes(HttpServletRequest request) { diff --git a/api/src/org/labkey/api/security/AuthenticatedRequest.java b/api/src/org/labkey/api/security/AuthenticatedRequest.java index 690e1f5b0ab..26a91d18f72 100644 --- a/api/src/org/labkey/api/security/AuthenticatedRequest.java +++ b/api/src/org/labkey/api/security/AuthenticatedRequest.java @@ -55,15 +55,12 @@ import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; -/** - * User: matthewb - * Date: Feb 5, 2009 - */ public class AuthenticatedRequest extends HttpServletRequestWrapper implements AutoCloseable { private static final Logger _log = LogManager.getLogger(AuthenticatedRequest.class); private final User _user; + private boolean _loggedIn; private HttpSession _session = null; @@ -76,11 +73,17 @@ public static AuthenticatedRequest create(@NotNull HttpServletRequest request, @ private AuthenticatedRequest(@NotNull HttpServletRequest request, @NotNull User user) { - super(request instanceof AuthenticatedRequest ? (HttpServletRequest)((AuthenticatedRequest)request).getRequest() : request); + super(request instanceof AuthenticatedRequest authRequest ? authRequest.getRequest() : request); _user = user; _loggedIn = !_user.isGuest(); } + @Override + public HttpServletRequest getRequest() + { + return (HttpServletRequest)super.getRequest(); + } + @Override public void close() { From 84dddf44861c01078fbe027f53306fe1b15ff66f Mon Sep 17 00:00:00 2001 From: Adam Rauch Date: Mon, 18 May 2026 11:17:33 -0700 Subject: [PATCH 2/3] Skip the "timestamps shouldn't match" checks on SQL Server --- .../src/org/labkey/assay/AssayIntegrationTestCase.jsp | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/assay/src/org/labkey/assay/AssayIntegrationTestCase.jsp b/assay/src/org/labkey/assay/AssayIntegrationTestCase.jsp index cb7e846a345..c1df4c52dd6 100644 --- a/assay/src/org/labkey/assay/AssayIntegrationTestCase.jsp +++ b/assay/src/org/labkey/assay/AssayIntegrationTestCase.jsp @@ -586,10 +586,13 @@ // verify result created matches run's created in query table, but result modified now differs from run's created Map modifiedResults = new TableSelector(resultsTable, selectColumns, new SimpleFilter(runFieldKey, runRowId), null).getMap(); assertEquals("modifiedResults Created didn't match runOriginalCreated", modifiedResults.get("Created"), runOriginalCreated); - assertNotEquals("modifiedResults Created shouldn't match modifiedResult Modified", modifiedResults.get("Created"), modifiedResults.get("Modified")); - assertNotEquals("modifiedResults Modified shouldn't match runOriginalCreated", modifiedResults.get("Modified"), runOriginalCreated); - assertNotEquals("modifiedResults Modified shouldn't match runOriginalModified", modifiedResults.get("Modified"), runOriginalModified); - assertNotEquals("modifiedResults Modified shouldn't match modifiedRunResults Modified", modifiedResults.get("Modified"), modifiedRunResults.get("Modified")); + if (schema.getDbSchema().getSqlDialect().isPostgreSQL()) + { + assertNotEquals("modifiedResults Created shouldn't match modifiedResult Modified", modifiedResults.get("Created"), modifiedResults.get("Modified")); + assertNotEquals("modifiedResults Modified shouldn't match runOriginalCreated", modifiedResults.get("Modified"), runOriginalCreated); + assertNotEquals("modifiedResults Modified shouldn't match runOriginalModified", modifiedResults.get("Modified"), runOriginalModified); + assertNotEquals("modifiedResults Modified shouldn't match modifiedRunResults Modified", modifiedResults.get("Modified"), modifiedRunResults.get("Modified")); + } // verify modified in provisioned result table no longer null after result edit dbResult = getRealResult(resultsTable.getSchema(), realResultsTable.getName(), resultRowId); From 67118f5d1733edc8ac189b8e8b80595eccc6ad16 Mon Sep 17 00:00:00 2001 From: Adam Rauch Date: Mon, 18 May 2026 12:02:52 -0700 Subject: [PATCH 3/3] Increase sleepy time to work around SQL Server intermittent failures --- .../org/labkey/assay/AssayIntegrationTestCase.jsp | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/assay/src/org/labkey/assay/AssayIntegrationTestCase.jsp b/assay/src/org/labkey/assay/AssayIntegrationTestCase.jsp index c1df4c52dd6..491d652a502 100644 --- a/assay/src/org/labkey/assay/AssayIntegrationTestCase.jsp +++ b/assay/src/org/labkey/assay/AssayIntegrationTestCase.jsp @@ -580,19 +580,16 @@ updated.put("ResultProp", 200); updated.put("RowId", resultRowId); errors = new BatchValidationException(); - Thread.sleep(5); // SQL Server timestamps aren't granular enough to guarantee different modified time + Thread.sleep(schema.getDbSchema().getSqlDialect().isSqlServer() ? 100 : 5); // SQL Server timestamps aren't granular enough to guarantee different modified time resultsQUS.updateRows(user, c, Collections.singletonList(updated), null, errors, null, null); // verify result created matches run's created in query table, but result modified now differs from run's created Map modifiedResults = new TableSelector(resultsTable, selectColumns, new SimpleFilter(runFieldKey, runRowId), null).getMap(); assertEquals("modifiedResults Created didn't match runOriginalCreated", modifiedResults.get("Created"), runOriginalCreated); - if (schema.getDbSchema().getSqlDialect().isPostgreSQL()) - { - assertNotEquals("modifiedResults Created shouldn't match modifiedResult Modified", modifiedResults.get("Created"), modifiedResults.get("Modified")); - assertNotEquals("modifiedResults Modified shouldn't match runOriginalCreated", modifiedResults.get("Modified"), runOriginalCreated); - assertNotEquals("modifiedResults Modified shouldn't match runOriginalModified", modifiedResults.get("Modified"), runOriginalModified); - assertNotEquals("modifiedResults Modified shouldn't match modifiedRunResults Modified", modifiedResults.get("Modified"), modifiedRunResults.get("Modified")); - } + assertNotEquals("modifiedResults Created shouldn't match modifiedResult Modified", modifiedResults.get("Created"), modifiedResults.get("Modified")); + assertNotEquals("modifiedResults Modified shouldn't match runOriginalCreated", modifiedResults.get("Modified"), runOriginalCreated); + assertNotEquals("modifiedResults Modified shouldn't match runOriginalModified", modifiedResults.get("Modified"), runOriginalModified); + assertNotEquals("modifiedResults Modified shouldn't match modifiedRunResults Modified", modifiedResults.get("Modified"), modifiedRunResults.get("Modified")); // verify modified in provisioned result table no longer null after result edit dbResult = getRealResult(resultsTable.getSchema(), realResultsTable.getName(), resultRowId);