// fromHTTP panics with an httputil value on failure func (r *WithAttrRequest) fromHTTP(req *http.Request) { r.Signer = httputil.MustGetBlobRef(req, "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 r.ThumbnailSize = thumbnailSize(req) 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() }
func (sh *Handler) serveSignerAttrValue(rw http.ResponseWriter, req *http.Request) { defer httputil.RecoverJSON(rw, req) signer := httputil.MustGetBlobRef(req, "signer") attr := httputil.MustGet(req, "attr") value := httputil.MustGet(req, "value") pn, err := sh.index.PermanodeOfSignerAttrValue(signer, attr, value) if err != nil { httputil.ServeJSONError(rw, err) return } dr := sh.NewDescribeRequest() dr.Describe(pn, 2) metaMap, err := dr.metaMap() if err != nil { httputil.ServeJSONError(rw, err) return } httputil.ReturnJSON(rw, &SignerAttrValueResponse{ Permanode: pn, Meta: metaMap, }) }
func (sh *Handler) serveDescribe(rw http.ResponseWriter, req *http.Request) { defer httputil.RecoverJSON(rw, req) br := httputil.MustGetBlobRef(req, "blobref") dr := sh.NewDescribeRequest() dr.Describe(br, 4) metaMap, err := dr.metaMapThumbs(thumbnailSize(req)) if err != nil { httputil.ServeJSONError(rw, err) return } httputil.ReturnJSON(rw, &DescribeResponse{metaMap}) }
// fromHTTP panics with an httputil value on failure func (r *DescribeRequest) fromHTTP(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") }
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 *EdgesRequest) fromHTTP(req *http.Request) { r.ToRef = httputil.MustGetBlobRef(req, "blobref") }
// fromHTTP panics with an httputil value on failure func (r *SignerPathsRequest) fromHTTP(req *http.Request) { r.Signer = httputil.MustGetBlobRef(req, "signer") r.Target = httputil.MustGetBlobRef(req, "target") }
// fromHTTP panics with an httputil value on failure func (r *ClaimsRequest) fromHTTP(req *http.Request) { r.Permanode = httputil.MustGetBlobRef(req, "permanode") r.AttrFilter = req.FormValue("attrFilter") }
// fromHTTP panics with an httputil value on failure func (r *ClaimsRequest) fromHTTP(req *http.Request) { r.Permanode = httputil.MustGetBlobRef(req, "permanode") }
// Unlike the index interface's EdgesTo method, the "edgesto" Handler // here additionally filters out since-deleted permanode edges. func (sh *Handler) serveEdgesTo(rw http.ResponseWriter, req *http.Request) { defer httputil.RecoverJSON(rw, req) ret := jsonMap() toRef := httputil.MustGetBlobRef(req, "blobref") toRefStr := toRef.String() blobInfo := jsonMap() ret[toRefStr] = blobInfo jsonEdges := jsonMapList() edges, err := sh.index.EdgesTo(toRef, nil) if err != nil { panic(err) } type mapOrError struct { m map[string]interface{} // nil if no map err error } resc := make(chan mapOrError) verify := func(edge *Edge) { fromStr := edge.From.String() db, err := sh.NewDescribeRequest().DescribeSync(edge.From) if err != nil { resc <- mapOrError{err: err} return } found := false if db.Permanode != nil { for attr, vv := range db.Permanode.Attr { if IsBlobReferenceAttribute(attr) { for _, v := range vv { if v == toRefStr { found = true } } } } } var em map[string]interface{} if found { em = jsonMap() em["from"] = fromStr em["fromType"] = "permanode" } resc <- mapOrError{m: em} } verifying := 0 for _, edge := range edges { if edge.FromType == "permanode" { verifying++ go verify(edge) continue } em := jsonMap() em["from"] = edge.From.String() em["fromType"] = edge.FromType jsonEdges = append(jsonEdges, em) } for i := 0; i < verifying; i++ { res := <-resc if res.err != nil { panic(res.err) // caught and put in JSON response } if res.m != nil { jsonEdges = append(jsonEdges, res.m) } } blobInfo["edgesTo"] = jsonEdges httputil.ReturnJSON(rw, ret) }