forked from tangled.org/core
Monorepo for Tangled — https://tangled.org
1package xrpc 2 3// import ( 4// "encoding/json" 5// "fmt" 6// "net/http" 7// "os" 8// "path/filepath" 9// 10// "github.com/bluesky-social/indigo/atproto/syntax" 11// securejoin "github.com/cyphar/filepath-securejoin" 12// "tangled.sh/tangled.sh/core/api/tangled" 13// "tangled.sh/tangled.sh/core/rbac" 14// xrpcerr "tangled.sh/tangled.sh/core/xrpc/errors" 15// ) 16 17// func (x *Xrpc) DeleteRepo(w http.ResponseWriter, r *http.Request) { 18// l := x.Logger.With("handler", "DeleteRepo") 19// fail := func(e xrpcerr.XrpcError) { 20// l.Error("failed", "kind", e.Tag, "error", e.Message) 21// writeError(w, e, http.StatusBadRequest) 22// } 23// 24// actorDid, ok := r.Context().Value(ActorDid).(syntax.DID) 25// if !ok { 26// fail(xrpcerr.MissingActorDidError) 27// return 28// } 29// 30// isMember, err := x.Enforcer.IsRepoDeleteAllowed(actorDid.String(), rbac.ThisServer) 31// if err != nil { 32// fail(xrpcerr.GenericError(err)) 33// return 34// } 35// if !isMember { 36// fail(xrpcerr.AccessControlError(actorDid.String())) 37// return 38// } 39// 40// var data tangled.RepoDelete_Input 41// if err := json.NewDecoder(r.Body).Decode(&data); err != nil { 42// fail(xrpcerr.GenericError(err)) 43// return 44// } 45// 46// did := data.Did 47// name := data.Name 48// 49// if did == "" || name == "" { 50// fail(xrpcerr.GenericError(fmt.Errorf("did and name are required"))) 51// return 52// } 53// 54// relativeRepoPath := filepath.Join(did, name) 55// if ok, err := x.Enforcer.IsSettingsAllowed(actorDid.String(), rbac.ThisServer, relativeRepoPath); !ok || err != nil { 56// l.Error("insufficient permissions", "did", actorDid.String(), "repo", relativeRepoPath) 57// writeError(w, xrpcerr.AccessControlError(actorDid.String()), http.StatusUnauthorized) 58// return 59// } 60// 61// repoPath, err := securejoin.SecureJoin(x.Config.Repo.ScanPath, relativeRepoPath) 62// if err != nil { 63// fail(xrpcerr.GenericError(err)) 64// return 65// } 66// 67// err = os.RemoveAll(repoPath) 68// if err != nil { 69// l.Error("deleting repo", "error", err.Error()) 70// writeError(w, xrpcerr.GenericError(err), http.StatusInternalServerError) 71// return 72// } 73// 74// err = x.Enforcer.RemoveRepo(did, rbac.ThisServer, relativeRepoPath) 75// if err != nil { 76// l.Error("failed to delete repo from enforcer", "error", err.Error()) 77// writeError(w, xrpcerr.GenericError(err), http.StatusInternalServerError) 78// return 79// } 80// 81// w.WriteHeader(http.StatusOK) 82// }