Files
env-guard/internal/api/client.go
2026-01-28 16:01:45 +01:00

114 lines
2.3 KiB
Go

package api
import (
"bytes"
"encoding/json"
"fmt"
"net/http"
"time"
"envguard/internal/models"
)
var baseURL = "http://localhost:8080"
const apiToken = "ENVGUARD_SECRET_TOKEN"
func SetBaseURL(url string) {
baseURL = url
}
var client = &http.Client{Timeout: 5 * time.Second}
func GetServices() ([]models.Service, error) {
req, err := http.NewRequest("GET", baseURL+"/services", nil)
if err != nil {
return nil, err
}
req.Header.Set("X-API-Key", apiToken)
resp, err := client.Do(req)
if err != nil {
return nil, err
}
defer resp.Body.Close()
var services []models.Service
if err := json.NewDecoder(resp.Body).Decode(&services); err != nil {
return nil, err
}
return services, nil
}
func LockService(serviceName, user string) error {
reqBody := models.LockRequest{
ServiceName: serviceName,
User: user,
}
data, _ := json.Marshal(reqBody)
req, err := http.NewRequest("POST", baseURL+"/lock", bytes.NewBuffer(data))
if err != nil {
return err
}
req.Header.Set("Content-Type", "application/json")
req.Header.Set("X-API-Key", apiToken)
resp, err := client.Do(req)
if err != nil {
return err
}
defer resp.Body.Close()
if resp.StatusCode != http.StatusOK {
return fmt.Errorf("failed to lock: status %d", resp.StatusCode)
}
return nil
}
func UnlockService(serviceName, user string) error {
reqBody := models.UnlockRequest{
ServiceName: serviceName,
User: user,
}
data, _ := json.Marshal(reqBody)
req, err := http.NewRequest("POST", baseURL+"/unlock", bytes.NewBuffer(data))
if err != nil {
return err
}
req.Header.Set("Content-Type", "application/json")
req.Header.Set("X-API-Key", apiToken)
resp, err := client.Do(req)
if err != nil {
return err
}
defer resp.Body.Close()
if resp.StatusCode != http.StatusOK {
return fmt.Errorf("failed to unlock: status %d", resp.StatusCode)
}
return nil
}
func GetHistory(serviceName string) ([]models.HistoryEntry, error) {
req, err := http.NewRequest("GET", baseURL+"/history?service="+serviceName, nil)
if err != nil {
return nil, err
}
req.Header.Set("X-API-Key", apiToken)
resp, err := client.Do(req)
if err != nil {
return nil, err
}
defer resp.Body.Close()
var history []models.HistoryEntry
if err := json.NewDecoder(resp.Body).Decode(&history); err != nil {
return nil, err
}
return history, nil
}