1
0
Fork 0
mirror of https://github.com/FrankerFaceZ/FrankerFaceZ.git synced 2025-08-09 15:50:53 +00:00

convert (Un)SealRequest

This commit is contained in:
Kane York 2016-06-02 08:47:07 -07:00
parent 10feaee470
commit b94bcf743e
5 changed files with 18 additions and 22 deletions

View file

@ -92,8 +92,9 @@ func getCacheKey(remoteCommand, data string) string {
// The POST arguments are `cmd`, `args`, `channel`, and `scope`. // 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. // 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) { func HTTPBackendUncachedPublish(w http.ResponseWriter, r *http.Request) {
b := Backend
r.ParseForm() r.ParseForm()
formData, err := UnsealRequest(r.Form) formData, err := b.UnsealRequest(r.Form)
if err != nil { if err != nil {
w.WriteHeader(403) w.WriteHeader(403)
fmt.Fprintf(w, "Error: %v", err) fmt.Fprintf(w, "Error: %v", err)
@ -180,7 +181,7 @@ func (backend *backendInfo) SendRemoteCommand(remoteCommand, data string, auth A
formData.Set("authenticated", "0") formData.Set("authenticated", "0")
} }
sealedForm, err := SealRequest(formData) sealedForm, err := backend.SealRequest(formData)
if err != nil { if err != nil {
return "", err 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. // 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) resp, err := backend.HTTPClient.PostForm(postStatisticsURL, sealedForm)
if err != nil { if err != nil {
return err return err
@ -278,7 +284,7 @@ func (backend *backendInfo) sendTopicNotice(topic string, added bool) error {
formData.Set("added", "f") formData.Set("added", "f")
} }
sealedForm, err := SealRequest(formData) sealedForm, err := backend.SealRequest(formData)
if err != nil { if err != nil {
return err return err
} }

View file

@ -390,13 +390,7 @@ func aggregateDataSender_do() {
reportForm.Set("emotes", string(emoteJSON)) reportForm.Set("emotes", string(emoteJSON))
} }
form, err := SealRequest(reportForm) err = Backend.SendAggregatedData(reportForm)
if err != nil {
log.Println("error reporting aggregate data:", err)
return
}
err = Backend.SendAggregatedData(form)
if err != nil { if err != nil {
log.Println("error reporting aggregate data:", err) log.Println("error reporting aggregate data:", err)
return return

View file

@ -103,7 +103,7 @@ func SetupServerAndHandle(config *ConfigFile, serveMux *http.ServeMux) {
serveMux.HandleFunc("/uncached_pub", HTTPBackendUncachedPublish) serveMux.HandleFunc("/uncached_pub", HTTPBackendUncachedPublish)
serveMux.HandleFunc("/cached_pub", HTTPBackendCachedPublish) serveMux.HandleFunc("/cached_pub", HTTPBackendCachedPublish)
announceForm, err := SealRequest(url.Values{ announceForm, err := Backend.SealRequest(url.Values{
"startup": []string{"1"}, "startup": []string{"1"},
}) })
if err != nil { if err != nil {

View file

@ -206,7 +206,7 @@ func GetCommandsOfType(match BacklogCacheType) []Command {
func HTTPBackendDropBacklog(w http.ResponseWriter, r *http.Request) { func HTTPBackendDropBacklog(w http.ResponseWriter, r *http.Request) {
r.ParseForm() r.ParseForm()
formData, err := UnsealRequest(r.Form) formData, err := Backend.UnsealRequest(r.Form)
if err != nil { if err != nil {
w.WriteHeader(403) w.WriteHeader(403)
fmt.Fprintf(w, "Error: %v", err) fmt.Fprintf(w, "Error: %v", err)
@ -225,7 +225,7 @@ func HTTPBackendDropBacklog(w http.ResponseWriter, r *http.Request) {
// `scope` is implicit in the command // `scope` is implicit in the command
func HTTPBackendCachedPublish(w http.ResponseWriter, r *http.Request) { func HTTPBackendCachedPublish(w http.ResponseWriter, r *http.Request) {
r.ParseForm() r.ParseForm()
formData, err := UnsealRequest(r.Form) formData, err := Backend.UnsealRequest(r.Form)
if err != nil { if err != nil {
w.WriteHeader(403) w.WriteHeader(403)
fmt.Fprintf(w, "Error: %v", err) fmt.Fprintf(w, "Error: %v", err)

View file

@ -24,15 +24,11 @@ func FillCryptoRandom(buf []byte) error {
return nil return nil
} }
func New4KByteBuffer() interface{} {
return make([]byte, 0, 4096)
}
func copyString(s string) string { func copyString(s string) string {
return string([]byte(s)) 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 nonce [24]byte
var err error var err error
@ -41,7 +37,7 @@ func SealRequest(form url.Values) (url.Values, error) {
return nil, err 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) bufMessage := new(bytes.Buffer)
enc := base64.NewEncoder(base64.URLEncoding, bufMessage) 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 ErrorShortNonce = errors.New("Nonce too short.")
var ErrorInvalidSignature = errors.New("Invalid signature or contents") 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 var nonce [24]byte
nonceString := form.Get("nonce") nonceString := form.Get("nonce")
@ -87,7 +83,7 @@ func UnsealRequest(form url.Values) (url.Values, error) {
cipherBuffer := new(bytes.Buffer) cipherBuffer := new(bytes.Buffer)
cipherBuffer.ReadFrom(dec) cipherBuffer.ReadFrom(dec)
message, ok := box.OpenAfterPrecomputation(nil, cipherBuffer.Bytes(), &nonce, &backendSharedKey) message, ok := box.OpenAfterPrecomputation(nil, cipherBuffer.Bytes(), &nonce, &backend.sharedKey)
if !ok { if !ok {
Statistics.BackendVerifyFails++ Statistics.BackendVerifyFails++
return nil, ErrorInvalidSignature return nil, ErrorInvalidSignature