Merge pull request #807 from neuroscr/tls-fix

Close join open group on success and friends...
pull/825/head
Ryan Tharp 5 years ago committed by GitHub
commit b5fb20ab29
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -1059,6 +1059,7 @@
window.setMediaPermissions(!mediaPermissions);
};
// attempts a connection to an open group server
window.attemptConnection = async (serverURL, channelId) => {
let rawserverURL = serverURL
.replace(/^https?:\/\//i, '')

@ -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,

@ -64,7 +64,7 @@ class LokiRssAPI extends EventEmitter {
return;
}
const result = await window.lokiFileServerAPI._server.serverRequest(
map[this.feedUrl]
map[this.feedUrl], { textResponse: true }
);
if (!result) {
log.error('LokiRssAPI empty rss proxy response');

@ -364,7 +364,8 @@ export class LeftPaneChannelSection extends React.Component<Props, State> {
return false;
}
const regexURL = /(http:\/\/www\.|https:\/\/www\.|http:\/\/|https:\/\/)?[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(:[0-9]{1,5})?(\/.*)?/;
// longest TLD is now (20/02/06) 24 characters per https://jasontucker.blog/8945/what-is-the-longest-tld-you-can-get-for-a-domain-name
const regexURL = /(http:\/\/|https:\/\/)?[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,24}(:[0-9]{1,5})?(\/.*)?/;
if (groupUrl.length <= 0) {
window.pushToast({
@ -387,7 +388,7 @@ export class LeftPaneChannelSection extends React.Component<Props, State> {
}
joinChannelStateManager(this, groupUrl, () => {
this.handleToggleOverlay(SessionGroupType.Open);
this.handleToggleOverlay(undefined);
});
return true;

Loading…
Cancel
Save