Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.
 
 
 

49 rader
1.7 KiB

  1. package service
  2. import (
  3. "io"
  4. "net/http"
  5. "net/http/httptest"
  6. "testing"
  7. "github.com/QuantumNous/new-api/common"
  8. "github.com/QuantumNous/new-api/dto"
  9. "github.com/QuantumNous/new-api/setting/system_setting"
  10. "github.com/stretchr/testify/require"
  11. )
  12. func TestGenerateSignatureIsStableAndSecretBound(t *testing.T) {
  13. payload := []byte(`{"event":"quota_exceed"}`)
  14. require.Equal(t, "e8c1ac446d1fab782a3587e16b8dae9b42afd915f6c56a25702806f35db4ecaf", generateSignature("webhook-secret", payload))
  15. require.NotEqual(t, generateSignature("other-secret", payload), generateSignature("webhook-secret", payload))
  16. require.NotEqual(t, generateSignature("webhook-secret", []byte(`{"event":"other"}`)), generateSignature("webhook-secret", payload))
  17. }
  18. func TestSendWebhookNotifyReplacesValuePlaceholdersBeforeSigningAndSending(t *testing.T) {
  19. var received WebhookPayload
  20. var signature string
  21. server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
  22. body, err := io.ReadAll(r.Body)
  23. require.NoError(t, err)
  24. require.NoError(t, common.Unmarshal(body, &received))
  25. signature = r.Header.Get("X-Webhook-Signature")
  26. w.WriteHeader(http.StatusNoContent)
  27. }))
  28. defer server.Close()
  29. oldClient := httpClient
  30. httpClient = server.Client()
  31. t.Cleanup(func() { httpClient = oldClient })
  32. setting := system_setting.GetFetchSetting()
  33. oldSetting := *setting
  34. *setting = system_setting.FetchSetting{EnableSSRFProtection: false}
  35. t.Cleanup(func() { *setting = oldSetting })
  36. err := SendWebhookNotify(server.URL, "secret", dto.NewNotify("quota", "Quota", "remaining: {{value}}, used: {{value}}", []interface{}{12, 3}))
  37. require.NoError(t, err)
  38. require.Equal(t, "remaining: 12, used: 3", received.Content)
  39. require.NotEmpty(t, signature)
  40. }