diff --git a/socketserver/server/backend.go b/socketserver/server/backend.go index c0f9342b..9b8c5995 100644 --- a/socketserver/server/backend.go +++ b/socketserver/server/backend.go @@ -92,8 +92,9 @@ func getCacheKey(remoteCommand, data string) string { // The POST arguments are `cmd`, `args`, `channel`, and `scope`. // The `scope` argument is required because no attempt is made to infer the scope from the command, unlike /cached_pub. func HTTPBackendUncachedPublish(w http.ResponseWriter, r *http.Request) { + b := Backend r.ParseForm() - formData, err := UnsealRequest(r.Form) + formData, err := b.UnsealRequest(r.Form) if err != nil { w.WriteHeader(403) fmt.Fprintf(w, "Error: %v", err) @@ -180,7 +181,7 @@ func (backend *backendInfo) SendRemoteCommand(remoteCommand, data string, auth A formData.Set("authenticated", "0") } - sealedForm, err := SealRequest(formData) + sealedForm, err := backend.SealRequest(formData) if err != nil { return "", err } @@ -227,7 +228,12 @@ func (backend *backendInfo) SendRemoteCommand(remoteCommand, data string, auth A } // SendAggregatedData sends aggregated emote usage and following data to the backend server. -func (backend *backendInfo) SendAggregatedData(sealedForm url.Values) error { +func (backend *backendInfo) SendAggregatedData(form url.Values) error { + sealedForm, err := backend.SealRequest(form) + if err != nil { + return err + } + resp, err := backend.HTTPClient.PostForm(postStatisticsURL, sealedForm) if err != nil { return err @@ -278,7 +284,7 @@ func (backend *backendInfo) sendTopicNotice(topic string, added bool) error { formData.Set("added", "f") } - sealedForm, err := SealRequest(formData) + sealedForm, err := backend.SealRequest(formData) if err != nil { return err } diff --git a/socketserver/server/commands.go b/socketserver/server/commands.go index b780b579..3d0156a1 100644 --- a/socketserver/server/commands.go +++ b/socketserver/server/commands.go @@ -390,13 +390,7 @@ func aggregateDataSender_do() { reportForm.Set("emotes", string(emoteJSON)) } - form, err := SealRequest(reportForm) - if err != nil { - log.Println("error reporting aggregate data:", err) - return - } - - err = Backend.SendAggregatedData(form) + err = Backend.SendAggregatedData(reportForm) if err != nil { log.Println("error reporting aggregate data:", err) return diff --git a/socketserver/server/handlecore.go b/socketserver/server/handlecore.go index dd840348..da3c7a3d 100644 --- a/socketserver/server/handlecore.go +++ b/socketserver/server/handlecore.go @@ -103,7 +103,7 @@ func SetupServerAndHandle(config *ConfigFile, serveMux *http.ServeMux) { serveMux.HandleFunc("/uncached_pub", HTTPBackendUncachedPublish) serveMux.HandleFunc("/cached_pub", HTTPBackendCachedPublish) - announceForm, err := SealRequest(url.Values{ + announceForm, err := Backend.SealRequest(url.Values{ "startup": []string{"1"}, }) if err != nil { diff --git a/socketserver/server/publisher.go b/socketserver/server/publisher.go index 88463c22..7a1726f9 100644 --- a/socketserver/server/publisher.go +++ b/socketserver/server/publisher.go @@ -206,7 +206,7 @@ func GetCommandsOfType(match BacklogCacheType) []Command { func HTTPBackendDropBacklog(w http.ResponseWriter, r *http.Request) { r.ParseForm() - formData, err := UnsealRequest(r.Form) + formData, err := Backend.UnsealRequest(r.Form) if err != nil { w.WriteHeader(403) fmt.Fprintf(w, "Error: %v", err) @@ -225,7 +225,7 @@ func HTTPBackendDropBacklog(w http.ResponseWriter, r *http.Request) { // `scope` is implicit in the command func HTTPBackendCachedPublish(w http.ResponseWriter, r *http.Request) { r.ParseForm() - formData, err := UnsealRequest(r.Form) + formData, err := Backend.UnsealRequest(r.Form) if err != nil { w.WriteHeader(403) fmt.Fprintf(w, "Error: %v", err) diff --git a/socketserver/server/utils.go b/socketserver/server/utils.go index b2618cd2..9552e7bb 100644 --- a/socketserver/server/utils.go +++ b/socketserver/server/utils.go @@ -24,15 +24,11 @@ func FillCryptoRandom(buf []byte) error { return nil } -func New4KByteBuffer() interface{} { - return make([]byte, 0, 4096) -} - func copyString(s string) string { return string([]byte(s)) } -func SealRequest(form url.Values) (url.Values, error) { +func (backend *backendInfo) SealRequest(form url.Values) (url.Values, error) { var nonce [24]byte var err error @@ -41,7 +37,7 @@ func SealRequest(form url.Values) (url.Values, error) { return nil, err } - cipherMsg := box.SealAfterPrecomputation(nil, []byte(form.Encode()), &nonce, &backendSharedKey) + cipherMsg := box.SealAfterPrecomputation(nil, []byte(form.Encode()), &nonce, &backend.sharedKey) bufMessage := new(bytes.Buffer) enc := base64.NewEncoder(base64.URLEncoding, bufMessage) @@ -67,7 +63,7 @@ func SealRequest(form url.Values) (url.Values, error) { var ErrorShortNonce = errors.New("Nonce too short.") var ErrorInvalidSignature = errors.New("Invalid signature or contents") -func UnsealRequest(form url.Values) (url.Values, error) { +func (backend *backendInfo) UnsealRequest(form url.Values) (url.Values, error) { var nonce [24]byte nonceString := form.Get("nonce") @@ -87,7 +83,7 @@ func UnsealRequest(form url.Values) (url.Values, error) { cipherBuffer := new(bytes.Buffer) cipherBuffer.ReadFrom(dec) - message, ok := box.OpenAfterPrecomputation(nil, cipherBuffer.Bytes(), &nonce, &backendSharedKey) + message, ok := box.OpenAfterPrecomputation(nil, cipherBuffer.Bytes(), &nonce, &backend.sharedKey) if !ok { Statistics.BackendVerifyFails++ return nil, ErrorInvalidSignature