Add some create mail handlers for paste and files
Summary: Fixes T1144. Though actually I think T1144 wanted some handy way to email from the command-line / arc, this is cooler. :D Test Plan: set conf properly and then ./bin/mail receive-test --as btrahan --to pasties@phabricator.dev | README --> it worked...! couldn't test files as easily but verified exception thrown when I tried to test. Reviewers: epriestley Reviewed By: epriestley CC: aran, Korvin Maniphest Tasks: T1144 Differential Revision: https://secure.phabricator.com/D6622
This commit is contained in:
@@ -154,6 +154,11 @@ final class PhabricatorFilesConfigOptions
|
||||
"Specify this limit in bytes, or using a 'K', 'M', or 'G' ".
|
||||
"suffix."))
|
||||
->addExample('10M', pht("Allow Uploads 10MB or Smaller")),
|
||||
$this->newOption(
|
||||
'metamta.files.public-create-email',
|
||||
'string',
|
||||
null)
|
||||
->setDescription(pht('Allow uploaded files via email.')),
|
||||
$this->newOption('files.enable-imagemagick', 'bool', false)
|
||||
->setBoolOptions(
|
||||
array(
|
||||
|
||||
71
src/applications/files/mail/FilesCreateMailReceiver.php
Normal file
71
src/applications/files/mail/FilesCreateMailReceiver.php
Normal file
@@ -0,0 +1,71 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @group files
|
||||
*/
|
||||
final class FilesCreateMailReceiver
|
||||
extends PhabricatorMailReceiver {
|
||||
|
||||
public function isEnabled() {
|
||||
$app_class = 'PhabricatorApplicationFiles';
|
||||
return PhabricatorApplication::isClassInstalled($app_class);
|
||||
}
|
||||
|
||||
public function canAcceptMail(PhabricatorMetaMTAReceivedMail $mail) {
|
||||
$config_key = 'metamta.files.public-create-email';
|
||||
$create_address = PhabricatorEnv::getEnvConfig($config_key);
|
||||
if (!$create_address) {
|
||||
return false;
|
||||
}
|
||||
|
||||
foreach ($mail->getToAddresses() as $to_address) {
|
||||
if ($this->matchAddresses($create_address, $to_address)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
protected function processReceivedMail(
|
||||
PhabricatorMetaMTAReceivedMail $mail,
|
||||
PhabricatorUser $sender) {
|
||||
|
||||
$attachment_phids = $mail->getAttachments();
|
||||
if (empty($attachment_phids)) {
|
||||
throw new PhabricatorMetaMTAReceivedMailProcessingException(
|
||||
MetaMTAReceivedMailStatus::STATUS_UNHANDLED_EXCEPTION,
|
||||
'Ignoring email to create files that did not include attachments.');
|
||||
}
|
||||
$first_phid = head($attachment_phids);
|
||||
$mail->setRelatedPHID($first_phid);
|
||||
|
||||
$attachment_count = count($attachment_phids);
|
||||
if ($attachment_count > 1) {
|
||||
$subject = pht(
|
||||
'You successfully uploaded %d files.',
|
||||
$attachment_count);
|
||||
} else {
|
||||
$subject = pht('You successfully uploaded a file.');
|
||||
}
|
||||
|
||||
$file_uris = array();
|
||||
foreach ($attachment_phids as $phid) {
|
||||
$file_uris[] =
|
||||
PhabricatorEnv::getProductionURI('/file/info/'.$phid.'/');
|
||||
}
|
||||
|
||||
$body = new PhabricatorMetaMTAMailBody();
|
||||
$body->addRawSection($subject);
|
||||
$body->addTextSection(pht('FILE LINKS'), implode("\n", $file_uris));
|
||||
|
||||
id(new PhabricatorMetaMTAMail())
|
||||
->addTos(array($sender->getPHID()))
|
||||
->setSubject('[Files] '.$subject)
|
||||
->setFrom($sender->getPHID())
|
||||
->setRelatedPHID($first_phid)
|
||||
->setBody($body->render())
|
||||
->saveAndSend();
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user