You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
460 lines
16 KiB
460 lines
16 KiB
import { ref, computed } from 'vue';
|
|
import { axios, Environment, $t, Tools, EnumTools, Options } from 'platform-core';
|
|
import { Processor } from '../Processor';
|
|
import { PlaceHolder } from '@/utils/PlaceHolder';
|
|
|
|
class HttpRequest extends Processor {
|
|
#editorForm: any;
|
|
#httpResponseBodyRef = ref(undefined);
|
|
#httpMethodTypeEnum: any;
|
|
#httpMethodTypeOptionsRef = ref(<any>[]);
|
|
#HttpAuthorizationTypeEnum: any;
|
|
#httpAuthorizationTypeOptionsRef = ref(<any>[]);
|
|
|
|
constructor(targetType: string, context?: any) {
|
|
super(targetType, context);
|
|
this.PROCESSOR_TYPE = 'HTTP_REQUEST';
|
|
this.EDITOR_DIALOG_WIDTH = 1024;
|
|
}
|
|
|
|
public getToolbarAction(): any {
|
|
return {
|
|
extend: 'add',
|
|
name: 'http',
|
|
label: $t('io.sc.engine.rule.core.enums.ProcessorType.' + this.PROCESSOR_TYPE),
|
|
icon: 'sync_alt',
|
|
enableIf: (args: any) => {
|
|
const valueType = this.context.target.valueType;
|
|
return valueType !== 'io.sc.engine.rule.core.SingleRuleResult' && valueType !== 'io.sc.engine.rule.core.RuleSetResult';
|
|
},
|
|
afterClick: (args: any) => {
|
|
args.grid.getEditorForm().setFieldValue('type', this.PROCESSOR_TYPE);
|
|
},
|
|
};
|
|
}
|
|
|
|
public format(row: any): any {
|
|
return row.httpMethod + ', ' + PlaceHolder.replace(row.httpUrl);
|
|
}
|
|
|
|
public getEditorFields(): any {
|
|
return [
|
|
{
|
|
colSpan: 2,
|
|
name: 'httpMethod',
|
|
label: $t('re.processor.grid.entity.httpMethod'),
|
|
type: 'w-select',
|
|
options: this.#httpMethodTypeOptionsRef,
|
|
rows: 1,
|
|
showIf: (args: any) => {
|
|
return args.form.getFieldValue('type') === this.PROCESSOR_TYPE;
|
|
},
|
|
},
|
|
{
|
|
colSpan: 2,
|
|
name: 'httpAuthType',
|
|
label: $t('re.processor.grid.entity.httpAuthType'),
|
|
type: 'w-select',
|
|
options: this.#httpAuthorizationTypeOptionsRef,
|
|
showIf: (args: any) => {
|
|
return args.form.getFieldValue('type') === this.PROCESSOR_TYPE;
|
|
},
|
|
},
|
|
{
|
|
colSpan: 4,
|
|
name: 'httpAuthApikey',
|
|
label: $t('re.processor.grid.entity.httpAuthApikey'),
|
|
type: 'w-text',
|
|
showIf: (args: any) => {
|
|
return args.form.getFieldValue('type') === this.PROCESSOR_TYPE && args.form.getFieldValue('httpAuthType') === 'API_KEY';
|
|
},
|
|
},
|
|
{
|
|
colSpan: 4,
|
|
name: 'httpAuthApiValue',
|
|
label: $t('re.processor.grid.entity.httpAuthApiValue'),
|
|
type: 'w-text',
|
|
showIf: (args: any) => {
|
|
return args.form.getFieldValue('type') === this.PROCESSOR_TYPE && args.form.getFieldValue('httpAuthType') === 'API_KEY';
|
|
},
|
|
},
|
|
{
|
|
colSpan: 4,
|
|
name: 'httpAuthBasicUsername',
|
|
label: $t('re.processor.grid.entity.httpAuthBasicUsername'),
|
|
type: 'w-text',
|
|
showIf: (args: any) => {
|
|
return args.form.getFieldValue('type') === this.PROCESSOR_TYPE && args.form.getFieldValue('httpAuthType') === 'BASIC_AUTH';
|
|
},
|
|
},
|
|
{
|
|
colSpan: 4,
|
|
name: 'httpAuthBasicPassword',
|
|
label: $t('re.processor.grid.entity.httpAuthBasicPassword'),
|
|
type: 'w-text',
|
|
showIf: (args: any) => {
|
|
return args.form.getFieldValue('type') === this.PROCESSOR_TYPE && args.form.getFieldValue('httpAuthType') === 'BASIC_AUTH';
|
|
},
|
|
},
|
|
{
|
|
colSpan: 8,
|
|
name: 'httpAuthBearerToken',
|
|
label: $t('re.processor.grid.entity.httpAuthBearerToken'),
|
|
type: 'w-text',
|
|
showIf: (args: any) => {
|
|
return args.form.getFieldValue('type') === this.PROCESSOR_TYPE && args.form.getFieldValue('httpAuthType') === 'BEARER';
|
|
},
|
|
},
|
|
{
|
|
colSpan: 6,
|
|
firstCol: true,
|
|
name: 'httpUrl',
|
|
label: $t('re.processor.grid.entity.httpUrl'),
|
|
type: 'w-code-mirror',
|
|
lang: 'javascript',
|
|
rows: 7,
|
|
toolbar: false,
|
|
placeholder: true,
|
|
lineWrap: true,
|
|
lineBreak: true,
|
|
lineHeight: '1.3rem',
|
|
fontSize: '0.75rem',
|
|
autoCompletion: this.autoCompletionManager.autoCompletion(),
|
|
showIf: (args: any) => {
|
|
return args.form.getFieldValue('type') === this.PROCESSOR_TYPE;
|
|
},
|
|
},
|
|
{
|
|
colSpan: 6,
|
|
name: 'urlParameterValues',
|
|
label: $t('re.processor.grid.entity.sqlParameterValues'),
|
|
showIf: (args: any) => {
|
|
return args.form.getFieldValue('type') === this.PROCESSOR_TYPE;
|
|
},
|
|
type: 'w-grid',
|
|
height: 110,
|
|
title: $t('re.processor.grid.entity.sqlParameterValues'),
|
|
localMode: true,
|
|
autoFetchData: false,
|
|
dense: true,
|
|
dbClickOperation: 'edit',
|
|
dndMode: 'local',
|
|
pageable: false,
|
|
configButton: false,
|
|
toolbarConfigure: { noIcon: false },
|
|
toolbarActions: [
|
|
{
|
|
name: 'analyze',
|
|
label: $t('analyze'),
|
|
icon: 'bi-tag',
|
|
click: (args: any) => {
|
|
const sql = this.#editorForm.getFieldValue('httpUrl');
|
|
const regex = /\$\{[\u0000-\uFFFF]+?\}/g;
|
|
const array: any[] = sql.match(regex);
|
|
const rows: any[] = [];
|
|
array.forEach((item) => {
|
|
rows.push({ name: item, value: '' });
|
|
});
|
|
const grid = this.#editorForm.getFieldComponent('urlParameterValues');
|
|
grid.setLocalData(rows);
|
|
},
|
|
},
|
|
'separator',
|
|
'add',
|
|
'edit',
|
|
[
|
|
{
|
|
extend: 'remove',
|
|
click: (args: any) => {
|
|
const grid = args.grid.getEditorForm().getFieldComponent('urlParameterValues');
|
|
grid.removeRows(args.selecteds);
|
|
},
|
|
},
|
|
{
|
|
extend: 'remove',
|
|
name: 'removeAll',
|
|
label: $t('deleteAll'),
|
|
click: (args: any) => {
|
|
const grid = args.grid.getEditorForm().getFieldComponent('urlParameterValues');
|
|
grid.setLocalData([]);
|
|
},
|
|
},
|
|
],
|
|
],
|
|
columns: [
|
|
{
|
|
width: '50%',
|
|
name: 'name',
|
|
label: $t('name'),
|
|
align: 'left',
|
|
sortable: false,
|
|
format: (value: any) => {
|
|
return PlaceHolder.replace(value);
|
|
},
|
|
},
|
|
{
|
|
width: '100%',
|
|
name: 'value',
|
|
label: $t('value'),
|
|
sortable: false,
|
|
},
|
|
],
|
|
editor: {
|
|
dialog: {
|
|
width: '600px',
|
|
},
|
|
form: {
|
|
colsNum: 1,
|
|
fields: [
|
|
{
|
|
name: 'name',
|
|
label: $t('name'),
|
|
type: 'w-code-mirror',
|
|
toolbar: false,
|
|
lang: 'java',
|
|
rows: 1,
|
|
placeholder: true,
|
|
autoCompletion: this.autoCompletionManager.autoCompletion(),
|
|
},
|
|
{
|
|
name: 'value',
|
|
label: $t('value'),
|
|
type: 'w-text',
|
|
},
|
|
],
|
|
},
|
|
},
|
|
},
|
|
{
|
|
colSpan: 6,
|
|
name: 'httpRequestBody',
|
|
label: $t('re.processor.grid.entity.httpRequestBody'),
|
|
showIf: (args: any) => {
|
|
return args.form.getFieldValue('type') === this.PROCESSOR_TYPE;
|
|
},
|
|
type: 'w-code-mirror',
|
|
rows: 7,
|
|
toolbar: false,
|
|
lineNumber: false,
|
|
lang: 'json',
|
|
lineWrap: false,
|
|
lineBreak: true,
|
|
placeholder: true,
|
|
autoCompletion: this.autoCompletionManager.autoCompletion(),
|
|
userDefinedFunctions: this.userDefinedFunctionsManager.userDefinedFunctions(),
|
|
},
|
|
{
|
|
colSpan: 6,
|
|
name: 'bodyParameterValues',
|
|
label: $t('re.processor.grid.entity.sqlParameterValues'),
|
|
showIf: (args: any) => {
|
|
return args.form.getFieldValue('type') === this.PROCESSOR_TYPE;
|
|
},
|
|
type: 'w-grid',
|
|
height: 110,
|
|
title: $t('re.processor.grid.entity.sqlParameterValues'),
|
|
localMode: true,
|
|
autoFetchData: false,
|
|
dense: true,
|
|
dbClickOperation: 'edit',
|
|
dndMode: 'local',
|
|
pageable: false,
|
|
configButton: false,
|
|
toolbarConfigure: { noIcon: false },
|
|
toolbarActions: [
|
|
{
|
|
name: 'send',
|
|
label: $t('send'),
|
|
icon: 'bi-send',
|
|
click: (args: any) => {
|
|
const httpMethod = this.#editorForm.getFieldValue('httpMethod');
|
|
const httpUrl = this.#editorForm.getFieldValue('httpUrl');
|
|
const httpAuthType = this.#editorForm.getFieldValue('httpAuthType');
|
|
const httpAuthApikey = this.#editorForm.getFieldValue('httpAuthApikey');
|
|
const httpAuthApiValue = this.#editorForm.getFieldValue('httpAuthApiValue');
|
|
const httpAuthBasicUsername = this.#editorForm.getFieldValue('httpAuthBasicUsername');
|
|
const httpAuthBasicPassword = this.#editorForm.getFieldValue('httpAuthBasicPassword');
|
|
const httpAuthBearerToken = this.#editorForm.getFieldValue('httpAuthBearerToken');
|
|
const httpRequestBody = this.#editorForm.getFieldValue('httpRequestBody');
|
|
|
|
axios
|
|
.post(Environment.apiContextPath('/api/re/indicator/processor/sendWebRequest'), {
|
|
httpMethod,
|
|
httpUrl,
|
|
httpAuthType,
|
|
httpAuthApikey,
|
|
httpAuthApiValue,
|
|
httpAuthBasicUsername,
|
|
httpAuthBasicPassword,
|
|
httpAuthBearerToken,
|
|
httpRequestBody,
|
|
})
|
|
.then((response) => {
|
|
const result = response.data;
|
|
if (result.successful) {
|
|
this.#httpResponseBodyRef.value = result.content;
|
|
} else {
|
|
this.#httpResponseBodyRef.value = result.status + ',' + result.error;
|
|
}
|
|
});
|
|
},
|
|
},
|
|
'separator',
|
|
{
|
|
name: 'analyze',
|
|
label: $t('analyze'),
|
|
icon: 'bi-tag',
|
|
click: (args: any) => {
|
|
const sql = this.#editorForm.getFieldValue('httpRequestBody');
|
|
const regex = /\$\{[\u0000-\uFFFF]+?\}/g;
|
|
const array: any[] = sql.match(regex);
|
|
const rows: any[] = [];
|
|
array.forEach((item) => {
|
|
rows.push({ name: item, value: '' });
|
|
});
|
|
const grid = this.#editorForm.getFieldComponent('bodyParameterValues');
|
|
grid.setLocalData(rows);
|
|
},
|
|
},
|
|
'separator',
|
|
'add',
|
|
'edit',
|
|
[
|
|
{
|
|
extend: 'remove',
|
|
click: (args: any) => {
|
|
const grid = args.grid.getEditorForm().getFieldComponent('bodyParameterValues');
|
|
grid.removeRows(args.selecteds);
|
|
},
|
|
},
|
|
{
|
|
extend: 'remove',
|
|
name: 'removeAll',
|
|
label: $t('deleteAll'),
|
|
click: (args: any) => {
|
|
const grid = args.grid.getEditorForm().getFieldComponent('bodyParameterValues');
|
|
grid.setLocalData([]);
|
|
},
|
|
},
|
|
],
|
|
],
|
|
columns: [
|
|
{
|
|
width: '50%',
|
|
name: 'name',
|
|
label: $t('name'),
|
|
align: 'left',
|
|
sortable: false,
|
|
format: (value: any) => {
|
|
return PlaceHolder.replace(value);
|
|
},
|
|
},
|
|
{
|
|
width: '100%',
|
|
name: 'value',
|
|
label: $t('value'),
|
|
sortable: false,
|
|
},
|
|
],
|
|
editor: {
|
|
dialog: {
|
|
width: '600px',
|
|
},
|
|
form: {
|
|
colsNum: 1,
|
|
fields: [
|
|
{
|
|
name: 'name',
|
|
label: $t('name'),
|
|
type: 'w-code-mirror',
|
|
toolbar: false,
|
|
lang: 'java',
|
|
rows: 1,
|
|
placeholder: true,
|
|
autoCompletion: this.autoCompletionManager.autoCompletion(),
|
|
},
|
|
{
|
|
name: 'value',
|
|
label: $t('value'),
|
|
type: 'w-text',
|
|
},
|
|
],
|
|
},
|
|
},
|
|
},
|
|
{
|
|
colSpan: 12,
|
|
name: 'httpResponseBody',
|
|
label: $t('re.processor.grid.entity.httpResponseBody'),
|
|
showIf: (args: any) => {
|
|
return args.form.getFieldValue('type') === this.PROCESSOR_TYPE;
|
|
},
|
|
type: 'w-code-mirror',
|
|
lang: 'json',
|
|
rows: 4,
|
|
lineHeight: '1.3rem',
|
|
fontSize: '0.75rem',
|
|
toolbar: false,
|
|
lineNumber: false,
|
|
lineWrap: false,
|
|
lineBreak: true,
|
|
modelValue: this.#httpResponseBodyRef.value,
|
|
},
|
|
{
|
|
colSpan: 12,
|
|
name: 'httpResponseMapping',
|
|
label: $t('re.processor.grid.entity.httpResponseMapping'),
|
|
showIf: (args: any) => {
|
|
return args.form.getFieldValue('type') === this.PROCESSOR_TYPE;
|
|
},
|
|
type: 'w-code-mirror',
|
|
rows: 5,
|
|
toolbar: false,
|
|
lineNumber: false,
|
|
lineHeight: '1.3rem',
|
|
fontSize: '0.75rem',
|
|
lang: 'java',
|
|
lineWrap: false,
|
|
lineBreak: true,
|
|
placeholder: true,
|
|
autoCompletion: this.autoCompletionManager.autoCompletion(),
|
|
userDefinedFunctions: this.userDefinedFunctionsManager.userDefinedFunctions(),
|
|
defaultValue:
|
|
'if(${response}.getSuccessful()){\n\t//def object =new groovy.xml.XmlParser().parse(${response}.getContent());\n\tdef object = new groovy.json.JsonSlurper().parseText(${response}.getContent());\n}',
|
|
},
|
|
];
|
|
}
|
|
|
|
public getViewerFields(): any {
|
|
return [
|
|
{ name: 'httpMethod', label: $t('re.processor.grid.entity.httpMethod') },
|
|
{ name: 'httpUrl', label: $t('re.processor.grid.entity.httpUrl') },
|
|
{ name: 'httpAuthType', label: $t('re.processor.grid.entity.httpAuthType') },
|
|
{ name: 'httpAuthApikey', label: $t('re.processor.grid.entity.httpAuthApikey') },
|
|
{ name: 'httpAuthApiValue', label: $t('re.processor.grid.entity.httpAuthApiValue') },
|
|
{ name: 'httpAuthBasicUsername', label: $t('re.processor.grid.entity.httpAuthBasicUsername') },
|
|
{ name: 'httpAuthBasicPassword', label: $t('re.processor.grid.entity.httpAuthBasicPassword') },
|
|
{ name: 'httpAuthBearerToken', label: $t('re.processor.grid.entity.httpAuthBearerToken') },
|
|
{ name: 'httpRequestBody', label: $t('re.processor.grid.entity.httpRequestBody') },
|
|
{ name: 'httpResponseMapping', label: $t('re.processor.grid.entity.httpResponseMapping') },
|
|
];
|
|
}
|
|
|
|
public beforeEditorDataSubmit(args: any): void {}
|
|
|
|
public afterEditorOpen(args: any) {
|
|
args.grid.getEditorDialog().setWidth(this.EDITOR_DIALOG_WIDTH);
|
|
this.initAutoCompletionManager();
|
|
this.initUserDefinedFunctionsManager();
|
|
|
|
this.#editorForm = args.grid.getEditorForm();
|
|
EnumTools.fetch(['io.sc.engine.rule.core.enums.HttpMethodType', 'io.sc.engine.rule.core.enums.HttpAuthorizationType']).then((value) => {
|
|
this.#httpMethodTypeEnum = value.HttpMethodType;
|
|
this.#httpMethodTypeOptionsRef.value = Options.enum(this.#httpMethodTypeEnum);
|
|
this.#HttpAuthorizationTypeEnum = value.HttpAuthorizationType;
|
|
this.#httpAuthorizationTypeOptionsRef.value = Options.enum(this.#HttpAuthorizationTypeEnum);
|
|
});
|
|
}
|
|
}
|
|
|
|
export { HttpRequest };
|
|
|