diff --git a/backend/app/api/acme_account.go b/backend/app/api/acme_account.go new file mode 100644 index 0000000..b838ab6 --- /dev/null +++ b/backend/app/api/acme_account.go @@ -0,0 +1,127 @@ +package api + +import ( + "ALLinSSL/backend/internal/cert/apply" + "ALLinSSL/backend/public" + "github.com/gin-gonic/gin" + "strings" +) + +func AddAccount(c *gin.Context) { + var form struct { + Email string `form:"email"` + CA string `form:"ca"` + Kid string `form:"Kid"` + HmacEncoded string `form:"HmacEncoded"` + CADirURL string `form:"CADirURL"` + } + err := c.Bind(&form) + if err != nil { + public.FailMsg(c, err.Error()) + return + } + form.Email = strings.TrimSpace(form.Email) + if form.Email == "" { + public.FailMsg(c, "邮件不能为空") + return + } + if form.CA == "" { + public.FailMsg(c, "CA不能为空") + return + } + err = apply.AddAccount(form.Email, form.CA, form.Kid, form.HmacEncoded, form.CADirURL) + if err != nil { + public.FailMsg(c, err.Error()) + return + } + public.SuccessMsg(c, "添加成功") + return +} + +func DelAccount(c *gin.Context) { + var form struct { + ID string `form:"id"` + } + err := c.Bind(&form) + if err != nil { + public.FailMsg(c, err.Error()) + return + } + form.ID = strings.TrimSpace(form.ID) + if form.ID == "" { + public.FailMsg(c, "ID不能为空") + return + } + + err = apply.DelAccount(form.ID) + if err != nil { + public.FailMsg(c, err.Error()) + return + } + public.SuccessMsg(c, "删除成功") + return +} + +func UpdateAccount(c *gin.Context) { + var form struct { + ID string `form:"id"` + Email string `form:"email"` + CA string `form:"ca"` + Kid string `form:"Kid"` + HmacEncoded string `form:"HmacEncoded"` + CADirURL string `form:"CADirURL"` + } + err := c.Bind(&form) + if err != nil { + public.FailMsg(c, err.Error()) + return + } + form.ID = strings.TrimSpace(form.ID) + if form.ID == "" { + public.FailMsg(c, "ID不能为空") + return + } + form.Email = strings.TrimSpace(form.Email) + if form.Email == "" { + public.FailMsg(c, "邮件不能为空") + return + } + if form.CA == "" { + public.FailMsg(c, "CA不能为空") + return + } + + err = apply.UpdateAccount(form.ID, form.Email, form.CA, form.Kid, form.HmacEncoded, form.CADirURL) + if err != nil { + public.FailMsg(c, err.Error()) + return + } + public.SuccessMsg(c, "更新成功") + return +} + +func GetAccountList(c *gin.Context) { + var form struct { + Page int64 `form:"p"` + Limit int64 `form:"limit"` + CA string `form:"ca"` + Search string `form:"search"` + } + err := c.Bind(&form) + if err != nil { + public.FailMsg(c, err.Error()) + return + } + if form.Page <= 0 { + form.Page = 1 + } + if form.Limit <= 0 { + form.Limit = 10 + } + accounts, total, err := apply.GetAccountList(form.Search, form.CA, form.Page, form.Limit) + if err != nil { + public.FailMsg(c, err.Error()) + return + } + public.SuccessData(c, accounts, total) +} diff --git a/backend/internal/cert/apply/account.go b/backend/internal/cert/apply/account.go index d75a273..9b46e9b 100644 --- a/backend/internal/cert/apply/account.go +++ b/backend/internal/cert/apply/account.go @@ -164,7 +164,7 @@ func UpdateAccount(id, email, ca, Kid, HmacEncoded, CADirURL string) error { return nil } -func DeleteAccount(id string) error { +func DelAccount(id string) error { db, err := GetSqlite() if err != nil { return fmt.Errorf("failed to get sqlite: %w", err) @@ -176,10 +176,10 @@ func DeleteAccount(id string) error { return nil } -func GetAccountList(search, ca string, p, limit int64) ([]map[string]interface{}, error) { +func GetAccountList(search, ca string, p, limit int64) ([]map[string]interface{}, int, error) { db, err := GetSqlite() if err != nil { - return nil, fmt.Errorf("failed to get sqlite: %w", err) + return nil, 0, fmt.Errorf("failed to get sqlite: %w", err) } whereSql := "1=1" var whereArgs []any @@ -203,5 +203,10 @@ func GetAccountList(search, ca string, p, limit int64) ([]map[string]interface{} whereArgs = append(whereArgs, ca) } } - return db.Where(whereSql, whereArgs).Limit(limits).Select() + count, err := db.Where(whereSql, whereArgs).Count() + data, err := db.Where(whereSql, whereArgs).Limit(limits).Select() + if err != nil { + return nil, 0, fmt.Errorf("failed to get account list: %w", err) + } + return data, int(count), nil } diff --git a/backend/route/route.go b/backend/route/route.go index 3f3e55f..7b35397 100644 --- a/backend/route/route.go +++ b/backend/route/route.go @@ -52,6 +52,14 @@ func Register(r *gin.Engine) { access.POST("/upd_eab", api.UpdEAB) access.POST("/get_all_eab", api.GetAllEAB) } + // acme账户 + acmeAccount := v1.Group("/acme_account") + { + acmeAccount.POST("/get_list", api.GetAccountList) + acmeAccount.POST("/add_account", api.AddAccount) + acmeAccount.POST("/del_account", api.DelAccount) + acmeAccount.POST("/upd_account", api.UpdateAccount) + } cert := v1.Group("/cert") { cert.POST("/get_list", api.GetCertList)