forgepb/patchset.Send.go

84 lines
2.3 KiB
Go

package forgepb
// functions to import and export the protobuf
// data to and from config files
import (
"errors"
"strings"
"time"
"go.wit.com/log"
)
// makes a new patches protobuf. These are all the patches on your machine.
func NewPatches() *Patches {
x := new(Patches)
x.Uuid = "2679065e-c81d-4a00-aca4-03c158a834fb"
x.Version = "v2.0.0 go.wit.com/lib/protobuf/forgepb"
return x
}
func (f *Forge) SendPatchSet(pset *Patchset) error {
var err error
data, err := pset.Marshal()
if err != nil {
log.Info("proto.Marshal() pset(len) error", len(data), err)
return err
}
now := time.Now()
timestamp := now.Format("2006.01.02.150405") // bummer. other date doesn't work?
cfgfile := "patchset/patchset." + timestamp + ".pb"
log.Info("proto.Marshal() pset(len)", len(data))
configWrite(cfgfile, data)
return errors.New("don't know how to send yet")
}
func (f *Forge) SubmitDevelPatchSet(name string) (*Patchset, error) {
pset, err := f.MakeDevelPatchSet(name)
if err != nil {
return nil, err
}
if err := f.submitPatchset(pset); err != nil {
return nil, err
}
return pset, nil
}
func (f *Forge) submitPatchset(pset *Patchset) error {
var url string
url = f.forgeURL + "patchset"
msg, err := pset.Marshal()
if err != nil {
log.Info("proto.Marshal() failed:", err)
return err
}
log.Info("proto.Marshal() msg len", len(msg))
body, err := f.HttpPost(url, msg)
if err != nil {
log.Info("httpPost() failed:", err)
return err
}
newpb := NewPatches()
if err := newpb.Unmarshal(body); err != nil {
cfcheck := string(body[0:100])
if strings.Contains(cfcheck, "<title>Just a moment...</title>") {
return log.Errorf("Cloudflare throttled this attempt to submit. TODO: fix this")
} else {
log.Infof("forged DID NOT SEND BACK PROTOBUF len(body)=%d %s (TODO: look for failure on cloudflare 'is human' check here)\n", len(body), body[0:100])
// log.Infof("TODO: try to identify data here len(body)=%d body[0:40]=%s\n", len(body), body[0:40])
// log.Info("BODY START:", body[0:10], string(body[0:10]))
// log.Info(string(body))
// if err := newpb.UnmarshalTEXT(body[2:]); err == nil {
// log.Info("wow, that did work. newpb.Len() =", newpb.Len())
// }
}
return err
}
log.Info("Total patches sent ok:", newpb.Len())
return nil
}