package xrpc import ( "database/sql" "errors" "net/http" "strings" "tangled.org/core/api/tangled" xrpcerr "tangled.org/core/xrpc/errors" ) func (x *Xrpc) ResolveAtUri(w http.ResponseWriter, r *http.Request) { atUri := r.URL.Query().Get("atUri") if atUri == "" || !strings.HasPrefix(atUri, "at://") { writeError(w, xrpcerr.NewXrpcError( xrpcerr.WithTag("InvalidRequest"), xrpcerr.WithMessage("missing or invalid atUri parameter"), ), http.StatusBadRequest) return } repoDid, err := x.Db.ResolveAtUri(atUri) if errors.Is(err, sql.ErrNoRows) { writeError(w, xrpcerr.NewXrpcError( xrpcerr.WithTag("NotFound"), xrpcerr.WithMessage("no repo DID found for the given at-uri"), ), http.StatusNotFound) return } if err != nil { writeError(w, xrpcerr.NewXrpcError( xrpcerr.WithTag("InternalError"), xrpcerr.WithMessage("failed to resolve at-uri"), ), http.StatusInternalServerError) return } writeJson(w, tangled.RepoResolveAtUri_Output{Did: repoDid}) }