diff --git a/agent/app/service/app_install.go b/agent/app/service/app_install.go index 99a8e34d8..e85cc0dcd 100644 --- a/agent/app/service/app_install.go +++ b/agent/app/service/app_install.go @@ -264,6 +264,12 @@ func (a *AppInstallService) Operate(req request.AppInstalledOperate) error { } return syncAppInstallStatus(&install, false) case constant.Restart: + if install.App.Key == "openresty" { + websites, _ := websiteRepo.GetBy() + if len(websites) > 0 { + _ = createAllWebsitesWAFConfig(websites) + } + } out, err := compose.Restart(dockerComposePath) if err != nil { return handleErr(install, err, out) diff --git a/agent/app/service/runtime_utils.go b/agent/app/service/runtime_utils.go index b36129d1f..b06727922 100644 --- a/agent/app/service/runtime_utils.go +++ b/agent/app/service/runtime_utils.go @@ -331,20 +331,25 @@ func buildRuntime(runtime *model.Runtime, oldImageID string, oldEnv string, rebu if out, err := compose.Up(composePath); err != nil { runtime.Status = constant.StatusStartErr runtime.Message = out - } else { - extensions := getRuntimeEnv(runtime.Env, "PHP_EXTENSIONS") - if extensions != "" { - installCmd := fmt.Sprintf("docker exec -i %s %s %s", runtime.ContainerName, "install-ext", extensions) - err = cmd2.ExecWithLogFile(installCmd, 60*time.Minute, logPath) - if err != nil { - runtime.Status = constant.StatusError - runtime.Message = buserr.New("ErrImageBuildErr").Error() + ":" + err.Error() - _ = runtimeRepo.Save(runtime) - return - } - } - runtime.Status = constant.StatusRunning + _ = runtimeRepo.Save(runtime) } + extensions := getRuntimeEnv(runtime.Env, "PHP_EXTENSIONS") + if extensions != "" { + installCmd := fmt.Sprintf("docker exec -i %s %s %s", runtime.ContainerName, "install-ext", extensions) + err = cmd2.ExecWithLogFile(installCmd, 60*time.Minute, logPath) + if err != nil { + runtime.Status = constant.StatusError + runtime.Message = buserr.New("ErrImageBuildErr").Error() + ":" + err.Error() + _ = runtimeRepo.Save(runtime) + return + } + } + if out, err := compose.DownAndUp(composePath); err != nil { + runtime.Status = constant.StatusStartErr + runtime.Message = out + _ = runtimeRepo.Save(runtime) + } + runtime.Status = constant.StatusRunning } _ = runtimeRepo.Save(runtime) } diff --git a/agent/app/service/website.go b/agent/app/service/website.go index 4dfc25703..75c28af72 100644 --- a/agent/app/service/website.go +++ b/agent/app/service/website.go @@ -410,26 +410,6 @@ func (w WebsiteService) CreateWebsite(create request.WebsiteCreate) (err error) website.ParentWebsiteID = parentWebsite.ID } - if len(create.FtpUser) != 0 && len(create.FtpPassword) != 0 { - createFtpUser := func(t *task.Task) error { - indexDir := GetSitePath(*website, SiteIndexDir) - itemID, err := NewIFtpService().Create(dto.FtpCreate{User: create.FtpUser, Password: create.FtpPassword, Path: indexDir}) - if err != nil { - createTask.Log(fmt.Sprintf("create ftp for website failed, err: %v", err)) - } - website.FtpID = itemID - return nil - } - deleteFtpUser := func(t *task.Task) { - if website.FtpID > 0 { - if err = NewIFtpService().Delete(dto.BatchDeleteReq{Ids: []uint{website.FtpID}}); err != nil { - createTask.Log(err.Error()) - } - } - } - createTask.AddSubTask(i18n.GetWithName("ConfigFTP", create.FtpUser), createFtpUser, deleteFtpUser) - } - configNginx := func(t *task.Task) error { if err = configDefaultNginx(website, domains, appInstall, runtime); err != nil { return err @@ -488,6 +468,19 @@ func (w WebsiteService) CreateWebsite(create request.WebsiteCreate) (err error) createTask.AddSubTaskWithIgnoreErr(i18n.GetMsgByKey("EnableSSL"), enableSSL) } + if len(create.FtpUser) != 0 && len(create.FtpPassword) != 0 { + createFtpUser := func(t *task.Task) error { + indexDir := GetSitePath(*website, SiteIndexDir) + itemID, err := NewIFtpService().Create(dto.FtpCreate{User: create.FtpUser, Password: create.FtpPassword, Path: indexDir}) + if err != nil { + return err + } + website.FtpID = itemID + return nil + } + createTask.AddSubTaskWithIgnoreErr(i18n.GetWithName("ConfigFTP", create.FtpUser), createFtpUser) + } + return createTask.Execute() } @@ -2061,7 +2054,7 @@ func (w WebsiteService) GetPathAuthBasics(req request.NginxAuthReq) (res []respo } directives := config.Directives location, _ := directives[0].(*components.Location) - pathAuth.Path = location.Match + pathAuth.Path = strings.TrimPrefix(location.Match, "^") passPath := path.Join(passDir, fmt.Sprintf("%s.pass", name)) authContent, err = fileOp.GetContent(passPath) if err != nil { @@ -2130,7 +2123,7 @@ func (w WebsiteService) UpdatePathAuthBasic(req request.NginxPathAuthUpdate) err directives := config.Directives location, _ := directives[0].(*components.Location) location.UpdateDirective("auth_basic_user_file", []string{fmt.Sprintf("/www/sites/%s/path_auth/pass/%s", website.Alias, fmt.Sprintf("%s.pass", req.Name))}) - location.ChangePath("~*", req.Path) + location.ChangePath("~*", fmt.Sprintf("^%s", req.Path)) var passwdHash []byte passwdHash, err = bcrypt.GenerateFromPassword([]byte(req.Password), bcrypt.DefaultCost) if err != nil { diff --git a/agent/server/server.go b/agent/server/server.go index c43150dca..b88d44a57 100644 --- a/agent/server/server.go +++ b/agent/server/server.go @@ -26,8 +26,6 @@ import ( "github.com/1Panel-dev/1Panel/agent/init/viper" "github.com/1Panel-dev/1Panel/agent/utils/encrypt" - _ "net/http/pprof" - "github.com/gin-gonic/gin" ) diff --git a/agent/utils/nginx/dumper.go b/agent/utils/nginx/dumper.go index ad44288dd..90d240b43 100644 --- a/agent/utils/nginx/dumper.go +++ b/agent/utils/nginx/dumper.go @@ -90,6 +90,18 @@ func DumpBlock(b components.IBlock, style *Style, startLine int) string { } directives := b.GetDirectives() + + var sortDirectives []components.IDirective + var proxyIncludes []components.IDirective + for _, directive := range directives { + if directive.GetName() == "include" && strings.Contains(strings.Join(directive.GetParameters(), " "), "/proxy/") { + proxyIncludes = append(proxyIncludes, directive) + } else { + sortDirectives = append(sortDirectives, directive) + } + } + directives = append(sortDirectives, proxyIncludes...) + for i, directive := range directives { if directive.GetLine() > line { diff --git a/core/app/service/setting.go b/core/app/service/setting.go index 270ce090f..c60e09851 100644 --- a/core/app/service/setting.go +++ b/core/app/service/setting.go @@ -517,19 +517,19 @@ func (u *SettingService) GenerateApiKey() (string, error) { } func (u *SettingService) UpdateApiConfig(req dto.ApiInterfaceConfig) error { - if err := settingRepo.Update("ApiInterfaceStatus", req.ApiInterfaceStatus); err != nil { + if err := settingRepo.UpdateOrCreate("ApiInterfaceStatus", req.ApiInterfaceStatus); err != nil { return err } global.Api.ApiInterfaceStatus = req.ApiInterfaceStatus - if err := settingRepo.Update("ApiKey", req.ApiKey); err != nil { + if err := settingRepo.UpdateOrCreate("ApiKey", req.ApiKey); err != nil { return err } global.Api.ApiKey = req.ApiKey - if err := settingRepo.Update("IpWhiteList", req.IpWhiteList); err != nil { + if err := settingRepo.UpdateOrCreate("IpWhiteList", req.IpWhiteList); err != nil { return err } global.Api.IpWhiteList = req.IpWhiteList - if err := settingRepo.Update("ApiKeyValidityTime", req.ApiKeyValidityTime); err != nil { + if err := settingRepo.UpdateOrCreate("ApiKeyValidityTime", req.ApiKeyValidityTime); err != nil { return err } global.Api.ApiKeyValidityTime = req.ApiKeyValidityTime diff --git a/core/init/router/proxy.go b/core/init/router/proxy.go index 807525429..3741dee2d 100644 --- a/core/init/router/proxy.go +++ b/core/init/router/proxy.go @@ -44,7 +44,9 @@ func Proxy() gin.HandlerFunc { currentNode = c.Request.Header.Get("CurrentNode") } - if strings.HasPrefix(c.Request.URL.Path, "/api/v2/") && !checkSession(c) { + apiReq := c.GetBool("API_AUTH") + + if !apiReq && strings.HasPrefix(c.Request.URL.Path, "/api/v2/") && !checkSession(c) { data, _ := res.ErrorMsg.ReadFile("html/401.html") c.Data(401, "text/html; charset=utf-8", data) c.Abort() diff --git a/core/middleware/api_auth.go b/core/middleware/api_auth.go index 31d03ded0..1a1b92c95 100644 --- a/core/middleware/api_auth.go +++ b/core/middleware/api_auth.go @@ -39,6 +39,7 @@ func ApiAuth() gin.HandlerFunc { helper.BadAuth(c, "ErrApiConfigIPInvalid", nil) return } + c.Set("API_AUTH", true) c.Next() return } else { diff --git a/frontend/src/global/mimetype.ts b/frontend/src/global/mimetype.ts index e0689a133..873ee2d5f 100644 --- a/frontend/src/global/mimetype.ts +++ b/frontend/src/global/mimetype.ts @@ -355,11 +355,6 @@ export const Algorithms = [ value: 'least_conn', placeHolder: i18n.global.t('website.leastConnHelper'), }, - { - label: i18n.global.t('website.leastTime'), - value: 'least_time', - placeHolder: i18n.global.t('website.leastTimeHelper'), - }, ]; export const StatusStrategy = [ diff --git a/frontend/src/views/website/website/config/basic/auth-basic/index.vue b/frontend/src/views/website/website/config/basic/auth-basic/index.vue index 62eb8f3d9..9b886a0b4 100644 --- a/frontend/src/views/website/website/config/basic/auth-basic/index.vue +++ b/frontend/src/views/website/website/config/basic/auth-basic/index.vue @@ -25,7 +25,7 @@ /> - +