mirror of
https://github.com/akyaiy/GoSally-mvp.git
synced 2026-01-03 17:52:24 +00:00
53 lines
955 B
Go
53 lines
955 B
Go
package rpc
|
|
|
|
import (
|
|
"crypto/md5"
|
|
"encoding/json"
|
|
"fmt"
|
|
"net/http"
|
|
|
|
"github.com/google/uuid"
|
|
)
|
|
|
|
func generateChecksum(result any) string {
|
|
if result == nil {
|
|
return ""
|
|
}
|
|
data, err := json.Marshal(result)
|
|
if err != nil {
|
|
return ""
|
|
}
|
|
return fmt.Sprintf("%x", md5.Sum(data))
|
|
}
|
|
|
|
func generateSalt() string {
|
|
return uuid.NewString()
|
|
}
|
|
|
|
func write(nid string, w http.ResponseWriter, msg *RPCResponse) error {
|
|
msg.Salt = generateSalt()
|
|
if msg.Result != nil {
|
|
msg.Checksum = generateChecksum(msg.Result)
|
|
} else {
|
|
msg.Checksum = generateChecksum(msg.Error)
|
|
}
|
|
|
|
if nid != "" {
|
|
msg.ResponsibleNode = nid
|
|
}
|
|
data, err := json.Marshal(msg)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
_, err = w.Write(data)
|
|
return err
|
|
}
|
|
|
|
func WriteError(nid string, w http.ResponseWriter, errm *RPCResponse) error {
|
|
return write(nid, w, errm)
|
|
}
|
|
|
|
func WriteResponse(nid string, w http.ResponseWriter, response *RPCResponse) error {
|
|
return write(nid, w, response)
|
|
}
|