63 lines
1.8 KiB
Go
63 lines
1.8 KiB
Go
package management
|
|
|
|
import (
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"net/url"
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
"github.com/router-for-me/CLIProxyAPI/v6/internal/config"
|
|
)
|
|
|
|
func TestDownloadAuthFile_ReturnsFile(t *testing.T) {
|
|
t.Setenv("MANAGEMENT_PASSWORD", "")
|
|
gin.SetMode(gin.TestMode)
|
|
|
|
authDir := t.TempDir()
|
|
fileName := "download-user.json"
|
|
expected := []byte(`{"type":"codex"}`)
|
|
if err := os.WriteFile(filepath.Join(authDir, fileName), expected, 0o600); err != nil {
|
|
t.Fatalf("failed to write auth file: %v", err)
|
|
}
|
|
|
|
h := NewHandlerWithoutConfigFilePath(&config.Config{AuthDir: authDir}, nil)
|
|
|
|
rec := httptest.NewRecorder()
|
|
ctx, _ := gin.CreateTestContext(rec)
|
|
ctx.Request = httptest.NewRequest(http.MethodGet, "/v0/management/auth-files/download?name="+url.QueryEscape(fileName), nil)
|
|
h.DownloadAuthFile(ctx)
|
|
|
|
if rec.Code != http.StatusOK {
|
|
t.Fatalf("expected download status %d, got %d with body %s", http.StatusOK, rec.Code, rec.Body.String())
|
|
}
|
|
if got := rec.Body.Bytes(); string(got) != string(expected) {
|
|
t.Fatalf("unexpected download content: %q", string(got))
|
|
}
|
|
}
|
|
|
|
func TestDownloadAuthFile_RejectsPathSeparators(t *testing.T) {
|
|
t.Setenv("MANAGEMENT_PASSWORD", "")
|
|
gin.SetMode(gin.TestMode)
|
|
|
|
h := NewHandlerWithoutConfigFilePath(&config.Config{AuthDir: t.TempDir()}, nil)
|
|
|
|
for _, name := range []string{
|
|
"../external/secret.json",
|
|
`..\\external\\secret.json`,
|
|
"nested/secret.json",
|
|
`nested\\secret.json`,
|
|
} {
|
|
rec := httptest.NewRecorder()
|
|
ctx, _ := gin.CreateTestContext(rec)
|
|
ctx.Request = httptest.NewRequest(http.MethodGet, "/v0/management/auth-files/download?name="+url.QueryEscape(name), nil)
|
|
h.DownloadAuthFile(ctx)
|
|
|
|
if rec.Code != http.StatusBadRequest {
|
|
t.Fatalf("expected %d for name %q, got %d with body %s", http.StatusBadRequest, name, rec.Code, rec.Body.String())
|
|
}
|
|
}
|
|
}
|