5f7a14fde8cdb24b01fc0e5eadba145bfd9ecb04
max
Sat Jul 25 23:16:06 2026 -0700
hgLogin: social login (Google/ORCID), email login link, change email. refs #37929
diff --git src/hg/hgMenubar/hgMenubar.c src/hg/hgMenubar/hgMenubar.c
index 2302170fca7..c4169b593b0 100644
--- src/hg/hgMenubar/hgMenubar.c
+++ src/hg/hgMenubar/hgMenubar.c
@@ -29,34 +29,37 @@
return cloneString("");
struct dyString *dy = dyStringNew(512);
char *userName = wikiLinkUserName();
if (userName == NULL)
{
// Link straight to the login page (absolute URL from wikiLink), not through hgSession.
char *loginUrl = wikiLinkUserLoginUrl("");
dyStringPrintf(dy, "Login", loginUrl);
}
else
{
// No hgsid available on static pages; the logout return URL simply omits it.
char *logoutUrl = wikiLinkUserLogoutUrl("");
char *changePwUrl = wikiLinkChangePasswordUrl("");
+ char *changeEmailUrl = wikiLinkChangeEmailUrl("");
dyStringPrintf(dy, "%s",
- userName, logoutUrl, changePwUrl ? changePwUrl : "", userName);
+ "data-username=\"%s\" data-logouturl=\"%s\" data-changepwurl=\"%s\" "
+ "data-changeemailurl=\"%s\">%s",
+ userName, logoutUrl, changePwUrl ? changePwUrl : "",
+ changeEmailUrl ? changeEmailUrl : "", userName);
}
return dyStringCannibalize(&dy);
}
char *incFilePath(char *cgiPath, char *filePath, char *docRoot)
/* Replace CGI_NAME in cgiPath with docRoot/filePath. filePath must begin with "/" eg "/inc/..." */
{
char *incPath = replaceChars(cgiPath, "/"CGI_NAME, filePath);
return catTwoStrings(docRoot, incPath);
}
void printIncludes(char* baseDir, char *docRoot)
{
// Cache-buster for the menu-bar CSS/JS: append ?v= so browsers refetch these when
// they change instead of serving a stale cached copy (the CGIs get this from