Files
mattermostest/src/main/server/serverAPI.ts
Devin Binnie 245215c678 [MM-51873] Create central logging module for adding prefixes to differentiate logs between modules (#2652)
* Create central logging module for adding prefixes to differentiate logs between modules

* Turn logger into class

* Merge'd

* Rework to use class more intelligently

* Fix modalView

* Fix webContentEvents

* Update src/main/app/intercom.ts

Co-authored-by: Daniel Espino García <larkox@gmail.com>

* Shorten prefixes on object creation

---------

Co-authored-by: Daniel Espino García <larkox@gmail.com>
2023-04-05 12:09:56 -04:00

72 lines
2.6 KiB
TypeScript

// Copyright (c) 2016-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.
import {net, session} from 'electron';
import {COOKIE_NAME_AUTH_TOKEN, COOKIE_NAME_CSRF, COOKIE_NAME_USER_ID} from 'common/constants';
import {Logger} from 'common/log';
const log = new Logger('serverAPI');
export async function getServerAPI<T>(url: URL, isAuthenticated: boolean, onSuccess?: (data: T) => void, onAbort?: () => void, onError?: (error: Error) => void) {
if (isAuthenticated) {
const cookies = await session.defaultSession.cookies.get({});
if (!cookies) {
log.error('Cannot authenticate, no cookies present');
return;
}
// Filter out cookies that aren't part of our domain
const filteredCookies = cookies.filter((cookie) => cookie.domain && url.toString().indexOf(cookie.domain) >= 0);
const userId = filteredCookies.find((cookie) => cookie.name === COOKIE_NAME_USER_ID);
const csrf = filteredCookies.find((cookie) => cookie.name === COOKIE_NAME_CSRF);
const authToken = filteredCookies.find((cookie) => cookie.name === COOKIE_NAME_AUTH_TOKEN);
if (!userId || !csrf || !authToken) {
// Missing cookies needed for req
log.error(`Cannot authenticate, required cookies for ${url.origin} not found`);
return;
}
}
const req = net.request({
url: url.toString(),
session: session.defaultSession,
useSessionCookies: true,
});
if (onSuccess) {
req.on('response', (response: Electron.IncomingMessage) => {
log.silly('response', response);
if (response.statusCode === 200) {
let raw = '';
response.on('data', (chunk: Buffer) => {
log.silly('response.data', `${chunk}`);
raw += `${chunk}`;
});
response.on('end', () => {
try {
const data = JSON.parse(raw) as T;
onSuccess(data);
} catch (e) {
const error = `Error parsing server data from ${url.toString()}`;
log.error(error);
onError?.(new Error(error));
}
});
} else {
onError?.(new Error(`Bad status code requesting from ${url.toString()}`));
}
response.on('error', onError || (() => {}));
});
}
if (onAbort) {
req.on('abort', onAbort);
}
if (onError) {
req.on('error', onError);
}
req.end();
}