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, "Just a moment...") { 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 }