diff --git a/internal/web/actions/default/servers/certs/acme/create.go b/internal/web/actions/default/servers/certs/acme/create.go index 18139f6c..8f9964ff 100644 --- a/internal/web/actions/default/servers/certs/acme/create.go +++ b/internal/web/actions/default/servers/certs/acme/create.go @@ -18,31 +18,6 @@ func (this *CreateAction) Init() { } func (this *CreateAction) RunGet(params struct{}) { - // 获取所有可用的用户 - usersResp, err := this.RPC().ACMEUserRPC().FindAllACMEUsers(this.AdminContext(), &pb.FindAllACMEUsersRequest{ - AdminId: this.AdminId(), - UserId: 0, - }) - if err != nil { - this.ErrorPage(err) - return - } - userMaps := []maps.Map{} - for _, user := range usersResp.AcmeUsers { - description := user.Description - if len(description) > 0 { - description = "(" + description + ")" - } - - userMaps = append(userMaps, maps.Map{ - "id": user.Id, - "description": description, - "email": user.Email, - "providerCode": user.AcmeProviderCode, - }) - } - this.Data["users"] = userMaps - // 证书服务商 providersResp, err := this.RPC().ACMEProviderRPC().FindAllACMEProviders(this.AdminContext(), &pb.FindAllACMEProvidersRequest{}) if err != nil { @@ -81,14 +56,15 @@ func (this *CreateAction) RunGet(params struct{}) { } func (this *CreateAction) RunPost(params struct { - TaskId int64 - AuthType string - AcmeUserId int64 - DnsProviderId int64 - DnsDomain string - Domains []string - AutoRenew bool - AuthURL string + PlatformUserId int64 + TaskId int64 + AuthType string + AcmeUserId int64 + DnsProviderId int64 + DnsDomain string + Domains []string + AutoRenew bool + AuthURL string Must *actions.Must }) { @@ -117,7 +93,7 @@ func (this *CreateAction) RunPost(params struct { if len(params.Domains) == 0 { this.Fail("请输入证书域名列表") } - realDomains := []string{} + var realDomains = []string{} for _, domain := range params.Domains { domain = strings.ToLower(domain) if params.AuthType == "dns" { // DNS认证 @@ -134,6 +110,7 @@ func (this *CreateAction) RunPost(params struct { if params.TaskId == 0 { createResp, err := this.RPC().ACMETaskRPC().CreateACMETask(this.AdminContext(), &pb.CreateACMETaskRequest{ + UserId: params.PlatformUserId, AuthType: params.AuthType, AcmeUserId: params.AcmeUserId, DnsProviderId: params.DnsProviderId, diff --git a/internal/web/actions/default/servers/certs/acme/run.go b/internal/web/actions/default/servers/certs/acme/run.go index 7086386d..fbb5a8e5 100644 --- a/internal/web/actions/default/servers/certs/acme/run.go +++ b/internal/web/actions/default/servers/certs/acme/run.go @@ -12,6 +12,8 @@ type RunAction struct { func (this *RunAction) RunPost(params struct { TaskId int64 }) { + defer this.CreateLogInfo("执行ACME任务 %d", params.TaskId) + runResp, err := this.RPC().ACMETaskRPC().RunACMETask(this.AdminContext(), &pb.RunACMETaskRequest{AcmeTaskId: params.TaskId}) if err != nil { this.ErrorPage(err) diff --git a/internal/web/actions/default/servers/certs/acme/userOptions.go b/internal/web/actions/default/servers/certs/acme/userOptions.go new file mode 100644 index 00000000..b9654d92 --- /dev/null +++ b/internal/web/actions/default/servers/certs/acme/userOptions.go @@ -0,0 +1,44 @@ +// Copyright 2023 Liuxiangchao iwind.liu@gmail.com. All rights reserved. Official site: https://goedge.cn . + +package acme + +import ( + "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils" + "github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb" + "github.com/iwind/TeaGo/maps" +) + +type UserOptionsAction struct { + actionutils.ParentAction +} + +func (this *UserOptionsAction) RunPost(params struct { + PlatformUserId int64 +}) { + // 获取所有可用的用户 + usersResp, err := this.RPC().ACMEUserRPC().FindAllACMEUsers(this.AdminContext(), &pb.FindAllACMEUsersRequest{ + AdminId: 0, + UserId: params.PlatformUserId, + }) + if err != nil { + this.ErrorPage(err) + return + } + var userMaps = []maps.Map{} + for _, user := range usersResp.AcmeUsers { + description := user.Description + if len(description) > 0 { + description = "(" + description + ")" + } + + userMaps = append(userMaps, maps.Map{ + "id": user.Id, + "description": description, + "email": user.Email, + "providerCode": user.AcmeProviderCode, + }) + } + this.Data["users"] = userMaps + + this.Success() +} diff --git a/internal/web/actions/default/servers/certs/acme/users/createPopup.go b/internal/web/actions/default/servers/certs/acme/users/createPopup.go index 3abec64d..c87192dc 100644 --- a/internal/web/actions/default/servers/certs/acme/users/createPopup.go +++ b/internal/web/actions/default/servers/certs/acme/users/createPopup.go @@ -16,10 +16,30 @@ func (this *CreatePopupAction) Init() { } func (this *CreatePopupAction) RunGet(params struct { - ProviderCode string + PlatformUserId int64 + ProviderCode string }) { + this.Data["platformUserId"] = params.PlatformUserId this.Data["providerCode"] = params.ProviderCode + // 平台用户信息 + this.Data["platformUser"] = nil + if params.PlatformUserId > 0 { + platformUserResp, err := this.RPC().UserRPC().FindEnabledUser(this.AdminContext(), &pb.FindEnabledUserRequest{UserId: params.PlatformUserId}) + if err != nil { + this.ErrorPage(err) + return + } + var platformUser = platformUserResp.User + if platformUser != nil { + this.Data["platformUser"] = maps.Map{ + "id": platformUser.Id, + "username": platformUser.Username, + "fullname": platformUser.Fullname, + } + } + } + // 服务商 providersResp, err := this.RPC().ACMEProviderRPC().FindAllACMEProviders(this.AdminContext(), &pb.FindAllACMEProvidersRequest{}) if err != nil { @@ -40,10 +60,11 @@ func (this *CreatePopupAction) RunGet(params struct { } func (this *CreatePopupAction) RunPost(params struct { - Email string - ProviderCode string - AccountId int64 - Description string + PlatformUserId int64 + Email string + ProviderCode string + AccountId int64 + Description string Must *actions.Must CSRF *actionutils.CSRF @@ -85,6 +106,7 @@ func (this *CreatePopupAction) RunPost(params struct { } createResp, err := this.RPC().ACMEUserRPC().CreateACMEUser(this.AdminContext(), &pb.CreateACMEUserRequest{ + UserId: params.PlatformUserId, Email: params.Email, Description: params.Description, AcmeProviderCode: params.ProviderCode, diff --git a/internal/web/actions/default/servers/certs/init.go b/internal/web/actions/default/servers/certs/init.go index 89739b55..d2ff7c13 100644 --- a/internal/web/actions/default/servers/certs/init.go +++ b/internal/web/actions/default/servers/certs/init.go @@ -41,6 +41,7 @@ func init() { Post("/run", new(acme.RunAction)). GetPost("/updateTaskPopup", new(acme.UpdateTaskPopupAction)). Post("/deleteTask", new(acme.DeleteTaskAction)). + Post("/userOptions", new(acme.UserOptionsAction)). // ACME用户 Prefix("/servers/certs/acme/users"). diff --git a/web/views/@default/servers/certs/acme/create.html b/web/views/@default/servers/certs/acme/create.html index c039bf82..ea99bca3 100644 --- a/web/views/@default/servers/certs/acme/create.html +++ b/web/views/@default/servers/certs/acme/create.html @@ -26,7 +26,7 @@
- + + + + + - + diff --git a/web/views/@default/servers/certs/acme/create.js b/web/views/@default/servers/certs/acme/create.js index 1af41eb8..4ae7d9d8 100644 --- a/web/views/@default/servers/certs/acme/create.js +++ b/web/views/@default/servers/certs/acme/create.js @@ -1,13 +1,31 @@ Tea.context(function () { this.step = "prepare" + /** + * 选择平台用户 + */ + this.platformUserId = 0 + + this.changePlatformUser = function (platformUserId) { + this.platformUserId = platformUserId + } + /** * 准备工作 */ this.authType = "http" + this.users = [] this.doPrepare = function () { this.step = "user" + + this.$post(".userOptions") + .params({ + platformUserId: this.platformUserId + }) + .success(function (resp) { + this.users = resp.data.users + }) } this.prepareMoreOptionsVisible = false @@ -17,7 +35,7 @@ Tea.context(function () { } /** - * 选择用户 + * 选择ACME用户 */ this.userId = 0 @@ -27,7 +45,7 @@ Tea.context(function () { this.createUser = function () { let that = this - teaweb.popup("/servers/certs/acme/users/createPopup?providerCode=" + this.providerCode, { + teaweb.popup("/servers/certs/acme/users/createPopup?providerCode=" + this.providerCode + "&platformUserId=" + this.platformUserId, { height: "30em", width: "44em", callback: function (resp) { @@ -90,6 +108,7 @@ Tea.context(function () { this.$post("$") .params({ + platformUserId: this.platformUserId, authType: this.authType, acmeUserId: this.userId, dnsProviderId: this.dnsProviderId, diff --git a/web/views/@default/servers/certs/acme/users/createPopup.html b/web/views/@default/servers/certs/acme/users/createPopup.html index ba1ddb11..726a2f47 100644 --- a/web/views/@default/servers/certs/acme/users/createPopup.html +++ b/web/views/@default/servers/certs/acme/users/createPopup.html @@ -1,9 +1,14 @@ {$layout "layout_popup"} -

创建用户

+

创建ACME用户

+
认证方式认证方式 *
使用HTTP认证   @@ -39,6 +39,13 @@

我们在申请免费证书的过程中需要自动增加或修改相关域名的TXT记录,请先确保你已经在"域名解析" -- "DNS服务商" 中已经添加了对应的DNS服务商账号。

选择平台用户 + +

可选项,选择证书所属用户,如果没有选择,则视为管理员所有。

+
@@ -74,7 +81,7 @@
选择用户 *选择ACME用户 *
@@ -89,7 +96,7 @@
- +

选择一个作为申请证书的用户。

+ + + +
所属平台用户
用户邮箱 * diff --git a/web/views/@default/servers/certs/acme/users/updatePopup.html b/web/views/@default/servers/certs/acme/users/updatePopup.html index aa3985c4..1cf67d5a 100644 --- a/web/views/@default/servers/certs/acme/users/updatePopup.html +++ b/web/views/@default/servers/certs/acme/users/updatePopup.html @@ -1,6 +1,6 @@ {$layout "layout_popup"} -

修改用户

+

修改ACME用户