func TestKVClaim(t *testing.T) { tests := []struct { k, v string ok bool want camtypes.Claim }{ { k: "claim|sha1-b380b3080f9c71faa5c1d82bbd4d583a473bc77d|2931A67C26F5ABDA|2011-11-28T01:32:37.000123456Z|sha1-b3d93daee62e40d36237ff444022f42d7d0e43f2", v: "set-attribute|tag|foo1|sha1-ad87ca5c78bd0ce1195c46f7c98e6025abbaf007", ok: true, want: camtypes.Claim{ BlobRef: blob.MustParse("sha1-b3d93daee62e40d36237ff444022f42d7d0e43f2"), Signer: blob.MustParse("sha1-ad87ca5c78bd0ce1195c46f7c98e6025abbaf007"), Permanode: blob.MustParse("sha1-b380b3080f9c71faa5c1d82bbd4d583a473bc77d"), Type: "set-attribute", Attr: "tag", Value: "foo1", Date: time.Time(types.ParseTime3339OrZero("2011-11-28T01:32:37.000123456Z")), }, }, } for _, tt := range tests { got, ok := index.ExpKvClaim(tt.k, tt.v, blob.Parse) if ok != tt.ok { t.Errorf("kvClaim(%q, %q) = ok %v; want %v", tt.k, tt.v, ok, tt.ok) continue } if got != tt.want { t.Errorf("kvClaim(%q, %q) = %+v; want %+v", tt.k, tt.v, got, tt.want) continue } } }
// fromHTTP panics with an httputil value on failure func (r *WithAttrRequest) fromHTTP(req *http.Request) { r.Signer = blob.ParseOrZero(req.FormValue("signer")) r.Value = req.FormValue("value") fuzzy := req.FormValue("fuzzy") // exact match if empty fuzzyMatch := false if fuzzy != "" { lowered := strings.ToLower(fuzzy) if lowered == "true" || lowered == "t" { fuzzyMatch = true } } r.Attr = req.FormValue("attr") // all attributes if empty if r.Attr == "" { // and force fuzzy in that case. fuzzyMatch = true } r.Fuzzy = fuzzyMatch max := req.FormValue("max") if max != "" { maxR, err := strconv.Atoi(max) if err != nil { panic(httputil.InvalidParameterError("max")) } r.N = maxR } r.N = r.n() if at := req.FormValue("at"); at != "" { r.At = time.Time(types.ParseTime3339OrZero(at)) } }
func (ui *UIHandler) serveUploadHelper(rw http.ResponseWriter, req *http.Request) { if ui.root.Storage == nil { httputil.ServeJSONError(rw, httputil.ServerError("No BlobRoot configured")) return } mr, err := req.MultipartReader() if err != nil { httputil.ServeJSONError(rw, httputil.ServerError("reading body: "+err.Error())) return } var got []*uploadHelperGotItem var modTime types.Time3339 for { part, err := mr.NextPart() if err == io.EOF { break } if err != nil { httputil.ServeJSONError(rw, httputil.ServerError("reading body: "+err.Error())) break } if part.FormName() == "modtime" { payload, err := ioutil.ReadAll(part) if err != nil { log.Printf("ui uploadhelper: unable to read part for modtime: %v", err) continue } modTime = types.ParseTime3339OrZero(string(payload)) continue } fileName := part.FileName() if fileName == "" { continue } br, err := schema.WriteFileFromReaderWithModTime(ui.root.Storage, fileName, modTime.Time(), part) if err != nil { httputil.ServeJSONError(rw, httputil.ServerError("writing to blobserver: "+err.Error())) return } got = append(got, &uploadHelperGotItem{ FileName: part.FileName(), ModTime: modTime, FormName: part.FormName(), FileRef: br, }) } httputil.ReturnJSON(rw, &uploadHelperResponse{Got: got}) }
func (r *DescribeRequest) fromHTTPGet(req *http.Request) { req.ParseForm() if vv := req.Form["blobref"]; len(vv) > 1 { for _, brs := range vv { if br, ok := blob.Parse(brs); ok { r.BlobRefs = append(r.BlobRefs, br) } else { panic(httputil.InvalidParameterError("blobref")) } } } else { r.BlobRef = httputil.MustGetBlobRef(req, "blobref") } r.Depth = httputil.OptionalInt(req, "depth") r.MaxDirChildren = httputil.OptionalInt(req, "maxdirchildren") r.At = types.ParseTime3339OrZero(req.FormValue("at")) }
// fromHTTP panics with an httputil value on failure func (r *RecentRequest) fromHTTP(req *http.Request) { r.N, _ = strconv.Atoi(req.FormValue("n")) if before := req.FormValue("before"); before != "" { r.Before = time.Time(types.ParseTime3339OrZero(before)) } }