mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-31 21:28:11 +09:00 
			
		
		
		
	Don't use legacy method to send Matrix Webhook (#12348)
* Don't use legacy send for messages * Add migrations to ensure Matrix webhooks use PUT * Set HTTP method to PUT as default * Fix sql condition.. Signed-off-by: Till Faelligen <tfaelligen@gmail.com> * Rename getTxnID -> getMatrixTxnID * Use local variable instead of constant value Co-authored-by: techknowlogick <techknowlogick@gitea.io>
This commit is contained in:
		| @@ -5,6 +5,7 @@ | ||||
| package webhook | ||||
|  | ||||
| import ( | ||||
| 	"crypto/sha1" | ||||
| 	"encoding/json" | ||||
| 	"errors" | ||||
| 	"fmt" | ||||
| @@ -291,7 +292,14 @@ func getMatrixHookRequest(t *models.HookTask) (*http.Request, error) { | ||||
| 	} | ||||
| 	t.PayloadContent = string(payload) | ||||
|  | ||||
| 	req, err := http.NewRequest("POST", t.URL, strings.NewReader(string(payload))) | ||||
| 	txnID, err := getMatrixTxnID(payload) | ||||
| 	if err != nil { | ||||
| 		return nil, fmt.Errorf("getMatrixHookRequest: unable to hash payload: %+v", err) | ||||
| 	} | ||||
|  | ||||
| 	t.URL = fmt.Sprintf("%s/%s", t.URL, txnID) | ||||
|  | ||||
| 	req, err := http.NewRequest(t.HTTPMethod, t.URL, strings.NewReader(string(payload))) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| @@ -301,3 +309,14 @@ func getMatrixHookRequest(t *models.HookTask) (*http.Request, error) { | ||||
|  | ||||
| 	return req, nil | ||||
| } | ||||
|  | ||||
| // getMatrixTxnID creates a txnID based on the payload to ensure idempotency | ||||
| func getMatrixTxnID(payload []byte) (string, error) { | ||||
| 	h := sha1.New() | ||||
| 	_, err := h.Write(payload) | ||||
| 	if err != nil { | ||||
| 		return "", err | ||||
| 	} | ||||
|  | ||||
| 	return fmt.Sprintf("%x", h.Sum(nil)), nil | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user