mirror of
https://github.com/KaySar12/NextZen-UserService.git
synced 2025-06-26 21:50:57 +07:00
update : add Delete SSL
This commit is contained in:
parent
cb86b0862a
commit
e4d7296154
2
.vscode/launch.json
vendored
2
.vscode/launch.json
vendored
@ -6,7 +6,7 @@
|
|||||||
"type": "go",
|
"type": "go",
|
||||||
"debugAdapter": "dlv-dap",
|
"debugAdapter": "dlv-dap",
|
||||||
"request": "launch",
|
"request": "launch",
|
||||||
"port": 40751,
|
"port": 44239,
|
||||||
"host": "127.0.0.1",
|
"host": "127.0.0.1",
|
||||||
"mode": "exec",
|
"mode": "exec",
|
||||||
"program": "${workspaceFolder}/dist/casaos-user-service-amd64_linux_amd64_v1/build/sysroot/usr/bin/casaos-user-service"
|
"program": "${workspaceFolder}/dist/casaos-user-service-amd64_linux_amd64_v1/build/sysroot/usr/bin/casaos-user-service"
|
||||||
|
@ -47,14 +47,15 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
authServer = "http://accessmanager.local"
|
authServer = "http://accessmanager.local"
|
||||||
clientID = "6KwKSxLCtaQ4r6HoAn3gdNMbNOAf75j3SejLIAx7"
|
clientID = "6KwKSxLCtaQ4r6HoAn3gdNMbNOAf75j3SejLIAx7"
|
||||||
clientSecret = "PE05fcDP4qESUmyZ1TNYpZNBxRPq70VpFI81vehsoJ6WhGz5yPXMljrFrOdMRdRhrYmF03fHWTZHgO9ZdNENrLN13BzL8CAgtEkTsyjXfgx9GvISheIjYfpSfvo219fL"
|
clientSecret = "PE05fcDP4qESUmyZ1TNYpZNBxRPq70VpFI81vehsoJ6WhGz5yPXMljrFrOdMRdRhrYmF03fHWTZHgO9ZdNENrLN13BzL8CAgtEkTsyjXfgx9GvISheIjYfpSfvo219fL"
|
||||||
authURL = "http://accessmanager.local/application/o/nextzenos-oidc/"
|
authURL = "http://accessmanager.local/application/o/nextzenos-oidc/"
|
||||||
callbackURL = "http://nextzenos.local/v1/users/oidc/callback"
|
callbackURL = "http://nextzenos.local/v1/users/oidc/callback"
|
||||||
onePanelServer = "http://nextweb.local"
|
onePanelServer = "http://nextweb.local"
|
||||||
onePanelName = "nextzen"
|
onePanelName = "nextzen"
|
||||||
onePanelPassword = "Smartyourlife123@*"
|
onePanelPassword = "Smartyourlife123@*"
|
||||||
|
onePanelEntranceCode = "nextweb"
|
||||||
//authentik_api_token = "jidFioAIXpgl8awyk2O17K8W7vZzlXhOO0QXGxEhMDJdn9g747EQjmaI0i3e"
|
//authentik_api_token = "jidFioAIXpgl8awyk2O17K8W7vZzlXhOO0QXGxEhMDJdn9g747EQjmaI0i3e"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -155,7 +156,7 @@ func OnePanelLogin(c *gin.Context) error {
|
|||||||
Language: "en",
|
Language: "en",
|
||||||
}
|
}
|
||||||
|
|
||||||
response, cookies, err := service.MyService.OnePanel().Login(cred, onePanelServer)
|
response, cookies, err := service.MyService.OnePanel().Login(cred, onePanelServer, onePanelEntranceCode)
|
||||||
fmt.Println(response)
|
fmt.Println(response)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("OnePanel login failed", zap.Error(err))
|
logger.Error("OnePanel login failed", zap.Error(err))
|
||||||
@ -303,8 +304,8 @@ func OnePanelUpdateWebsite(c *gin.Context) {
|
|||||||
if sslProvider == "selfSigned" {
|
if sslProvider == "selfSigned" {
|
||||||
searchSSLParam.AcmeAccountID = strconv.Itoa(acmeId)
|
searchSSLParam.AcmeAccountID = strconv.Itoa(acmeId)
|
||||||
}
|
}
|
||||||
searchSSLParam.Page = 1
|
searchSSLParam.Page = 0
|
||||||
searchSSLParam.PageSize = 50
|
searchSSLParam.PageSize = 0
|
||||||
searchSSL, err := service.MyService.OnePanel().SearchWebsiteSSl(searchSSLParam, onePanelServer, headers)
|
searchSSL, err := service.MyService.OnePanel().SearchWebsiteSSl(searchSSLParam, onePanelServer, headers)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.JSON(common_err.SERVICE_ERROR,
|
c.JSON(common_err.SERVICE_ERROR,
|
||||||
@ -313,7 +314,7 @@ func OnePanelUpdateWebsite(c *gin.Context) {
|
|||||||
Message: common_err.GetMsg(common_err.SERVICE_ERROR),
|
Message: common_err.GetMsg(common_err.SERVICE_ERROR),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
for _, item := range searchSSL.Data.Items {
|
for _, item := range searchSSL.Data {
|
||||||
if item.Provider == sslProvider && item.PrimaryDomain == domain {
|
if item.Provider == sslProvider && item.PrimaryDomain == domain {
|
||||||
sslId = item.ID
|
sslId = item.ID
|
||||||
break
|
break
|
||||||
@ -433,8 +434,8 @@ func OnePanelCreateWebsite(c *gin.Context) {
|
|||||||
if protocol == "https" {
|
if protocol == "https" {
|
||||||
//TODO Find SSL
|
//TODO Find SSL
|
||||||
var searchSSL model2.SearchSSLRequest
|
var searchSSL model2.SearchSSLRequest
|
||||||
searchSSL.Page = 1
|
searchSSL.Page = 0
|
||||||
searchSSL.PageSize = 50
|
searchSSL.PageSize = 0
|
||||||
sslId := -1
|
sslId := -1
|
||||||
ssl, err := service.MyService.OnePanel().SearchWebsiteSSl(searchSSL, onePanelServer, headers)
|
ssl, err := service.MyService.OnePanel().SearchWebsiteSSl(searchSSL, onePanelServer, headers)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -445,7 +446,7 @@ func OnePanelCreateWebsite(c *gin.Context) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, item := range ssl.Data.Items {
|
for _, item := range ssl.Data {
|
||||||
if item.PrimaryDomain == domain && item.Provider == sslProvider {
|
if item.PrimaryDomain == domain && item.Provider == sslProvider {
|
||||||
sslId = item.ID
|
sslId = item.ID
|
||||||
break
|
break
|
||||||
@ -479,8 +480,8 @@ func OnePanelCreateWebsite(c *gin.Context) {
|
|||||||
// TODO Enable HTTPS
|
// TODO Enable HTTPS
|
||||||
var searchAcme model2.AcmeSearchRequest
|
var searchAcme model2.AcmeSearchRequest
|
||||||
acmeId := 0
|
acmeId := 0
|
||||||
searchAcme.Page = 1
|
searchAcme.Page = 0
|
||||||
searchAcme.PageSize = 50
|
searchAcme.PageSize = 0
|
||||||
if sslProvider == "http" {
|
if sslProvider == "http" {
|
||||||
acme, err := service.MyService.OnePanel().AcmeAccountSearch(searchAcme, onePanelServer, headers)
|
acme, err := service.MyService.OnePanel().AcmeAccountSearch(searchAcme, onePanelServer, headers)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -541,7 +542,7 @@ func IssueSelfSignedCert(domain string, websiteId int, headers map[string]string
|
|||||||
}
|
}
|
||||||
var searchSelfSignedCert model2.SelfSignedCertSearchRequest
|
var searchSelfSignedCert model2.SelfSignedCertSearchRequest
|
||||||
searchSelfSignedCert.Page = 1
|
searchSelfSignedCert.Page = 1
|
||||||
searchSelfSignedCert.PageSize = 50
|
searchSelfSignedCert.PageSize = 1000
|
||||||
selfsignedCert, err := service.MyService.OnePanel().SelfSignedCertSearch(searchSelfSignedCert, onePanelServer, headers)
|
selfsignedCert, err := service.MyService.OnePanel().SelfSignedCertSearch(searchSelfSignedCert, onePanelServer, headers)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return 0, err
|
return 0, err
|
||||||
@ -581,13 +582,13 @@ func IssueSelfSignedCert(domain string, websiteId int, headers map[string]string
|
|||||||
}
|
}
|
||||||
fmt.Println(issueSelfSignedCertRes)
|
fmt.Println(issueSelfSignedCertRes)
|
||||||
var searchSSL model2.SearchSSLRequest
|
var searchSSL model2.SearchSSLRequest
|
||||||
searchSSL.Page = 1
|
searchSSL.Page = 0
|
||||||
searchSSL.PageSize = 50
|
searchSSL.PageSize = 0
|
||||||
ssl, err := service.MyService.OnePanel().SearchWebsiteSSl(searchSSL, onePanelServer, headers)
|
ssl, err := service.MyService.OnePanel().SearchWebsiteSSl(searchSSL, onePanelServer, headers)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return 0, err
|
return 0, err
|
||||||
}
|
}
|
||||||
for _, item := range ssl.Data.Items {
|
for _, item := range ssl.Data {
|
||||||
if item.PrimaryDomain == domain {
|
if item.PrimaryDomain == domain {
|
||||||
return item.ID, nil
|
return item.ID, nil
|
||||||
}
|
}
|
||||||
@ -597,8 +598,8 @@ func IssueSelfSignedCert(domain string, websiteId int, headers map[string]string
|
|||||||
}
|
}
|
||||||
func OnePanelApplyWebsiteSSl(domain string, websiteId int, headers map[string]string) (int, error) {
|
func OnePanelApplyWebsiteSSl(domain string, websiteId int, headers map[string]string) (int, error) {
|
||||||
var searchAcme model2.AcmeSearchRequest
|
var searchAcme model2.AcmeSearchRequest
|
||||||
searchAcme.Page = 1
|
searchAcme.Page = 0
|
||||||
searchAcme.PageSize = 50
|
searchAcme.PageSize = 0
|
||||||
acme, err := service.MyService.OnePanel().AcmeAccountSearch(searchAcme, onePanelServer, headers)
|
acme, err := service.MyService.OnePanel().AcmeAccountSearch(searchAcme, onePanelServer, headers)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return 0, err
|
return 0, err
|
||||||
@ -651,6 +652,16 @@ func OnePanelDeleteWebsite(c *gin.Context) {
|
|||||||
json := make(map[string]string)
|
json := make(map[string]string)
|
||||||
c.ShouldBind(&json)
|
c.ShouldBind(&json)
|
||||||
domain := json["domain"]
|
domain := json["domain"]
|
||||||
|
deleteSSL, err := strconv.ParseBool(json["deleteSSL"])
|
||||||
|
if err != nil {
|
||||||
|
c.JSON(common_err.SERVICE_ERROR,
|
||||||
|
model.Result{
|
||||||
|
Success: common_err.SERVICE_ERROR,
|
||||||
|
Message: common_err.GetMsg(common_err.SERVICE_ERROR),
|
||||||
|
})
|
||||||
|
}
|
||||||
|
test := json["deleteSSL"]
|
||||||
|
fmt.Println(test)
|
||||||
var searchParam model2.SearchWebsiteRequest
|
var searchParam model2.SearchWebsiteRequest
|
||||||
searchParam.Name = domain
|
searchParam.Name = domain
|
||||||
searchParam.Page = 1
|
searchParam.Page = 1
|
||||||
@ -690,7 +701,45 @@ func OnePanelDeleteWebsite(c *gin.Context) {
|
|||||||
Message: common_err.GetMsg(common_err.SUCCESS),
|
Message: common_err.GetMsg(common_err.SUCCESS),
|
||||||
Data: response,
|
Data: response,
|
||||||
})
|
})
|
||||||
return
|
}
|
||||||
|
if deleteSSL {
|
||||||
|
var searchSSLParam model2.SearchSSLRequest
|
||||||
|
searchSSLParam.AcmeAccountID = ""
|
||||||
|
searchSSLParam.Page = 0
|
||||||
|
searchSSLParam.PageSize = 0
|
||||||
|
searchSSL, err := service.MyService.OnePanel().SearchWebsiteSSl(searchSSLParam, onePanelServer, headers)
|
||||||
|
if err != nil {
|
||||||
|
c.JSON(common_err.SERVICE_ERROR,
|
||||||
|
model.Result{
|
||||||
|
Success: common_err.SERVICE_ERROR,
|
||||||
|
Message: common_err.GetMsg(common_err.SERVICE_ERROR),
|
||||||
|
})
|
||||||
|
}
|
||||||
|
if len(searchSSL.Data) > 0 {
|
||||||
|
var deleleSSL model2.DeleteSSLRequest
|
||||||
|
for _, ssl := range searchSSL.Data {
|
||||||
|
if ssl.PrimaryDomain == domain {
|
||||||
|
deleleSSL.Ids = append(deleleSSL.Ids, ssl.ID)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if len(deleleSSL.Ids) > 0 {
|
||||||
|
deleteResult, err := service.MyService.OnePanel().DeleteWebsiteSSL(deleleSSL, onePanelServer, headers)
|
||||||
|
if err != nil {
|
||||||
|
c.JSON(common_err.SERVICE_ERROR,
|
||||||
|
model.Result{
|
||||||
|
Success: common_err.SERVICE_ERROR,
|
||||||
|
Message: common_err.GetMsg(common_err.SERVICE_ERROR),
|
||||||
|
})
|
||||||
|
}
|
||||||
|
fmt.Println(deleteResult)
|
||||||
|
c.JSON(common_err.SUCCESS,
|
||||||
|
model.Result{
|
||||||
|
Success: common_err.SUCCESS,
|
||||||
|
Message: common_err.GetMsg(common_err.SUCCESS),
|
||||||
|
})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
c.JSON(common_err.SUCCESS,
|
c.JSON(common_err.SUCCESS,
|
||||||
model.Result{
|
model.Result{
|
||||||
@ -780,7 +829,7 @@ var oidcInit bool
|
|||||||
func InitOIDC() {
|
func InitOIDC() {
|
||||||
const (
|
const (
|
||||||
maxSleep = 60 * time.Second
|
maxSleep = 60 * time.Second
|
||||||
minSleep = 10 * time.Second
|
minSleep = 3 * time.Second
|
||||||
maxRetryBackoff = 5 // Cap retry backoff to 5 attempts
|
maxRetryBackoff = 5 // Cap retry backoff to 5 attempts
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -2,6 +2,7 @@ package service
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
|
"encoding/base64"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
"log"
|
"log"
|
||||||
@ -11,11 +12,10 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
type OnePanelService interface {
|
type OnePanelService interface {
|
||||||
Login(m model2.OnePanelCredentials, baseURL string) (model2.LoginResponse, []*http.Cookie, error)
|
Login(m model2.OnePanelCredentials, baseURL string, entranceCode string) (model2.LoginResponse, []*http.Cookie, error)
|
||||||
Logout(m model2.OnePanelCredentials, baseURL string) (model2.LogoutResponse, error)
|
Logout(m model2.OnePanelCredentials, baseURL string) (model2.LogoutResponse, error)
|
||||||
HealthCheck(baseURL string) (string, error)
|
HealthCheck(baseURL string) (string, error)
|
||||||
SearchInstalledApp(p model2.InstalledAppRequest, baseURL string) (model2.InstalledAppResponse, error)
|
SearchInstalledApp(p model2.InstalledAppRequest, baseURL string) (model2.InstalledAppResponse, error)
|
||||||
// InstallApp()
|
|
||||||
SearchWebsite(m model2.SearchWebsiteRequest, baseUrl string, headers map[string]string) (model2.SearchWebsiteResponse, error)
|
SearchWebsite(m model2.SearchWebsiteRequest, baseUrl string, headers map[string]string) (model2.SearchWebsiteResponse, error)
|
||||||
CreateWebsite(m model2.CreateWebsiteRequest, baseUrl string, headers map[string]string) (model2.GenericResponse, error)
|
CreateWebsite(m model2.CreateWebsiteRequest, baseUrl string, headers map[string]string) (model2.GenericResponse, error)
|
||||||
DeleteWebsite(m model2.DeleteWebsiteRequest, baseUrl string, headers map[string]string) (model2.GenericResponse, error)
|
DeleteWebsite(m model2.DeleteWebsiteRequest, baseUrl string, headers map[string]string) (model2.GenericResponse, error)
|
||||||
@ -28,6 +28,7 @@ type OnePanelService interface {
|
|||||||
ApplyWebsiteSSl(m model2.CreateSSLRequest, baseUrl string, headers map[string]string) (model2.CreateSSLResponse, error)
|
ApplyWebsiteSSl(m model2.CreateSSLRequest, baseUrl string, headers map[string]string) (model2.CreateSSLResponse, error)
|
||||||
SearchWebsiteSSl(m model2.SearchSSLRequest, baseUrl string, headers map[string]string) (model2.SearchSSLResponse, error)
|
SearchWebsiteSSl(m model2.SearchSSLRequest, baseUrl string, headers map[string]string) (model2.SearchSSLResponse, error)
|
||||||
UpdateWebsiteProtocol(m model2.WebsiteHttpsConfigRequest, baseUrl string, headers map[string]string) (model2.GenericResponse, error)
|
UpdateWebsiteProtocol(m model2.WebsiteHttpsConfigRequest, baseUrl string, headers map[string]string) (model2.GenericResponse, error)
|
||||||
|
DeleteWebsiteSSL(m model2.DeleteSSLRequest, baseUrl string, headers map[string]string) (model2.GenericResponse, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
@ -38,7 +39,35 @@ type onePanelService struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// TODO A lot of redundant code need refactor
|
// TODO A lot of redundant code need refactor
|
||||||
|
func (o *onePanelService) DeleteWebsiteSSL(m model2.DeleteSSLRequest, baseUrl string, headers map[string]string) (model2.GenericResponse, error) {
|
||||||
|
path := baseUrl + "/api/v1/websites/ssl/del"
|
||||||
|
reqBody, err := json.Marshal(m)
|
||||||
|
if err != nil {
|
||||||
|
return model2.GenericResponse{}, fmt.Errorf("error marshaling request body: %v", err)
|
||||||
|
}
|
||||||
|
req, err := http.NewRequest("POST", path, bytes.NewReader(reqBody))
|
||||||
|
if err != nil {
|
||||||
|
return model2.GenericResponse{}, fmt.Errorf("error creating request: %v", err)
|
||||||
|
}
|
||||||
|
// Add headers to the request
|
||||||
|
for key, value := range headers {
|
||||||
|
req.Header.Set(key, value)
|
||||||
|
}
|
||||||
|
client := &http.Client{}
|
||||||
|
resp, err := client.Do(req)
|
||||||
|
if err != nil {
|
||||||
|
return model2.GenericResponse{}, fmt.Errorf("error making request: %v", err)
|
||||||
|
}
|
||||||
|
defer resp.Body.Close()
|
||||||
|
if resp.StatusCode < 200 || resp.StatusCode >= 300 {
|
||||||
|
return model2.GenericResponse{}, fmt.Errorf("HTTP error: %s", resp.Status)
|
||||||
|
}
|
||||||
|
var result model2.GenericResponse
|
||||||
|
if err := json.NewDecoder(resp.Body).Decode(&result); err != nil {
|
||||||
|
return model2.GenericResponse{}, fmt.Errorf("error decoding response: %v", err)
|
||||||
|
}
|
||||||
|
return result, nil
|
||||||
|
}
|
||||||
func (o *onePanelService) UpdateWebsiteProtocol(m model2.WebsiteHttpsConfigRequest, baseUrl string, headers map[string]string) (model2.GenericResponse, error) {
|
func (o *onePanelService) UpdateWebsiteProtocol(m model2.WebsiteHttpsConfigRequest, baseUrl string, headers map[string]string) (model2.GenericResponse, error) {
|
||||||
path := baseUrl + fmt.Sprintf("/api/v1/websites/%d/https", m.WebsiteID)
|
path := baseUrl + fmt.Sprintf("/api/v1/websites/%d/https", m.WebsiteID)
|
||||||
reqBody, err := json.Marshal(m)
|
reqBody, err := json.Marshal(m)
|
||||||
@ -418,7 +447,7 @@ func (o *onePanelService) SearchInstalledApp(m model2.InstalledAppRequest, baseU
|
|||||||
|
|
||||||
return result, nil
|
return result, nil
|
||||||
}
|
}
|
||||||
func (o *onePanelService) Login(m model2.OnePanelCredentials, baseURL string) (model2.LoginResponse, []*http.Cookie, error) {
|
func (o *onePanelService) Login(m model2.OnePanelCredentials, baseURL string, entranceCode string) (model2.LoginResponse, []*http.Cookie, error) {
|
||||||
path := baseURL + prefixV1 + "/auth/login"
|
path := baseURL + prefixV1 + "/auth/login"
|
||||||
|
|
||||||
// Create the request body by marshaling the credentials into JSON
|
// Create the request body by marshaling the credentials into JSON
|
||||||
@ -433,7 +462,7 @@ func (o *onePanelService) Login(m model2.OnePanelCredentials, baseURL string) (m
|
|||||||
}
|
}
|
||||||
req.Header.Set("Content-Type", "application/json")
|
req.Header.Set("Content-Type", "application/json")
|
||||||
req.Header.Set("Accept", "application/json")
|
req.Header.Set("Accept", "application/json")
|
||||||
|
req.Header.Set("Entrancecode", base64.StdEncoding.EncodeToString([]byte(entranceCode)))
|
||||||
// Reuse the HTTP client (consider making it a field in onePanelService)
|
// Reuse the HTTP client (consider making it a field in onePanelService)
|
||||||
client := &http.Client{}
|
client := &http.Client{}
|
||||||
resp, err := client.Do(req)
|
resp, err := client.Do(req)
|
||||||
|
@ -99,43 +99,56 @@ type SearchSSLRequest struct {
|
|||||||
type SearchSSLResponse struct {
|
type SearchSSLResponse struct {
|
||||||
Code int `json:"code"`
|
Code int `json:"code"`
|
||||||
Message string `json:"message"`
|
Message string `json:"message"`
|
||||||
Data struct {
|
Data []struct {
|
||||||
Total int `json:"total"`
|
ID int `json:"id"`
|
||||||
Items []struct {
|
CreatedAt time.Time `json:"createdAt"`
|
||||||
ID int `json:"id"`
|
UpdatedAt time.Time `json:"updatedAt"`
|
||||||
CreatedAt time.Time `json:"createdAt"`
|
PrimaryDomain string `json:"primaryDomain"`
|
||||||
UpdatedAt time.Time `json:"updatedAt"`
|
PrivateKey string `json:"privateKey"`
|
||||||
PrimaryDomain string `json:"primaryDomain"`
|
Pem string `json:"pem"`
|
||||||
PrivateKey string `json:"privateKey"`
|
Domains string `json:"domains"`
|
||||||
Pem string `json:"pem"`
|
CertURL string `json:"certURL"`
|
||||||
Domains string `json:"domains"`
|
Type string `json:"type"`
|
||||||
CertURL string `json:"certURL"`
|
Provider string `json:"provider"`
|
||||||
Type string `json:"type"`
|
Organization string `json:"organization"`
|
||||||
Provider string `json:"provider"`
|
DNSAccountID int `json:"dnsAccountId"`
|
||||||
Organization string `json:"organization"`
|
AcmeAccountID int `json:"acmeAccountId"`
|
||||||
DNSAccountID int `json:"dnsAccountId"`
|
CaID int `json:"caId"`
|
||||||
AcmeAccountID int `json:"acmeAccountId"`
|
AutoRenew bool `json:"autoRenew"`
|
||||||
CaID int `json:"caId"`
|
ExpireDate time.Time `json:"expireDate"`
|
||||||
AutoRenew bool `json:"autoRenew"`
|
StartDate time.Time `json:"startDate"`
|
||||||
ExpireDate time.Time `json:"expireDate"`
|
Status string `json:"status"`
|
||||||
StartDate time.Time `json:"startDate"`
|
Message string `json:"message"`
|
||||||
Status string `json:"status"`
|
KeyType string `json:"keyType"`
|
||||||
Message string `json:"message"`
|
PushDir bool `json:"pushDir"`
|
||||||
KeyType string `json:"keyType"`
|
Dir string `json:"dir"`
|
||||||
PushDir bool `json:"pushDir"`
|
Description string `json:"description"`
|
||||||
Dir string `json:"dir"`
|
SkipDNS bool `json:"skipDNS"`
|
||||||
Description string `json:"description"`
|
Nameserver1 string `json:"nameserver1"`
|
||||||
SkipDNS bool `json:"skipDNS"`
|
Nameserver2 string `json:"nameserver2"`
|
||||||
Nameserver1 string `json:"nameserver1"`
|
DisableCNAME bool `json:"disableCNAME"`
|
||||||
Nameserver2 string `json:"nameserver2"`
|
ExecShell bool `json:"execShell"`
|
||||||
DisableCNAME bool `json:"disableCNAME"`
|
Shell string `json:"shell"`
|
||||||
ExecShell bool `json:"execShell"`
|
AcmeAccount struct {
|
||||||
Shell string `json:"shell"`
|
ID int `json:"id"`
|
||||||
AcmeAccount AcmeAccount `json:"acmeAccount"`
|
CreatedAt time.Time `json:"createdAt"`
|
||||||
DNSAccount DNSAccount `json:"dnsAccount"`
|
UpdatedAt time.Time `json:"updatedAt"`
|
||||||
Websites []WebsiteDetail `json:"websites"`
|
Email string `json:"email"`
|
||||||
LogPath string `json:"logPath"`
|
URL string `json:"url"`
|
||||||
} `json:"items"`
|
Type string `json:"type"`
|
||||||
|
EabKid string `json:"eabKid"`
|
||||||
|
EabHmacKey string `json:"eabHmacKey"`
|
||||||
|
KeyType string `json:"keyType"`
|
||||||
|
} `json:"acmeAccount"`
|
||||||
|
DNSAccount struct {
|
||||||
|
ID int `json:"id"`
|
||||||
|
CreatedAt time.Time `json:"createdAt"`
|
||||||
|
UpdatedAt time.Time `json:"updatedAt"`
|
||||||
|
Name string `json:"name"`
|
||||||
|
Type string `json:"type"`
|
||||||
|
} `json:"dnsAccount"`
|
||||||
|
Websites interface{} `json:"websites"`
|
||||||
|
LogPath string `json:"logPath"`
|
||||||
} `json:"data"`
|
} `json:"data"`
|
||||||
}
|
}
|
||||||
type WebsiteHttpsConfigRequest struct {
|
type WebsiteHttpsConfigRequest struct {
|
||||||
@ -184,7 +197,9 @@ type SelfSignedCertSearchResponse struct {
|
|||||||
} `json:"items"`
|
} `json:"items"`
|
||||||
} `json:"data"`
|
} `json:"data"`
|
||||||
}
|
}
|
||||||
|
type DeleteSSLRequest struct {
|
||||||
|
Ids []int `json:"ids"`
|
||||||
|
}
|
||||||
type WebsiteDetail struct {
|
type WebsiteDetail struct {
|
||||||
ID int `json:"id"`
|
ID int `json:"id"`
|
||||||
CreatedAt time.Time `json:"createdAt"`
|
CreatedAt time.Time `json:"createdAt"`
|
||||||
|
Loading…
Reference in New Issue
Block a user