You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							73 lines
						
					
					
						
							1.9 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							73 lines
						
					
					
						
							1.9 KiB
						
					
					
				| <?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); | |
| });
 |