|  | @@ -110,7 +110,11 @@ func Install(ctx *middleware.Context) {
 | 
	
		
			
				|  |  |  		ctx.Data["CurDbOption"] = "PostgreSQL"
 | 
	
		
			
				|  |  |  	case "sqlite3":
 | 
	
		
			
				|  |  |  		if models.EnableSQLite3 {
 | 
	
		
			
				|  |  | -			ctx.Data["CurDbOption"] = "SQLite3" // Default when enabled.
 | 
	
		
			
				|  |  | +			ctx.Data["CurDbOption"] = "SQLite3"
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +	case "tidb":
 | 
	
		
			
				|  |  | +		if models.EnableTidb {
 | 
	
		
			
				|  |  | +			ctx.Data["CurDbOption"] = "TiDB"
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -183,9 +187,15 @@ func InstallPost(ctx *middleware.Context, form auth.InstallForm) {
 | 
	
		
			
				|  |  |  	models.DbCfg.SSLMode = form.SSLMode
 | 
	
		
			
				|  |  |  	models.DbCfg.Path = form.DbPath
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	if models.DbCfg.Type == "sqlite3" && len(models.DbCfg.Path) == 0 {
 | 
	
		
			
				|  |  | +	if (models.DbCfg.Type == "sqlite3" || models.DbCfg.Type == "tidb") &&
 | 
	
		
			
				|  |  | +		len(models.DbCfg.Path) == 0 {
 | 
	
		
			
				|  |  | +		ctx.Data["Err_DbPath"] = true
 | 
	
		
			
				|  |  | +		ctx.RenderWithErr(ctx.Tr("install.err_empty_db_path"), INSTALL, &form)
 | 
	
		
			
				|  |  | +		return
 | 
	
		
			
				|  |  | +	} else if models.DbCfg.Type == "tidb" &&
 | 
	
		
			
				|  |  | +		strings.ContainsAny(path.Base(models.DbCfg.Path), ".-") {
 | 
	
		
			
				|  |  |  		ctx.Data["Err_DbPath"] = true
 | 
	
		
			
				|  |  | -		ctx.RenderWithErr(ctx.Tr("install.err_empty_sqlite_path"), INSTALL, &form)
 | 
	
		
			
				|  |  | +		ctx.RenderWithErr(ctx.Tr("install.err_invalid_tidb_name"), INSTALL, &form)
 | 
	
		
			
				|  |  |  		return
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -217,7 +227,21 @@ func InstallPost(ctx *middleware.Context, form auth.InstallForm) {
 | 
	
		
			
				|  |  |  		return
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +	// Check logic loophole between disable self-registration and no admin account.
 | 
	
		
			
				|  |  | +	if form.DisableRegistration && len(form.AdminName) == 0 {
 | 
	
		
			
				|  |  | +		ctx.Data["Err_Services"] = true
 | 
	
		
			
				|  |  | +		ctx.Data["Err_Admin"] = true
 | 
	
		
			
				|  |  | +		ctx.RenderWithErr(ctx.Tr("install.no_admin_and_disable_registration"), INSTALL, form)
 | 
	
		
			
				|  |  | +		return
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  	// Check admin password.
 | 
	
		
			
				|  |  | +	if len(form.AdminName) > 0 && len(form.AdminPasswd) == 0 {
 | 
	
		
			
				|  |  | +		ctx.Data["Err_Admin"] = true
 | 
	
		
			
				|  |  | +		ctx.Data["Err_AdminPasswd"] = true
 | 
	
		
			
				|  |  | +		ctx.RenderWithErr(ctx.Tr("install.err_empty_admin_password"), INSTALL, form)
 | 
	
		
			
				|  |  | +		return
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  |  	if form.AdminPasswd != form.AdminConfirmPasswd {
 | 
	
		
			
				|  |  |  		ctx.Data["Err_Admin"] = true
 | 
	
		
			
				|  |  |  		ctx.Data["Err_AdminPasswd"] = true
 |