Update middlewares.

This commit is contained in:
Naoki Kosaka
2021-09-16 23:30:56 +09:00
parent 7c33331c40
commit f95d9e1340
4 changed files with 140 additions and 136 deletions

View File

@ -3,42 +3,36 @@ package deliver
import (
"bytes"
"crypto/rsa"
"crypto/sha256"
"encoding/base64"
"errors"
"fmt"
"net/http"
"time"
httpdate "github.com/Songmu/go-httpdate"
"github.com/go-fed/httpsig"
"github.com/sirupsen/logrus"
"github.com/yukimochi/httpsig"
)
func appendSignature(request *http.Request, body *[]byte, KeyID string, publicKey *rsa.PrivateKey) error {
hash := sha256.New()
hash.Write(*body)
b := hash.Sum(nil)
request.Header.Set("Digest", "SHA-256="+base64.StdEncoding.EncodeToString(b))
func appendSignature(request *http.Request, body *[]byte, KeyID string, privateKey *rsa.PrivateKey) error {
request.Header.Set("Host", request.Host)
signer, _, err := httpsig.NewSigner([]httpsig.Algorithm{httpsig.RSA_SHA256}, []string{httpsig.RequestTarget, "Host", "Date", "Digest", "Content-Type"}, httpsig.Signature)
signer, _, err := httpsig.NewSigner([]httpsig.Algorithm{httpsig.RSA_SHA256}, httpsig.DigestSha256, []string{httpsig.RequestTarget, "Host", "Date", "Digest", "Content-Type"}, httpsig.Signature)
if err != nil {
return err
}
err = signer.SignRequest(publicKey, KeyID, request)
err = signer.SignRequest(privateKey, KeyID, request, *body)
if err != nil {
return err
}
return nil
}
func sendActivity(inboxURL string, KeyID string, body []byte, publicKey *rsa.PrivateKey) error {
func sendActivity(inboxURL string, KeyID string, body []byte, privateKey *rsa.PrivateKey) error {
req, _ := http.NewRequest("POST", inboxURL, bytes.NewBuffer(body))
req.Header.Set("Content-Type", "application/activity+json")
req.Header.Set("User-Agent", fmt.Sprintf("%s (golang net/http; Activity-Relay %s; %s)", globalConfig.ServerServiceName(), version, globalConfig.ServerHostname().Host))
req.Header.Set("Date", httpdate.Time2Str(time.Now()))
appendSignature(req, &body, KeyID, publicKey)
appendSignature(req, &body, KeyID, privateKey)
resp, err := httpClient.Do(req)
if err != nil {
return err