|
|
|
@ -317,7 +317,7 @@ class LokiAppDotNetServerAPI {
|
|
|
|
|
|
|
|
|
|
// activate token
|
|
|
|
|
async submitToken(token) {
|
|
|
|
|
const options = {
|
|
|
|
|
const fetchOptions = {
|
|
|
|
|
method: 'POST',
|
|
|
|
|
headers: {
|
|
|
|
|
'Content-Type': 'application/json',
|
|
|
|
@ -331,7 +331,8 @@ class LokiAppDotNetServerAPI {
|
|
|
|
|
try {
|
|
|
|
|
const res = await this.proxyFetch(
|
|
|
|
|
`${this.baseServerUrl}/loki/v1/submit_challenge`,
|
|
|
|
|
options
|
|
|
|
|
fetchOptions,
|
|
|
|
|
{ textResponse: true }
|
|
|
|
|
);
|
|
|
|
|
return res.ok;
|
|
|
|
|
} catch (e) {
|
|
|
|
@ -340,7 +341,7 @@ class LokiAppDotNetServerAPI {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
async proxyFetch(urlObj, fetchOptions = { method: 'GET' }) {
|
|
|
|
|
async proxyFetch(urlObj, fetchOptions = { method: 'GET' }, options = {}) {
|
|
|
|
|
if (
|
|
|
|
|
window.lokiFeatureFlags.useSnodeProxy &&
|
|
|
|
|
(this.baseServerUrl === 'https://file-dev.lokinet.org' ||
|
|
|
|
@ -364,15 +365,20 @@ class LokiAppDotNetServerAPI {
|
|
|
|
|
json: () => response,
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
return nodeFetch(urlObj, fetchOptions);
|
|
|
|
|
return nodeFetch(urlObj, fetchOptions, options);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
async _sendToProxy(endpoint, fetchOptions) {
|
|
|
|
|
async _sendToProxy(endpoint, pFetchOptions, options = {}) {
|
|
|
|
|
const randSnode = await lokiSnodeAPI.getRandomSnodeAddress();
|
|
|
|
|
const url = `https://${randSnode.ip}:${randSnode.port}/file_proxy`;
|
|
|
|
|
|
|
|
|
|
const fetchOptions = pFetchOptions; // make lint happy
|
|
|
|
|
// safety issue with file server, just safer to have this
|
|
|
|
|
if (fetchOptions.headers === undefined) {
|
|
|
|
|
fetchOptions.headers = {};
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const payloadObj = {
|
|
|
|
|
// I think this is a stream, we may need to collect it all?
|
|
|
|
|
body: fetchOptions.body, // might need to b64 if binary...
|
|
|
|
|
endpoint,
|
|
|
|
|
method: fetchOptions.method,
|
|
|
|
@ -444,9 +450,9 @@ class LokiAppDotNetServerAPI {
|
|
|
|
|
const result = await nodeFetch(url, firstHopOptions);
|
|
|
|
|
|
|
|
|
|
const txtResponse = await result.text();
|
|
|
|
|
if (txtResponse === 'Service node is not ready: not in any swarm; \n') {
|
|
|
|
|
if (txtResponse.match(/^Service node is not ready: not in any swarm/i)) {
|
|
|
|
|
// mark snode bad
|
|
|
|
|
log.warn('Marking random snode bad', randSnode);
|
|
|
|
|
log.warn(`Marking random snode bad, internet address ${randSnode.ip}:${randSnode.port}`);
|
|
|
|
|
lokiSnodeAPI.markRandomNodeUnreachable(randSnode);
|
|
|
|
|
// retry (hopefully with new snode)
|
|
|
|
|
// FIXME: max number of retries...
|
|
|
|
@ -471,12 +477,12 @@ class LokiAppDotNetServerAPI {
|
|
|
|
|
ivAndCiphertextResponse
|
|
|
|
|
);
|
|
|
|
|
const textDecoder = new TextDecoder();
|
|
|
|
|
const json = textDecoder.decode(decrypted);
|
|
|
|
|
const respStr = textDecoder.decode(decrypted);
|
|
|
|
|
// replace response
|
|
|
|
|
try {
|
|
|
|
|
response = JSON.parse(json);
|
|
|
|
|
response = options.textResponse ? respStr : JSON.parse(respStr);
|
|
|
|
|
} catch (e) {
|
|
|
|
|
log.warn(`_sendToProxy Could not parse inner JSON [${json}]`);
|
|
|
|
|
log.warn(`_sendToProxy Could not parse inner JSON [${respStr}]`);
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
log.warn(
|
|
|
|
@ -552,7 +558,8 @@ class LokiAppDotNetServerAPI {
|
|
|
|
|
.replace(`${this.baseServerUrl}/`, '');
|
|
|
|
|
({ response, txtResponse, result } = await this._sendToProxy(
|
|
|
|
|
endpointWithQS,
|
|
|
|
|
fetchOptions
|
|
|
|
|
fetchOptions,
|
|
|
|
|
options
|
|
|
|
|
));
|
|
|
|
|
} else {
|
|
|
|
|
// disable check for .loki
|
|
|
|
@ -563,7 +570,8 @@ class LokiAppDotNetServerAPI {
|
|
|
|
|
// always make sure this check is enabled
|
|
|
|
|
process.env.NODE_TLS_REJECT_UNAUTHORIZED = 1;
|
|
|
|
|
txtResponse = await result.text();
|
|
|
|
|
response = JSON.parse(txtResponse);
|
|
|
|
|
// hrm cloudflare timeouts (504s) will be html...
|
|
|
|
|
response = options.textResponse ? txtResponse : JSON.parse(txtResponse);
|
|
|
|
|
}
|
|
|
|
|
} catch (e) {
|
|
|
|
|
if (txtResponse) {
|
|
|
|
@ -574,7 +582,7 @@ class LokiAppDotNetServerAPI {
|
|
|
|
|
`json: ${txtResponse}`
|
|
|
|
|
);
|
|
|
|
|
} else {
|
|
|
|
|
log.info(`serverRequest ${mode} error`, e.code, e.message);
|
|
|
|
|
log.info(`serverRequest ${mode} error`, e.code, e.message, 'atttempting connection to', url);
|
|
|
|
|
}
|
|
|
|
|
return {
|
|
|
|
|
err: e,
|
|
|
|
|