fe99a2d141b3f2d33e8706c1061d59015e0c571d hiram Thu Jun 4 14:39:19 2026 -0700 correct detection of login status and correct use of local hgcentraltest when not on one of the RR servers refs #31811 diff --git src/hg/hubApi/liftOver.c src/hg/hubApi/liftOver.c index 274b64ede17..3c655490ab1 100644 --- src/hg/hubApi/liftOver.c +++ src/hg/hubApi/liftOver.c @@ -159,51 +159,64 @@ jsonWriteBoolean(jw, "pending", TRUE); jsonWriteNumber(jw, "pendingStatus", sqlSigned(row[1])); jsonWriteString(jw, "pendingRequestTime", row[2]); } sqlFreeResult(&sr); } } apiFinishOutput(0, NULL, jw); hDisconnectOtto(&conn); } static void loginStatus() /* output current user login status as JSON */ { -char *userName = (loginSystemEnabled() || wikiLinkEnabled()) ? wikiLinkUserName() : NULL; +/* wikiLinkUserName() handles all cookie validation internally */ +char *userName = wikiLinkUserName(); struct jsonWrite *jw = apiStartOutput(); char hgLoginLink[2048]; +boolean privateHost = hIsPrivateHost(); +/* can not use hgcentral hglogin from hgwdev/genome-test */ +if (privateHost) + safef(hgLoginLink, sizeof(hgLoginLink), "%shgLogin", hLocalHostCgiBinUrl()); +else safef(hgLoginLink, sizeof(hgLoginLink), "%shgLogin", hLoginHostCgiBinUrl()); if (userName != NULL) { // Get both email and realName from gbMembers table - struct sqlConnection *sc = hConnectOtto(); + struct sqlConnection *sc = NULL; + if (privateHost) + sc = hConnectCentral(); + else + sc = hConnectOtto(); struct dyString *query = sqlDyStringCreate("select email, realName from gbMembers where userName = '%s'", userName); struct sqlResult *sr = sqlGetResult(sc, dyStringCannibalize(&query)); char **row = sqlNextRow(sr); char *email = NULL; char *realName = NULL; if (row != NULL) { email = cloneString(row[0] ? row[0] : ""); realName = cloneString(row[1] ? row[1] : ""); } sqlFreeResult(&sr); + if (privateHost) + hDisconnectCentral(&sc); + else hDisconnectOtto(&sc); // Build logout URL with returnto parameter char *returnTo = cgiOptionalString("returnTo"); struct dyString *logoutUrl = dyStringNew(0); dyStringPrintf(logoutUrl, "%s?hgLogin.do.displayLogout=1", hgLoginLink); if (isNotEmpty(returnTo)) { char *encodedReturnUrl = cgiEncodeFull(returnTo); dyStringPrintf(logoutUrl, "&returnto=%s", encodedReturnUrl); freeMem(encodedReturnUrl); } jsonWriteString(jw, "userName", userName);