fix: 解决 mysql 用户创建冲突
This commit is contained in:
		| @@ -15,6 +15,7 @@ import ( | |||||||
|  |  | ||||||
| 	"github.com/1Panel-dev/1Panel/backend/app/dto" | 	"github.com/1Panel-dev/1Panel/backend/app/dto" | ||||||
| 	"github.com/1Panel-dev/1Panel/backend/app/model" | 	"github.com/1Panel-dev/1Panel/backend/app/model" | ||||||
|  | 	"github.com/1Panel-dev/1Panel/backend/buserr" | ||||||
| 	"github.com/1Panel-dev/1Panel/backend/constant" | 	"github.com/1Panel-dev/1Panel/backend/constant" | ||||||
| 	"github.com/1Panel-dev/1Panel/backend/global" | 	"github.com/1Panel-dev/1Panel/backend/global" | ||||||
| 	"github.com/1Panel-dev/1Panel/backend/utils/common" | 	"github.com/1Panel-dev/1Panel/backend/utils/common" | ||||||
| @@ -92,12 +93,19 @@ func (u *MysqlService) Create(ctx context.Context, req dto.MysqlDBCreate) (*mode | |||||||
| 		return nil, errors.WithMessage(constant.ErrStructTransform, err.Error()) | 		return nil, errors.WithMessage(constant.ErrStructTransform, err.Error()) | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	createSql := fmt.Sprintf("create database if not exists `%s` default character set %s collate %s", req.Name, req.Format, formatMap[req.Format]) | 	createSql := fmt.Sprintf("create database `%s` default character set %s collate %s", req.Name, req.Format, formatMap[req.Format]) | ||||||
| 	if err := excuteSql(app.ContainerName, app.Password, createSql); err != nil { | 	if err := excuteSql(app.ContainerName, app.Password, createSql); err != nil { | ||||||
|  | 		if strings.Contains(err.Error(), "ERROR 1007") { | ||||||
|  | 			return nil, buserr.New(constant.ErrDatabaseIsExist) | ||||||
|  | 		} | ||||||
| 		return nil, err | 		return nil, err | ||||||
| 	} | 	} | ||||||
| 	tmpPermission := req.Permission | 	tmpPermission := req.Permission | ||||||
| 	if err := excuteSql(app.ContainerName, app.Password, fmt.Sprintf("create user if not exists '%s'@'%s' identified by '%s';", req.Username, tmpPermission, req.Password)); err != nil { | 	if err := excuteSql(app.ContainerName, app.Password, fmt.Sprintf("create user '%s'@'%s' identified by '%s';", req.Username, tmpPermission, req.Password)); err != nil { | ||||||
|  | 		_ = excuteSql(app.ContainerName, app.Password, fmt.Sprintf("drop database `%s`", req.Name)) | ||||||
|  | 		if strings.Contains(err.Error(), "ERROR 1396") { | ||||||
|  | 			return nil, buserr.New(constant.ErrUserIsExist) | ||||||
|  | 		} | ||||||
| 		return nil, err | 		return nil, err | ||||||
| 	} | 	} | ||||||
| 	grantStr := fmt.Sprintf("grant all privileges on `%s`.* to '%s'@'%s'", req.Name, req.Username, tmpPermission) | 	grantStr := fmt.Sprintf("grant all privileges on `%s`.* to '%s'@'%s'", req.Name, req.Username, tmpPermission) | ||||||
|   | |||||||
| @@ -80,3 +80,9 @@ var ( | |||||||
| var ( | var ( | ||||||
| 	ErrPathNotFound = "ErrPathNotFound" | 	ErrPathNotFound = "ErrPathNotFound" | ||||||
| ) | ) | ||||||
|  |  | ||||||
|  | //mysql | ||||||
|  | var ( | ||||||
|  | 	ErrUserIsExist     = "ErrUserIsExist" | ||||||
|  | 	ErrDatabaseIsExist = "ErrDatabaseIsExist" | ||||||
|  | ) | ||||||
|   | |||||||
| @@ -35,10 +35,14 @@ ErrPathNotFound: "Path is not found" | |||||||
| ErrDomainIsExist: "Domain is already exist" | ErrDomainIsExist: "Domain is already exist" | ||||||
| ErrAliasIsExist: "Alias is already exist" | ErrAliasIsExist: "Alias is already exist" | ||||||
| ErrAppDelete: 'Other Website use this App' | ErrAppDelete: 'Other Website use this App' | ||||||
| ErrGroupIsUsed: 'The group has been associated with a website and cannot be deleted' | ErrGroupIsUsed: 'The group is in use and cannot be deleted' | ||||||
|  |  | ||||||
| #ssl | #ssl | ||||||
| ErrSSLCannotDelete: "The certificate is being used by the website and cannot be removed" | ErrSSLCannotDelete: "The certificate is being used by the website and cannot be removed" | ||||||
| ErrAccountCannotDelete: "The certificate associated with the account cannot be deleted" | ErrAccountCannotDelete: "The certificate associated with the account cannot be deleted" | ||||||
| ErrSSLApply: "The certificate continues to be signed successfully, but openresty reload fails, please check the configuration!" | ErrSSLApply: "The certificate continues to be signed successfully, but openresty reload fails, please check the configuration!" | ||||||
| ErrEmailIsExist: 'Email is already exist' | ErrEmailIsExist: 'Email is already exist' | ||||||
|  |  | ||||||
|  | #mysql | ||||||
|  | ErrUserIsExist: "The current user already exists. Please enter a new user" | ||||||
|  | ErrDatabaseIsExist: "The current database already exists. Please enter a new database" | ||||||
| @@ -35,10 +35,14 @@ ErrPathNotFound: "目录不存在" | |||||||
| ErrDomainIsExist: "域名已存在" | ErrDomainIsExist: "域名已存在" | ||||||
| ErrAliasIsExist: "代号已存在" | ErrAliasIsExist: "代号已存在" | ||||||
| ErrAppDelete: '其他网站使用此应用,无法删除' | ErrAppDelete: '其他网站使用此应用,无法删除' | ||||||
| ErrGroupIsUsed: '分组已经关联网站,无法删除' | ErrGroupIsUsed: '分组正在使用中,无法删除' | ||||||
|  |  | ||||||
| #ssl | #ssl | ||||||
| ErrSSLCannotDelete: "证书正在被网站使用,无法删除" | ErrSSLCannotDelete: "证书正在被网站使用,无法删除" | ||||||
| ErrAccountCannotDelete: "账号关联证书,无法删除" | ErrAccountCannotDelete: "账号关联证书,无法删除" | ||||||
| ErrSSLApply: "证书续签成功,openresty reload失败,请检查配置!" | ErrSSLApply: "证书续签成功,openresty reload失败,请检查配置!" | ||||||
| ErrEmailIsExist: '邮箱已存在' | ErrEmailIsExist: '邮箱已存在' | ||||||
|  |  | ||||||
|  | #mysql | ||||||
|  | ErrUserIsExist: "当前用户已存在,请重新输入" | ||||||
|  | ErrDatabaseIsExist: "当前数据库已存在,请重新输入" | ||||||
		Reference in New Issue
	
	Block a user
	 ssongliu
					ssongliu