1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
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'] = 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);
});
|