Files
flagnote-web/src/api/note.js
Jesse-Ma a14b8c2d93 suspend
2023-03-14 10:50:55 +08:00

161 lines
3.8 KiB
JavaScript

import axios from "axios";
import { getStoreKey } from "@/api/lock";
import storage from "@/libs/storage";
import { md5, wrap } from "@/libs/secret";
import NoteConstant from "@/libs/constants";
axios.interceptors.response.use(undefined, (err) => {
const { config: originalRequest } = err;
if (
(err?.code === 'ECONNABORTED' ||
err?.message === 'Network Error' ||
err?.message?.includes?.('timeout')) &&
!originalRequest._retry
) {
originalRequest._retry = true;
return axios.request(originalRequest);
}
});
export async function saveNote(noteForm, secret) {
let storeKey = secret.storeKey;
const storeInfo = await storage.local.getText(storeKey);
let starray = storeInfo.split("|");
if (starray[2] == "1") {
return new Promise(function (onCompleted) {
let res = { data: {} };
res.data.code = "100013";
onCompleted(res);
});
}
let note = {
lock: starray[0],
cipher: starray[1],
initTime: starray[3],
text: starray[4],
key: noteForm.key,
};
let viewStoreText = wrap(noteForm.text, secret.secretKey);
if (viewStoreText != note.text) {
return new Promise(function (onCompleted) {
let res = { data: {} };
res.data.code = "100014";
onCompleted(res);
});
}
let bufferArrary = eval("[100,111,32,110,111,116,32," + note.text + ",100,111,32,101,118,105,108]");
let array = Uint8Array.from(bufferArrary);
let blob = new Blob([array], { type: "application/octet-stream" });
let form = new FormData();
form.append("file", blob, noteForm.key);
form.append("cipher", note.cipher);
form.append("lock", note.lock);
form.append("key", note.key);
form.append("md5", md5(note.text));
form.append("initTime", note.initTime)
let config = {
headers: { "Content-Type": "multipart/form-data" },
};
return axios({
url: NoteConstant.servicePath + "/note/" + noteForm.key,
method: "post",
data: form,
config: config,
});
}
export async function deleteNote(key) {
let storeKey = getStoreKey(key);
const storeInfo = await storage.local.getText(storeKey);
let note = {
cipher: storeInfo.substring(2, 34),
key: key,
};
return axios({
url: NoteConstant.servicePath + "/note/" + key + "/delete",
method: "post",
data: note,
});
}
export function getNoteBlob(key) {
return axios({
url: NoteConstant.servicePath + "/note/" + key,
method: "get",
responseType: "blob",
ignoreError: 1,
original: true,
source: true,
});
}
export function getNoteMetaNew(key) {
let url = NoteConstant.servicePath + "/note/" + key + "/noteMeta";
return axios({
url: url,
method: "get",
ignoreError: 1,
original: true,
source: true,
});
}
export function getKeyMetaNew() {
let url = NoteConstant.servicePath + "/note/keyMeta";
return axios({
url: url,
method: "get",
ignoreError: 1,
original: true,
source: true,
});
}
export function getNoteMeta(key) {
let url = NoteConstant.servicePath + "/note/" + key + "/noteMeta";
let noteMeta = null;
try {
noteMeta = ajaxGet(url);
} catch (error) {
console.log(error);
}
return noteMeta;
}
export function getKeyMeta() {
let url = NoteConstant.servicePath + "/note/keyMeta";
let keyMeta = null;
try {
keyMeta = ajaxGet(url);
} catch (error) {
console.log(error);
}
return keyMeta;
}
export function ajaxGet(url) {
let data = null;
let xmlhttp = new XMLHttpRequest();
xmlhttp.open("GET", url, false);
xmlhttp.onreadystatechange = () => {
if (xmlhttp.readyState == 4) {
if (xmlhttp.status == 200 || xmlhttp.status == 304) {
if (xmlhttp.responseText) {
let rs = JSON.parse(xmlhttp.responseText);
if (rs && rs.code == "000000") {
data = rs.data;
}
}
}
}
};
xmlhttp.send();
return data;
}