backend-manager 3.2.151 → 3.2.152
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json
CHANGED
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
const fetch = require('wonderful-fetch');
|
|
2
|
+
const moment = require('moment');
|
|
3
|
+
const jetpack = require('fs-jetpack');
|
|
4
|
+
const powertools = require('node-powertools');
|
|
5
|
+
const uuidv4 = require('uuid').v4;
|
|
6
|
+
const path = require('path');
|
|
7
|
+
const { Octokit } = require('@octokit/rest');
|
|
8
|
+
|
|
9
|
+
function Module() {
|
|
10
|
+
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
Module.prototype.main = function () {
|
|
14
|
+
const self = this;
|
|
15
|
+
const Manager = self.Manager;
|
|
16
|
+
const Api = self.Api;
|
|
17
|
+
const assistant = self.assistant;
|
|
18
|
+
const payload = self.payload;
|
|
19
|
+
|
|
20
|
+
return new Promise(async function(resolve, reject) {
|
|
21
|
+
try {
|
|
22
|
+
// Perform checks
|
|
23
|
+
if (!payload.user.roles.admin && !payload.user.roles.blogger) {
|
|
24
|
+
return reject(assistant.errorify(`Admin required.`, {code: 401}));
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
// Log payload
|
|
28
|
+
assistant.log(`main(): payload.data`, payload.data);
|
|
29
|
+
|
|
30
|
+
// Set now
|
|
31
|
+
const now = assistant.meta.startTime.timestamp;
|
|
32
|
+
const bemRepo = assistant.parseRepo(Manager?.config?.github?.repo_website);
|
|
33
|
+
|
|
34
|
+
// Setup Octokit
|
|
35
|
+
self.octokit = new Octokit({
|
|
36
|
+
auth: Manager?.config?.github?.key,
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
// Check for required values
|
|
40
|
+
if (!payload.data.payload.url) {
|
|
41
|
+
return reject(assistant.errorify(`Missing required parameter: url`, {code: 400}));
|
|
42
|
+
} else if (!payload.data.payload.body) {
|
|
43
|
+
return reject(assistant.errorify(`Missing required parameter: body`, {code: 400}));
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
// Set defaults
|
|
47
|
+
payload.data.payload.url = payload.data.payload.url
|
|
48
|
+
// Replace blog/
|
|
49
|
+
.replace(/blog\//ig, '')
|
|
50
|
+
// Remove leading and trailing slashes
|
|
51
|
+
.replace(/^\/|\/$/g, '')
|
|
52
|
+
// Trim
|
|
53
|
+
.trim();
|
|
54
|
+
payload.data.payload.body = payload.data.payload.body
|
|
55
|
+
.replace(powertools.regexify(`/# ${payload.data.payload.title}/i`), '')
|
|
56
|
+
.replace(/\n\n\n+/g, '\n\n')
|
|
57
|
+
.trim();
|
|
58
|
+
|
|
59
|
+
// Fix even more values
|
|
60
|
+
payload.data.payload.path = `_posts/${moment(now).format('YYYY')}/${payload.data.payload.path || 'guest'}`;
|
|
61
|
+
payload.data.payload.githubUser = payload.data.payload.githubUser || bemRepo.user;
|
|
62
|
+
payload.data.payload.githubRepo = payload.data.payload.githubRepo || bemRepo.name;
|
|
63
|
+
|
|
64
|
+
// Log
|
|
65
|
+
assistant.log(`main(): Editing post...`, payload.data.payload);
|
|
66
|
+
|
|
67
|
+
// Upload post
|
|
68
|
+
const fetchedPost = await self.fetchPost(payload.data.payload.url);
|
|
69
|
+
|
|
70
|
+
// Upload post
|
|
71
|
+
const uploadPost = await self.uploadPost(fetchedPost, payload.data.payload.body);
|
|
72
|
+
|
|
73
|
+
// Log
|
|
74
|
+
assistant.log(`main(): uploadPost`, uploadPost);
|
|
75
|
+
|
|
76
|
+
// Resolve
|
|
77
|
+
return resolve({data: payload.data.payload});
|
|
78
|
+
} catch (e) {
|
|
79
|
+
return reject(e);
|
|
80
|
+
}
|
|
81
|
+
});
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
// Fetch post
|
|
85
|
+
Module.prototype.fetchPost = function (url) {
|
|
86
|
+
const self = this;
|
|
87
|
+
|
|
88
|
+
const Manager = self.Manager;
|
|
89
|
+
const Api = self.Api;
|
|
90
|
+
const assistant = self.assistant;
|
|
91
|
+
const payload = self.payload;
|
|
92
|
+
|
|
93
|
+
return new Promise(async function(resolve, reject) {
|
|
94
|
+
fetch(`${Manager.project.functionsUrl}/bm_api`, {
|
|
95
|
+
method: 'post',
|
|
96
|
+
response: 'json',
|
|
97
|
+
timeout: 190000,
|
|
98
|
+
tries: 1,
|
|
99
|
+
body: {
|
|
100
|
+
command: 'general:fetch-post',
|
|
101
|
+
payload: {
|
|
102
|
+
url: url,
|
|
103
|
+
},
|
|
104
|
+
},
|
|
105
|
+
})
|
|
106
|
+
.then((r) => {
|
|
107
|
+
assistant.log(`fetchPost(): Result`, r);
|
|
108
|
+
|
|
109
|
+
return resolve(r);
|
|
110
|
+
})
|
|
111
|
+
.catch((e) => {
|
|
112
|
+
assistant.log(`fetchPost(): Error`, e);
|
|
113
|
+
|
|
114
|
+
return reject(e);
|
|
115
|
+
});
|
|
116
|
+
})
|
|
117
|
+
};
|
|
118
|
+
|
|
119
|
+
Module.prototype.uploadPost = function (fetchedPost, content) {
|
|
120
|
+
const self = this;
|
|
121
|
+
const Manager = self.Manager;
|
|
122
|
+
const Api = self.Api;
|
|
123
|
+
const assistant = self.assistant;
|
|
124
|
+
const payload = self.payload;
|
|
125
|
+
|
|
126
|
+
return new Promise(async function(resolve, reject) {
|
|
127
|
+
const filename = fetchedPost.path;
|
|
128
|
+
const sha = fetchedPost.sha;
|
|
129
|
+
const frontmatter = fetchedPost.frontmatter;
|
|
130
|
+
const owner = payload.data.payload.githubUser;
|
|
131
|
+
const repo = payload.data.payload.githubRepo;
|
|
132
|
+
|
|
133
|
+
// Combine content
|
|
134
|
+
const fullContent = '---\n'
|
|
135
|
+
+ `${frontmatter}\n`
|
|
136
|
+
+ '---\n'
|
|
137
|
+
+ '\n'
|
|
138
|
+
+ content;
|
|
139
|
+
|
|
140
|
+
// Upload post
|
|
141
|
+
await self.octokit.rest.repos.createOrUpdateFileContents({
|
|
142
|
+
owner: owner,
|
|
143
|
+
repo: repo,
|
|
144
|
+
path: filename,
|
|
145
|
+
sha: sha,
|
|
146
|
+
message: `📦 admin:edit-post:upload-post ${filename}`,
|
|
147
|
+
content: Buffer.from(fullContent).toString('base64'),
|
|
148
|
+
})
|
|
149
|
+
.then((r) => {
|
|
150
|
+
assistant.log(`uploadPost(): Result`, r);
|
|
151
|
+
|
|
152
|
+
return resolve(r);
|
|
153
|
+
})
|
|
154
|
+
.catch((e) => reject(e));
|
|
155
|
+
});
|
|
156
|
+
};
|
|
157
|
+
|
|
158
|
+
module.exports = Module;
|