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:
parent
10feaee470
commit
b94bcf743e
5 changed files with 18 additions and 22 deletions
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue