A vibe coded tangled fork which supports pijul.

knotserver: support legacy owner/repo paths in PostReceiveHook

Lewis: May this revision serve well! <lewis@tangled.org>

authored by

Lewis and committed by
Seongmin Lee
8345797d e796ecb6

+27 -11
+27 -11
knotserver/internal.go
··· 198 198 return 199 199 } 200 200 201 - repoDid := gitRelativeDir 202 - if !strings.HasPrefix(repoDid, "did:") { 203 - l.Error("invalid git dir, expected repo DID", "gitRelativeDir", gitRelativeDir) 204 - w.WriteHeader(http.StatusBadRequest) 205 - return 206 - } 201 + var repoDid string 202 + var ownerDid, repoName string 207 203 208 - ownerDid, repoName, err := h.db.GetRepoKeyOwner(repoDid) 209 - if err != nil { 210 - l.Error("failed to resolve repo DID from git dir", "repoDid", repoDid, "err", err) 211 - w.WriteHeader(http.StatusBadRequest) 212 - return 204 + if strings.HasPrefix(gitRelativeDir, "did:") { 205 + repoDid = gitRelativeDir 206 + var err error 207 + ownerDid, repoName, err = h.db.GetRepoKeyOwner(repoDid) 208 + if err != nil { 209 + l.Error("failed to resolve repo DID from git dir", "repoDid", repoDid, "err", err) 210 + w.WriteHeader(http.StatusBadRequest) 211 + return 212 + } 213 + } else { 214 + components := strings.SplitN(gitRelativeDir, "/", 2) 215 + if len(components) != 2 { 216 + l.Error("invalid git dir, expected repo DID or owner/repo", "gitRelativeDir", gitRelativeDir) 217 + w.WriteHeader(http.StatusBadRequest) 218 + return 219 + } 220 + ownerDid = components[0] 221 + repoName = components[1] 222 + var didErr error 223 + repoDid, didErr = h.db.GetRepoDid(ownerDid, repoName) 224 + if didErr != nil { 225 + l.Error("failed to resolve repo DID from legacy path", "gitRelativeDir", gitRelativeDir, "err", didErr) 226 + w.WriteHeader(http.StatusBadRequest) 227 + return 228 + } 213 229 } 214 230 215 231 gitUserDid := r.Header.Get("X-Git-User-Did")