2022-05-24 21:20:26 +08:00

78 lines
2.2 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { HTTP } from './open-api';
/**
* Gist backup
*/
export default 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);
}
}
};
}