mirror of
https://github.com/KaySar12/NextZen-UserService.git
synced 2025-03-15 23:25:35 +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",
|
||||
"debugAdapter": "dlv-dap",
|
||||
"request": "launch",
|
||||
"port": 40751,
|
||||
"port": 44239,
|
||||
"host": "127.0.0.1",
|
||||
"mode": "exec",
|
||||
"program": "${workspaceFolder}/dist/casaos-user-service-amd64_linux_amd64_v1/build/sysroot/usr/bin/casaos-user-service"
|
||||
|
@ -47,14 +47,15 @@ import (
|
||||
)
|
||||
|
||||
var (
|
||||
authServer = "http://accessmanager.local"
|
||||
clientID = "6KwKSxLCtaQ4r6HoAn3gdNMbNOAf75j3SejLIAx7"
|
||||
clientSecret = "PE05fcDP4qESUmyZ1TNYpZNBxRPq70VpFI81vehsoJ6WhGz5yPXMljrFrOdMRdRhrYmF03fHWTZHgO9ZdNENrLN13BzL8CAgtEkTsyjXfgx9GvISheIjYfpSfvo219fL"
|
||||
authURL = "http://accessmanager.local/application/o/nextzenos-oidc/"
|
||||
callbackURL = "http://nextzenos.local/v1/users/oidc/callback"
|
||||
onePanelServer = "http://nextweb.local"
|
||||
onePanelName = "nextzen"
|
||||
onePanelPassword = "Smartyourlife123@*"
|
||||
authServer = "http://accessmanager.local"
|
||||
clientID = "6KwKSxLCtaQ4r6HoAn3gdNMbNOAf75j3SejLIAx7"
|
||||
clientSecret = "PE05fcDP4qESUmyZ1TNYpZNBxRPq70VpFI81vehsoJ6WhGz5yPXMljrFrOdMRdRhrYmF03fHWTZHgO9ZdNENrLN13BzL8CAgtEkTsyjXfgx9GvISheIjYfpSfvo219fL"
|
||||
authURL = "http://accessmanager.local/application/o/nextzenos-oidc/"
|
||||
callbackURL = "http://nextzenos.local/v1/users/oidc/callback"
|
||||
onePanelServer = "http://nextweb.local"
|
||||
onePanelName = "nextzen"
|
||||
onePanelPassword = "Smartyourlife123@*"
|
||||
onePanelEntranceCode = "nextweb"
|
||||
//authentik_api_token = "jidFioAIXpgl8awyk2O17K8W7vZzlXhOO0QXGxEhMDJdn9g747EQjmaI0i3e"
|
||||
)
|
||||
|
||||
@ -155,7 +156,7 @@ func OnePanelLogin(c *gin.Context) error {
|
||||
Language: "en",
|
||||
}
|
||||
|
||||
response, cookies, err := service.MyService.OnePanel().Login(cred, onePanelServer)
|
||||
response, cookies, err := service.MyService.OnePanel().Login(cred, onePanelServer, onePanelEntranceCode)
|
||||
fmt.Println(response)
|
||||
if err != nil {
|
||||
logger.Error("OnePanel login failed", zap.Error(err))
|
||||
@ -303,8 +304,8 @@ func OnePanelUpdateWebsite(c *gin.Context) {
|
||||
if sslProvider == "selfSigned" {
|
||||
searchSSLParam.AcmeAccountID = strconv.Itoa(acmeId)
|
||||
}
|
||||
searchSSLParam.Page = 1
|
||||
searchSSLParam.PageSize = 50
|
||||
searchSSLParam.Page = 0
|
||||
searchSSLParam.PageSize = 0
|
||||
searchSSL, err := service.MyService.OnePanel().SearchWebsiteSSl(searchSSLParam, onePanelServer, headers)
|
||||
if err != nil {
|
||||
c.JSON(common_err.SERVICE_ERROR,
|
||||
@ -313,7 +314,7 @@ func OnePanelUpdateWebsite(c *gin.Context) {
|
||||
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 {
|
||||
sslId = item.ID
|
||||
break
|
||||
@ -433,8 +434,8 @@ func OnePanelCreateWebsite(c *gin.Context) {
|
||||
if protocol == "https" {
|
||||
//TODO Find SSL
|
||||
var searchSSL model2.SearchSSLRequest
|
||||
searchSSL.Page = 1
|
||||
searchSSL.PageSize = 50
|
||||
searchSSL.Page = 0
|
||||
searchSSL.PageSize = 0
|
||||
sslId := -1
|
||||
ssl, err := service.MyService.OnePanel().SearchWebsiteSSl(searchSSL, onePanelServer, headers)
|
||||
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 {
|
||||
sslId = item.ID
|
||||
break
|
||||
@ -479,8 +480,8 @@ func OnePanelCreateWebsite(c *gin.Context) {
|
||||
// TODO Enable HTTPS
|
||||
var searchAcme model2.AcmeSearchRequest
|
||||
acmeId := 0
|
||||
searchAcme.Page = 1
|
||||
searchAcme.PageSize = 50
|
||||
searchAcme.Page = 0
|
||||
searchAcme.PageSize = 0
|
||||
if sslProvider == "http" {
|
||||
acme, err := service.MyService.OnePanel().AcmeAccountSearch(searchAcme, onePanelServer, headers)
|
||||
if err != nil {
|
||||
@ -541,7 +542,7 @@ func IssueSelfSignedCert(domain string, websiteId int, headers map[string]string
|
||||
}
|
||||
var searchSelfSignedCert model2.SelfSignedCertSearchRequest
|
||||
searchSelfSignedCert.Page = 1
|
||||
searchSelfSignedCert.PageSize = 50
|
||||
searchSelfSignedCert.PageSize = 1000
|
||||
selfsignedCert, err := service.MyService.OnePanel().SelfSignedCertSearch(searchSelfSignedCert, onePanelServer, headers)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
@ -581,13 +582,13 @@ func IssueSelfSignedCert(domain string, websiteId int, headers map[string]string
|
||||
}
|
||||
fmt.Println(issueSelfSignedCertRes)
|
||||
var searchSSL model2.SearchSSLRequest
|
||||
searchSSL.Page = 1
|
||||
searchSSL.PageSize = 50
|
||||
searchSSL.Page = 0
|
||||
searchSSL.PageSize = 0
|
||||
ssl, err := service.MyService.OnePanel().SearchWebsiteSSl(searchSSL, onePanelServer, headers)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
for _, item := range ssl.Data.Items {
|
||||
for _, item := range ssl.Data {
|
||||
if item.PrimaryDomain == domain {
|
||||
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) {
|
||||
var searchAcme model2.AcmeSearchRequest
|
||||
searchAcme.Page = 1
|
||||
searchAcme.PageSize = 50
|
||||
searchAcme.Page = 0
|
||||
searchAcme.PageSize = 0
|
||||
acme, err := service.MyService.OnePanel().AcmeAccountSearch(searchAcme, onePanelServer, headers)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
@ -651,6 +652,16 @@ func OnePanelDeleteWebsite(c *gin.Context) {
|
||||
json := make(map[string]string)
|
||||
c.ShouldBind(&json)
|
||||
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
|
||||
searchParam.Name = domain
|
||||
searchParam.Page = 1
|
||||
@ -690,7 +701,45 @@ func OnePanelDeleteWebsite(c *gin.Context) {
|
||||
Message: common_err.GetMsg(common_err.SUCCESS),
|
||||
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,
|
||||
model.Result{
|
||||
@ -780,7 +829,7 @@ var oidcInit bool
|
||||
func InitOIDC() {
|
||||
const (
|
||||
maxSleep = 60 * time.Second
|
||||
minSleep = 10 * time.Second
|
||||
minSleep = 3 * time.Second
|
||||
maxRetryBackoff = 5 // Cap retry backoff to 5 attempts
|
||||
)
|
||||
|
||||
|
@ -2,6 +2,7 @@ package service
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/base64"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"log"
|
||||
@ -11,11 +12,10 @@ import (
|
||||
)
|
||||
|
||||
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)
|
||||
HealthCheck(baseURL string) (string, error)
|
||||
SearchInstalledApp(p model2.InstalledAppRequest, baseURL string) (model2.InstalledAppResponse, error)
|
||||
// InstallApp()
|
||||
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)
|
||||
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)
|
||||
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)
|
||||
DeleteWebsiteSSL(m model2.DeleteSSLRequest, baseUrl string, headers map[string]string) (model2.GenericResponse, error)
|
||||
}
|
||||
|
||||
var (
|
||||
@ -38,7 +39,35 @@ type onePanelService struct {
|
||||
}
|
||||
|
||||
// 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) {
|
||||
path := baseUrl + fmt.Sprintf("/api/v1/websites/%d/https", m.WebsiteID)
|
||||
reqBody, err := json.Marshal(m)
|
||||
@ -418,7 +447,7 @@ func (o *onePanelService) SearchInstalledApp(m model2.InstalledAppRequest, baseU
|
||||
|
||||
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"
|
||||
|
||||
// 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("Accept", "application/json")
|
||||
|
||||
req.Header.Set("Entrancecode", base64.StdEncoding.EncodeToString([]byte(entranceCode)))
|
||||
// Reuse the HTTP client (consider making it a field in onePanelService)
|
||||
client := &http.Client{}
|
||||
resp, err := client.Do(req)
|
||||
|
@ -99,43 +99,56 @@ type SearchSSLRequest struct {
|
||||
type SearchSSLResponse struct {
|
||||
Code int `json:"code"`
|
||||
Message string `json:"message"`
|
||||
Data struct {
|
||||
Total int `json:"total"`
|
||||
Items []struct {
|
||||
ID int `json:"id"`
|
||||
CreatedAt time.Time `json:"createdAt"`
|
||||
UpdatedAt time.Time `json:"updatedAt"`
|
||||
PrimaryDomain string `json:"primaryDomain"`
|
||||
PrivateKey string `json:"privateKey"`
|
||||
Pem string `json:"pem"`
|
||||
Domains string `json:"domains"`
|
||||
CertURL string `json:"certURL"`
|
||||
Type string `json:"type"`
|
||||
Provider string `json:"provider"`
|
||||
Organization string `json:"organization"`
|
||||
DNSAccountID int `json:"dnsAccountId"`
|
||||
AcmeAccountID int `json:"acmeAccountId"`
|
||||
CaID int `json:"caId"`
|
||||
AutoRenew bool `json:"autoRenew"`
|
||||
ExpireDate time.Time `json:"expireDate"`
|
||||
StartDate time.Time `json:"startDate"`
|
||||
Status string `json:"status"`
|
||||
Message string `json:"message"`
|
||||
KeyType string `json:"keyType"`
|
||||
PushDir bool `json:"pushDir"`
|
||||
Dir string `json:"dir"`
|
||||
Description string `json:"description"`
|
||||
SkipDNS bool `json:"skipDNS"`
|
||||
Nameserver1 string `json:"nameserver1"`
|
||||
Nameserver2 string `json:"nameserver2"`
|
||||
DisableCNAME bool `json:"disableCNAME"`
|
||||
ExecShell bool `json:"execShell"`
|
||||
Shell string `json:"shell"`
|
||||
AcmeAccount AcmeAccount `json:"acmeAccount"`
|
||||
DNSAccount DNSAccount `json:"dnsAccount"`
|
||||
Websites []WebsiteDetail `json:"websites"`
|
||||
LogPath string `json:"logPath"`
|
||||
} `json:"items"`
|
||||
Data []struct {
|
||||
ID int `json:"id"`
|
||||
CreatedAt time.Time `json:"createdAt"`
|
||||
UpdatedAt time.Time `json:"updatedAt"`
|
||||
PrimaryDomain string `json:"primaryDomain"`
|
||||
PrivateKey string `json:"privateKey"`
|
||||
Pem string `json:"pem"`
|
||||
Domains string `json:"domains"`
|
||||
CertURL string `json:"certURL"`
|
||||
Type string `json:"type"`
|
||||
Provider string `json:"provider"`
|
||||
Organization string `json:"organization"`
|
||||
DNSAccountID int `json:"dnsAccountId"`
|
||||
AcmeAccountID int `json:"acmeAccountId"`
|
||||
CaID int `json:"caId"`
|
||||
AutoRenew bool `json:"autoRenew"`
|
||||
ExpireDate time.Time `json:"expireDate"`
|
||||
StartDate time.Time `json:"startDate"`
|
||||
Status string `json:"status"`
|
||||
Message string `json:"message"`
|
||||
KeyType string `json:"keyType"`
|
||||
PushDir bool `json:"pushDir"`
|
||||
Dir string `json:"dir"`
|
||||
Description string `json:"description"`
|
||||
SkipDNS bool `json:"skipDNS"`
|
||||
Nameserver1 string `json:"nameserver1"`
|
||||
Nameserver2 string `json:"nameserver2"`
|
||||
DisableCNAME bool `json:"disableCNAME"`
|
||||
ExecShell bool `json:"execShell"`
|
||||
Shell string `json:"shell"`
|
||||
AcmeAccount struct {
|
||||
ID int `json:"id"`
|
||||
CreatedAt time.Time `json:"createdAt"`
|
||||
UpdatedAt time.Time `json:"updatedAt"`
|
||||
Email string `json:"email"`
|
||||
URL string `json:"url"`
|
||||
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"`
|
||||
}
|
||||
type WebsiteHttpsConfigRequest struct {
|
||||
@ -184,7 +197,9 @@ type SelfSignedCertSearchResponse struct {
|
||||
} `json:"items"`
|
||||
} `json:"data"`
|
||||
}
|
||||
|
||||
type DeleteSSLRequest struct {
|
||||
Ids []int `json:"ids"`
|
||||
}
|
||||
type WebsiteDetail struct {
|
||||
ID int `json:"id"`
|
||||
CreatedAt time.Time `json:"createdAt"`
|
||||
|
Loading…
Reference in New Issue
Block a user