package xrpc import ( "encoding/json" "net/http" "github.com/bluesky-social/indigo/atproto/syntax" "tangled.org/core/api/tangled" db "tangled.org/core/deliberi/db" ) func (x *Xrpc) ResolveCommitters(w http.ResponseWriter, r *http.Request) { caller, ok := actorDid(r) if !ok || x.Config == nil || len(x.Config.TrustedServiceDIDs) == 0 { http.NotFound(w, r) return } if !x.Config.TrustsService(caller) { writeError(w, xrpcErrorTag("Forbidden", "caller is not authorized"), http.StatusForbidden) return } var input tangled.IdentityResolveCommitters_Input decoder := json.NewDecoder(http.MaxBytesReader(w, r.Body, 4*1024)) if err := decoder.Decode(&input); err != nil { writeError(w, errBadRequestBody, http.StatusBadRequest) return } actor, err := syntax.ParseDID(input.Actor) if err != nil { writeError(w, badRequestError("actor must be a DID"), http.StatusBadRequest) return } addresses, err := db.GetVerifiedEmailAddresses(x.DB, actor.String()) if err != nil { x.Logger.Error("listing verified committer emails failed", "actor", actor, "err", err) writeError(w, errInternal, http.StatusInternalServerError) return } committers := make([]string, 1, len(addresses)+1) committers[0] = actor.String() committers = append(committers, addresses...) x.writeJSON(w, tangled.IdentityResolveCommitters_Output{Committers: committers}) }