mirror of
https://we.phorge.it/source/phorge.git
synced 2024-11-29 10:12:41 +01:00
Allow bugs@ addresses to blanket-accept tasks
Summary: Allow configuration of a default author for bugs@ emails which don't correspond to a known system user. Test Plan: Configured a default author, sent some mails from nonsense addresses, tasks were created. Reviewers: davidreuss, jungejason, nh, tuomaspelkonen, aran Reviewed By: aran CC: aran, epriestley, ide Differential Revision: 1013
This commit is contained in:
parent
0cb9f3dcf5
commit
9a4bb3901e
5 changed files with 50 additions and 8 deletions
|
@ -268,6 +268,17 @@ return array(
|
||||||
// still **COMPLETELY INSECURE**.
|
// still **COMPLETELY INSECURE**.
|
||||||
'metamta.insecure-auth-with-reply-to' => false,
|
'metamta.insecure-auth-with-reply-to' => false,
|
||||||
|
|
||||||
|
// If you enable 'metamta.maniphest.public-create-email' and create an
|
||||||
|
// email address like "bugs@phabricator.example.com", it will default to
|
||||||
|
// rejecting mail which doesn't come from a known user. However, you might
|
||||||
|
// want to let anyone send email to this address; to do so, set a default
|
||||||
|
// author here (a Phabricator username). A typical use of this might be to
|
||||||
|
// create a "System Agent" user called "bugs" and use that name here. If you
|
||||||
|
// specify a valid username, mail will always be accepted and used to create
|
||||||
|
// a task, even if the sender is not a system user. The original email
|
||||||
|
// address will be stored in an 'From Email' field on the task.
|
||||||
|
'metamta.maniphest.default-public-author' => null,
|
||||||
|
|
||||||
|
|
||||||
// -- Auth ------------------------------------------------------------------ //
|
// -- Auth ------------------------------------------------------------------ //
|
||||||
|
|
||||||
|
|
2
resources/sql/patches/077.originalemail.sql
Normal file
2
resources/sql/patches/077.originalemail.sql
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
ALTER TABLE phabricator_maniphest.maniphest_task
|
||||||
|
ADD originalEmailSource VARCHAR(255);
|
|
@ -115,6 +115,17 @@ class ManiphestTaskDetailController extends ManiphestController {
|
||||||
|
|
||||||
$dict['Author'] = $handles[$task->getAuthorPHID()]->renderLink();
|
$dict['Author'] = $handles[$task->getAuthorPHID()]->renderLink();
|
||||||
|
|
||||||
|
$source = $task->getOriginalEmailSource();
|
||||||
|
if ($source) {
|
||||||
|
$subject = '[T'.$task->getID().'] '.$task->getTitle();
|
||||||
|
$dict['From Email'] = phutil_render_tag(
|
||||||
|
'a',
|
||||||
|
array(
|
||||||
|
'href' => 'mailto:'.$source.'?subject='.$subject
|
||||||
|
),
|
||||||
|
phutil_escape_html($source));
|
||||||
|
}
|
||||||
|
|
||||||
$projects = $task->getProjectPHIDs();
|
$projects = $task->getProjectPHIDs();
|
||||||
if ($projects) {
|
if ($projects) {
|
||||||
$project_links = array();
|
$project_links = array();
|
||||||
|
|
|
@ -31,7 +31,7 @@ class ManiphestTask extends ManiphestDAO {
|
||||||
|
|
||||||
protected $title;
|
protected $title;
|
||||||
protected $description;
|
protected $description;
|
||||||
|
protected $originalEmailSource;
|
||||||
protected $mailKey;
|
protected $mailKey;
|
||||||
|
|
||||||
protected $attached = array();
|
protected $attached = array();
|
||||||
|
|
|
@ -64,16 +64,34 @@ class PhabricatorMetaMTAReceivedMail extends PhabricatorMetaMTADAO {
|
||||||
'metamta.maniphest.public-create-email');
|
'metamta.maniphest.public-create-email');
|
||||||
|
|
||||||
if ($create_task && $to == $create_task) {
|
if ($create_task && $to == $create_task) {
|
||||||
|
$receiver = new ManiphestTask();
|
||||||
|
|
||||||
$user = $this->lookupPublicUser();
|
$user = $this->lookupPublicUser();
|
||||||
if (!$user) {
|
if ($user) {
|
||||||
// TODO: We should probably bounce these since from the user's
|
$this->setAuthorPHID($user->getPHID());
|
||||||
// perspective their email vanishes into a black hole.
|
} else {
|
||||||
return $this->setMessage("Invalid public user '{$from}'.")->save();
|
$default_author = PhabricatorEnv::getEnvConfig(
|
||||||
|
'metamta.manipest.default-public-author');
|
||||||
|
|
||||||
|
if ($default_author) {
|
||||||
|
$user = id(new PhabricatorUser())->loadOneWhere(
|
||||||
|
'username = %s',
|
||||||
|
$default_author);
|
||||||
|
if ($user) {
|
||||||
|
$receiver->setOriginalEmailSource($from);
|
||||||
|
} else {
|
||||||
|
throw new Exception(
|
||||||
|
"Phabricator is misconfigured, the configuration key ".
|
||||||
|
"'metamta.manipest.default-public-author' is set to user ".
|
||||||
|
"'{$default_author}' but that user does not exist.");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// TODO: We should probably bounce these since from the user's
|
||||||
|
// perspective their email vanishes into a black hole.
|
||||||
|
return $this->setMessage("Invalid public user '{$from}'.")->save();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->setAuthorPHID($user->getPHID());
|
|
||||||
|
|
||||||
$receiver = new ManiphestTask();
|
|
||||||
$receiver->setAuthorPHID($user->getPHID());
|
$receiver->setAuthorPHID($user->getPHID());
|
||||||
$receiver->setPriority(ManiphestTaskPriority::PRIORITY_TRIAGE);
|
$receiver->setPriority(ManiphestTaskPriority::PRIORITY_TRIAGE);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue