<?php
							 | 
						|
								
							 | 
						|
								$app->post('/mailgun', function() use($app) {
							 | 
						|
								  $params = $app->request()->params();
							 | 
						|
								
							 | 
						|
								  // Find the user for this email
							 | 
						|
								  if(!preg_match('/([^ <>]+)@'.Config::$hostname.'/', $params['To'], $match)) {
							 | 
						|
								    $app->response()->body('invalid recipient');
							 | 
						|
								    return;
							 | 
						|
								  }
							 | 
						|
								
							 | 
						|
								  $user = ORM::for_table('users')->where('email_username', $match[1])->find_one();
							 | 
						|
								  if(!$user) {
							 | 
						|
								    $app->response()->body('user not found');
							 | 
						|
								    return;
							 | 
						|
								  }  
							 | 
						|
								
							 | 
						|
								  if(!$user->micropub_access_token) {
							 | 
						|
								    $app->response()->body('user has no access token');
							 | 
						|
								    return;
							 | 
						|
								  }
							 | 
						|
								
							 | 
						|
								  $data = array(
							 | 
						|
								    'published' => (k($params, 'Date') ? date('c', strtotime(k($params, 'Date'))) : date('c'))
							 | 
						|
								  );
							 | 
						|
								
							 | 
						|
								  if(k($params, 'Subject'))
							 | 
						|
								    $data['name'] = trim(k($params, 'Subject'));
							 | 
						|
								
							 | 
						|
								  if(k($params, 'body-plain'))
							 | 
						|
								    $data['content'] = trim(k($params, 'body-plain'));
							 | 
						|
								
							 | 
						|
								  // Set tags for any hashtags used in the body
							 | 
						|
								  if(preg_match_all('/#([^ ]+)/', $data['content'], $matches)) {
							 | 
						|
								    $tags = array();
							 | 
						|
								    foreach($matches[1] as $m)
							 | 
						|
								      $tags[] = trim($m);
							 | 
						|
								    if($tags) {
							 | 
						|
								      if($user->send_category_as_array != 1) {
							 | 
						|
								        $data['category'] = $tags;
							 | 
						|
								      } else {
							 | 
						|
								        $data['category'] = implode(',', $tags);
							 | 
						|
								      }
							 | 
						|
								    }
							 | 
						|
								  }
							 | 
						|
								
							 | 
						|
								  // Handle attachments
							 | 
						|
								  $filename = false;
							 | 
						|
								
							 | 
						|
								  foreach($_FILES as $file) {
							 | 
						|
								    // If a photo was included, set the filename to the downloaded file
							 | 
						|
								    if(preg_match('/image/', $file['type'])) {
							 | 
						|
								      $filename = $file['tmp_name'];
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    // Sometimes MMSs are sent with a txt file attached instead of in the body
							 | 
						|
								    if(preg_match('/text\/plain/', $file['type'])) {
							 | 
						|
								      $content = trim(file_get_contents($file['tmp_name']));
							 | 
						|
								      if($content) {
							 | 
						|
								        $data['content'] = $content;
							 | 
						|
								      }
							 | 
						|
								    }
							 | 
						|
								  }
							 | 
						|
								
							 | 
						|
								  $r = micropub_post_for_user($user, $data, $filename);
							 | 
						|
								
							 | 
						|
								  if(k($r, 'location'))
							 | 
						|
								    $result = 'created post at ' . $r['location'];
							 | 
						|
								  else
							 | 
						|
								    $result = 'error creating post';
							 | 
						|
								
							 | 
						|
								  $app->response()->body($result);
							 | 
						|
								});
							 |