gitea源码

v233_test.go 2.5KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. // Copyright 2022 The Gitea Authors. All rights reserved.
  2. // SPDX-License-Identifier: MIT
  3. package v1_19
  4. import (
  5. "testing"
  6. "code.gitea.io/gitea/models/migrations/base"
  7. "code.gitea.io/gitea/modules/json"
  8. "code.gitea.io/gitea/modules/secret"
  9. "code.gitea.io/gitea/modules/setting"
  10. webhook_module "code.gitea.io/gitea/modules/webhook"
  11. "github.com/stretchr/testify/assert"
  12. )
  13. func Test_AddHeaderAuthorizationEncryptedColWebhook(t *testing.T) {
  14. // Create Webhook table
  15. type Webhook struct {
  16. ID int64 `xorm:"pk autoincr"`
  17. Type webhook_module.HookType `xorm:"VARCHAR(16) 'type'"`
  18. Meta string `xorm:"TEXT"` // store hook-specific attributes
  19. // HeaderAuthorizationEncrypted should be accessed using HeaderAuthorization() and SetHeaderAuthorization()
  20. HeaderAuthorizationEncrypted string `xorm:"TEXT"`
  21. }
  22. type ExpectedWebhook struct {
  23. ID int64 `xorm:"pk autoincr"`
  24. Meta string
  25. HeaderAuthorization string
  26. }
  27. type HookTask struct {
  28. ID int64 `xorm:"pk autoincr"`
  29. HookID int64
  30. PayloadContent string `xorm:"LONGTEXT"`
  31. }
  32. // Prepare and load the testing database
  33. x, deferable := base.PrepareTestEnv(t, 0, new(Webhook), new(ExpectedWebhook), new(HookTask))
  34. defer deferable()
  35. if x == nil || t.Failed() {
  36. return
  37. }
  38. if err := AddHeaderAuthorizationEncryptedColWebhook(x); err != nil {
  39. assert.NoError(t, err)
  40. return
  41. }
  42. expected := []ExpectedWebhook{}
  43. if err := x.Table("expected_webhook").Asc("id").Find(&expected); !assert.NoError(t, err) {
  44. return
  45. }
  46. got := []Webhook{}
  47. if err := x.Table("webhook").Select("id, meta, header_authorization_encrypted").Asc("id").Find(&got); !assert.NoError(t, err) {
  48. return
  49. }
  50. for i, e := range expected {
  51. assert.Equal(t, e.Meta, got[i].Meta)
  52. if e.HeaderAuthorization == "" {
  53. assert.Empty(t, got[i].HeaderAuthorizationEncrypted)
  54. } else {
  55. cipherhex := got[i].HeaderAuthorizationEncrypted
  56. cleartext, err := secret.DecryptSecret(setting.SecretKey, cipherhex)
  57. assert.NoError(t, err)
  58. assert.Equal(t, e.HeaderAuthorization, cleartext)
  59. }
  60. }
  61. // ensure that no hook_task has some remaining "access_token"
  62. hookTasks := []HookTask{}
  63. if err := x.Table("hook_task").Select("id, payload_content").Asc("id").Find(&hookTasks); !assert.NoError(t, err) {
  64. return
  65. }
  66. for _, h := range hookTasks {
  67. var m map[string]any
  68. err := json.Unmarshal([]byte(h.PayloadContent), &m)
  69. assert.NoError(t, err)
  70. assert.Nil(t, m["access_token"])
  71. }
  72. }