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 function saveNote(noteForm, secret) { let storeKey = secret.storeKey; let storeInfo = 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 function deleteNote(key) { let storeKey = getStoreKey(key); let storeInfo = 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; }