diff --git a/appview/pages/templates/repo/fork.html b/appview/pages/templates/repo/fork.html index cb1b81b..2b1752f 100644 --- a/appview/pages/templates/repo/fork.html +++ b/appview/pages/templates/repo/fork.html @@ -6,6 +6,18 @@
+
+ Set a name for your fork + +
+
Select a knot to fork into
diff --git a/appview/state/repo.go b/appview/state/repo.go index 201f8b8..156d4fe 100644 --- a/appview/state/repo.go +++ b/appview/state/repo.go @@ -1690,17 +1690,22 @@ func (s *State) ForkRepo(w http.ResponseWriter, r *http.Request) { return } + forkName := r.FormValue("name") + if forkName == "" { + s.pages.Notice(w, "repo", "Invalid form submission—missing repository name.") + return + } + ok, err := s.enforcer.E.Enforce(user.Did, knot, knot, "repo:create") if err != nil || !ok { s.pages.Notice(w, "repo", "You do not have permission to create a repo in this knot.") return } - forkName := fmt.Sprintf("%s", f.RepoName) - - existingRepo, err := db.GetRepo(s.db, user.Did, f.RepoName) + existingRepo, err := db.GetRepo(s.db, user.Did, forkName) if err == nil && existingRepo != nil { - forkName = fmt.Sprintf("%s-%s", forkName, randomString(3)) + s.pages.Notice(w, "repo", "Invalid form submission—repository already exists.") + return } secret, err := db.GetRegistrationKey(s.db, knot) @@ -1721,7 +1726,7 @@ func (s *State) ForkRepo(w http.ResponseWriter, r *http.Request) { } else { uri = "https" } - sourceUrl := fmt.Sprintf("%s://%s/%s/%s", uri, knot, f.OwnerDid(), f.RepoName) + sourceUrl := fmt.Sprintf("%s://%s/%s/%s", uri, f.Knot, f.OwnerDid(), f.RepoName) sourceAt := f.RepoAt.String() rkey := s.TID()