-
Notifications
You must be signed in to change notification settings - Fork 0
/
timstagram.js
98 lines (84 loc) · 2.07 KB
/
timstagram.js
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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
const Octokit = require('@octokit/rest');
const github = Octokit({
auth: process.env.GITHUB_TOKEN,
});
const owner = 'timnovis';
const repo = 'novis';
const postTemplate = (caption, date, id) => `---
title: '${caption}'
date: ${date}
draft: false
tags: 'photo'
---
![${caption}](/media/timstagram/${id}.jpg "${caption}")`;
exports.handler = async function(event, context) {
const { httpMethod: method, headers, body, path } = event;
if (method === 'GET') {
return { statusCode: 501, body: 'Nothing to see here' };
}
try {
const { image, caption, filename, secret } = JSON.parse(body);
if (secret !== process.env.SECRET) {
throw new Error('Unauthorized');
}
const id = `${filename}-${Date.now()}`;
const [blob, branch] = await Promise.all([
github.git.createBlob({
owner,
repo,
content: image,
encoding: 'base64',
}),
github.gitdata.getRef({
owner,
repo,
ref: 'heads/master',
}),
]);
const tree = await github.git.createTree({
owner,
repo,
tree: [
{
path: `static/media/timstagram/${id}.jpg`,
mode: '100644',
type: 'blob',
sha: blob.data.sha,
},
{
path: `content/posts/image-${id}.md`,
mode: '100644',
type: 'blob',
content: postTemplate(caption, new Date().toISOString(), id),
},
],
base_tree: branch.data.object.sha,
});
const commit = await github.git.createCommit({
owner,
repo,
message: `New photo from Tim's iPhone`,
tree: tree.data.sha,
parents: [branch.data.object.sha],
});
await github.git.updateRef({
owner,
repo,
ref: 'heads/master',
sha: commit.data.sha,
force: true,
});
return {
statusCode: 200,
body: 'success',
};
} catch (e) {
console.log('========================');
console.log(e);
console.log('========================');
return {
statusCode: 400,
body: e.toString(),
};
}
};