Add option to hide one's email address

Implements FS#42343.

Signed-off-by: Marcel Korpel <marcel.korpel@gmail.com>
Signed-off-by: Lukas Fleischer <lfleischer@archlinux.org>
This commit is contained in:
Marcel Korpel 2015-09-20 20:12:25 +02:00 committed by Lukas Fleischer
parent f3ec4d1ef5
commit d5d08b8f92
7 changed files with 46 additions and 15 deletions

View file

@ -26,6 +26,7 @@ CREATE TABLE Users (
Suspended TINYINT UNSIGNED NOT NULL DEFAULT 0,
Username VARCHAR(32) NOT NULL,
Email VARCHAR(64) NOT NULL,
HideEmail TINYINT UNSIGNED NOT NULL DEFAULT 0,
Passwd CHAR(32) NOT NULL,
Salt CHAR(32) NOT NULL DEFAULT '',
ResetKey CHAR(32) NOT NULL DEFAULT '',

View file

@ -17,3 +17,10 @@ ALTER TABLE PackageBases
ADD COLUMN FlaggerComment VARCHAR(255) NOT NULL,
ADD FOREIGN KEY (FlaggerUID) REFERENCES Users(ID) ON DELETE SET NULL;
----
3. Add field to store the state of a user's email address:
----
ALTER TABLE Users
ADD COLUMN HideEmail TINYINT UNSIGNED NOT NULL DEFAULT 0;
----

View file

@ -32,10 +32,10 @@ if ($action == "UpdateAccount") {
list($success, $update_account_message) = process_account_form(
"edit", "UpdateAccount",
in_request("U"), in_request("T"), in_request("S"),
in_request("E"), in_request("P"), in_request("C"),
in_request("R"), in_request("L"), in_request("I"),
in_request("K"), in_request("PK"), in_request("J"),
in_request("ID"), $row["Username"]);
in_request("E"), in_request("H"), in_request("P"),
in_request("C"), in_request("R"), in_request("L"),
in_request("I"), in_request("K"), in_request("PK"),
in_request("J"), in_request("ID"), $row["Username"]);
}
}
@ -79,8 +79,8 @@ if (isset($_COOKIE["AURSID"])) {
if (can_edit_account($row)) {
display_account_form("UpdateAccount", $row["Username"],
$row["AccountTypeID"], $row["Suspended"], $row["Email"],
"", "", $row["RealName"], $row["LangPreference"],
$row["IRCNick"], $row["PGPKey"], $PK,
$row["HideEmail"], "", "", $row["RealName"],
$row["LangPreference"], $row["IRCNick"], $row["PGPKey"], $PK,
$row["InactivityTS"] ? 1 : 0, $row["ID"], $row["Username"]);
} else {
print __("You do not have permission to edit this account.");
@ -115,9 +115,10 @@ if (isset($_COOKIE["AURSID"])) {
if (!$success) {
display_account_form("UpdateAccount", in_request("U"), in_request("T"),
in_request("S"), in_request("E"), in_request("P"), in_request("C"),
in_request("R"), in_request("L"), in_request("I"), in_request("K"),
in_request("PK"), in_request("J"), in_request("ID"), $row["Username"]);
in_request("S"), in_request("E"), in_request("H"), in_request("P"),
in_request("C"), in_request("R"), in_request("L"), in_request("I"),
in_request("K"), in_request("PK"), in_request("J"), in_request("ID"),
$row["Username"]);
}
} else {

View file

@ -21,7 +21,7 @@ echo '<h2>' . __('Register') . '</h2>';
if (in_request("Action") == "NewAccount") {
list($success, $message) = process_account_form(
"new", "NewAccount", in_request("U"), 1, 0,
in_request("E"), '', '', in_request("R"),
in_request("E"), in_request("H"), '', '', in_request("R"),
in_request("L"), in_request("I"), in_request("K"),
in_request("PK"));
@ -29,13 +29,13 @@ if (in_request("Action") == "NewAccount") {
if (!$success) {
display_account_form("NewAccount", in_request("U"), 1, 0,
in_request("E"), '', '', in_request("R"),
in_request("E"), in_request("H"), '', '', in_request("R"),
in_request("L"), in_request("I"), in_request("K"),
in_request("PK"));
}
} else {
print '<p>' . __("Use this form to create an account.") . '</p>';
display_account_form("NewAccount", "", "", "", "", "", "", "", $LANG);
display_account_form("NewAccount", "", "", "", "", "", "", "", "", $LANG);
}
echo '</div>';

View file

@ -47,6 +47,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 $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
* @param string $R The real name of the displayed user
@ -60,7 +61,7 @@ function html_format_pgp_fingerprint($fingerprint) {
*
* @return void
*/
function display_account_form($A,$U="",$T="",$S="",$E="",$P="",$C="",$R="",
function display_account_form($A,$U="",$T="",$S="",$E="",$H="",$P="",$C="",$R="",
$L="",$I="",$K="",$PK="",$J="",$UID=0,$N="") {
global $SUPPORTED_LANGS;
@ -78,6 +79,7 @@ function display_account_form($A,$U="",$T="",$S="",$E="",$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 $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
* @param string $R The real name of the user
@ -91,7 +93,7 @@ function display_account_form($A,$U="",$T="",$S="",$E="",$P="",$C="",$R="",
*
* @return array Boolean indicating success and message to be printed
*/
function process_account_form($TYPE,$A,$U="",$T="",$S="",$E="",$P="",$C="",
function process_account_form($TYPE,$A,$U="",$T="",$S="",$E="",$H="",$P="",$C="",
$R="",$L="",$I="",$K="",$PK="",$J="",$UID=0,$N="") {
global $SUPPORTED_LANGS;
@ -324,6 +326,11 @@ function process_account_form($TYPE,$A,$U="",$T="",$S="",$E="",$P="",$C="",
$q.= ", Suspended = 0";
}
$q.= ", Email = " . $dbh->quote($E);
if ($H) {
$q.= ", HideEmail = 1";
} else {
$q.= ", HideEmail = 0";
}
if ($P) {
$salt = generate_salt();
$hash = salted_hash($P, $salt);

View file

@ -25,7 +25,17 @@
</tr>
<tr>
<th><?= __("Email Address") . ":" ?></th>
<td><a href="mailto:<?= htmlspecialchars($row["Email"], ENT_QUOTES) ?>"><?= htmlspecialchars($row["Email"], ENT_QUOTES) ?></a></td>
<td>
<?php
if ($row["HideEmail"] == 1 && !has_credential(CRED_ACCOUNT_SEARCH)):
print "<em>" . __("hidden") . "</em>";
else:
?>
<a href="mailto:<?= htmlspecialchars($row["Email"], ENT_QUOTES) ?>"><?= htmlspecialchars($row["Email"], ENT_QUOTES) ?></a>
<?php
endif;
?>
</td>
</tr>
<tr>
<th><?= __("Real Name") . ":" ?></th>

View file

@ -76,6 +76,11 @@
<em><?= __("Please ensure you correctly entered your email address, otherwise you will be locked out.") ?></em>
</p>
<p>
<label for="id_hide"><?= __("Hide Email Address") ?>:</label>
<input type="checkbox" name="H" id="id_hide" <?= $H ? 'checked="checked"' : '' ?> />
</p>
<?php if ($A == "UpdateAccount"): ?>
<p>
<label for="id_passwd1"><?= __("Password") ?>:</label>