···
···
"tangled.sh/tangled.sh/core/api/tangled"
"tangled.sh/tangled.sh/core/appview"
"tangled.sh/tangled.sh/core/appview/db"
22
+
"tangled.sh/tangled.sh/core/appview/idresolver"
"tangled.sh/tangled.sh/core/appview/oauth"
"tangled.sh/tangled.sh/core/appview/pages"
"tangled.sh/tangled.sh/core/appview/pages/markup"
···
"tangled.sh/tangled.sh/core/appview/reporesolver"
"tangled.sh/tangled.sh/core/knotclient"
"tangled.sh/tangled.sh/core/patchutil"
31
+
"tangled.sh/tangled.sh/core/rbac"
"tangled.sh/tangled.sh/core/types"
"github.com/bluesky-social/indigo/atproto/data"
···
lexutil "github.com/bluesky-social/indigo/lex/util"
42
-
func (s *State) RepoIndex(w http.ResponseWriter, r *http.Request) {
45
+
repoResolver *reporesolver.RepoResolver
46
+
idResolver *idresolver.Resolver
47
+
config *appview.Config
51
+
enforcer *rbac.Enforcer
52
+
posthog posthog.Client
57
+
repoResolver *reporesolver.RepoResolver,
59
+
idResolver *idresolver.Resolver,
61
+
config *appview.Config,
62
+
posthog posthog.Client,
63
+
enforcer *rbac.Enforcer,
65
+
return &Repo{oauth: oauth,
66
+
repoResolver: repoResolver,
68
+
idResolver: idResolver,
76
+
func (rp *Repo) RepoIndex(w http.ResponseWriter, r *http.Request) {
ref := chi.URLParam(r, "ref")
44
-
f, err := s.repoResolver.Resolve(r)
78
+
f, err := rp.repoResolver.Resolve(r)
log.Println("failed to fully resolve repo", err)
50
-
us, err := knotclient.NewUnsignedClient(f.Knot, s.config.Core.Dev)
84
+
us, err := knotclient.NewUnsignedClient(f.Knot, rp.config.Core.Dev)
log.Printf("failed to create unsigned client for %s", f.Knot)
87
+
rp.pages.Error503(w)
result, err := us.Index(f.OwnerDid(), f.RepoName, ref)
93
+
rp.pages.Error503(w)
log.Println("failed to reach knotserver", err)
···
emails := uniqueEmails(commitsTrunc)
110
-
user := s.oauth.GetUser(r)
144
+
user := rp.oauth.GetUser(r)
repoInfo := f.RepoInfo(user)
113
-
secret, err := db.GetRegistrationKey(s.db, f.Knot)
147
+
secret, err := db.GetRegistrationKey(rp.db, f.Knot)
log.Printf("failed to get registration key for %s: %s", f.Knot, err)
116
-
s.pages.Notice(w, "resubmit-error", "Failed to create pull request. Try again later.")
150
+
rp.pages.Notice(w, "resubmit-error", "Failed to create pull request. Try again later.")
119
-
signedClient, err := knotclient.NewSignedClient(f.Knot, secret, s.config.Core.Dev)
153
+
signedClient, err := knotclient.NewSignedClient(f.Knot, secret, rp.config.Core.Dev)
log.Printf("failed to create signed client for %s: %s", f.Knot, err)
···
var forkInfo *types.ForkInfo
if user != nil && (repoInfo.Roles.IsOwner() || repoInfo.Roles.IsCollaborator()) {
127
-
forkInfo, err = getForkInfo(repoInfo, s, f, user, signedClient)
161
+
forkInfo, err = getForkInfo(repoInfo, rp, f, user, signedClient)
log.Printf("Failed to fetch fork information: %v", err)
···
140
-
s.pages.RepoIndexPage(w, pages.RepoIndexParams{
174
+
rp.pages.RepoIndexPage(w, pages.RepoIndexParams{
···
BranchesTrunc: branchesTrunc,
149
-
EmailToDidOrHandle: EmailToDidOrHandle(s, emails),
183
+
EmailToDidOrHandle: EmailToDidOrHandle(rp, emails),
Languages: repoLanguages,
···
repoInfo repoinfo.RepoInfo,
f *reporesolver.ResolvedRepo,
signedClient *knotclient.SignedClient,
···
176
-
us, err := knotclient.NewUnsignedClient(repoInfo.Source.Knot, s.config.Core.Dev)
210
+
us, err := knotclient.NewUnsignedClient(repoInfo.Source.Knot, rp.config.Core.Dev)
log.Printf("failed to create unsigned client for %s", repoInfo.Source.Knot)
···
219
-
func (s *State) RepoLog(w http.ResponseWriter, r *http.Request) {
220
-
f, err := s.repoResolver.Resolve(r)
253
+
func (rp *Repo) RepoLog(w http.ResponseWriter, r *http.Request) {
254
+
f, err := rp.repoResolver.Resolve(r)
log.Println("failed to fully resolve repo", err)
···
ref := chi.URLParam(r, "ref")
236
-
us, err := knotclient.NewUnsignedClient(f.Knot, s.config.Core.Dev)
270
+
us, err := knotclient.NewUnsignedClient(f.Knot, rp.config.Core.Dev)
log.Println("failed to create unsigned client", err)
···
tagMap[hash] = append(tagMap[hash], tag.Name)
263
-
user := s.oauth.GetUser(r)
264
-
s.pages.RepoLog(w, pages.RepoLogParams{
297
+
user := rp.oauth.GetUser(r)
298
+
rp.pages.RepoLog(w, pages.RepoLogParams{
RepoInfo: f.RepoInfo(user),
RepoLogResponse: *repolog,
269
-
EmailToDidOrHandle: EmailToDidOrHandle(s, uniqueEmails(repolog.Commits)),
303
+
EmailToDidOrHandle: EmailToDidOrHandle(rp, uniqueEmails(repolog.Commits)),
274
-
func (s *State) RepoDescriptionEdit(w http.ResponseWriter, r *http.Request) {
275
-
f, err := s.repoResolver.Resolve(r)
308
+
func (rp *Repo) RepoDescriptionEdit(w http.ResponseWriter, r *http.Request) {
309
+
f, err := rp.repoResolver.Resolve(r)
log.Println("failed to get repo and knot", err)
w.WriteHeader(http.StatusBadRequest)
282
-
user := s.oauth.GetUser(r)
283
-
s.pages.EditRepoDescriptionFragment(w, pages.RepoDescriptionParams{
316
+
user := rp.oauth.GetUser(r)
317
+
rp.pages.EditRepoDescriptionFragment(w, pages.RepoDescriptionParams{
RepoInfo: f.RepoInfo(user),
289
-
func (s *State) RepoDescription(w http.ResponseWriter, r *http.Request) {
290
-
f, err := s.repoResolver.Resolve(r)
323
+
func (rp *Repo) RepoDescription(w http.ResponseWriter, r *http.Request) {
324
+
f, err := rp.repoResolver.Resolve(r)
log.Println("failed to get repo and knot", err)
w.WriteHeader(http.StatusBadRequest)
···
305
-
user := s.oauth.GetUser(r)
339
+
user := rp.oauth.GetUser(r)
309
-
s.pages.RepoDescriptionFragment(w, pages.RepoDescriptionParams{
343
+
rp.pages.RepoDescriptionFragment(w, pages.RepoDescriptionParams{
RepoInfo: f.RepoInfo(user),
314
-
user := s.oauth.GetUser(r)
348
+
user := rp.oauth.GetUser(r)
newDescription := r.FormValue("description")
316
-
client, err := s.oauth.AuthorizedClient(r)
350
+
client, err := rp.oauth.AuthorizedClient(r)
log.Println("failed to get client")
319
-
s.pages.Notice(w, "repo-notice", "Failed to update description, try again later.")
353
+
rp.pages.Notice(w, "repo-notice", "Failed to update description, try again later.")
324
-
err = db.UpdateDescription(s.db, string(repoAt), newDescription)
358
+
err = db.UpdateDescription(rp.db, string(repoAt), newDescription)
log.Println("failed to perferom update-description query", err)
327
-
s.pages.Notice(w, "repo-notice", "Failed to update description, try again later.")
361
+
rp.pages.Notice(w, "repo-notice", "Failed to update description, try again later.")
···
ex, err := client.RepoGetRecord(r.Context(), "", tangled.RepoNSID, user.Did, rkey)
337
-
s.pages.Notice(w, "repo-notice", "Failed to update description, no record found on PDS.")
371
+
rp.pages.Notice(w, "repo-notice", "Failed to update description, no record found on PDS.")
_, err = client.RepoPutRecord(r.Context(), &comatproto.RepoPutRecord_Input{
···
log.Println("failed to perferom update-description query", err)
359
-
s.pages.Notice(w, "repo-notice", "Failed to update description, unable to save to PDS.")
393
+
rp.pages.Notice(w, "repo-notice", "Failed to update description, unable to save to PDS.")
newRepoInfo := f.RepoInfo(user)
newRepoInfo.Description = newDescription
366
-
s.pages.RepoDescriptionFragment(w, pages.RepoDescriptionParams{
400
+
rp.pages.RepoDescriptionFragment(w, pages.RepoDescriptionParams{
373
-
func (s *State) RepoCommit(w http.ResponseWriter, r *http.Request) {
374
-
f, err := s.repoResolver.Resolve(r)
407
+
func (rp *Repo) RepoCommit(w http.ResponseWriter, r *http.Request) {
408
+
f, err := rp.repoResolver.Resolve(r)
log.Println("failed to fully resolve repo", err)
ref := chi.URLParam(r, "ref")
381
-
if !s.config.Core.Dev {
415
+
if !rp.config.Core.Dev {
if !plumbing.IsHash(ref) {
386
-
s.pages.Error404(w)
420
+
rp.pages.Error404(w)
···
409
-
user := s.oauth.GetUser(r)
410
-
s.pages.RepoCommit(w, pages.RepoCommitParams{
443
+
user := rp.oauth.GetUser(r)
444
+
rp.pages.RepoCommit(w, pages.RepoCommitParams{
RepoInfo: f.RepoInfo(user),
RepoCommitResponse: result,
414
-
EmailToDidOrHandle: EmailToDidOrHandle(s, []string{result.Diff.Commit.Author.Email}),
448
+
EmailToDidOrHandle: EmailToDidOrHandle(rp, []string{result.Diff.Commit.Author.Email}),
419
-
func (s *State) RepoTree(w http.ResponseWriter, r *http.Request) {
420
-
f, err := s.repoResolver.Resolve(r)
453
+
func (rp *Repo) RepoTree(w http.ResponseWriter, r *http.Request) {
454
+
f, err := rp.repoResolver.Resolve(r)
log.Println("failed to fully resolve repo", err)
···
ref := chi.URLParam(r, "ref")
treePath := chi.URLParam(r, "*")
429
-
if !s.config.Core.Dev {
463
+
if !rp.config.Core.Dev {
resp, err := http.Get(fmt.Sprintf("%s://%s/%s/%s/tree/%s/%s", protocol, f.Knot, f.OwnerDid(), f.RepoName, ref, treePath))
···
458
-
user := s.oauth.GetUser(r)
492
+
user := rp.oauth.GetUser(r)
var breadcrumbs [][]string
breadcrumbs = append(breadcrumbs, []string{f.RepoName, fmt.Sprintf("/%s/tree/%s", f.OwnerSlashRepo(), ref)})
···
baseTreeLink := path.Join(f.OwnerSlashRepo(), "tree", ref, treePath)
baseBlobLink := path.Join(f.OwnerSlashRepo(), "blob", ref, treePath)
471
-
s.pages.RepoTree(w, pages.RepoTreeParams{
505
+
rp.pages.RepoTree(w, pages.RepoTreeParams{
BreadCrumbs: breadcrumbs,
BaseTreeLink: baseTreeLink,
···
482
-
func (s *State) RepoTags(w http.ResponseWriter, r *http.Request) {
483
-
f, err := s.repoResolver.Resolve(r)
516
+
func (rp *Repo) RepoTags(w http.ResponseWriter, r *http.Request) {
517
+
f, err := rp.repoResolver.Resolve(r)
log.Println("failed to get repo and knot", err)
489
-
us, err := knotclient.NewUnsignedClient(f.Knot, s.config.Core.Dev)
523
+
us, err := knotclient.NewUnsignedClient(f.Knot, rp.config.Core.Dev)
log.Println("failed to create unsigned client", err)
···
501
-
artifacts, err := db.GetArtifact(s.db, db.FilterEq("repo_at", f.RepoAt))
535
+
artifacts, err := db.GetArtifact(rp.db, db.FilterEq("repo_at", f.RepoAt))
log.Println("failed grab artifacts", err)
···
529
-
user := s.oauth.GetUser(r)
530
-
s.pages.RepoTags(w, pages.RepoTagsParams{
563
+
user := rp.oauth.GetUser(r)
564
+
rp.pages.RepoTags(w, pages.RepoTagsParams{
RepoInfo: f.RepoInfo(user),
RepoTagsResponse: *result,
···
540
-
func (s *State) RepoBranches(w http.ResponseWriter, r *http.Request) {
541
-
f, err := s.repoResolver.Resolve(r)
574
+
func (rp *Repo) RepoBranches(w http.ResponseWriter, r *http.Request) {
575
+
f, err := rp.repoResolver.Resolve(r)
log.Println("failed to get repo and knot", err)
547
-
us, err := knotclient.NewUnsignedClient(f.Knot, s.config.Core.Dev)
581
+
us, err := knotclient.NewUnsignedClient(f.Knot, rp.config.Core.Dev)
log.Println("failed to create unsigned client", err)
···
return strings.Compare(a.Name, b.Name) * -1
576
-
user := s.oauth.GetUser(r)
577
-
s.pages.RepoBranches(w, pages.RepoBranchesParams{
610
+
user := rp.oauth.GetUser(r)
611
+
rp.pages.RepoBranches(w, pages.RepoBranchesParams{
RepoInfo: f.RepoInfo(user),
RepoBranchesResponse: *result,
···
585
-
func (s *State) RepoBlob(w http.ResponseWriter, r *http.Request) {
586
-
f, err := s.repoResolver.Resolve(r)
619
+
func (rp *Repo) RepoBlob(w http.ResponseWriter, r *http.Request) {
620
+
f, err := rp.repoResolver.Resolve(r)
log.Println("failed to get repo and knot", err)
···
ref := chi.URLParam(r, "ref")
filePath := chi.URLParam(r, "*")
595
-
if !s.config.Core.Dev {
629
+
if !rp.config.Core.Dev {
resp, err := http.Get(fmt.Sprintf("%s://%s/%s/%s/blob/%s/%s", protocol, f.Knot, f.OwnerDid(), f.RepoName, ref, filePath))
···
showRendered = r.URL.Query().Get("code") != "true"
633
-
user := s.oauth.GetUser(r)
634
-
s.pages.RepoBlob(w, pages.RepoBlobParams{
667
+
user := rp.oauth.GetUser(r)
668
+
rp.pages.RepoBlob(w, pages.RepoBlobParams{
RepoInfo: f.RepoInfo(user),
RepoBlobResponse: result,
···
645
-
func (s *State) RepoBlobRaw(w http.ResponseWriter, r *http.Request) {
646
-
f, err := s.repoResolver.Resolve(r)
679
+
func (rp *Repo) RepoBlobRaw(w http.ResponseWriter, r *http.Request) {
680
+
f, err := rp.repoResolver.Resolve(r)
log.Println("failed to get repo and knot", err)
···
filePath := chi.URLParam(r, "*")
656
-
if !s.config.Core.Dev {
690
+
if !rp.config.Core.Dev {
resp, err := http.Get(fmt.Sprintf("%s://%s/%s/%s/blob/%s/%s", protocol, f.Knot, f.OwnerDid(), f.RepoName, ref, filePath))
···
689
-
func (s *State) AddCollaborator(w http.ResponseWriter, r *http.Request) {
690
-
f, err := s.repoResolver.Resolve(r)
723
+
func (rp *Repo) AddCollaborator(w http.ResponseWriter, r *http.Request) {
724
+
f, err := rp.repoResolver.Resolve(r)
log.Println("failed to get repo and knot", err)
···
702
-
collaboratorIdent, err := s.idResolver.ResolveIdent(r.Context(), collaborator)
736
+
collaboratorIdent, err := rp.idResolver.ResolveIdent(r.Context(), collaborator)
w.Write([]byte("failed to resolve collaborator did to a handle"))
···
// TODO: create an atproto record for this
711
-
secret, err := db.GetRegistrationKey(s.db, f.Knot)
745
+
secret, err := db.GetRegistrationKey(rp.db, f.Knot)
log.Printf("no key found for domain %s: %s\n", f.Knot, err)
717
-
ksClient, err := knotclient.NewSignedClient(f.Knot, secret, s.config.Core.Dev)
751
+
ksClient, err := knotclient.NewSignedClient(f.Knot, secret, rp.config.Core.Dev)
log.Println("failed to create client to ", f.Knot)
···
734
-
tx, err := s.db.BeginTx(r.Context(), nil)
768
+
tx, err := rp.db.BeginTx(r.Context(), nil)
log.Println("failed to start tx")
w.Write([]byte(fmt.Sprint("failed to add collaborator: ", err)))
···
742
-
err = s.enforcer.E.LoadPolicy()
776
+
err = rp.enforcer.E.LoadPolicy()
log.Println("failed to rollback policies")
748
-
err = s.enforcer.AddCollaborator(collaboratorIdent.DID.String(), f.Knot, f.DidSlashRepo())
782
+
err = rp.enforcer.AddCollaborator(collaboratorIdent.DID.String(), f.Knot, f.DidSlashRepo())
w.Write([]byte(fmt.Sprint("failed to add collaborator: ", err)))
754
-
err = db.AddCollaborator(s.db, collaboratorIdent.DID.String(), f.OwnerDid(), f.RepoName, f.Knot)
788
+
err = db.AddCollaborator(rp.db, collaboratorIdent.DID.String(), f.OwnerDid(), f.RepoName, f.Knot)
w.Write([]byte(fmt.Sprint("failed to add collaborator: ", err)))
···
767
-
err = s.enforcer.E.SavePolicy()
801
+
err = rp.enforcer.E.SavePolicy()
log.Println("failed to update ACLs", err)
http.Error(w, err.Error(), http.StatusInternalServerError)
···
778
-
func (s *State) DeleteRepo(w http.ResponseWriter, r *http.Request) {
779
-
user := s.oauth.GetUser(r)
812
+
func (rp *Repo) DeleteRepo(w http.ResponseWriter, r *http.Request) {
813
+
user := rp.oauth.GetUser(r)
781
-
f, err := s.repoResolver.Resolve(r)
815
+
f, err := rp.repoResolver.Resolve(r)
log.Println("failed to get repo and knot", err)
// remove record from pds
788
-
xrpcClient, err := s.oauth.AuthorizedClient(r)
822
+
xrpcClient, err := rp.oauth.AuthorizedClient(r)
log.Println("failed to get authorized client", err)
···
log.Printf("failed to delete record: %s", err)
801
-
s.pages.Notice(w, "settings-delete", "Failed to delete repository from PDS.")
835
+
rp.pages.Notice(w, "settings-delete", "Failed to delete repository from PDS.")
log.Println("removed repo record ", f.RepoAt.String())
806
-
secret, err := db.GetRegistrationKey(s.db, f.Knot)
840
+
secret, err := db.GetRegistrationKey(rp.db, f.Knot)
log.Printf("no key found for domain %s: %s\n", f.Knot, err)
812
-
ksClient, err := knotclient.NewSignedClient(f.Knot, secret, s.config.Core.Dev)
846
+
ksClient, err := knotclient.NewSignedClient(f.Knot, secret, rp.config.Core.Dev)
log.Println("failed to create client to ", f.Knot)
···
log.Println("removed repo from knot ", f.Knot)
830
-
tx, err := s.db.BeginTx(r.Context(), nil)
864
+
tx, err := rp.db.BeginTx(r.Context(), nil)
log.Println("failed to start tx")
w.Write([]byte(fmt.Sprint("failed to add collaborator: ", err)))
···
838
-
err = s.enforcer.E.LoadPolicy()
872
+
err = rp.enforcer.E.LoadPolicy()
log.Println("failed to rollback policies")
// remove collaborator RBAC
845
-
repoCollaborators, err := s.enforcer.E.GetImplicitUsersForResourceByDomain(f.DidSlashRepo(), f.Knot)
879
+
repoCollaborators, err := rp.enforcer.E.GetImplicitUsersForResourceByDomain(f.DidSlashRepo(), f.Knot)
847
-
s.pages.Notice(w, "settings-delete", "Failed to remove collaborators")
881
+
rp.pages.Notice(w, "settings-delete", "Failed to remove collaborators")
for _, c := range repoCollaborators {
852
-
s.enforcer.RemoveCollaborator(did, f.Knot, f.DidSlashRepo())
886
+
rp.enforcer.RemoveCollaborator(did, f.Knot, f.DidSlashRepo())
log.Println("removed collaborators")
857
-
err = s.enforcer.RemoveRepo(f.OwnerDid(), f.Knot, f.DidSlashRepo())
891
+
err = rp.enforcer.RemoveRepo(f.OwnerDid(), f.Knot, f.DidSlashRepo())
859
-
s.pages.Notice(w, "settings-delete", "Failed to update RBAC rules")
893
+
rp.pages.Notice(w, "settings-delete", "Failed to update RBAC rules")
err = db.RemoveRepo(tx, f.OwnerDid(), f.RepoName)
866
-
s.pages.Notice(w, "settings-delete", "Failed to update appview")
900
+
rp.pages.Notice(w, "settings-delete", "Failed to update appview")
log.Println("removed repo from db")
···
878
-
err = s.enforcer.E.SavePolicy()
912
+
err = rp.enforcer.E.SavePolicy()
log.Println("failed to update ACLs", err)
http.Error(w, err.Error(), http.StatusInternalServerError)
885
-
s.pages.HxRedirect(w, fmt.Sprintf("/%s", f.OwnerDid()))
919
+
rp.pages.HxRedirect(w, fmt.Sprintf("/%s", f.OwnerDid()))
888
-
func (s *State) SetDefaultBranch(w http.ResponseWriter, r *http.Request) {
889
-
f, err := s.repoResolver.Resolve(r)
922
+
func (rp *Repo) SetDefaultBranch(w http.ResponseWriter, r *http.Request) {
923
+
f, err := rp.repoResolver.Resolve(r)
log.Println("failed to get repo and knot", err)
···
901
-
secret, err := db.GetRegistrationKey(s.db, f.Knot)
935
+
secret, err := db.GetRegistrationKey(rp.db, f.Knot)
log.Printf("no key found for domain %s: %s\n", f.Knot, err)
907
-
ksClient, err := knotclient.NewSignedClient(f.Knot, secret, s.config.Core.Dev)
941
+
ksClient, err := knotclient.NewSignedClient(f.Knot, secret, rp.config.Core.Dev)
log.Println("failed to create client to ", f.Knot)
···
if ksResp.StatusCode != http.StatusNoContent {
920
-
s.pages.Notice(w, "repo-settings", "Failed to set default branch. Try again later.")
954
+
rp.pages.Notice(w, "repo-settings", "Failed to set default branch. Try again later.")
w.Write([]byte(fmt.Sprint("default branch set to: ", branch)))
927
-
func (s *State) RepoSettings(w http.ResponseWriter, r *http.Request) {
928
-
f, err := s.repoResolver.Resolve(r)
961
+
func (rp *Repo) RepoSettings(w http.ResponseWriter, r *http.Request) {
962
+
f, err := rp.repoResolver.Resolve(r)
log.Println("failed to get repo and knot", err)
···
// for now, this is just pubkeys
937
-
user := s.oauth.GetUser(r)
971
+
user := rp.oauth.GetUser(r)
repoCollaborators, err := f.Collaborators(r.Context())
log.Println("failed to get collaborators", err)
···
isCollaboratorInviteAllowed := false
945
-
ok, err := s.enforcer.IsCollaboratorInviteAllowed(user.Did, f.Knot, f.DidSlashRepo())
979
+
ok, err := rp.enforcer.IsCollaboratorInviteAllowed(user.Did, f.Knot, f.DidSlashRepo())
isCollaboratorInviteAllowed = true
951
-
us, err := knotclient.NewUnsignedClient(f.Knot, s.config.Core.Dev)
985
+
us, err := knotclient.NewUnsignedClient(f.Knot, rp.config.Core.Dev)
log.Println("failed to create unsigned client", err)
···
963
-
s.pages.RepoSettings(w, pages.RepoSettingsParams{
997
+
rp.pages.RepoSettings(w, pages.RepoSettingsParams{
RepoInfo: f.RepoInfo(user),
Collaborators: repoCollaborators,
···
973
-
func (s *State) RepoSingleIssue(w http.ResponseWriter, r *http.Request) {
974
-
user := s.oauth.GetUser(r)
975
-
f, err := s.repoResolver.Resolve(r)
1007
+
func (rp *Repo) RepoSingleIssue(w http.ResponseWriter, r *http.Request) {
1008
+
user := rp.oauth.GetUser(r)
1009
+
f, err := rp.repoResolver.Resolve(r)
log.Println("failed to get repo and knot", err)
···
989
-
issue, comments, err := db.GetIssueWithComments(s.db, f.RepoAt, issueIdInt)
1023
+
issue, comments, err := db.GetIssueWithComments(rp.db, f.RepoAt, issueIdInt)
log.Println("failed to get issue and comments", err)
992
-
s.pages.Notice(w, "issues", "Failed to load issue. Try again later.")
1026
+
rp.pages.Notice(w, "issues", "Failed to load issue. Try again later.")
996
-
issueOwnerIdent, err := s.idResolver.ResolveIdent(r.Context(), issue.OwnerDid)
1030
+
issueOwnerIdent, err := rp.idResolver.ResolveIdent(r.Context(), issue.OwnerDid)
log.Println("failed to resolve issue owner", err)
···
for i, comment := range comments {
identsToResolve[i] = comment.OwnerDid
1005
-
resolvedIds := s.idResolver.ResolveIdents(r.Context(), identsToResolve)
1039
+
resolvedIds := rp.idResolver.ResolveIdents(r.Context(), identsToResolve)
didHandleMap := make(map[string]string)
for _, identity := range resolvedIds {
if !identity.Handle.IsInvalidHandle() {
···
1015
-
s.pages.RepoSingleIssue(w, pages.RepoSingleIssueParams{
1049
+
rp.pages.RepoSingleIssue(w, pages.RepoSingleIssueParams{
RepoInfo: f.RepoInfo(user),
···
1027
-
func (s *State) CloseIssue(w http.ResponseWriter, r *http.Request) {
1028
-
user := s.oauth.GetUser(r)
1029
-
f, err := s.repoResolver.Resolve(r)
1061
+
func (rp *Repo) CloseIssue(w http.ResponseWriter, r *http.Request) {
1062
+
user := rp.oauth.GetUser(r)
1063
+
f, err := rp.repoResolver.Resolve(r)
log.Println("failed to get repo and knot", err)
···
1043
-
issue, err := db.GetIssue(s.db, f.RepoAt, issueIdInt)
1077
+
issue, err := db.GetIssue(rp.db, f.RepoAt, issueIdInt)
log.Println("failed to get issue", err)
1046
-
s.pages.Notice(w, "issue-action", "Failed to close issue. Try again later.")
1080
+
rp.pages.Notice(w, "issue-action", "Failed to close issue. Try again later.")
···
closed := tangled.RepoIssueStateClosed
1064
-
client, err := s.oauth.AuthorizedClient(r)
1098
+
client, err := rp.oauth.AuthorizedClient(r)
log.Println("failed to get authorized client", err)
···
log.Println("failed to update issue state", err)
1083
-
s.pages.Notice(w, "issue-action", "Failed to close issue. Try again later.")
1117
+
rp.pages.Notice(w, "issue-action", "Failed to close issue. Try again later.")
1087
-
err = db.CloseIssue(s.db, f.RepoAt, issueIdInt)
1121
+
err = db.CloseIssue(rp.db, f.RepoAt, issueIdInt)
log.Println("failed to close issue", err)
1090
-
s.pages.Notice(w, "issue-action", "Failed to close issue. Try again later.")
1124
+
rp.pages.Notice(w, "issue-action", "Failed to close issue. Try again later.")
1094
-
s.pages.HxLocation(w, fmt.Sprintf("/%s/issues/%d", f.OwnerSlashRepo(), issueIdInt))
1128
+
rp.pages.HxLocation(w, fmt.Sprintf("/%s/issues/%d", f.OwnerSlashRepo(), issueIdInt))
log.Println("user is not permitted to close issue")
···
1103
-
func (s *State) ReopenIssue(w http.ResponseWriter, r *http.Request) {
1104
-
user := s.oauth.GetUser(r)
1105
-
f, err := s.repoResolver.Resolve(r)
1137
+
func (rp *Repo) ReopenIssue(w http.ResponseWriter, r *http.Request) {
1138
+
user := rp.oauth.GetUser(r)
1139
+
f, err := rp.repoResolver.Resolve(r)
log.Println("failed to get repo and knot", err)
···
1119
-
issue, err := db.GetIssue(s.db, f.RepoAt, issueIdInt)
1153
+
issue, err := db.GetIssue(rp.db, f.RepoAt, issueIdInt)
log.Println("failed to get issue", err)
1122
-
s.pages.Notice(w, "issue-action", "Failed to close issue. Try again later.")
1156
+
rp.pages.Notice(w, "issue-action", "Failed to close issue. Try again later.")
···
isIssueOwner := user.Did == issue.OwnerDid
if isCollaborator || isIssueOwner {
1136
-
err := db.ReopenIssue(s.db, f.RepoAt, issueIdInt)
1170
+
err := db.ReopenIssue(rp.db, f.RepoAt, issueIdInt)
log.Println("failed to reopen issue", err)
1139
-
s.pages.Notice(w, "issue-action", "Failed to reopen issue. Try again later.")
1173
+
rp.pages.Notice(w, "issue-action", "Failed to reopen issue. Try again later.")
1142
-
s.pages.HxLocation(w, fmt.Sprintf("/%s/issues/%d", f.OwnerSlashRepo(), issueIdInt))
1176
+
rp.pages.HxLocation(w, fmt.Sprintf("/%s/issues/%d", f.OwnerSlashRepo(), issueIdInt))
log.Println("user is not the owner of the repo")
···
1151
-
func (s *State) NewIssueComment(w http.ResponseWriter, r *http.Request) {
1152
-
user := s.oauth.GetUser(r)
1153
-
f, err := s.repoResolver.Resolve(r)
1185
+
func (rp *Repo) NewIssueComment(w http.ResponseWriter, r *http.Request) {
1186
+
user := rp.oauth.GetUser(r)
1187
+
f, err := rp.repoResolver.Resolve(r)
log.Println("failed to get repo and knot", err)
···
body := r.FormValue("body")
1171
-
s.pages.Notice(w, "issue", "Body is required")
1205
+
rp.pages.Notice(w, "issue", "Body is required")
commentId := mathrand.IntN(1000000)
1178
-
err := db.NewIssueComment(s.db, &db.Comment{
1212
+
err := db.NewIssueComment(rp.db, &db.Comment{
···
log.Println("failed to create comment", err)
1188
-
s.pages.Notice(w, "issue-comment", "Failed to create comment.")
1222
+
rp.pages.Notice(w, "issue-comment", "Failed to create comment.")
createdAt := time.Now().Format(time.RFC3339)
commentIdInt64 := int64(commentId)
1195
-
issueAt, err := db.GetIssueAt(s.db, f.RepoAt, issueIdInt)
1229
+
issueAt, err := db.GetIssueAt(rp.db, f.RepoAt, issueIdInt)
log.Println("failed to get issue at", err)
1198
-
s.pages.Notice(w, "issue-comment", "Failed to create comment.")
1232
+
rp.pages.Notice(w, "issue-comment", "Failed to create comment.")
atUri := f.RepoAt.String()
1203
-
client, err := s.oauth.AuthorizedClient(r)
1237
+
client, err := rp.oauth.AuthorizedClient(r)
log.Println("failed to get authorized client", err)
1206
-
s.pages.Notice(w, "issue-comment", "Failed to create comment.")
1240
+
rp.pages.Notice(w, "issue-comment", "Failed to create comment.")
_, err = client.RepoPutRecord(r.Context(), &comatproto.RepoPutRecord_Input{
···
log.Println("failed to create comment", err)
1226
-
s.pages.Notice(w, "issue-comment", "Failed to create comment.")
1260
+
rp.pages.Notice(w, "issue-comment", "Failed to create comment.")
1230
-
s.pages.HxLocation(w, fmt.Sprintf("/%s/issues/%d#comment-%d", f.OwnerSlashRepo(), issueIdInt, commentId))
1264
+
rp.pages.HxLocation(w, fmt.Sprintf("/%s/issues/%d#comment-%d", f.OwnerSlashRepo(), issueIdInt, commentId))
1235
-
func (s *State) IssueComment(w http.ResponseWriter, r *http.Request) {
1236
-
user := s.oauth.GetUser(r)
1237
-
f, err := s.repoResolver.Resolve(r)
1269
+
func (rp *Repo) IssueComment(w http.ResponseWriter, r *http.Request) {
1270
+
user := rp.oauth.GetUser(r)
1271
+
f, err := rp.repoResolver.Resolve(r)
log.Println("failed to get repo and knot", err)
···
1259
-
issue, err := db.GetIssue(s.db, f.RepoAt, issueIdInt)
1293
+
issue, err := db.GetIssue(rp.db, f.RepoAt, issueIdInt)
log.Println("failed to get issue", err)
1262
-
s.pages.Notice(w, "issues", "Failed to load issue. Try again later.")
1296
+
rp.pages.Notice(w, "issues", "Failed to load issue. Try again later.")
1266
-
comment, err := db.GetComment(s.db, f.RepoAt, issueIdInt, commentIdInt)
1300
+
comment, err := db.GetComment(rp.db, f.RepoAt, issueIdInt, commentIdInt)
http.Error(w, "bad comment id", http.StatusBadRequest)
1272
-
identity, err := s.idResolver.ResolveIdent(r.Context(), comment.OwnerDid)
1306
+
identity, err := rp.idResolver.ResolveIdent(r.Context(), comment.OwnerDid)
log.Println("failed to resolve did")
···
didHandleMap[identity.DID.String()] = identity.DID.String()
1285
-
s.pages.SingleIssueCommentFragment(w, pages.SingleIssueCommentParams{
1319
+
rp.pages.SingleIssueCommentFragment(w, pages.SingleIssueCommentParams{
RepoInfo: f.RepoInfo(user),
DidHandleMap: didHandleMap,
···
1294
-
func (s *State) EditIssueComment(w http.ResponseWriter, r *http.Request) {
1295
-
user := s.oauth.GetUser(r)
1296
-
f, err := s.repoResolver.Resolve(r)
1328
+
func (rp *Repo) EditIssueComment(w http.ResponseWriter, r *http.Request) {
1329
+
user := rp.oauth.GetUser(r)
1330
+
f, err := rp.repoResolver.Resolve(r)
log.Println("failed to get repo and knot", err)
···
1318
-
issue, err := db.GetIssue(s.db, f.RepoAt, issueIdInt)
1352
+
issue, err := db.GetIssue(rp.db, f.RepoAt, issueIdInt)
log.Println("failed to get issue", err)
1321
-
s.pages.Notice(w, "issues", "Failed to load issue. Try again later.")
1355
+
rp.pages.Notice(w, "issues", "Failed to load issue. Try again later.")
1325
-
comment, err := db.GetComment(s.db, f.RepoAt, issueIdInt, commentIdInt)
1359
+
comment, err := db.GetComment(rp.db, f.RepoAt, issueIdInt, commentIdInt)
http.Error(w, "bad comment id", http.StatusBadRequest)
···
1338
-
s.pages.EditIssueCommentFragment(w, pages.EditIssueCommentParams{
1372
+
rp.pages.EditIssueCommentFragment(w, pages.EditIssueCommentParams{
RepoInfo: f.RepoInfo(user),
···
newBody := r.FormValue("body")
1347
-
client, err := s.oauth.AuthorizedClient(r)
1381
+
client, err := rp.oauth.AuthorizedClient(r)
log.Println("failed to get authorized client", err)
1350
-
s.pages.Notice(w, "issue-comment", "Failed to create comment.")
1384
+
rp.pages.Notice(w, "issue-comment", "Failed to create comment.")
1357
-
err = db.EditComment(s.db, comment.RepoAt, comment.Issue, comment.CommentId, newBody)
1391
+
err = db.EditComment(rp.db, comment.RepoAt, comment.Issue, comment.CommentId, newBody)
log.Println("failed to perferom update-description query", err)
1360
-
s.pages.Notice(w, "repo-notice", "Failed to update description, try again later.")
1394
+
rp.pages.Notice(w, "repo-notice", "Failed to update description, try again later.")
···
1371
-
s.pages.Notice(w, fmt.Sprintf("comment-%s-status", commentId), "Failed to update description, no record found on PDS.")
1405
+
rp.pages.Notice(w, fmt.Sprintf("comment-%s-status", commentId), "Failed to update description, no record found on PDS.")
value, _ := ex.Value.MarshalJSON() // we just did get record; it is valid json
···
// return new comment body with htmx
1411
-
s.pages.SingleIssueCommentFragment(w, pages.SingleIssueCommentParams{
1445
+
rp.pages.SingleIssueCommentFragment(w, pages.SingleIssueCommentParams{
RepoInfo: f.RepoInfo(user),
DidHandleMap: didHandleMap,
···
1424
-
func (s *State) DeleteIssueComment(w http.ResponseWriter, r *http.Request) {
1425
-
user := s.oauth.GetUser(r)
1426
-
f, err := s.repoResolver.Resolve(r)
1458
+
func (rp *Repo) DeleteIssueComment(w http.ResponseWriter, r *http.Request) {
1459
+
user := rp.oauth.GetUser(r)
1460
+
f, err := rp.repoResolver.Resolve(r)
log.Println("failed to get repo and knot", err)
···
1440
-
issue, err := db.GetIssue(s.db, f.RepoAt, issueIdInt)
1474
+
issue, err := db.GetIssue(rp.db, f.RepoAt, issueIdInt)
log.Println("failed to get issue", err)
1443
-
s.pages.Notice(w, "issues", "Failed to load issue. Try again later.")
1477
+
rp.pages.Notice(w, "issues", "Failed to load issue. Try again later.")
···
1455
-
comment, err := db.GetComment(s.db, f.RepoAt, issueIdInt, commentIdInt)
1489
+
comment, err := db.GetComment(rp.db, f.RepoAt, issueIdInt, commentIdInt)
http.Error(w, "bad comment id", http.StatusBadRequest)
···
1473
-
err = db.DeleteComment(s.db, f.RepoAt, issueIdInt, commentIdInt)
1507
+
err = db.DeleteComment(rp.db, f.RepoAt, issueIdInt, commentIdInt)
log.Println("failed to delete comment")
1476
-
s.pages.Notice(w, fmt.Sprintf("comment-%s-status", commentId), "failed to delete comment")
1510
+
rp.pages.Notice(w, fmt.Sprintf("comment-%s-status", commentId), "failed to delete comment")
1482
-
client, err := s.oauth.AuthorizedClient(r)
1516
+
client, err := rp.oauth.AuthorizedClient(r)
log.Println("failed to get authorized client", err)
1485
-
s.pages.Notice(w, "issue-comment", "Failed to delete comment.")
1519
+
rp.pages.Notice(w, "issue-comment", "Failed to delete comment.")
_, err = client.RepoDeleteRecord(r.Context(), &comatproto.RepoDeleteRecord_Input{
···
comment.Deleted = &deleted
// htmx fragment of comment after deletion
1506
-
s.pages.SingleIssueCommentFragment(w, pages.SingleIssueCommentParams{
1540
+
rp.pages.SingleIssueCommentFragment(w, pages.SingleIssueCommentParams{
RepoInfo: f.RepoInfo(user),
DidHandleMap: didHandleMap,
···
1516
-
func (s *State) RepoIssues(w http.ResponseWriter, r *http.Request) {
1550
+
func (rp *Repo) RepoIssues(w http.ResponseWriter, r *http.Request) {
state := params.Get("state")
···
page = pagination.FirstPage()
1535
-
user := s.oauth.GetUser(r)
1536
-
f, err := s.repoResolver.Resolve(r)
1569
+
user := rp.oauth.GetUser(r)
1570
+
f, err := rp.repoResolver.Resolve(r)
log.Println("failed to get repo and knot", err)
1542
-
issues, err := db.GetIssues(s.db, f.RepoAt, isOpen, page)
1576
+
issues, err := db.GetIssues(rp.db, f.RepoAt, isOpen, page)
log.Println("failed to get issues", err)
1545
-
s.pages.Notice(w, "issues", "Failed to load issues. Try again later.")
1579
+
rp.pages.Notice(w, "issues", "Failed to load issues. Try again later.")
···
for i, issue := range issues {
identsToResolve[i] = issue.OwnerDid
1553
-
resolvedIds := s.idResolver.ResolveIdents(r.Context(), identsToResolve)
1587
+
resolvedIds := rp.idResolver.ResolveIdents(r.Context(), identsToResolve)
didHandleMap := make(map[string]string)
for _, identity := range resolvedIds {
if !identity.Handle.IsInvalidHandle() {
···
1563
-
s.pages.RepoIssues(w, pages.RepoIssuesParams{
1564
-
LoggedInUser: s.oauth.GetUser(r),
1597
+
rp.pages.RepoIssues(w, pages.RepoIssuesParams{
1598
+
LoggedInUser: rp.oauth.GetUser(r),
RepoInfo: f.RepoInfo(user),
DidHandleMap: didHandleMap,
···
1574
-
func (s *State) NewIssue(w http.ResponseWriter, r *http.Request) {
1575
-
user := s.oauth.GetUser(r)
1608
+
func (rp *Repo) NewIssue(w http.ResponseWriter, r *http.Request) {
1609
+
user := rp.oauth.GetUser(r)
1577
-
f, err := s.repoResolver.Resolve(r)
1611
+
f, err := rp.repoResolver.Resolve(r)
log.Println("failed to get repo and knot", err)
···
1585
-
s.pages.RepoNewIssue(w, pages.RepoNewIssueParams{
1619
+
rp.pages.RepoNewIssue(w, pages.RepoNewIssueParams{
RepoInfo: f.RepoInfo(user),
···
body := r.FormValue("body")
if title == "" || body == "" {
1594
-
s.pages.Notice(w, "issues", "Title and body are required")
1628
+
rp.pages.Notice(w, "issues", "Title and body are required")
1598
-
tx, err := s.db.BeginTx(r.Context(), nil)
1632
+
tx, err := rp.db.BeginTx(r.Context(), nil)
1600
-
s.pages.Notice(w, "issues", "Failed to create issue, try again later")
1634
+
rp.pages.Notice(w, "issues", "Failed to create issue, try again later")
···
log.Println("failed to create issue", err)
1612
-
s.pages.Notice(w, "issues", "Failed to create issue.")
1646
+
rp.pages.Notice(w, "issues", "Failed to create issue.")
1616
-
issueId, err := db.GetIssueId(s.db, f.RepoAt)
1650
+
issueId, err := db.GetIssueId(rp.db, f.RepoAt)
log.Println("failed to get issue id", err)
1619
-
s.pages.Notice(w, "issues", "Failed to create issue.")
1653
+
rp.pages.Notice(w, "issues", "Failed to create issue.")
1623
-
client, err := s.oauth.AuthorizedClient(r)
1657
+
client, err := rp.oauth.AuthorizedClient(r)
log.Println("failed to get authorized client", err)
1626
-
s.pages.Notice(w, "issues", "Failed to create issue.")
1660
+
rp.pages.Notice(w, "issues", "Failed to create issue.")
atUri := f.RepoAt.String()
···
log.Println("failed to create issue", err)
1646
-
s.pages.Notice(w, "issues", "Failed to create issue.")
1680
+
rp.pages.Notice(w, "issues", "Failed to create issue.")
1650
-
err = db.SetIssueAt(s.db, f.RepoAt, issueId, resp.Uri)
1684
+
err = db.SetIssueAt(rp.db, f.RepoAt, issueId, resp.Uri)
log.Println("failed to set issue at", err)
1653
-
s.pages.Notice(w, "issues", "Failed to create issue.")
1687
+
rp.pages.Notice(w, "issues", "Failed to create issue.")
1657
-
if !s.config.Core.Dev {
1658
-
err = s.posthog.Enqueue(posthog.Capture{
1691
+
if !rp.config.Core.Dev {
1692
+
err = rp.posthog.Enqueue(posthog.Capture{
Properties: posthog.Properties{"repo_at": f.RepoAt.String(), "issue_id": issueId},
···
1668
-
s.pages.HxLocation(w, fmt.Sprintf("/%s/issues/%d", f.OwnerSlashRepo(), issueId))
1702
+
rp.pages.HxLocation(w, fmt.Sprintf("/%s/issues/%d", f.OwnerSlashRepo(), issueId))
1673
-
func (s *State) SyncRepoFork(w http.ResponseWriter, r *http.Request) {
1674
-
user := s.oauth.GetUser(r)
1675
-
f, err := s.repoResolver.Resolve(r)
1707
+
func (rp *Repo) SyncRepoFork(w http.ResponseWriter, r *http.Request) {
1708
+
user := rp.oauth.GetUser(r)
1709
+
f, err := rp.repoResolver.Resolve(r)
log.Printf("failed to resolve source repo: %v", err)
···
1683
-
secret, err := db.GetRegistrationKey(s.db, f.Knot)
1717
+
secret, err := db.GetRegistrationKey(rp.db, f.Knot)
1685
-
s.pages.Notice(w, "repo", fmt.Sprintf("No registration key found for knot %s.", f.Knot))
1719
+
rp.pages.Notice(w, "repo", fmt.Sprintf("No registration key found for knot %rp.", f.Knot))
1689
-
client, err := knotclient.NewSignedClient(f.Knot, secret, s.config.Core.Dev)
1723
+
client, err := knotclient.NewSignedClient(f.Knot, secret, rp.config.Core.Dev)
1691
-
s.pages.Notice(w, "repo", "Failed to reach knot server.")
1725
+
rp.pages.Notice(w, "repo", "Failed to reach knot server.")
1696
-
if s.config.Core.Dev {
1730
+
if rp.config.Core.Dev {
···
_, err = client.SyncRepoFork(user.Did, forkSourceUrl, forkName, f.Ref)
1706
-
s.pages.Notice(w, "repo", "Failed to sync repository fork.")
1740
+
rp.pages.Notice(w, "repo", "Failed to sync repository fork.")
1710
-
s.pages.HxRefresh(w)
1744
+
rp.pages.HxRefresh(w)
1715
-
func (s *State) ForkRepo(w http.ResponseWriter, r *http.Request) {
1716
-
user := s.oauth.GetUser(r)
1717
-
f, err := s.repoResolver.Resolve(r)
1749
+
func (rp *Repo) ForkRepo(w http.ResponseWriter, r *http.Request) {
1750
+
user := rp.oauth.GetUser(r)
1751
+
f, err := rp.repoResolver.Resolve(r)
log.Printf("failed to resolve source repo: %v", err)
···
1725
-
user := s.oauth.GetUser(r)
1726
-
knots, err := s.enforcer.GetDomainsForUser(user.Did)
1759
+
user := rp.oauth.GetUser(r)
1760
+
knots, err := rp.enforcer.GetDomainsForUser(user.Did)
1728
-
s.pages.Notice(w, "repo", "Invalid user account.")
1762
+
rp.pages.Notice(w, "repo", "Invalid user account.")
1732
-
s.pages.ForkRepo(w, pages.ForkRepoParams{
1766
+
rp.pages.ForkRepo(w, pages.ForkRepoParams{
RepoInfo: f.RepoInfo(user),
···
knot := r.FormValue("knot")
1742
-
s.pages.Notice(w, "repo", "Invalid form submission—missing knot domain.")
1776
+
rp.pages.Notice(w, "repo", "Invalid form submission—missing knot domain.")
1746
-
ok, err := s.enforcer.E.Enforce(user.Did, knot, knot, "repo:create")
1780
+
ok, err := rp.enforcer.E.Enforce(user.Did, knot, knot, "repo:create")
1748
-
s.pages.Notice(w, "repo", "You do not have permission to create a repo in this knot.")
1782
+
rp.pages.Notice(w, "repo", "You do not have permission to create a repo in this knot.")
···
// this check is *only* to see if the forked repo name already exists
// in the user's account.
1756
-
existingRepo, err := db.GetRepo(s.db, user.Did, f.RepoName)
1790
+
existingRepo, err := db.GetRepo(rp.db, user.Did, f.RepoName)
if errors.Is(err, sql.ErrNoRows) {
// no existing repo with this name found, we can use the name as is
log.Println("error fetching existing repo from db", err)
1762
-
s.pages.Notice(w, "repo", "Failed to fork this repository. Try again later.")
1796
+
rp.pages.Notice(w, "repo", "Failed to fork this repository. Try again later.")
} else if existingRepo != nil {
// repo with this name already exists, append random string
forkName = fmt.Sprintf("%s-%s", forkName, randomString(3))
1769
-
secret, err := db.GetRegistrationKey(s.db, knot)
1803
+
secret, err := db.GetRegistrationKey(rp.db, knot)
1771
-
s.pages.Notice(w, "repo", fmt.Sprintf("No registration key found for knot %s.", knot))
1805
+
rp.pages.Notice(w, "repo", fmt.Sprintf("No registration key found for knot %rp.", knot))
1775
-
client, err := knotclient.NewSignedClient(knot, secret, s.config.Core.Dev)
1809
+
client, err := knotclient.NewSignedClient(knot, secret, rp.config.Core.Dev)
1777
-
s.pages.Notice(w, "repo", "Failed to reach knot server.")
1811
+
rp.pages.Notice(w, "repo", "Failed to reach knot server.")
1782
-
if s.config.Core.Dev {
1816
+
if rp.config.Core.Dev {
···
1799
-
tx, err := s.db.BeginTx(r.Context(), nil)
1833
+
tx, err := rp.db.BeginTx(r.Context(), nil)
1802
-
s.pages.Notice(w, "repo", "Failed to save repository information.")
1836
+
rp.pages.Notice(w, "repo", "Failed to save repository information.")
1807
-
err = s.enforcer.E.LoadPolicy()
1841
+
err = rp.enforcer.E.LoadPolicy()
log.Println("failed to rollback policies")
···
resp, err := client.ForkRepo(user.Did, forkSourceUrl, forkName)
1815
-
s.pages.Notice(w, "repo", "Failed to create repository on knot server.")
1849
+
rp.pages.Notice(w, "repo", "Failed to create repository on knot server.")
case http.StatusConflict:
1821
-
s.pages.Notice(w, "repo", "A repository with that name already exists.")
1855
+
rp.pages.Notice(w, "repo", "A repository with that name already exists.")
case http.StatusInternalServerError:
1824
-
s.pages.Notice(w, "repo", "Failed to create repository on knot. Try again later.")
1858
+
rp.pages.Notice(w, "repo", "Failed to create repository on knot. Try again later.")
case http.StatusNoContent:
1829
-
xrpcClient, err := s.oauth.AuthorizedClient(r)
1863
+
xrpcClient, err := rp.oauth.AuthorizedClient(r)
log.Println("failed to get authorized client", err)
1832
-
s.pages.Notice(w, "repo", "Failed to create repository.")
1866
+
rp.pages.Notice(w, "repo", "Failed to create repository.")
···
log.Printf("failed to create record: %s", err)
1852
-
s.pages.Notice(w, "repo", "Failed to announce repository creation.")
1886
+
rp.pages.Notice(w, "repo", "Failed to announce repository creation.")
log.Println("created repo record: ", atresp.Uri)
···
err = db.AddRepo(tx, repo)
1861
-
s.pages.Notice(w, "repo", "Failed to save repository information.")
1895
+
rp.pages.Notice(w, "repo", "Failed to save repository information.")
p, _ := securejoin.SecureJoin(user.Did, forkName)
1867
-
err = s.enforcer.AddRepo(user.Did, knot, p)
1901
+
err = rp.enforcer.AddRepo(user.Did, knot, p)
1870
-
s.pages.Notice(w, "repo", "Failed to set up repository permissions.")
1904
+
rp.pages.Notice(w, "repo", "Failed to set up repository permissions.")
···
1881
-
err = s.enforcer.E.SavePolicy()
1915
+
err = rp.enforcer.E.SavePolicy()
log.Println("failed to update ACLs", err)
http.Error(w, err.Error(), http.StatusInternalServerError)
1888
-
s.pages.HxLocation(w, fmt.Sprintf("/@%s/%s", user.Handle, forkName))
1922
+
rp.pages.HxLocation(w, fmt.Sprintf("/@%s/%s", user.Handle, forkName))
1893
-
func (s *State) RepoCompareNew(w http.ResponseWriter, r *http.Request) {
1894
-
user := s.oauth.GetUser(r)
1895
-
f, err := s.repoResolver.Resolve(r)
1927
+
func (rp *Repo) RepoCompareNew(w http.ResponseWriter, r *http.Request) {
1928
+
user := rp.oauth.GetUser(r)
1929
+
f, err := rp.repoResolver.Resolve(r)
log.Println("failed to get repo and knot", err)
1901
-
us, err := knotclient.NewUnsignedClient(f.Knot, s.config.Core.Dev)
1935
+
us, err := knotclient.NewUnsignedClient(f.Knot, rp.config.Core.Dev)
log.Printf("failed to create unsigned client for %s", f.Knot)
1904
-
s.pages.Error503(w)
1938
+
rp.pages.Error503(w)
result, err := us.Branches(f.OwnerDid(), f.RepoName)
1910
-
s.pages.Notice(w, "compare-error", "Failed to produce comparison. Try again later.")
1944
+
rp.pages.Notice(w, "compare-error", "Failed to produce comparison. Try again later.")
log.Println("failed to reach knotserver", err)
···
tags, err := us.Tags(f.OwnerDid(), f.RepoName)
1941
-
s.pages.Notice(w, "compare-error", "Failed to produce comparison. Try again later.")
1975
+
rp.pages.Notice(w, "compare-error", "Failed to produce comparison. Try again later.")
log.Println("failed to reach knotserver", err)
repoinfo := f.RepoInfo(user)
1948
-
s.pages.RepoCompareNew(w, pages.RepoCompareNewParams{
1982
+
rp.pages.RepoCompareNew(w, pages.RepoCompareNewParams{
···
1958
-
func (s *State) RepoCompare(w http.ResponseWriter, r *http.Request) {
1959
-
user := s.oauth.GetUser(r)
1960
-
f, err := s.repoResolver.Resolve(r)
1992
+
func (rp *Repo) RepoCompare(w http.ResponseWriter, r *http.Request) {
1993
+
user := rp.oauth.GetUser(r)
1994
+
f, err := rp.repoResolver.Resolve(r)
log.Println("failed to get repo and knot", err)
···
if base == "" || head == "" {
log.Printf("invalid comparison")
1982
-
s.pages.Error404(w)
2016
+
rp.pages.Error404(w)
1986
-
us, err := knotclient.NewUnsignedClient(f.Knot, s.config.Core.Dev)
2020
+
us, err := knotclient.NewUnsignedClient(f.Knot, rp.config.Core.Dev)
log.Printf("failed to create unsigned client for %s", f.Knot)
1989
-
s.pages.Error503(w)
2023
+
rp.pages.Error503(w)
branches, err := us.Branches(f.OwnerDid(), f.RepoName)
1995
-
s.pages.Notice(w, "compare-error", "Failed to produce comparison. Try again later.")
2029
+
rp.pages.Notice(w, "compare-error", "Failed to produce comparison. Try again later.")
log.Println("failed to reach knotserver", err)
tags, err := us.Tags(f.OwnerDid(), f.RepoName)
2002
-
s.pages.Notice(w, "compare-error", "Failed to produce comparison. Try again later.")
2036
+
rp.pages.Notice(w, "compare-error", "Failed to produce comparison. Try again later.")
log.Println("failed to reach knotserver", err)
formatPatch, err := us.Compare(f.OwnerDid(), f.RepoName, base, head)
2009
-
s.pages.Notice(w, "compare-error", "Failed to produce comparison. Try again later.")
2043
+
rp.pages.Notice(w, "compare-error", "Failed to produce comparison. Try again later.")
log.Println("failed to compare", err)
···
repoinfo := f.RepoInfo(user)
2017
-
s.pages.RepoCompare(w, pages.RepoCompareParams{
2051
+
rp.pages.RepoCompare(w, pages.RepoCompareParams{
Branches: branches.Branches,