forked from tangled.org/core
Monorepo for Tangled — https://tangled.org
at master 2.5 kB view raw
1package repo 2 3import ( 4 "encoding/json" 5 "fmt" 6 "net/http" 7 8 "tangled.org/core/api/tangled" 9 "tangled.org/core/appview/oauth" 10 "tangled.org/core/appview/pages" 11 xrpcclient "tangled.org/core/appview/xrpcclient" 12 "tangled.org/core/types" 13 14 indigoxrpc "github.com/bluesky-social/indigo/xrpc" 15) 16 17func (rp *Repo) Branches(w http.ResponseWriter, r *http.Request) { 18 l := rp.logger.With("handler", "RepoBranches") 19 f, err := rp.repoResolver.Resolve(r) 20 if err != nil { 21 l.Error("failed to get repo and knot", "err", err) 22 return 23 } 24 scheme := "http" 25 if !rp.config.Core.Dev { 26 scheme = "https" 27 } 28 host := fmt.Sprintf("%s://%s", scheme, f.Knot) 29 xrpcc := &indigoxrpc.Client{ 30 Host: host, 31 } 32 repo := fmt.Sprintf("%s/%s", f.Did, f.Name) 33 xrpcBytes, err := tangled.RepoBranches(r.Context(), xrpcc, "", 0, repo) 34 if xrpcerr := xrpcclient.HandleXrpcErr(err); xrpcerr != nil { 35 l.Error("failed to call XRPC repo.branches", "err", xrpcerr) 36 rp.pages.Error503(w) 37 return 38 } 39 var result types.RepoBranchesResponse 40 if err := json.Unmarshal(xrpcBytes, &result); err != nil { 41 l.Error("failed to decode XRPC response", "err", err) 42 rp.pages.Error503(w) 43 return 44 } 45 sortBranches(result.Branches) 46 user := rp.oauth.GetUser(r) 47 rp.pages.RepoBranches(w, pages.RepoBranchesParams{ 48 LoggedInUser: user, 49 RepoInfo: rp.repoResolver.GetRepoInfo(r, user), 50 RepoBranchesResponse: result, 51 }) 52} 53 54func (rp *Repo) DeleteBranch(w http.ResponseWriter, r *http.Request) { 55 l := rp.logger.With("handler", "DeleteBranch") 56 f, err := rp.repoResolver.Resolve(r) 57 if err != nil { 58 l.Error("failed to get repo and knot", "err", err) 59 return 60 } 61 noticeId := "delete-branch-error" 62 fail := func(msg string, err error) { 63 l.Error(msg, "err", err) 64 rp.pages.Notice(w, noticeId, msg) 65 } 66 branch := r.FormValue("branch") 67 if branch == "" { 68 fail("No branch provided.", nil) 69 return 70 } 71 client, err := rp.oauth.ServiceClient( 72 r, 73 oauth.WithService(f.Knot), 74 oauth.WithLxm(tangled.RepoDeleteBranchNSID), 75 oauth.WithDev(rp.config.Core.Dev), 76 ) 77 if err != nil { 78 fail("Failed to connect to knotserver", nil) 79 return 80 } 81 err = tangled.RepoDeleteBranch( 82 r.Context(), 83 client, 84 &tangled.RepoDeleteBranch_Input{ 85 Branch: branch, 86 Repo: f.RepoAt().String(), 87 }, 88 ) 89 if err := xrpcclient.HandleXrpcErr(err); err != nil { 90 fail(fmt.Sprintf("Failed to delete branch: %s", err), err) 91 return 92 } 93 l.Error("deleted branch from knot", "branch", branch, "repo", f.RepoAt()) 94 rp.pages.HxRefresh(w) 95}