迁移并重构项目,优化了执行流程
This commit is contained in:
		
							
								
								
									
										42
									
								
								internal/class/SafeLine/Cert.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								internal/class/SafeLine/Cert.go
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,42 @@
 | 
			
		||||
package SafeLine
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"encoding/json"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type UpdateReq struct {
 | 
			
		||||
	Acme struct {
 | 
			
		||||
		Domains []string `json:"domains"`
 | 
			
		||||
		Email   string   `json:"email"`
 | 
			
		||||
	} `json:"acme"`
 | 
			
		||||
	Id     int `json:"id"`
 | 
			
		||||
	Manual struct {
 | 
			
		||||
		Crt string `json:"crt"`
 | 
			
		||||
		Key string `json:"key"`
 | 
			
		||||
	} `json:"manual"`
 | 
			
		||||
	Type int `json:"type"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (updateReq *UpdateReq) Create(Certificate, PrivateKey []byte, domains []string, email string, id, Type int) {
 | 
			
		||||
	updateReq.Acme.Domains = domains
 | 
			
		||||
	updateReq.Acme.Email = email
 | 
			
		||||
	updateReq.Manual.Crt = string(Certificate)
 | 
			
		||||
	updateReq.Manual.Key = string(PrivateKey)
 | 
			
		||||
	updateReq.Id = id
 | 
			
		||||
	updateReq.Type = Type
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (updateReq *UpdateReq) Marshal() []byte {
 | 
			
		||||
	data, _ := json.Marshal(updateReq)
 | 
			
		||||
	return data
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type UpdateResp struct {
 | 
			
		||||
	Data int         `json:"data"`
 | 
			
		||||
	Err  interface{} `json:"err"`
 | 
			
		||||
	Msg  string      `json:"msg"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (updateResp *UpdateResp) Unmarshal(data []byte) {
 | 
			
		||||
	_ = json.Unmarshal(data, &updateResp)
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										29
									
								
								internal/class/SafeLine/CheckMethod.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								internal/class/SafeLine/CheckMethod.go
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,29 @@
 | 
			
		||||
package SafeLine
 | 
			
		||||
 | 
			
		||||
import "SafeLine-Acme/internal/app/logger"
 | 
			
		||||
 | 
			
		||||
func (safeLine *Object) CheckFile() bool {
 | 
			
		||||
	var flag = true
 | 
			
		||||
	if safeLine.Host == "" {
 | 
			
		||||
		logger.Warning.Printf("未设置 %s服务器主机%s: 请检查配置文件中的 %sServer.Host%s 参数", logger.Cyan, logger.Reset, logger.Yellow, logger.Reset)
 | 
			
		||||
		flag = false
 | 
			
		||||
	}
 | 
			
		||||
	if safeLine.ApiToken == "" {
 | 
			
		||||
		logger.Warning.Printf("未设置 %sSafeLine API Token%s : 请检查配置文件中的 %sServer.ApiToken%s 参数", logger.Cyan, logger.Reset, logger.Yellow, logger.Reset)
 | 
			
		||||
		flag = false
 | 
			
		||||
	}
 | 
			
		||||
	return flag
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (safeLine *Object) CheckCommand() bool {
 | 
			
		||||
	var flag = true
 | 
			
		||||
	if safeLine.Host == "" {
 | 
			
		||||
		logger.Warning.Printf("未设置 %s服务器主机%s: 请检查命令中的 %s-h%s 参数", logger.Cyan, logger.Reset, logger.Yellow, logger.Reset)
 | 
			
		||||
		flag = false
 | 
			
		||||
	}
 | 
			
		||||
	if safeLine.ApiToken == "" {
 | 
			
		||||
		logger.Warning.Printf("未设置 %sSafeLine API Token%s : 请检查命令中的 %s-t%s 参数", logger.Cyan, logger.Reset, logger.Yellow, logger.Reset)
 | 
			
		||||
		flag = false
 | 
			
		||||
	}
 | 
			
		||||
	return flag
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										52
									
								
								internal/class/SafeLine/Method.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										52
									
								
								internal/class/SafeLine/Method.go
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,52 @@
 | 
			
		||||
package SafeLine
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"SafeLine-Acme/internal/app/logger"
 | 
			
		||||
	"SafeLine-Acme/pkg/utils"
 | 
			
		||||
	"bytes"
 | 
			
		||||
	"io"
 | 
			
		||||
	"net/http"
 | 
			
		||||
	"os"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func (safeLine *Object) GetCertNodes() []Nodes {
 | 
			
		||||
	header := http.Header{
 | 
			
		||||
		"X-SLCE-API-TOKEN": []string{safeLine.ApiToken},
 | 
			
		||||
	}
 | 
			
		||||
	resp, err := utils.Request("GET", safeLine.SSLCertUrl(), nil, header)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		logger.Error.Printf("请求接口 %s/api/open/cert%s 时发生错误: %s%s%s", logger.Cyan, logger.Reset, logger.Red, err, logger.Reset)
 | 
			
		||||
		os.Exit(0)
 | 
			
		||||
	}
 | 
			
		||||
	defer resp.Body.Close()
 | 
			
		||||
	data, _ := io.ReadAll(resp.Body)
 | 
			
		||||
	var listResp ListResp
 | 
			
		||||
	listResp.Unmarshal(data)
 | 
			
		||||
	return listResp.Data.Nodes
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (safeLine *Object) UpdateCert(email string, Certificate, PrivateKey []byte, cert Nodes) ([]string, []string) {
 | 
			
		||||
 | 
			
		||||
	header := http.Header{
 | 
			
		||||
		"X-SLCE-API-TOKEN": []string{safeLine.ApiToken},
 | 
			
		||||
		"Content-Type":     []string{"application/json"},
 | 
			
		||||
	}
 | 
			
		||||
	var updateReq UpdateReq
 | 
			
		||||
	updateReq.Create(Certificate, PrivateKey, cert.Domains, email, cert.Id, cert.Type)
 | 
			
		||||
	resp, err := utils.Request("POST", safeLine.SSLCertUrl(), bytes.NewReader(updateReq.Marshal()), header)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		logger.Error.Printf("更新证书时发生错误: %s%s%s", logger.Red, err, logger.Reset)
 | 
			
		||||
		return nil, nil
 | 
			
		||||
	}
 | 
			
		||||
	defer resp.Body.Close()
 | 
			
		||||
	data, _ := io.ReadAll(resp.Body)
 | 
			
		||||
	var updateResp UpdateResp
 | 
			
		||||
	updateResp.Unmarshal(data)
 | 
			
		||||
	if updateResp.Msg != "" {
 | 
			
		||||
		logger.Error.Printf("域名 %s%s%s 证书更新失败: %s%s%s", logger.Cyan, cert.Domains, logger.Reset, logger.Red, updateResp.Msg, logger.Reset)
 | 
			
		||||
		return nil, cert.Domains
 | 
			
		||||
	}
 | 
			
		||||
	logger.Success.Printf("域名 %s%s%s 证书更新成功!", logger.Cyan, cert.Domains, logger.Reset)
 | 
			
		||||
	return cert.Domains, nil
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										6
									
								
								internal/class/SafeLine/Object.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								internal/class/SafeLine/Object.go
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,6 @@
 | 
			
		||||
package SafeLine
 | 
			
		||||
 | 
			
		||||
type Object struct {
 | 
			
		||||
	Host     string `json:"Host"`
 | 
			
		||||
	ApiToken string `json:"ApiToken"`
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										33
									
								
								internal/class/SafeLine/Other.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								internal/class/SafeLine/Other.go
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,33 @@
 | 
			
		||||
package SafeLine
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"encoding/json"
 | 
			
		||||
	"time"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type ListResp struct {
 | 
			
		||||
	Data struct {
 | 
			
		||||
		Nodes []Nodes `json:"nodes"`
 | 
			
		||||
		Total int     `json:"total"`
 | 
			
		||||
	} `json:"data"`
 | 
			
		||||
	Err string `json:"err"`
 | 
			
		||||
	Msg string `json:"msg"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type Nodes struct {
 | 
			
		||||
	Id            int       `json:"id"`
 | 
			
		||||
	Domains       []string  `json:"domains"`
 | 
			
		||||
	Issuer        string    `json:"issuer"`
 | 
			
		||||
	SelfSignature bool      `json:"self_signature"`
 | 
			
		||||
	Trusted       bool      `json:"trusted"`
 | 
			
		||||
	Revoked       bool      `json:"revoked"`
 | 
			
		||||
	Expired       bool      `json:"expired"`
 | 
			
		||||
	Type          int       `json:"type"`
 | 
			
		||||
	AcmeMessage   string    `json:"acme_message"`
 | 
			
		||||
	ValidBefore   time.Time `json:"valid_before"`
 | 
			
		||||
	RelatedSites  []string  `json:"related_sites"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (listResp *ListResp) Unmarshal(data []byte) {
 | 
			
		||||
	_ = json.Unmarshal(data, &listResp)
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										42
									
								
								internal/class/SafeLine/VerifyMethod.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								internal/class/SafeLine/VerifyMethod.go
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,42 @@
 | 
			
		||||
package SafeLine
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"SafeLine-Acme/internal/app/logger"
 | 
			
		||||
	"SafeLine-Acme/pkg/utils"
 | 
			
		||||
	"errors"
 | 
			
		||||
	"net/http"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func (safeLine *Object) Verify() bool {
 | 
			
		||||
	err := safeLine.ServerVerify()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		logger.Error.Printf("请求服务端时发生错误: %s%s%s", logger.Red, err.Error(), logger.Reset)
 | 
			
		||||
		return false
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	err = safeLine.AuthTokenVerify()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		logger.Warning.Printf("%sSafeLine API Token%s 验证失败,请检查后重试", logger.Cyan, logger.Reset)
 | 
			
		||||
		return false
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	logger.Success.Printf("%sSafeLine%s 相关配置检验完成!", logger.Cyan, logger.Reset)
 | 
			
		||||
	return true
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (safeLine *Object) ServerVerify() error {
 | 
			
		||||
	_, err := utils.Request("GET", safeLine.Url().String(), nil, nil)
 | 
			
		||||
	return err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (safeLine *Object) AuthTokenVerify() error {
 | 
			
		||||
	header := http.Header{
 | 
			
		||||
		"X-SLCE-API-TOKEN": []string{safeLine.ApiToken},
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	resp, err := utils.Request("GET", safeLine.AuthTokenUrl(), nil, header)
 | 
			
		||||
	if err != nil || resp.StatusCode != 200 {
 | 
			
		||||
		return errors.New("token 验证失败")
 | 
			
		||||
	}
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										26
									
								
								internal/class/SafeLine/url.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								internal/class/SafeLine/url.go
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,26 @@
 | 
			
		||||
package SafeLine
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"net/url"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func (safeLine *Object) Url() *url.URL {
 | 
			
		||||
	var u *url.URL
 | 
			
		||||
	u, _ = url.Parse(fmt.Sprintf("https://%s", safeLine.Host))
 | 
			
		||||
	return u
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (safeLine *Object) AuthTokenUrl() string {
 | 
			
		||||
	path := "/api/open/auth/token"
 | 
			
		||||
	u := safeLine.Url()
 | 
			
		||||
	u.Path = path
 | 
			
		||||
	return u.String()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (safeLine *Object) SSLCertUrl() string {
 | 
			
		||||
	path := "/api/open/cert"
 | 
			
		||||
	u := safeLine.Url()
 | 
			
		||||
	u.Path = path
 | 
			
		||||
	return u.String()
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user