Modularized Sub-Store

This commit is contained in:
Peng-YM
2022-05-23 18:33:16 +08:00
parent 3caf743b09
commit 9216f5c256
22 changed files with 11029 additions and 8460 deletions

75
backend/src/utils/gist.js Normal file
View File

@@ -0,0 +1,75 @@
const { HTTP } = require('./open-api');
/**
* Gist backup
*/
function Gist({ token, key }) {
const http = HTTP({
baseURL: 'https://api.github.com',
headers: {
Authorization: `token ${token}`,
'User-Agent':
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.141 Safari/537.36'
},
events: {
onResponse: (resp) => {
if (/^[45]/.test(String(resp.statusCode))) {
return Promise.reject(`ERROR: ${JSON.parse(resp.body).message}`);
} else {
return resp;
}
}
}
});
async function locate() {
return http.get('/gists').then((response) => {
const gists = JSON.parse(response.body);
for (let g of gists) {
if (g.description === key) {
return g.id;
}
}
return -1;
});
}
this.upload = async function(files) {
const id = await locate();
if (id === -1) {
// create a new gist for backup
return http.post({
url: '/gists',
body: JSON.stringify({
description: key,
public: false,
files
})
});
} else {
// update an existing gist
return http.patch({
url: `/gists/${id}`,
body: JSON.stringify({ files })
});
}
};
this.download = async function(filename) {
const id = await locate();
if (id === -1) {
return Promise.reject('未找到Gist备份');
} else {
try {
const { files } = await http.get(`/gists/${id}`).then((resp) => JSON.parse(resp.body));
const url = files[filename].raw_url;
return await http.get(url).then((resp) => resp.body);
} catch (err) {
return Promise.reject(err);
}
}
};
}
module.exports = Gist;