547d1ed19123e170307c724bb511e0bf6f086416 max Mon Sep 21 06:30:13 2026 -0700 hgLogin: add an "or" divider before the email-sign-in-link button too, refs #38302 diff --git src/hg/hgLogin/hgLogin.c src/hg/hgLogin/hgLogin.c index 723bed41d8a..431b4643002 100644 --- src/hg/hgLogin/hgLogin.c +++ src/hg/hgLogin/hgLogin.c @@ -60,31 +60,31 @@ char returnAddr[256]; char *hgLoginUrl = NULL; /* full absolute URL to hgLogin as seen from browser, e.g. http://genome.ucsc.edu/cgi-bin/hgLogin. Can be a relative URL /cgi-bin/hgLogin if hg.conf login.relativeLink is on. */ boolean pwdEyeIconEnabled = TRUE; /* show/hide eye icon on password fields; set from hg.conf login.pwdEyeIcon in doMiddle() */ boolean recovEmailVerifyOk = FALSE; /* TRUE when gbMembers has the recovEmailVerified column, so a confirmed recovery address can be told apart from one that was merely typed into the signup form. Set in doMiddle() after the auto-upgrade; FALSE on a mirror where the ALTER failed. */ /* for earlyBotCheck() function at the beginning of main() */ #define delayFraction 1.0 /* standard penalty is 1.0 for most CGIs */ /* Forward declarations for functions used before their definitions. */ static void printSocialButtons(boolean dividerAbove, boolean dividerBelow, char *action); -static void printEmailLinkButton(); +static void printEmailLinkButton(boolean dividerAbove); static boolean emailLinkEnabled(); static boolean recovEmailChangeEnabled(); void changeRecovEmailPage(struct sqlConnection *conn); static void printUsernameNote(); void emailLinkPage(struct sqlConnection *conn); void displayLoginPage(struct sqlConnection *conn); void displayAccHelpPage(struct sqlConnection *conn); void completeAccountPage(struct sqlConnection *conn); void sendEmailLink(struct sqlConnection *conn); static void loginAndReturn(struct sqlConnection *conn, char *userName, uint idx); static boolean pendingIdentityValid(); /* ---- Global helper functions ---- */ char *browserName() /* Return the browser name like 'UCSC Genome Browser' */ @@ -957,31 +957,31 @@ "Forgot password" "" "\n" "
" " " "  Cancel" "
" , hgLoginUrl, getReturnToUrlForAttr()); if (pwdEyeIconEnabled) { printPwdToggleJS(); jsOnEventById("click", "pwdEyeIcon", "togglePwdVisibility('password','pwdEyeSlash');"); } cartSaveSession(cart); hPrintf("\n"); -printEmailLinkButton(); +printEmailLinkButton(TRUE); printSocialButtons(TRUE, FALSE, "Sign in"); hPrintf( "" "\n" "\n" "" ""); } void activateAccount(struct sqlConnection *conn) /* activate account */ { char query[256]; char *token = cgiUsualString("token", ""); char *username = cgiUsualString("user",""); @@ -2226,35 +2226,38 @@ } static boolean recovEmailChangeEnabled() /* Return TRUE if users may set or change their own recovery email address. Needs working * outbound mail to confirm the new address, a login.cookieSalt to sign the confirmation link, * and the recovEmailVerified column to record the answer in, so all three are required on top * of the admin turning it on with login.recovEmailChange=on in hg.conf. */ { if (!cfgOptionBooleanDefault(CFG_LOGIN_RECOV_EMAIL_CHANGE, FALSE)) return FALSE; if (!recovEmailVerifyOk || isEmpty(cfgOption(CFG_LOGIN_COOKIE_SALT))) return FALSE; return !sameWord(returnAddr, "NOEMAIL"); } -static void printEmailLinkButton() -/* Print a grey button that opens the passwordless email-link login page, if enabled. */ +static void printEmailLinkButton(boolean dividerAbove) +/* Print a grey button that opens the passwordless email-link login page, if enabled, + * optionally preceded by an "or" divider. */ { if (!emailLinkEnabled()) return; +if (dividerAbove) + hPrintf("
or
"); hPrintf("" "Email me a sign-in link", hgLoginUrl); } static void printUsernameNote() /* Print a short hint, shown wherever a new username is chosen, explaining that the username * shows up in every short link the user later creates, so it should be short and easy to type. */ { hPrintf("

Note: your username becomes part of every short link " "you create later (for example %s/s/username/MySession), so choose " "something short and easy to type.

", brwAddr); } static void loginAndReturn(struct sqlConnection *conn, char *userName, uint idx) /* Set the permanent login cookies for userName and bounce back to the returnto URL.