[MM-47202] - Desktop diagnostics (#2439)
* Add custom assertion to match object in array (#2358) * Add custom assertion to match object in array * Remove test that is not implemented yet * [MM-48213] Add "Run diagnostics" menu item under Help (#2359) * Add submenu item that runs diagnostics * Add custom assertion to match object in array * Remove test that is not implemented yet * Add tests * Add translation * [MM-47206] Diagnostics steps setup (#2361) * Add baseline code for diagnostics and their steps * Fix failing test * [MM-47206] [MM-48155] Obfuscate logs (#2369) * Add logging hooks to mask sensitive data * Add hook that truncates long strings in diagnostics logs * Add template file for creating steps * Add readme inside diagnostics * [MM-48145] Diagnostics step 2 - internet connectivity (#2372) * Add diagnostics step 2 - internet connectivity check * Update tests * [MM-48144] Diagnostics Step - Configure logger (#2390) * Configure logger * Move configure logger into step1 * Add file extension to fileName variable * Diagnostics Step 2: Validate configuration (#2391) * Resolve conflicts with base branch * Update test and implement Code review suggestion * Fix failing test * [MM-48147]Diagnostics step 3 - server connectivity (#2397) * Add step3: Check server connectivity by using the /api/v4/system/ping endpoint * Fix failing tests * Add better obfuscator functions that mask all types of data (#2399) * Add better obfuscator functions that mask all types of data(string, array, objects) * Update tests * [MM-48148] Add Diagnostics step 4 - session validation (#2398) * Add diagnostics step 4 - session data validation * Fix failing tests * [MM-48152] Add diagnostics step 5 - BrowserWindows checks (#2404) * Add diagnostics step 5 - browserwindow checks for main window * Add tests * [MM-48151] Diagnostics step 6 - Permissions (#2409) * Add diagnostics step 6 - Permissions check * Check permissions for microphone ond screen onn mac, windows * Update tests count in tests * [MM-48551] Diagnostics step 7 - Performance & Memory (#2410) * Add diagnostics step 6 - Permissions check * Check permissions for microphone ond screen onn mac, windows * Update tests count in tests * Add diagnostics step 7 - performance and memory * Fix failing tests * [MM-48153] Add diagnostics step 8 - Log heuristics (#2418) * Add diagnostics step 8 - Log heuristics * Add diagnostics step 9 - config (#2422) * [MM-48556] Diagnostics Step 10 - Crash reports (#2423) * Add diagnostics step 9 - config * Add diagnostics step 10 - include crash reports * Update tests * Add diagnostics step 11 - cookies report (#2427) * [MM-48157] Diagnostics report (#2432) * Add better logging and pretty print report * Update last step * Update log message * Move log after hooks so that path is masked * Use correct directory for diagnostics files
This commit is contained in:
@@ -24,6 +24,7 @@ jest.mock('main/Validator', () => ({
|
||||
validateV1ConfigData: (configData) => (configData.version === 1 ? configData : null),
|
||||
validateV2ConfigData: (configData) => (configData.version === 2 ? configData : null),
|
||||
validateV3ConfigData: (configData) => (configData.version === 3 ? configData : null),
|
||||
validateConfigData: (configData) => (configData.version === 3 ? configData : null),
|
||||
}));
|
||||
|
||||
jest.mock('common/tabs/TabView', () => ({
|
||||
|
@@ -357,19 +357,8 @@ export class Config extends EventEmitter {
|
||||
configData = this.readFileSync(this.configFilePath);
|
||||
|
||||
// validate based on config file version
|
||||
switch (configData.version) {
|
||||
case 3:
|
||||
configData = Validator.validateV3ConfigData(configData)!;
|
||||
break;
|
||||
case 2:
|
||||
configData = Validator.validateV2ConfigData(configData)!;
|
||||
break;
|
||||
case 1:
|
||||
configData = Validator.validateV1ConfigData(configData)!;
|
||||
break;
|
||||
default:
|
||||
configData = Validator.validateV0ConfigData(configData)!;
|
||||
}
|
||||
configData = Validator.validateConfigData(configData);
|
||||
|
||||
if (!configData) {
|
||||
throw new Error('Provided configuration file does not validate, using defaults instead.');
|
||||
}
|
||||
|
49
src/common/constants.test.js
Normal file
49
src/common/constants.test.js
Normal file
@@ -0,0 +1,49 @@
|
||||
// Copyright (c) 2016-present Mattermost, Inc. All Rights Reserved.
|
||||
// See LICENSE.txt for license information.
|
||||
|
||||
import {REGEX_EMAIL} from './constants';
|
||||
|
||||
const VALID_EMAILS_LIST = [
|
||||
['email@example.com'],
|
||||
['firstname.lastname@example.com'],
|
||||
['disposable.style.email.with+symbol@example.com'],
|
||||
['other.email-with-hyphen@example.com'],
|
||||
['fully-qualified-domain@example.com'],
|
||||
['user.name+tag+sorting@example.com'],
|
||||
['x@example.com'],
|
||||
['example-indeed@strange-example.com'],
|
||||
['test/test@test.com'],
|
||||
['admin@mailserver1'],
|
||||
['example@s.example'],
|
||||
['john..doe@example.org'],
|
||||
['mailhost!username@example.org'],
|
||||
['user%example.com@example.org'],
|
||||
['user-@example.org'],
|
||||
['email@subdomain.example.com'],
|
||||
['firstname+lastname@example.com'],
|
||||
['email@123.123.123.123'],
|
||||
['1234567890@example.com'],
|
||||
['email@example-one.com'],
|
||||
['_______@example.com'],
|
||||
['email@example.name'],
|
||||
['email@example.museum'],
|
||||
['email@example.co.jp'],
|
||||
['firstname-lastname@example.com'],
|
||||
];
|
||||
|
||||
const INVALID_EMAILS_LIST = [
|
||||
['Abc.example.com'],
|
||||
['QA[icon]CHOCOLATE[icon]@test.com'],
|
||||
];
|
||||
|
||||
describe('main/common/constants', () => {
|
||||
describe('Email regular expression', () => {
|
||||
it.each(VALID_EMAILS_LIST)('%#:Should be VALID email address: %s', (a) => {
|
||||
expect(REGEX_EMAIL.test(a)).toBe(true);
|
||||
});
|
||||
|
||||
it.each(INVALID_EMAILS_LIST)('%#: Should be INVALID email address: %s', (a) => {
|
||||
expect(REGEX_EMAIL.test(a)).toBe(false);
|
||||
});
|
||||
});
|
||||
});
|
@@ -20,3 +20,29 @@ export const UPDATE_DOWNLOAD_ITEM: Omit<DownloadedItem, 'filename' | 'state'> =
|
||||
receivedBytes: 0,
|
||||
totalBytes: 0,
|
||||
};
|
||||
|
||||
// Regular expressions
|
||||
export const REGEX_EMAIL = /[a-zA-Z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*/; // based on W3C input type email regex
|
||||
export const REGEX_IPV4 = /\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b/;
|
||||
export const REGEX_URL = /https?:\/\/(www\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_+.~#?&//=]*)/;
|
||||
|
||||
export const REGEX_PATH_WIN32 = /(?:[a-z]:)?[/\\](?:[./\\ ](?![./\\\n])|[^<>:"|?*./\\ \n])+[a-zA-Z0-9]./;
|
||||
export const REGEX_PATH_DARWIN = /([/]{1}[a-z0-9.]+)+(\/?)|^([/])/;
|
||||
export const REGEX_PATH_LINUX = /([/]{1}[a-z0-9.]+)+(\/?)|^([/])/; // same as darwin
|
||||
|
||||
export const REGEX_LOG_FILE_LINE = /\[(\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}.\d{3})\]\s\[(silly|debug|verbose|info|warn|error)\]\s+(.*)/;
|
||||
|
||||
// Masks
|
||||
export const MASK_EMAIL = 'EMAIL';
|
||||
export const MASK_IPV4 = 'IPV4';
|
||||
export const MASK_PATH = 'PATH';
|
||||
export const MASK_URL = 'URL';
|
||||
|
||||
export const LOGS_MAX_STRING_LENGTH = 63;
|
||||
|
||||
// We use this URL inside the Diagnostics to check if the computer has internet connectivity
|
||||
export const IS_ONLINE_ENDPOINT = 'https://community.mattermost.com/api/v4/system/ping';
|
||||
|
||||
export const COOKIE_NAME_USER_ID = 'MMUSERID';
|
||||
export const COOKIE_NAME_CSRF = 'MMCSRF';
|
||||
export const COOKIE_NAME_AUTH_TOKEN = 'MMAUTHTOKEN';
|
||||
|
Reference in New Issue
Block a user