You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@streampark.apache.org by be...@apache.org on 2023/11/29 14:42:38 UTC
(incubator-streampark) 01/01: [Improve] maven build args improvement
This is an automated email from the ASF dual-hosted git repository.
benjobs pushed a commit to branch mvn_bug
in repository https://gitbox.apache.org/repos/asf/incubator-streampark.git
commit a74c14ec08f81cfe43287e433b9580398a408e39
Author: benjobs <be...@gmail.com>
AuthorDate: Wed Nov 29 22:42:19 2023 +0800
[Improve] maven build args improvement
---
.../streampark/console/core/entity/Project.java | 33 +++++-
.../src/main/resources/db/data-h2.sql | 4 +-
.../streampark-console-webapp/src/api/flink/app.ts | 4 +-
.../src/api/flink/flinkBuild.ts | 5 +-
.../components/Form/src/components/FormItem.vue | 8 +-
.../Modal/src/components/ModalWrapper.vue | 4 +-
.../components/Table/src/components/HeaderCell.vue | 2 +-
.../src/hooks/setting/useMenuSetting.ts | 10 +-
.../streampark-console-webapp/src/utils/props.ts | 46 ++++----
.../src/views/base/error-log/data.tsx | 12 +-
.../src/views/flink/app/data/option.ts | 121 ++++++++++-----------
.../views/resource/project/components/ListItem.vue | 5 +-
12 files changed, 140 insertions(+), 114 deletions(-)
diff --git a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/entity/Project.java b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/entity/Project.java
index 1db459925..d861c18a3 100644
--- a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/entity/Project.java
+++ b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/entity/Project.java
@@ -22,6 +22,7 @@ import org.apache.streampark.common.conf.InternalConfigHolder;
import org.apache.streampark.common.conf.Workspace;
import org.apache.streampark.common.util.CommandUtils;
import org.apache.streampark.common.util.Utils;
+import org.apache.streampark.console.base.exception.ApiAlertException;
import org.apache.streampark.console.base.exception.ApiDetailException;
import org.apache.streampark.console.base.util.GitUtils;
import org.apache.streampark.console.base.util.WebUtils;
@@ -43,9 +44,11 @@ import org.eclipse.jgit.lib.Constants;
import java.io.File;
import java.io.IOException;
import java.io.Serializable;
+import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.jar.JarFile;
+import java.util.stream.Collectors;
@Slf4j
@Data
@@ -213,17 +216,41 @@ public class Project implements Serializable {
StringBuilder cmdBuffer = new StringBuilder(mvn).append(" clean package -DskipTests ");
if (StringUtils.isNotBlank(this.buildArgs)) {
- cmdBuffer.append(this.buildArgs.trim());
+ List<String> dangerArgs = getLogicalOperators(this.buildArgs);
+ if (dangerArgs.isEmpty()) {
+ cmdBuffer.append(this.buildArgs.trim());
+ } else {
+ throw new IllegalArgumentException(
+ String.format(
+ "Invalid build args, dangerous operator detected: %s, in your buildArgs: %s",
+ dangerArgs.stream().collect(Collectors.joining(",")), this.buildArgs));
+ }
}
String setting = InternalConfigHolder.get(CommonConfig.MAVEN_SETTINGS_PATH());
if (StringUtils.isNotBlank(setting)) {
- cmdBuffer.append(" --settings ").append(setting);
+ List<String> dangerArgs = getLogicalOperators(setting);
+ ApiAlertException.throwIfTrue(
+ !dangerArgs.isEmpty(),
+ String.format(
+ "Invalid maven setting path, dangerous operator detected: %s, in your maven setting path: %s",
+ dangerArgs.stream().collect(Collectors.joining(",")), setting));
+ File file = new File(setting);
+ if (file.exists() && file.isFile()) {
+ cmdBuffer.append(" --settings ").append(setting);
+ } else {
+ throw new IllegalArgumentException(
+ String.format("Invalid maven setting path, %s no exists or not file", setting));
+ }
}
-
return cmdBuffer.toString();
}
+ private List<String> getLogicalOperators(String param) {
+ List<String> dangerArgs = Arrays.asList(" || ", " | ", " && ", " & ");
+ return dangerArgs.stream().filter(param::contains).collect(Collectors.toList());
+ }
+
@JsonIgnore
public String getMavenWorkHome() {
String buildHome = this.getAppSource().getAbsolutePath();
diff --git a/streampark-console/streampark-console-service/src/main/resources/db/data-h2.sql b/streampark-console/streampark-console-service/src/main/resources/db/data-h2.sql
index 48f013570..f5d2df45b 100644
--- a/streampark-console/streampark-console-service/src/main/resources/db/data-h2.sql
+++ b/streampark-console/streampark-console-service/src/main/resources/db/data-h2.sql
@@ -81,10 +81,10 @@ insert into `t_menu` values (130200, 130000, 'resource.variable', '/resource/var
insert into `t_menu` values (130300, 130000, 'resource.upload', '/resource/upload', 'resource/upload/View', null, null, '0', 1, 3, now(), now());
insert into `t_menu` values (130101, 130100, 'project view', null, null, 'project:view', null, '1', 1, null, now(), now());
-insert into `t_menu` values (130102, 130100, 'project add', '/project/add', 'project/Add', 'project:create', '', '0', 0, null, now(), now());
+insert into `t_menu` values (130102, 130100, 'project add', '/project/add', 'resource/project/Add', 'project:create', '', '0', 0, null, now(), now());
insert into `t_menu` values (130103, 130100, 'project build', null, null, 'project:build', null, '1', 1, null, now(), now());
insert into `t_menu` values (130104, 130100, 'project delete', null, null, 'project:delete', null, '1', 1, null, now(), now());
-insert into `t_menu` values (130105, 130100, 'project edit', '/project/edit', 'project/Edit', 'project:update', null, '0', 0, null, now(), now());
+insert into `t_menu` values (130105, 130100, 'project edit', '/project/edit', 'resource/project/Edit', 'project:update', null, '0', 0, null, now(), now());
insert into `t_menu` values (130201, 130200, 'variable view', NULL, NULL, 'variable:view', NULL, '1', 1, null, now(), now());
insert into `t_menu` values (130202, 130200, 'variable depend view', null, null, 'variable:depend_apps', null, '1', 1, NULL, now(), now());
diff --git a/streampark-console/streampark-console-webapp/src/api/flink/app.ts b/streampark-console/streampark-console-webapp/src/api/flink/app.ts
index 48a61cbfb..13110db38 100644
--- a/streampark-console/streampark-console-webapp/src/api/flink/app.ts
+++ b/streampark-console/streampark-console-webapp/src/api/flink/app.ts
@@ -109,7 +109,7 @@ export function fetchCheckName(data: { id?: string; jobName: string }): Promise<
return defHttp.post({ url: APP_API.CHECK_NAME, data });
}
-export function fetchMain(data):Promise<string> {
+export function fetchMain(data): Promise<string> {
return defHttp.post({ url: APP_API.MAIN, data });
}
/**
@@ -117,7 +117,7 @@ export function fetchMain(data):Promise<string> {
* @param params
* @returns {String} file path
*/
-export function fetchUpload(params) :Promise<string> {
+export function fetchUpload(params): Promise<string> {
return defHttp.post<string>({
url: APP_API.UPLOAD,
params,
diff --git a/streampark-console/streampark-console-webapp/src/api/flink/flinkBuild.ts b/streampark-console/streampark-console-webapp/src/api/flink/flinkBuild.ts
index 8fbda0dc9..de201ec67 100644
--- a/streampark-console/streampark-console-webapp/src/api/flink/flinkBuild.ts
+++ b/streampark-console/streampark-console-webapp/src/api/flink/flinkBuild.ts
@@ -22,7 +22,10 @@ enum BUILD_API {
DETAIL = '/flink/pipe/detail',
}
-export function fetchBuild(data: { appId: string; forceBuild: boolean; }): Promise<AxiosResponse<any>> {
+export function fetchBuild(data: {
+ appId: string;
+ forceBuild: boolean;
+}): Promise<AxiosResponse<any>> {
return defHttp.post({ url: BUILD_API.BUILD, data }, { isReturnNativeResponse: true });
}
/**
diff --git a/streampark-console/streampark-console-webapp/src/components/Form/src/components/FormItem.vue b/streampark-console/streampark-console-webapp/src/components/Form/src/components/FormItem.vue
index 137ae94d6..9bbb5023f 100644
--- a/streampark-console/streampark-console-webapp/src/components/Form/src/components/FormItem.vue
+++ b/streampark-console/streampark-console-webapp/src/components/Form/src/components/FormItem.vue
@@ -333,8 +333,8 @@
return slot
? getSlot(slots, slot, unref(getValues))
: render
- ? render(unref(getValues))
- : renderComponent();
+ ? render(unref(getValues))
+ : renderComponent();
};
const showSuffix = !!suffix;
@@ -382,8 +382,8 @@
return colSlot
? getSlot(slots, colSlot, values)
: renderColContent
- ? renderColContent(values)
- : renderItem();
+ ? renderColContent(values)
+ : renderItem();
};
return (
diff --git a/streampark-console/streampark-console-webapp/src/components/Modal/src/components/ModalWrapper.vue b/streampark-console/streampark-console-webapp/src/components/Modal/src/components/ModalWrapper.vue
index 1b1b9a613..52c8b5eb8 100644
--- a/streampark-console/streampark-console-webapp/src/components/Modal/src/components/ModalWrapper.vue
+++ b/streampark-console/streampark-console-webapp/src/components/Modal/src/components/ModalWrapper.vue
@@ -153,8 +153,8 @@
realHeightRef.value = props.height
? props.height
: realHeight > maxHeight
- ? maxHeight
- : realHeight;
+ ? maxHeight
+ : realHeight;
}
emit('height-change', unref(realHeightRef));
} catch (error) {
diff --git a/streampark-console/streampark-console-webapp/src/components/Table/src/components/HeaderCell.vue b/streampark-console/streampark-console-webapp/src/components/Table/src/components/HeaderCell.vue
index 35c080269..36ab854c5 100644
--- a/streampark-console/streampark-console-webapp/src/components/Table/src/components/HeaderCell.vue
+++ b/streampark-console/streampark-console-webapp/src/components/Table/src/components/HeaderCell.vue
@@ -22,7 +22,7 @@
props: {
column: {
type: Object as PropType<BasicColumn>,
- default: () => ({} as BasicColumn),
+ default: () => ({}) as BasicColumn,
},
},
setup(props) {
diff --git a/streampark-console/streampark-console-webapp/src/hooks/setting/useMenuSetting.ts b/streampark-console/streampark-console-webapp/src/hooks/setting/useMenuSetting.ts
index 3566bfd27..f501c6e80 100644
--- a/streampark-console/streampark-console-webapp/src/hooks/setting/useMenuSetting.ts
+++ b/streampark-console/streampark-console-webapp/src/hooks/setting/useMenuSetting.ts
@@ -105,8 +105,8 @@ export function useMenuSetting() {
return siderHidden
? 0
: collapsedShowTitle
- ? SIDE_BAR_SHOW_TIT_MINI_WIDTH
- : SIDE_BAR_MINI_WIDTH;
+ ? SIDE_BAR_SHOW_TIT_MINI_WIDTH
+ : SIDE_BAR_MINI_WIDTH;
});
const getCalcContentWidth = computed(() => {
@@ -114,9 +114,9 @@ export function useMenuSetting() {
unref(getIsTopMenu) || !unref(getShowMenu) || (unref(getSplit) && unref(getMenuHidden))
? 0
: unref(getIsMixSidebar)
- ? (unref(getCollapsed) ? SIDE_BAR_MINI_WIDTH : SIDE_BAR_SHOW_TIT_MINI_WIDTH) +
- (unref(getMixSideFixed) && unref(mixSideHasChildren) ? unref(getRealWidth) : 0)
- : unref(getRealWidth);
+ ? (unref(getCollapsed) ? SIDE_BAR_MINI_WIDTH : SIDE_BAR_SHOW_TIT_MINI_WIDTH) +
+ (unref(getMixSideFixed) && unref(mixSideHasChildren) ? unref(getRealWidth) : 0)
+ : unref(getRealWidth);
return `calc(100% - ${unref(width)}px)`;
});
diff --git a/streampark-console/streampark-console-webapp/src/utils/props.ts b/streampark-console/streampark-console-webapp/src/utils/props.ts
index 368f490f2..4a5491b27 100644
--- a/streampark-console/streampark-console-webapp/src/utils/props.ts
+++ b/streampark-console/streampark-console-webapp/src/utils/props.ts
@@ -28,8 +28,8 @@ export type BuildPropOption<T, D extends BuildPropType<T, V, C>, R, V, C> = {
default?: R extends true
? never
: D extends Record<string, unknown> | Array<any>
- ? () => D
- : (() => D) | D;
+ ? () => D
+ : (() => D) | D;
validator?: ((val: any) => val is C) | ((val: any) => boolean);
};
@@ -37,8 +37,8 @@ type _BuildPropType<T, V, C> =
| (T extends PropWrapper<unknown>
? T[typeof wrapperKey]
: [V] extends [never]
- ? ResolvePropTypeWithReadonly<T>
- : never)
+ ? ResolvePropTypeWithReadonly<T>
+ : never)
| V
| C;
export type BuildPropType<T, V, C> = _BuildPropType<
@@ -53,8 +53,8 @@ type _BuildPropDefault<T, D> = [T] extends [
]
? D
: D extends () => T
- ? ReturnType<D>
- : D;
+ ? ReturnType<D>
+ : D;
export type BuildPropDefault<T, D, R> = R extends true
? { readonly default?: undefined }
@@ -146,12 +146,12 @@ export const buildProps = <
[K in keyof O]: O[K] extends BuildPropReturn<any, any, any, any, any>
? O[K]
: [O[K]] extends NativePropType
- ? O[K]
- : O[K] extends BuildPropOption<infer T, infer D, infer R, infer V, infer C>
- ? D extends BuildPropType<T, V, C>
- ? BuildPropOption<T, D, R, V, C>
- : never
- : never;
+ ? O[K]
+ : O[K] extends BuildPropOption<infer T, infer D, infer R, infer V, infer C>
+ ? D extends BuildPropType<T, V, C>
+ ? BuildPropOption<T, D, R, V, C>
+ : never
+ : never;
},
>(
props: O,
@@ -162,17 +162,17 @@ export const buildProps = <
[K in keyof O]: O[K] extends { [propKey]: boolean }
? O[K]
: [O[K]] extends NativePropType
- ? O[K]
- : O[K] extends BuildPropOption<
- infer T,
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
- infer _D,
- infer R,
- infer V,
- infer C
- >
- ? BuildPropReturn<T, O[K]['default'], R, V, C>
- : never;
+ ? O[K]
+ : O[K] extends BuildPropOption<
+ infer T,
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
+ infer _D,
+ infer R,
+ infer V,
+ infer C
+ >
+ ? BuildPropReturn<T, O[K]['default'], R, V, C>
+ : never;
};
export const definePropType = <T>(val: any) => ({ [wrapperKey]: val }) as PropWrapper<T>;
diff --git a/streampark-console/streampark-console-webapp/src/views/base/error-log/data.tsx b/streampark-console/streampark-console-webapp/src/views/base/error-log/data.tsx
index 3ffc2f453..73120a425 100644
--- a/streampark-console/streampark-console-webapp/src/views/base/error-log/data.tsx
+++ b/streampark-console/streampark-console-webapp/src/views/base/error-log/data.tsx
@@ -16,12 +16,12 @@ export function getColumns(): BasicColumn[] {
text === ErrorTypeEnum.VUE
? 'green'
: text === ErrorTypeEnum.RESOURCE
- ? 'cyan'
- : text === ErrorTypeEnum.PROMISE
- ? 'blue'
- : ErrorTypeEnum.AJAX
- ? 'red'
- : 'purple';
+ ? 'cyan'
+ : text === ErrorTypeEnum.PROMISE
+ ? 'blue'
+ : ErrorTypeEnum.AJAX
+ ? 'red'
+ : 'purple';
return <Tag color={color}>{() => text}</Tag>;
},
},
diff --git a/streampark-console/streampark-console-webapp/src/views/flink/app/data/option.ts b/streampark-console/streampark-console-webapp/src/views/flink/app/data/option.ts
index 84658abf2..54cb399cf 100644
--- a/streampark-console/streampark-console-webapp/src/views/flink/app/data/option.ts
+++ b/streampark-console/streampark-console-webapp/src/views/flink/app/data/option.ts
@@ -488,68 +488,65 @@ const options = [
},
},
{
- key: 'taskmanager.memory.network.max',
- name: 'taskmanager.memory.network.max',
- placeholder: 'Max Network Memory size for TaskExecutors',
- description:
- 'This biggest Network Memory is used for allocation of network buffers',
- unit: 'mb',
- group: 'taskmanager-memory',
- type: 'number',
- min: 64,
- max: 1024,
- step: 1,
- defaultValue: 1024,
- validator: (_rule, value, callback) => {
- if (!value) {
- callback(new Error('memory.network.max is required or you can delete this option'));
- } else {
- callback();
- }
- },
- },
- {
- key: 'taskmanager.memory.network.min',
- name: 'taskmanager.memory.network.min',
- placeholder: 'Min Network Memory size for TaskExecutors',
- description:
- 'This minimum Network Memory is used for allocation of network buffers',
- unit: 'mb',
- group: 'taskmanager-memory',
- type: 'number',
- min: 64,
- max: 1024,
- step: 1,
- defaultValue: 64,
- validator: (_rule, value, callback) => {
- if (!value) {
- callback(new Error('memory.network.min is required or you can delete this option'));
- } else {
- callback();
- }
- },
- },
- {
- key: 'taskmanager.memory.network.fraction',
- name: 'taskmanager.memory.network.fraction',
- placeholder: 'Fraction of Network Memory size for TaskExecutors',
- description:
- 'The fraction of Network Memory size is used for allocation of network buffers',
- unit: 'mb',
- group: 'taskmanager-memory',
- type: 'number',
- min: 0.1,
- max: 1,
- step: 0.1,
- defaultValue: 0.1,
- validator: (_rule, value, callback) => {
- if (!value) {
- callback(new Error('memory.network.fraction is required or you can delete this option'));
- } else {
- callback();
- }
- },
- },
+ key: 'taskmanager.memory.network.max',
+ name: 'taskmanager.memory.network.max',
+ placeholder: 'Max Network Memory size for TaskExecutors',
+ description: 'This biggest Network Memory is used for allocation of network buffers',
+ unit: 'mb',
+ group: 'taskmanager-memory',
+ type: 'number',
+ min: 64,
+ max: 1024,
+ step: 1,
+ defaultValue: 1024,
+ validator: (_rule, value, callback) => {
+ if (!value) {
+ callback(new Error('memory.network.max is required or you can delete this option'));
+ } else {
+ callback();
+ }
+ },
+ },
+ {
+ key: 'taskmanager.memory.network.min',
+ name: 'taskmanager.memory.network.min',
+ placeholder: 'Min Network Memory size for TaskExecutors',
+ description: 'This minimum Network Memory is used for allocation of network buffers',
+ unit: 'mb',
+ group: 'taskmanager-memory',
+ type: 'number',
+ min: 64,
+ max: 1024,
+ step: 1,
+ defaultValue: 64,
+ validator: (_rule, value, callback) => {
+ if (!value) {
+ callback(new Error('memory.network.min is required or you can delete this option'));
+ } else {
+ callback();
+ }
+ },
+ },
+ {
+ key: 'taskmanager.memory.network.fraction',
+ name: 'taskmanager.memory.network.fraction',
+ placeholder: 'Fraction of Network Memory size for TaskExecutors',
+ description: 'The fraction of Network Memory size is used for allocation of network buffers',
+ unit: 'mb',
+ group: 'taskmanager-memory',
+ type: 'number',
+ min: 0.1,
+ max: 1,
+ step: 0.1,
+ defaultValue: 0.1,
+ validator: (_rule, value, callback) => {
+ if (!value) {
+ callback(new Error('memory.network.fraction is required or you can delete this option'));
+ } else {
+ callback();
+ }
+ },
+ },
];
const optionsKeyMapping = new Map<string, Recordable>();
diff --git a/streampark-console/streampark-console-webapp/src/views/resource/project/components/ListItem.vue b/streampark-console/streampark-console-webapp/src/views/resource/project/components/ListItem.vue
index 5f5d9ad9c..2ca92caf3 100644
--- a/streampark-console/streampark-console-webapp/src/views/resource/project/components/ListItem.vue
+++ b/streampark-console/streampark-console-webapp/src/views/resource/project/components/ListItem.vue
@@ -125,17 +125,16 @@
import { computed } from 'vue';
import { buildProject, deleteProject } from '/@/api/resource/project';
import { useMessage } from '/@/hooks/web/useMessage';
- import { useGo } from '/@/hooks/web/usePage';
import { ProjectRecord } from '/@/api/resource/project/model/projectModel';
import { BuildStateEnum } from '/@/enums/flinkEnum';
import { useI18n } from '/@/hooks/web/useI18n';
import { ProjectTypeEnum } from '/@/enums/projectEnum';
+ import { router } from '/@/router';
const { t } = useI18n();
const emit = defineEmits(['viewLog', 'success']);
const { Swal, createMessage } = useMessage();
- const go = useGo();
const props = defineProps({
item: { type: Object as PropType<ProjectRecord>, required: true },
});
@@ -172,7 +171,7 @@
}
const handleEdit = function () {
- go(`/project/edit?id=${props.item.id}`);
+ router.push({ path: '/project/edit', query: { id: props.item.id } });
};
async function handleDelete() {