diff options
-rwxr-xr-x | aurweb/scripts/notify.py | 12 | ||||
-rw-r--r-- | schema/aur-schema.sql | 1 | ||||
-rw-r--r-- | upgrading/4.9.0.txt | 6 | ||||
-rw-r--r-- | web/html/account.php | 3 | ||||
-rw-r--r-- | web/html/login.php | 2 | ||||
-rw-r--r-- | web/html/passreset.php | 6 | ||||
-rw-r--r-- | web/html/register.php | 4 | ||||
-rw-r--r-- | web/lib/acctfuncs.inc.php | 15 | ||||
-rw-r--r-- | web/template/account_edit_form.php | 12 |
9 files changed, 47 insertions, 14 deletions
diff --git a/aurweb/scripts/notify.py b/aurweb/scripts/notify.py index f2767fd8..b0f218b5 100755 --- a/aurweb/scripts/notify.py +++ b/aurweb/scripts/notify.py @@ -90,13 +90,17 @@ class Notification: class ResetKeyNotification(Notification): def __init__(self, conn, uid): - cur = conn.execute('SELECT UserName, Email, LangPreference, ' + - 'ResetKey FROM Users WHERE ID = ?', [uid]) - self._username, self._to, self._lang, self._resetkey = cur.fetchone() + cur = conn.execute('SELECT UserName, Email, BackupEmail, ' + + 'LangPreference, ResetKey ' + + 'FROM Users WHERE ID = ?', [uid]) + self._username, self._to, self._backup, self._lang, self._resetkey = cur.fetchone() super().__init__() def get_recipients(self): - return [(self._to, self._lang)] + if self._backup: + return [(self._to, self._lang), (self._backup, self._lang)] + else: + return [(self._to, self._lang)] def get_subject(self, lang): return self._l10n.translate('AUR Password Reset', lang) diff --git a/schema/aur-schema.sql b/schema/aur-schema.sql index fa991ba6..1f86df20 100644 --- a/schema/aur-schema.sql +++ b/schema/aur-schema.sql @@ -23,6 +23,7 @@ CREATE TABLE Users ( Suspended TINYINT UNSIGNED NOT NULL DEFAULT 0, Username VARCHAR(32) NOT NULL, Email VARCHAR(254) NOT NULL, + BackupEmail VARCHAR(254) NULL DEFAULT NULL, HideEmail TINYINT UNSIGNED NOT NULL DEFAULT 0, Passwd VARCHAR(255) NOT NULL, Salt CHAR(32) NOT NULL DEFAULT '', diff --git a/upgrading/4.9.0.txt b/upgrading/4.9.0.txt index 4c79283e..241f24af 100644 --- a/upgrading/4.9.0.txt +++ b/upgrading/4.9.0.txt @@ -4,3 +4,9 @@ ALTER TABLE PackageRequests ADD COLUMN ClosedTS BIGINT UNSIGNED NULL DEFAULT NULL; ALTER TABLE PackageRequests ADD COLUMN ClosedUID INTEGER UNSIGNED NULL DEFAULT NULL; ---- + +2. Add a new column to store backup email addresses: + +---- +ALTER TABLE Users ADD COLUMN BackupEmail VARCHAR(254) NULL DEFAULT NULL; +---- diff --git a/web/html/account.php b/web/html/account.php index ff9aba5b..c05d136d 100644 --- a/web/html/account.php +++ b/web/html/account.php @@ -33,6 +33,7 @@ if ($action == "UpdateAccount") { in_request("T"), in_request("S"), in_request("E"), + in_request("BE"), in_request("H"), in_request("P"), in_request("C"), @@ -97,6 +98,7 @@ if (isset($_COOKIE["AURSID"])) { $row["AccountTypeID"], $row["Suspended"], $row["Email"], + $row["BackupEmail"], $row["HideEmail"], "", "", @@ -159,6 +161,7 @@ if (isset($_COOKIE["AURSID"])) { in_request("T"), in_request("S"), in_request("E"), + in_request("BE"), in_request("H"), in_request("P"), in_request("C"), diff --git a/web/html/login.php b/web/html/login.php index df517055..01454414 100644 --- a/web/html/login.php +++ b/web/html/login.php @@ -26,7 +26,7 @@ html_header('AUR ' . __("Login")); <ul class="errorlist"><li><?= $login_error ?></li></ul> <?php endif; ?> <p> - <label for="id_username"><?= __('User name or email address') . ':'; ?></label> + <label for="id_username"><?= __('User name or primary email address') . ':'; ?></label> <input id="id_username" type="text" name="user" size="30" maxlength="<?= max(config_get_int('options', 'username_max_len'), 254); ?>" value="<?php if (isset($_POST['user'])) { print htmlspecialchars($_POST['user'], ENT_QUOTES); } ?>" autofocus="autofocus" /> </p> <p> diff --git a/web/html/passreset.php b/web/html/passreset.php index b3c8bd29..26b9bbbb 100644 --- a/web/html/passreset.php +++ b/web/html/passreset.php @@ -65,7 +65,7 @@ html_header(__("Password Reset")); <form action="" method="post"> <table> <tr> - <td><?= __("Confirm your e-mail address:"); ?></td> + <td><?= __("Confirm your user name or primary e-mail address:"); ?></td> <td><input type="text" name="user" size="30" maxlength="64" /></td> </tr> <tr> @@ -81,14 +81,14 @@ html_header(__("Password Reset")); <input type="submit" class="button" value="<?= __('Continue') ?>" /> </form> <?php else: ?> - <p><?= __('If you have forgotten the e-mail address you used to register, please send a message to the %saur-general%s mailing list.', + <p><?= __('If you have forgotten the user name and the primary e-mail address you used to register, please send a message to the %saur-general%s mailing list.', '<a href="https://mailman.archlinux.org/mailman/listinfo/aur-general">', '</a>'); ?></p> <?php if ($error): ?> <ul class="errorlist"><li><?= $error ?></li></ul> <?php endif; ?> <form action="" method="post"> - <p><?= __("Enter your user name or your e-mail address:"); ?> + <p><?= __("Enter your user name or your primary e-mail address:"); ?> <input type="text" name="user" size="30" maxlength="64" /></p> <input type="submit" class="button" value="<?= __('Continue') ?>" /> </form> diff --git a/web/html/register.php b/web/html/register.php index 610befc4..fee0a68f 100644 --- a/web/html/register.php +++ b/web/html/register.php @@ -23,6 +23,7 @@ if (in_request("Action") == "NewAccount") { 1, 0, in_request("E"), + in_request("BE"), in_request("H"), '', '', @@ -52,6 +53,7 @@ if (in_request("Action") == "NewAccount") { 1, 0, in_request("E"), + in_request("BE"), in_request("H"), '', '', @@ -75,7 +77,7 @@ if (in_request("Action") == "NewAccount") { } } else { print '<p>' . __("Use this form to create an account.") . '</p>'; - display_account_form("NewAccount", "", "", "", "", "", "", "", "", $LANG); + display_account_form("NewAccount", "", "", "", "", "", "", "", "", "", $LANG); } echo '</div>'; diff --git a/web/lib/acctfuncs.inc.php b/web/lib/acctfuncs.inc.php index f6cda69c..443fb4b1 100644 --- a/web/lib/acctfuncs.inc.php +++ b/web/lib/acctfuncs.inc.php @@ -46,6 +46,7 @@ function html_format_pgp_fingerprint($fingerprint) { * @param string $T The account type of the displayed user * @param string $S Whether the displayed user has a suspended account * @param string $E The e-mail address of the displayed user + * @param string $BE The backup e-mail address of the displayed user * @param string $H Whether the e-mail address of the displayed user is hidden * @param string $P The password value of the displayed user * @param string $C The confirmed password value of the displayed user @@ -67,7 +68,7 @@ function html_format_pgp_fingerprint($fingerprint) { * * @return void */ -function display_account_form($A,$U="",$T="",$S="",$E="",$H="",$P="",$C="",$R="", +function display_account_form($A,$U="",$T="",$S="",$E="",$BE="",$H="",$P="",$C="",$R="", $L="",$TZ="",$HP="",$I="",$K="",$PK="",$J="",$CN="",$UN="",$ON="",$UID=0,$N="",$captcha_salt="",$captcha="") { global $SUPPORTED_LANGS; @@ -95,6 +96,7 @@ function display_account_form($A,$U="",$T="",$S="",$E="",$H="",$P="",$C="",$R="" * @param string $T The account type for the user * @param string $S Whether or not the account is suspended * @param string $E The e-mail address for the user + * @param string $BE The backup e-mail address for the user * @param string $H Whether or not the e-mail address should be hidden * @param string $P The password for the user * @param string $C The confirmed password for the user @@ -117,7 +119,7 @@ function display_account_form($A,$U="",$T="",$S="",$E="",$H="",$P="",$C="",$R="" * * @return array Boolean indicating success and message to be printed */ -function process_account_form($TYPE,$A,$U="",$T="",$S="",$E="",$H="",$P="",$C="", +function process_account_form($TYPE,$A,$U="",$T="",$S="",$E="",$BE="",$H="",$P="",$C="", $R="",$L="",$TZ="",$HP="",$I="",$K="",$PK="",$J="",$CN="",$UN="",$ON="",$UID=0,$N="",$passwd="",$captcha_salt="",$captcha="") { global $SUPPORTED_LANGS; @@ -175,6 +177,9 @@ function process_account_form($TYPE,$A,$U="",$T="",$S="",$E="",$H="",$P="",$C="" if (!$error && !valid_email($E)) { $error = __("The email address is invalid."); } + if (!$error && $BE && !valid_email($BE)) { + $error = __("The backup email address is invalid."); + } if (!$error && !empty($HP) && !valid_homepage($HP)) { $error = __("The home page is invalid, please specify the full HTTP(s) URL."); @@ -311,6 +316,7 @@ function process_account_form($TYPE,$A,$U="",$T="",$S="",$E="",$H="",$P="",$C="" } $U = $dbh->quote($U); $E = $dbh->quote($E); + $BE = $dbh->quote($BE); $P = $dbh->quote($P); $R = $dbh->quote($R); $L = $dbh->quote($L); @@ -319,9 +325,9 @@ function process_account_form($TYPE,$A,$U="",$T="",$S="",$E="",$H="",$P="",$C="" $I = $dbh->quote($I); $K = $dbh->quote(str_replace(" ", "", $K)); $q = "INSERT INTO Users (AccountTypeID, Suspended, "; - $q.= "InactivityTS, Username, Email, Passwd , "; + $q.= "InactivityTS, Username, Email, BackupEmail, Passwd , "; $q.= "RealName, LangPreference, Timezone, Homepage, IRCNick, PGPKey) "; - $q.= "VALUES (1, 0, 0, $U, $E, $P, $R, $L, $TZ, "; + $q.= "VALUES (1, 0, 0, $U, $E, $BE, $P, $R, $L, $TZ, "; $q.= "$HP, $I, $K)"; $result = $dbh->exec($q); if (!$result) { @@ -374,6 +380,7 @@ function process_account_form($TYPE,$A,$U="",$T="",$S="",$E="",$H="",$P="",$C="" $q.= ", Suspended = 0"; } $q.= ", Email = " . $dbh->quote($E); + $q.= ", BackupEmail = " . $dbh->quote($BE); if ($H) { $q.= ", HideEmail = 1"; } else { diff --git a/web/template/account_edit_form.php b/web/template/account_edit_form.php index 09d65c0f..edacbbf3 100644 --- a/web/template/account_edit_form.php +++ b/web/template/account_edit_form.php @@ -76,12 +76,22 @@ <label for="id_email"><?= __("Email Address") ?>:</label> <input type="text" size="30" maxlength="254" name="E" id="id_email" value="<?= htmlspecialchars($E,ENT_QUOTES) ?>" /> (<?= __("required") ?>) </p> - <p> <em><?= __("Please ensure you correctly entered your email address, otherwise you will be locked out.") ?></em> </p> <p> + <label for="id_backup_email"><?= __("Backup Email Address") ?>:</label> + <input type="text" size="30" maxlength="254" name="BE" id="id_backup_email" value="<?= htmlspecialchars($BE, ENT_QUOTES) ?>" /> + </p> + <p> + <em> + <?= __("Optionally provide a secondary email address that can be used to restore your account in case you lose access to your primary email address.") ?> + <?= __("Password reset links are always sent to both your primary and your backup email address.") ?> + </em> + </p> + + <p> <label for="id_hide"><?= __("Hide Email Address") ?>:</label> <input type="checkbox" name="H" id="id_hide" <?= $H ? 'checked="checked"' : '' ?> /> </p> |