mirror of
https://github.com/hanzoai/sentinel.git
synced 2026-09-29 22:34:33 +00:00
197 lines
4.8 KiB
TypeScript
197 lines
4.8 KiB
TypeScript
import {t} from 'sentry/locale';
|
|
|
|
import type {Rule, SourceSuggestion} from './types';
|
|
import {MethodType, RuleType, SourceSuggestionType} from './types';
|
|
|
|
function getRuleLabel(type: RuleType) {
|
|
switch (type) {
|
|
case RuleType.ANYTHING:
|
|
return t('Anything');
|
|
case RuleType.IMEI:
|
|
return t('IMEI numbers');
|
|
case RuleType.MAC:
|
|
return t('MAC addresses');
|
|
case RuleType.EMAIL:
|
|
return t('Email addresses');
|
|
case RuleType.PEMKEY:
|
|
return t('PEM keys');
|
|
case RuleType.URLAUTH:
|
|
return t('Auth in URLs');
|
|
case RuleType.USSSN:
|
|
return t('US social security numbers');
|
|
case RuleType.USER_PATH:
|
|
return t('Usernames in filepaths');
|
|
case RuleType.UUID:
|
|
return t('UUIDs');
|
|
case RuleType.CREDITCARD:
|
|
return t('Credit card numbers');
|
|
case RuleType.PASSWORD:
|
|
return t('Password fields');
|
|
case RuleType.IP:
|
|
return t('IP addresses');
|
|
case RuleType.PATTERN:
|
|
return t('Regex matches');
|
|
default:
|
|
return '';
|
|
}
|
|
}
|
|
|
|
function getMethodLabel(type: MethodType) {
|
|
switch (type) {
|
|
case MethodType.MASK:
|
|
return {
|
|
label: t('Mask'),
|
|
description: t('Replace with ****'),
|
|
};
|
|
case MethodType.HASH:
|
|
return {
|
|
label: t('Hash'),
|
|
description: t('Replace with DEADBEEF'),
|
|
};
|
|
case MethodType.REMOVE:
|
|
return {
|
|
label: t('Remove'),
|
|
description: t('Replace with null'),
|
|
};
|
|
case MethodType.REPLACE:
|
|
return {
|
|
label: t('Replace'),
|
|
description: t('Replace with Placeholder'),
|
|
};
|
|
default:
|
|
return {
|
|
label: '',
|
|
};
|
|
}
|
|
}
|
|
|
|
const binarySuggestions: Array<SourceSuggestion> = [
|
|
{
|
|
type: SourceSuggestionType.BINARY,
|
|
value: '&&',
|
|
},
|
|
{
|
|
type: SourceSuggestionType.BINARY,
|
|
value: '||',
|
|
},
|
|
];
|
|
|
|
const unarySuggestions: Array<SourceSuggestion> = [
|
|
{
|
|
type: SourceSuggestionType.UNARY,
|
|
value: '!',
|
|
},
|
|
];
|
|
|
|
const valueSuggestions: Array<SourceSuggestion> = [
|
|
{type: SourceSuggestionType.VALUE, value: '**', description: t('everywhere')},
|
|
{
|
|
type: SourceSuggestionType.VALUE,
|
|
value: 'password',
|
|
description: t('attributes named "password"'),
|
|
},
|
|
{
|
|
type: SourceSuggestionType.VALUE,
|
|
value: '$error.value',
|
|
description: t('the exception value'),
|
|
},
|
|
{
|
|
type: SourceSuggestionType.VALUE,
|
|
value: '$message',
|
|
description: t('the log message'),
|
|
},
|
|
{
|
|
type: SourceSuggestionType.VALUE,
|
|
value: 'extra.MyValue',
|
|
description: t('the key "MyValue" in "Additional Data"'),
|
|
},
|
|
{
|
|
type: SourceSuggestionType.VALUE,
|
|
value: 'extra.**',
|
|
description: t('everything in "Additional Data"'),
|
|
},
|
|
{
|
|
type: SourceSuggestionType.VALUE,
|
|
value: '$http.headers.x-custom-token',
|
|
description: t('the X-Custom-Token HTTP header'),
|
|
},
|
|
{
|
|
type: SourceSuggestionType.VALUE,
|
|
value: '$user.ip_address',
|
|
description: t('the user IP address'),
|
|
},
|
|
{
|
|
type: SourceSuggestionType.VALUE,
|
|
value: '$frame.vars.foo',
|
|
description: t('the local variable "foo"'),
|
|
},
|
|
{
|
|
type: SourceSuggestionType.VALUE,
|
|
value: 'contexts.device.timezone',
|
|
description: t('the timezone in the device context'),
|
|
},
|
|
{
|
|
type: SourceSuggestionType.VALUE,
|
|
value: 'tags.server_name',
|
|
description: t('the tag "server_name"'),
|
|
},
|
|
{
|
|
type: SourceSuggestionType.VALUE,
|
|
value: '$attachments.**',
|
|
description: t('all attachments'),
|
|
},
|
|
{
|
|
type: SourceSuggestionType.VALUE,
|
|
value: "$attachments.'logfile.txt'",
|
|
description: t('all attachments named "logfile.txt"'),
|
|
},
|
|
{
|
|
type: SourceSuggestionType.VALUE,
|
|
value: '$minidump',
|
|
description: t('the entire minidump of a native crash report'),
|
|
},
|
|
{
|
|
type: SourceSuggestionType.VALUE,
|
|
value: '$minidump.heap_memory',
|
|
description: t('the heap memory region in a native crash report'),
|
|
},
|
|
{
|
|
type: SourceSuggestionType.VALUE,
|
|
value: 'code_file',
|
|
description: t('the pathname of a code module in a native crash report'),
|
|
},
|
|
{
|
|
type: SourceSuggestionType.VALUE,
|
|
value: 'debug_file',
|
|
description: t('the pathname of a debug module in a native crash report'),
|
|
},
|
|
];
|
|
|
|
export {
|
|
binarySuggestions,
|
|
getMethodLabel,
|
|
getRuleLabel,
|
|
unarySuggestions,
|
|
valueSuggestions,
|
|
};
|
|
|
|
export function getRuleDescription(rule: Rule) {
|
|
const {method, type, source} = rule;
|
|
const methodLabel = getMethodLabel(method);
|
|
const typeLabel = getRuleLabel(type);
|
|
|
|
const descriptionDetails: Array<string> = [];
|
|
|
|
descriptionDetails.push(`[${methodLabel.label}]`);
|
|
|
|
descriptionDetails.push(
|
|
rule.type === RuleType.PATTERN ? `[${rule.pattern}]` : `[${typeLabel}]`
|
|
);
|
|
|
|
if (rule.method === MethodType.REPLACE && rule.placeholder) {
|
|
descriptionDetails.push(`with [${rule.placeholder}]`);
|
|
}
|
|
|
|
return `${descriptionDetails.join(' ')} ${t('from')} [${source}]`;
|
|
}
|