2022-11-03 21:23:20 +03:00
// Copyright 2022 The Gitea Authors. All rights reserved.
2022-11-27 21:20:29 +03:00
// SPDX-License-Identifier: MIT
2022-11-03 21:23:20 +03:00
package v1_19 //nolint
import (
"testing"
"code.gitea.io/gitea/models/migrations/base"
"code.gitea.io/gitea/modules/json"
"code.gitea.io/gitea/modules/secret"
"code.gitea.io/gitea/modules/setting"
2023-01-01 18:23:15 +03:00
webhook_module "code.gitea.io/gitea/modules/webhook"
2022-11-03 21:23:20 +03:00
"github.com/stretchr/testify/assert"
)
2022-11-08 07:07:46 +03:00
func Test_AddHeaderAuthorizationEncryptedColWebhook ( t * testing . T ) {
2022-11-03 21:23:20 +03:00
// Create Webhook table
type Webhook struct {
2023-01-01 18:23:15 +03:00
ID int64 ` xorm:"pk autoincr" `
Type webhook_module . HookType ` xorm:"VARCHAR(16) 'type'" `
Meta string ` xorm:"TEXT" ` // store hook-specific attributes
2022-11-03 21:23:20 +03:00
// HeaderAuthorizationEncrypted should be accessed using HeaderAuthorization() and SetHeaderAuthorization()
HeaderAuthorizationEncrypted string ` xorm:"TEXT" `
}
type ExpectedWebhook struct {
ID int64 ` xorm:"pk autoincr" `
Meta string
HeaderAuthorization string
}
type HookTask struct {
ID int64 ` xorm:"pk autoincr" `
HookID int64
PayloadContent string ` xorm:"LONGTEXT" `
}
// Prepare and load the testing database
x , deferable := base . PrepareTestEnv ( t , 0 , new ( Webhook ) , new ( ExpectedWebhook ) , new ( HookTask ) )
defer deferable ( )
if x == nil || t . Failed ( ) {
return
}
if err := AddHeaderAuthorizationEncryptedColWebhook ( x ) ; err != nil {
assert . NoError ( t , err )
return
}
expected := [ ] ExpectedWebhook { }
if err := x . Table ( "expected_webhook" ) . Asc ( "id" ) . Find ( & expected ) ; ! assert . NoError ( t , err ) {
return
}
got := [ ] Webhook { }
if err := x . Table ( "webhook" ) . Select ( "id, meta, header_authorization_encrypted" ) . Asc ( "id" ) . Find ( & got ) ; ! assert . NoError ( t , err ) {
return
}
for i , e := range expected {
assert . Equal ( t , e . Meta , got [ i ] . Meta )
if e . HeaderAuthorization == "" {
assert . Equal ( t , "" , got [ i ] . HeaderAuthorizationEncrypted )
} else {
cipherhex := got [ i ] . HeaderAuthorizationEncrypted
cleartext , err := secret . DecryptSecret ( setting . SecretKey , cipherhex )
assert . NoError ( t , err )
assert . Equal ( t , e . HeaderAuthorization , cleartext )
}
}
// ensure that no hook_task has some remaining "access_token"
hookTasks := [ ] HookTask { }
if err := x . Table ( "hook_task" ) . Select ( "id, payload_content" ) . Asc ( "id" ) . Find ( & hookTasks ) ; ! assert . NoError ( t , err ) {
return
}
for _ , h := range hookTasks {
var m map [ string ] interface { }
err := json . Unmarshal ( [ ] byte ( h . PayloadContent ) , & m )
assert . NoError ( t , err )
assert . Nil ( t , m [ "access_token" ] )
}
}