[ Index ] |
PHP Cross Reference of Phabricator |
[Summary view] [Print] [Text view]
1 <?php 2 3 final class PhabricatorMetaMTAMailgunReceiveController 4 extends PhabricatorMetaMTAController { 5 6 public function shouldRequireLogin() { 7 return false; 8 } 9 10 private function verifyMessage() { 11 $api_key = PhabricatorEnv::getEnvConfig('mailgun.api-key'); 12 $request = $this->getRequest(); 13 $timestamp = $request->getStr('timestamp'); 14 $token = $request->getStr('token'); 15 $sig = $request->getStr('signature'); 16 return hash_hmac('sha256', $timestamp.$token, $api_key) == $sig; 17 18 } 19 public function processRequest() { 20 21 // No CSRF for Mailgun. 22 $unguarded = AphrontWriteGuard::beginScopedUnguardedWrites(); 23 24 if (!$this->verifyMessage()) { 25 throw new Exception( 26 'Mail signature is not valid. Check your Mailgun API key.'); 27 } 28 29 $request = $this->getRequest(); 30 $user = $request->getUser(); 31 32 $raw_headers = $request->getStr('headers'); 33 $raw_headers = explode("\n", rtrim($raw_headers)); 34 $raw_dict = array(); 35 foreach (array_filter($raw_headers) as $header) { 36 list($name, $value) = explode(':', $header, 2); 37 $raw_dict[$name] = ltrim($value); 38 } 39 40 $headers = array( 41 'to' => $request->getStr('recipient'), 42 'from' => $request->getStr('from'), 43 'subject' => $request->getStr('subject'), 44 ) + $raw_dict; 45 46 $received = new PhabricatorMetaMTAReceivedMail(); 47 $received->setHeaders($headers); 48 $received->setBodies(array( 49 'text' => $request->getStr('stripped-text'), 50 'html' => $request->getStr('stripped-html'), 51 )); 52 53 $file_phids = array(); 54 foreach ($_FILES as $file_raw) { 55 try { 56 $file = PhabricatorFile::newFromPHPUpload( 57 $file_raw, 58 array( 59 'authorPHID' => $user->getPHID(), 60 )); 61 $file_phids[] = $file->getPHID(); 62 } catch (Exception $ex) { 63 phlog($ex); 64 } 65 } 66 $received->setAttachments($file_phids); 67 $received->save(); 68 69 $received->processReceivedMail(); 70 71 $response = new AphrontWebpageResponse(); 72 $response->setContent(pht("Got it! Thanks, Mailgun!\n")); 73 return $response; 74 } 75 76 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Sun Nov 30 09:20:46 2014 | Cross-referenced by PHPXref 0.7.1 |