fix: 数据库名称校验调整
This commit is contained in:
		| @@ -169,14 +169,14 @@ func (u *MysqlService) Create(mysqlDto dto.MysqlDBCreate) error { | |||||||
| 		return errors.WithMessage(constant.ErrStructTransform, err.Error()) | 		return errors.WithMessage(constant.ErrStructTransform, err.Error()) | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	if err := excuteSql(app.ContainerName, app.Password, fmt.Sprintf("create database if not exists %s character set=%s", mysqlDto.Name, mysqlDto.Format)); err != nil { | 	if err := excuteSql(app.ContainerName, app.Password, fmt.Sprintf("create database if not exists `%s` character set=%s", mysqlDto.Name, mysqlDto.Format)); err != nil { | ||||||
| 		return err | 		return err | ||||||
| 	} | 	} | ||||||
| 	tmpPermission := mysqlDto.Permission | 	tmpPermission := mysqlDto.Permission | ||||||
| 	if err := excuteSql(app.ContainerName, app.Password, fmt.Sprintf("create user if not exists '%s'@'%s' identified by '%s';", mysqlDto.Username, tmpPermission, mysqlDto.Password)); err != nil { | 	if err := excuteSql(app.ContainerName, app.Password, fmt.Sprintf("create user if not exists '%s'@'%s' identified by '%s';", mysqlDto.Username, tmpPermission, mysqlDto.Password)); err != nil { | ||||||
| 		return err | 		return err | ||||||
| 	} | 	} | ||||||
| 	grantStr := fmt.Sprintf("grant all privileges on %s.* to '%s'@'%s'", mysqlDto.Name, mysqlDto.Username, tmpPermission) | 	grantStr := fmt.Sprintf("grant all privileges on `%s`.* to '%s'@'%s'", mysqlDto.Name, mysqlDto.Username, tmpPermission) | ||||||
| 	if app.Version == "5.7.39" { | 	if app.Version == "5.7.39" { | ||||||
| 		grantStr = fmt.Sprintf("%s identified by '%s' with grant option;", grantStr, mysqlDto.Password) | 		grantStr = fmt.Sprintf("%s identified by '%s' with grant option;", grantStr, mysqlDto.Password) | ||||||
| 	} | 	} | ||||||
|   | |||||||
| @@ -32,7 +32,7 @@ const checkName = (rule: any, value: any, callback: any) => { | |||||||
|     if (value === '' || typeof value === 'undefined' || value == null) { |     if (value === '' || typeof value === 'undefined' || value == null) { | ||||||
|         callback(new Error(i18n.global.t('commons.rule.commonName'))); |         callback(new Error(i18n.global.t('commons.rule.commonName'))); | ||||||
|     } else { |     } else { | ||||||
|         const reg = /^[a-zA-Z0-9]{1}[a-zA-Z0-9_]{0,30}$/; |         const reg = /^[a-zA-Z0-9\u4e00-\u9fa5]{1}[a-zA-Z0-9_.\u4e00-\u9fa5-]{0,30}$/; | ||||||
|         if (!reg.test(value) && value !== '') { |         if (!reg.test(value) && value !== '') { | ||||||
|             callback(new Error(i18n.global.t('commons.rule.commonName'))); |             callback(new Error(i18n.global.t('commons.rule.commonName'))); | ||||||
|         } else { |         } else { | ||||||
| @@ -41,9 +41,35 @@ const checkName = (rule: any, value: any, callback: any) => { | |||||||
|     } |     } | ||||||
| }; | }; | ||||||
|  |  | ||||||
|  | const checkSimpleName = (rule: any, value: any, callback: any) => { | ||||||
|  |     if (value === '' || typeof value === 'undefined' || value == null) { | ||||||
|  |         callback(new Error(i18n.global.t('commons.rule.simpleName'))); | ||||||
|  |     } else { | ||||||
|  |         const reg = /^[a-zA-Z0-9]{1}[a-zA-Z0-9_]{0,30}$/; | ||||||
|  |         if (!reg.test(value) && value !== '') { | ||||||
|  |             callback(new Error(i18n.global.t('commons.rule.simpleName'))); | ||||||
|  |         } else { | ||||||
|  |             callback(); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | const checkDBName = (rule: any, value: any, callback: any) => { | ||||||
|  |     if (value === '' || typeof value === 'undefined' || value == null) { | ||||||
|  |         callback(new Error(i18n.global.t('commons.rule.dbName'))); | ||||||
|  |     } else { | ||||||
|  |         const reg = /^[a-zA-Z0-9]{1}[a-zA-Z0-9_.-]{0,30}$/; | ||||||
|  |         if (!reg.test(value) && value !== '') { | ||||||
|  |             callback(new Error(i18n.global.t('commons.rule.dbName'))); | ||||||
|  |         } else { | ||||||
|  |             callback(); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | }; | ||||||
|  |  | ||||||
| const checkImageName = (rule: any, value: any, callback: any) => { | const checkImageName = (rule: any, value: any, callback: any) => { | ||||||
|     if (value === '' || typeof value === 'undefined' || value == null) { |     if (value === '' || typeof value === 'undefined' || value == null) { | ||||||
|         callback(new Error(i18n.global.t('commons.rule.commonName'))); |         callback(new Error(i18n.global.t('commons.rule.imageName'))); | ||||||
|     } else { |     } else { | ||||||
|         const reg = /^[a-zA-Z0-9\u4e00-\u9fa5]{1}[a-z:A-Z0-9_.\u4e00-\u9fa5-]{0,30}$/; |         const reg = /^[a-zA-Z0-9\u4e00-\u9fa5]{1}[a-z:A-Z0-9_.\u4e00-\u9fa5-]{0,30}$/; | ||||||
|         if (!reg.test(value) && value !== '') { |         if (!reg.test(value) && value !== '') { | ||||||
| @@ -98,6 +124,8 @@ interface CommonRule { | |||||||
|     requiredSelect: FormItemRule; |     requiredSelect: FormItemRule; | ||||||
|     requiredSelectBusiness: FormItemRule; |     requiredSelectBusiness: FormItemRule; | ||||||
|     name: FormItemRule; |     name: FormItemRule; | ||||||
|  |     simpleName: FormItemRule; | ||||||
|  |     dbName: FormItemRule; | ||||||
|     imageName: FormItemRule; |     imageName: FormItemRule; | ||||||
|     linuxName: FormItemRule; |     linuxName: FormItemRule; | ||||||
|     password: FormItemRule; |     password: FormItemRule; | ||||||
| @@ -128,6 +156,16 @@ export const Rules: CommonRule = { | |||||||
|         message: i18n.global.t('commons.rule.requiredSelect'), |         message: i18n.global.t('commons.rule.requiredSelect'), | ||||||
|         trigger: 'change', |         trigger: 'change', | ||||||
|     }, |     }, | ||||||
|  |     simpleName: { | ||||||
|  |         required: true, | ||||||
|  |         validator: checkSimpleName, | ||||||
|  |         trigger: 'blur', | ||||||
|  |     }, | ||||||
|  |     dbName: { | ||||||
|  |         required: true, | ||||||
|  |         validator: checkDBName, | ||||||
|  |         trigger: 'blur', | ||||||
|  |     }, | ||||||
|     imageName: { |     imageName: { | ||||||
|         required: true, |         required: true, | ||||||
|         validator: checkImageName, |         validator: checkImageName, | ||||||
|   | |||||||
| @@ -102,7 +102,9 @@ export default { | |||||||
|             rePassword: 'The passwords are inconsistent. Please check and re-enter the password', |             rePassword: 'The passwords are inconsistent. Please check and re-enter the password', | ||||||
|             requiredInput: 'Please enter the required fields', |             requiredInput: 'Please enter the required fields', | ||||||
|             requiredSelect: 'Please select the required fields', |             requiredSelect: 'Please select the required fields', | ||||||
|             commonName: 'Support English, numbers, _, length 1-30', |             commonName: 'Support English, Chinese, numbers, .-, and _ length 1-30', | ||||||
|  |             simpleName: 'Support English, numbers and _ length 1-30', | ||||||
|  |             dbName: 'Support English, numbers, .-, and _ length 1-30', | ||||||
|             imageName: 'Support English, Chinese, numbers, :.-_, length 1-30', |             imageName: 'Support English, Chinese, numbers, :.-_, length 1-30', | ||||||
|             complexityPassword: |             complexityPassword: | ||||||
|                 'Please enter a password with more than 8 characters and must contain letters, digits, and special symbols', |                 'Please enter a password with more than 8 characters and must contain letters, digits, and special symbols', | ||||||
|   | |||||||
| @@ -102,7 +102,9 @@ export default { | |||||||
|             rePassword: '密码不一致,请检查后重新输入', |             rePassword: '密码不一致,请检查后重新输入', | ||||||
|             requiredInput: '请填写必填项', |             requiredInput: '请填写必填项', | ||||||
|             requiredSelect: '请选择必选项', |             requiredSelect: '请选择必选项', | ||||||
|             commonName: '支持英文、数字、_,长度1-30', |             commonName: '支持英文、中文、数字、.-和_,长度1-30', | ||||||
|  |             simpleName: '支持英文、数字、_,长度1-30', | ||||||
|  |             dbName: '支持英文、数字、:.-_,长度1-30', | ||||||
|             imageName: '支持英文、中文、数字、:.-_,长度1-30', |             imageName: '支持英文、中文、数字、:.-_,长度1-30', | ||||||
|             complexityPassword: '请输入 8 位以上、必须含有字母、数字、特殊符号的密码', |             complexityPassword: '请输入 8 位以上、必须含有字母、数字、特殊符号的密码', | ||||||
|             commonPassword: '请输入 6 位以上长度密码', |             commonPassword: '请输入 6 位以上长度密码', | ||||||
|   | |||||||
| @@ -46,7 +46,7 @@ const installData = ref<InstallRrops>({ | |||||||
| let open = ref(false); | let open = ref(false); | ||||||
| let form = ref<{ [key: string]: any }>({}); | let form = ref<{ [key: string]: any }>({}); | ||||||
| let rules = ref<FormRules>({ | let rules = ref<FormRules>({ | ||||||
|     NAME: [Rules.requiredInput], |     NAME: [Rules.simpleName], | ||||||
| }); | }); | ||||||
| let loading = false; | let loading = false; | ||||||
| const paramForm = ref<FormInstance>(); | const paramForm = ref<FormInstance>(); | ||||||
|   | |||||||
| @@ -69,7 +69,7 @@ const form = reactive({ | |||||||
|     description: '', |     description: '', | ||||||
| }); | }); | ||||||
| const rules = reactive({ | const rules = reactive({ | ||||||
|     name: [Rules.requiredInput, Rules.name], |     name: [Rules.requiredInput, Rules.dbName], | ||||||
|     username: [Rules.requiredInput, Rules.name], |     username: [Rules.requiredInput, Rules.name], | ||||||
|     password: [Rules.requiredInput], |     password: [Rules.requiredInput], | ||||||
|     permission: [Rules.requiredSelect], |     permission: [Rules.requiredSelect], | ||||||
|   | |||||||
| @@ -10,7 +10,11 @@ | |||||||
|         /> |         /> | ||||||
|         <Setting ref="settingRef" style="margin-top: 20px" /> |         <Setting ref="settingRef" style="margin-top: 20px" /> | ||||||
|  |  | ||||||
|         <el-card width="30%" v-if="mysqlStatus != 'Running' && !isOnSetting && mysqlIsExist" class="mask-prompt"> |         <el-card | ||||||
|  |             width="30%" | ||||||
|  |             v-if="mysqlStatus != 'Running' && !isOnSetting && mysqlIsExist && !loading" | ||||||
|  |             class="mask-prompt" | ||||||
|  |         > | ||||||
|             <span style="font-size: 14px">{{ $t('commons.service.serviceNotStarted', ['Mysql']) }}</span> |             <span style="font-size: 14px">{{ $t('commons.service.serviceNotStarted', ['Mysql']) }}</span> | ||||||
|         </el-card> |         </el-card> | ||||||
|         <div v-if="mysqlIsExist" :class="{ mask: mysqlStatus != 'Running' }"> |         <div v-if="mysqlIsExist" :class="{ mask: mysqlStatus != 'Running' }"> | ||||||
|   | |||||||
| @@ -10,7 +10,11 @@ | |||||||
|             @is-exist="checkExist" |             @is-exist="checkExist" | ||||||
|             v-model:loading="loading" |             v-model:loading="loading" | ||||||
|         ></AppStatus> |         ></AppStatus> | ||||||
|         <el-card width="30%" v-if="redisStatus != 'Running' && !isOnSetting && redisIsExist" class="mask-prompt"> |         <el-card | ||||||
|  |             width="30%" | ||||||
|  |             v-if="redisStatus != 'Running' && !isOnSetting && redisIsExist && !loading" | ||||||
|  |             class="mask-prompt" | ||||||
|  |         > | ||||||
|             <span style="font-size: 14px">{{ $t('commons.service.serviceNotStarted', ['Redis']) }}</span> |             <span style="font-size: 14px">{{ $t('commons.service.serviceNotStarted', ['Redis']) }}</span> | ||||||
|         </el-card> |         </el-card> | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 ssongliu
					ssongliu