NextZen-UserService/service/1panel.go

94 lines
2.7 KiB
Go

package service
import (
"bytes"
"encoding/json"
"fmt"
"log"
"net/http"
model2 "github.com/KaySar12/NextZen-UserService/service/model"
)
type OnePanelService interface {
Login(m model2.OnePanelCredentials, baseURL string) (model2.LoginResponse, []*http.Cookie, error)
Logout(m model2.OnePanelCredentials, baseURL string) (model2.LogoutResponse, error)
HealthCheck(baseURL string) (string, error)
}
var (
prefixV1 = "/api/v1"
)
type onePanelService struct {
}
func (o *onePanelService) Login(m model2.OnePanelCredentials, baseURL string) (model2.LoginResponse, []*http.Cookie, error) {
path := baseURL + prefixV1 + "/auth/login"
// Create the request body by marshaling the credentials into JSON
reqBody, err := json.Marshal(m)
if err != nil {
return model2.LoginResponse{}, []*http.Cookie{}, fmt.Errorf("error marshaling request body: %v", err)
}
req, err := http.NewRequest("POST", path, bytes.NewReader(reqBody))
if err != nil {
return model2.LoginResponse{}, []*http.Cookie{}, fmt.Errorf("error creating request: %v", err)
}
req.Header.Set("Content-Type", "application/json")
req.Header.Set("Accept", "application/json")
// Reuse the HTTP client (consider making it a field in onePanelService)
client := &http.Client{}
resp, err := client.Do(req)
cookies := resp.Cookies()
if err != nil {
return model2.LoginResponse{}, []*http.Cookie{}, fmt.Errorf("error making request: %v", err)
}
defer resp.Body.Close()
if resp.StatusCode < 200 || resp.StatusCode >= 300 {
return model2.LoginResponse{}, []*http.Cookie{}, fmt.Errorf("HTTP error: %s", resp.Status)
}
var result model2.LoginResponse
if err := json.NewDecoder(resp.Body).Decode(&result); err != nil {
return model2.LoginResponse{}, []*http.Cookie{}, fmt.Errorf("error decoding response: %v", err)
}
return result, cookies, nil
}
func (o *onePanelService) Logout(m model2.OnePanelCredentials, baseURL string) (model2.LogoutResponse, error) {
return model2.LogoutResponse{}, nil
}
func (o *onePanelService) HealthCheck(baseURL string) (string, error) {
path := baseURL + "/health"
req, err := http.NewRequest("GET", path, nil)
if err != nil {
log.Println("Error creating health/live request:", err)
return "Offline", err
}
client := &http.Client{
CheckRedirect: func(req *http.Request, via []*http.Request) error {
return nil // Always follow redirects
},
}
respLive, err := client.Do(req)
if err != nil {
log.Println("Error on health/live request:", err)
return "Offline", err // Exit if the request fails
}
defer respLive.Body.Close()
if respLive.StatusCode == http.StatusOK {
return "Live", nil
}
return "Offline", err
}
func NewOnePanelService() OnePanelService {
return &onePanelService{}
}