Files
OpenFlare/backend/openflare/plugins/server/domain/cloudflare/routers_test.go
T

78 lines
2.6 KiB
Go

// Copyright 2026 Arctel.net
// SPDX-License-Identifier: Apache-2.0
package cloudflare
import (
"net/http"
"net/http/httptest"
"strings"
"testing"
"Wavelet/openflare/plugins/server/kernel/repository"
"Wavelet/pkg/response"
"github.com/gin-gonic/gin"
)
func TestConnectionHandlersNeverReturnAPIToken(t *testing.T) {
setupCloudflareLogicDB(t)
gin.SetMode(gin.TestMode)
router := gin.New()
router.Use(response.ErrorHandlerMiddleware())
router.PUT("/connection", SaveConnectionHandler)
router.GET("/connection", GetConnectionHandler)
save := httptest.NewRecorder()
request := httptest.NewRequest(http.MethodPut, "/connection", strings.NewReader(`{"source":"standalone","api_token":"top-secret-token"}`))
request.Header.Set("Content-Type", "application/json")
router.ServeHTTP(save, request)
if save.Code != http.StatusOK {
t.Fatalf("PUT /connection status = %d, body = %s", save.Code, save.Body.String())
}
if strings.Contains(save.Body.String(), "top-secret-token") || strings.Contains(save.Body.String(), "api_token") {
t.Fatalf("PUT /connection leaked token: %s", save.Body.String())
}
get := httptest.NewRecorder()
router.ServeHTTP(get, httptest.NewRequest(http.MethodGet, "/connection", nil))
if get.Code != http.StatusOK {
t.Fatalf("GET /connection status = %d, body = %s", get.Code, get.Body.String())
}
if strings.Contains(get.Body.String(), "top-secret-token") || strings.Contains(get.Body.String(), "api_token") {
t.Fatalf("GET /connection leaked token: %s", get.Body.String())
}
}
func TestGetGroupWithOrphanedMemberHealsAndSucceeds(t *testing.T) {
ctx, memberID := setupCloudflareLogicDB(t)
gin.SetMode(gin.TestMode)
router := gin.New()
router.Use(response.ErrorHandlerMiddleware())
router.GET("/groups/:id", GetGroupHandler)
member, err := repository.GetCFPointingMemberByID(ctx, memberID)
if err != nil {
t.Fatalf("GetCFPointingMemberByID() error = %v", err)
}
// Simulate orphaned member by deleting the ZoneDomain directly
if err := repository.DB(ctx).Exec("DELETE FROM of_zone_domains WHERE id = ?", member.ZoneDomainID).Error; err != nil {
t.Fatalf("DELETE FROM of_zone_domains error = %v", err)
}
recorder := httptest.NewRecorder()
request := httptest.NewRequest(http.MethodGet, "/groups/1", nil)
router.ServeHTTP(recorder, request)
if recorder.Code != http.StatusOK {
t.Fatalf("GET /groups/1 status = %d, body = %s", recorder.Code, recorder.Body.String())
}
// Verify the orphaned member has been removed
_, err = repository.GetCFPointingMemberByID(ctx, memberID)
if err == nil {
t.Errorf("GetCFPointingMemberByID() should return not found after healing")
}
}