diff options
Diffstat (limited to 'controllers/hooks.php')
-rw-r--r-- | controllers/hooks.php | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/controllers/hooks.php b/controllers/hooks.php new file mode 100644 index 0000000..b597c7b --- /dev/null +++ b/controllers/hooks.php @@ -0,0 +1,73 @@ +<?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'] = k($params, 'Subject'); + + if(k($params['body-plain']) + $data['content'] = 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[] = $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); +}); |