Monorepo for Tangled tangled.org

appview: knotclient: init knot server client package

Lets us use it without an import cycle.

anirudh.fi ca4b9c8b b17662e6

verified
Changed files
+73 -30
appview
+37
appview/oauth/handler/handler.go
··· 14 "github.com/lestrrat-go/jwx/v2/jwk" 15 "tangled.sh/tangled.sh/core/appview" 16 "tangled.sh/tangled.sh/core/appview/db" 17 "tangled.sh/tangled.sh/core/appview/middleware" 18 "tangled.sh/tangled.sh/core/appview/oauth" 19 "tangled.sh/tangled.sh/core/appview/oauth/client" 20 "tangled.sh/tangled.sh/core/appview/pages" 21 ) 22 23 const ( ··· 31 Db *db.DB 32 Store *sessions.CookieStore 33 OAuth *oauth.OAuth 34 } 35 36 func (o *OAuthHandler) Router() http.Handler { ··· 243 } 244 245 log.Println("session saved successfully") 246 247 http.Redirect(w, r, "/", http.StatusFound) 248 } ··· 270 } 271 return pubKey, nil 272 }
··· 14 "github.com/lestrrat-go/jwx/v2/jwk" 15 "tangled.sh/tangled.sh/core/appview" 16 "tangled.sh/tangled.sh/core/appview/db" 17 + "tangled.sh/tangled.sh/core/appview/knotclient" 18 "tangled.sh/tangled.sh/core/appview/middleware" 19 "tangled.sh/tangled.sh/core/appview/oauth" 20 "tangled.sh/tangled.sh/core/appview/oauth/client" 21 "tangled.sh/tangled.sh/core/appview/pages" 22 + "tangled.sh/tangled.sh/core/rbac" 23 ) 24 25 const ( ··· 33 Db *db.DB 34 Store *sessions.CookieStore 35 OAuth *oauth.OAuth 36 + Enforcer *rbac.Enforcer 37 } 38 39 func (o *OAuthHandler) Router() http.Handler { ··· 246 } 247 248 log.Println("session saved successfully") 249 + go o.addToDefaultKnot(oauthRequest.Did) 250 251 http.Redirect(w, r, "/", http.StatusFound) 252 } ··· 274 } 275 return pubKey, nil 276 } 277 + 278 + func (o *OAuthHandler) addToDefaultKnot(did string) { 279 + defaultKnot := "knot1.tangled.sh" 280 + 281 + log.Printf("adding %s to default knot", did) 282 + err := o.Enforcer.AddMember(defaultKnot, did) 283 + if err != nil { 284 + log.Println("failed to add user to knot1.tangled.sh: ", err) 285 + return 286 + } 287 + err = o.Enforcer.E.SavePolicy() 288 + if err != nil { 289 + log.Println("failed to add user to knot1.tangled.sh: ", err) 290 + return 291 + } 292 + 293 + secret, err := db.GetRegistrationKey(o.Db, defaultKnot) 294 + if err != nil { 295 + log.Println("failed to get registration key for knot1.tangled.sh") 296 + return 297 + } 298 + signedClient, err := knotclient.NewSignedClient(defaultKnot, secret, o.Config.Core.Dev) 299 + resp, err := signedClient.AddMember(did) 300 + if err != nil { 301 + log.Println("failed to add user to knot1.tangled.sh: ", err) 302 + return 303 + } 304 + 305 + if resp.StatusCode != http.StatusNoContent { 306 + log.Println("failed to add user to knot1.tangled.sh: ", resp.StatusCode) 307 + return 308 + } 309 + }
+2 -1
appview/state/artifact.go
··· 16 "tangled.sh/tangled.sh/core/api/tangled" 17 "tangled.sh/tangled.sh/core/appview" 18 "tangled.sh/tangled.sh/core/appview/db" 19 "tangled.sh/tangled.sh/core/appview/pages" 20 "tangled.sh/tangled.sh/core/types" 21 ) ··· 263 return nil, err 264 } 265 266 - us, err := NewUnsignedClient(f.Knot, s.config.Core.Dev) 267 if err != nil { 268 return nil, err 269 }
··· 16 "tangled.sh/tangled.sh/core/api/tangled" 17 "tangled.sh/tangled.sh/core/appview" 18 "tangled.sh/tangled.sh/core/appview/db" 19 + "tangled.sh/tangled.sh/core/appview/knotclient" 20 "tangled.sh/tangled.sh/core/appview/pages" 21 "tangled.sh/tangled.sh/core/types" 22 ) ··· 264 return nil, err 265 } 266 267 + us, err := knotclient.NewUnsignedClient(f.Knot, s.config.Core.Dev) 268 if err != nil { 269 return nil, err 270 }
+15 -14
appview/state/pull.go
··· 14 "tangled.sh/tangled.sh/core/api/tangled" 15 "tangled.sh/tangled.sh/core/appview" 16 "tangled.sh/tangled.sh/core/appview/db" 17 "tangled.sh/tangled.sh/core/appview/oauth" 18 "tangled.sh/tangled.sh/core/appview/pages" 19 "tangled.sh/tangled.sh/core/patchutil" ··· 143 } 144 } 145 146 - ksClient, err := NewSignedClient(f.Knot, secret, s.config.Core.Dev) 147 if err != nil { 148 log.Printf("failed to setup signed client for %s; ignoring: %v", f.Knot, err) 149 return types.MergeCheckResponse{ ··· 215 repoName = f.RepoName 216 } 217 218 - us, err := NewUnsignedClient(knot, s.config.Core.Dev) 219 if err != nil { 220 log.Printf("failed to setup client for %s; ignoring: %v", knot, err) 221 return pages.Unknown ··· 582 583 switch r.Method { 584 case http.MethodGet: 585 - us, err := NewUnsignedClient(f.Knot, s.config.Core.Dev) 586 if err != nil { 587 log.Printf("failed to create unsigned client for %s", f.Knot) 588 s.pages.Error503(w) ··· 651 return 652 } 653 654 - us, err := NewUnsignedClient(f.Knot, s.config.Core.Dev) 655 if err != nil { 656 log.Printf("failed to create unsigned client to %s: %v", f.Knot, err) 657 s.pages.Notice(w, "pull", "Failed to create a pull request. Try again later.") ··· 703 } 704 705 // Generate a patch using /compare 706 - ksClient, err := NewUnsignedClient(f.Knot, s.config.Core.Dev) 707 if err != nil { 708 log.Printf("failed to create signed client for %s: %s", f.Knot, err) 709 s.pages.Notice(w, "pull", "Failed to create pull request. Try again later.") ··· 755 return 756 } 757 758 - sc, err := NewSignedClient(fork.Knot, secret, s.config.Core.Dev) 759 if err != nil { 760 log.Println("failed to create signed client:", err) 761 s.pages.Notice(w, "pull", "Failed to create pull request. Try again later.") 762 return 763 } 764 765 - us, err := NewUnsignedClient(fork.Knot, s.config.Core.Dev) 766 if err != nil { 767 log.Println("failed to create unsigned client:", err) 768 s.pages.Notice(w, "pull", "Failed to create pull request. Try again later.") ··· 964 return 965 } 966 967 - us, err := NewUnsignedClient(f.Knot, s.config.Core.Dev) 968 if err != nil { 969 log.Printf("failed to create unsigned client for %s", f.Knot) 970 s.pages.Error503(w) ··· 1034 return 1035 } 1036 1037 - sourceBranchesClient, err := NewUnsignedClient(repo.Knot, s.config.Core.Dev) 1038 if err != nil { 1039 log.Printf("failed to create unsigned client for %s", repo.Knot) 1040 s.pages.Error503(w) ··· 1061 return 1062 } 1063 1064 - targetBranchesClient, err := NewUnsignedClient(f.Knot, s.config.Core.Dev) 1065 if err != nil { 1066 log.Printf("failed to create unsigned client for target knot %s", f.Knot) 1067 s.pages.Error503(w) ··· 1247 return 1248 } 1249 1250 - ksClient, err := NewUnsignedClient(f.Knot, s.config.Core.Dev) 1251 if err != nil { 1252 log.Printf("failed to create client for %s: %s", f.Knot, err) 1253 s.pages.Notice(w, "resubmit-error", "Failed to create pull request. Try again later.") ··· 1367 } 1368 1369 // extract patch by performing compare 1370 - ksClient, err := NewUnsignedClient(forkRepo.Knot, s.config.Core.Dev) 1371 if err != nil { 1372 log.Printf("failed to create client for %s: %s", forkRepo.Knot, err) 1373 s.pages.Notice(w, "resubmit-error", "Failed to create pull request. Try again later.") ··· 1382 } 1383 1384 // update the hidden tracking branch to latest 1385 - signedClient, err := NewSignedClient(forkRepo.Knot, secret, s.config.Core.Dev) 1386 if err != nil { 1387 log.Printf("failed to create signed client for %s: %s", forkRepo.Knot, err) 1388 s.pages.Notice(w, "resubmit-error", "Failed to create pull request. Try again later.") ··· 1533 log.Printf("failed to get primary email: %s", err) 1534 } 1535 1536 - ksClient, err := NewSignedClient(f.Knot, secret, s.config.Core.Dev) 1537 if err != nil { 1538 log.Printf("failed to create signed client for %s: %s", f.Knot, err) 1539 s.pages.Notice(w, "pull-merge-error", "Failed to merge pull request. Try again later.")
··· 14 "tangled.sh/tangled.sh/core/api/tangled" 15 "tangled.sh/tangled.sh/core/appview" 16 "tangled.sh/tangled.sh/core/appview/db" 17 + "tangled.sh/tangled.sh/core/appview/knotclient" 18 "tangled.sh/tangled.sh/core/appview/oauth" 19 "tangled.sh/tangled.sh/core/appview/pages" 20 "tangled.sh/tangled.sh/core/patchutil" ··· 144 } 145 } 146 147 + ksClient, err := knotclient.NewSignedClient(f.Knot, secret, s.config.Core.Dev) 148 if err != nil { 149 log.Printf("failed to setup signed client for %s; ignoring: %v", f.Knot, err) 150 return types.MergeCheckResponse{ ··· 216 repoName = f.RepoName 217 } 218 219 + us, err := knotclient.NewUnsignedClient(knot, s.config.Core.Dev) 220 if err != nil { 221 log.Printf("failed to setup client for %s; ignoring: %v", knot, err) 222 return pages.Unknown ··· 583 584 switch r.Method { 585 case http.MethodGet: 586 + us, err := knotclient.NewUnsignedClient(f.Knot, s.config.Core.Dev) 587 if err != nil { 588 log.Printf("failed to create unsigned client for %s", f.Knot) 589 s.pages.Error503(w) ··· 652 return 653 } 654 655 + us, err := knotclient.NewUnsignedClient(f.Knot, s.config.Core.Dev) 656 if err != nil { 657 log.Printf("failed to create unsigned client to %s: %v", f.Knot, err) 658 s.pages.Notice(w, "pull", "Failed to create a pull request. Try again later.") ··· 704 } 705 706 // Generate a patch using /compare 707 + ksClient, err := knotclient.NewUnsignedClient(f.Knot, s.config.Core.Dev) 708 if err != nil { 709 log.Printf("failed to create signed client for %s: %s", f.Knot, err) 710 s.pages.Notice(w, "pull", "Failed to create pull request. Try again later.") ··· 756 return 757 } 758 759 + sc, err := knotclient.NewSignedClient(fork.Knot, secret, s.config.Core.Dev) 760 if err != nil { 761 log.Println("failed to create signed client:", err) 762 s.pages.Notice(w, "pull", "Failed to create pull request. Try again later.") 763 return 764 } 765 766 + us, err := knotclient.NewUnsignedClient(fork.Knot, s.config.Core.Dev) 767 if err != nil { 768 log.Println("failed to create unsigned client:", err) 769 s.pages.Notice(w, "pull", "Failed to create pull request. Try again later.") ··· 965 return 966 } 967 968 + us, err := knotclient.NewUnsignedClient(f.Knot, s.config.Core.Dev) 969 if err != nil { 970 log.Printf("failed to create unsigned client for %s", f.Knot) 971 s.pages.Error503(w) ··· 1035 return 1036 } 1037 1038 + sourceBranchesClient, err := knotclient.NewUnsignedClient(repo.Knot, s.config.Core.Dev) 1039 if err != nil { 1040 log.Printf("failed to create unsigned client for %s", repo.Knot) 1041 s.pages.Error503(w) ··· 1062 return 1063 } 1064 1065 + targetBranchesClient, err := knotclient.NewUnsignedClient(f.Knot, s.config.Core.Dev) 1066 if err != nil { 1067 log.Printf("failed to create unsigned client for target knot %s", f.Knot) 1068 s.pages.Error503(w) ··· 1248 return 1249 } 1250 1251 + ksClient, err := knotclient.NewUnsignedClient(f.Knot, s.config.Core.Dev) 1252 if err != nil { 1253 log.Printf("failed to create client for %s: %s", f.Knot, err) 1254 s.pages.Notice(w, "resubmit-error", "Failed to create pull request. Try again later.") ··· 1368 } 1369 1370 // extract patch by performing compare 1371 + ksClient, err := knotclient.NewUnsignedClient(forkRepo.Knot, s.config.Core.Dev) 1372 if err != nil { 1373 log.Printf("failed to create client for %s: %s", forkRepo.Knot, err) 1374 s.pages.Notice(w, "resubmit-error", "Failed to create pull request. Try again later.") ··· 1383 } 1384 1385 // update the hidden tracking branch to latest 1386 + signedClient, err := knotclient.NewSignedClient(forkRepo.Knot, secret, s.config.Core.Dev) 1387 if err != nil { 1388 log.Printf("failed to create signed client for %s: %s", forkRepo.Knot, err) 1389 s.pages.Notice(w, "resubmit-error", "Failed to create pull request. Try again later.") ··· 1534 log.Printf("failed to get primary email: %s", err) 1535 } 1536 1537 + ksClient, err := knotclient.NewSignedClient(f.Knot, secret, s.config.Core.Dev) 1538 if err != nil { 1539 log.Printf("failed to create signed client for %s: %s", f.Knot, err) 1540 s.pages.Notice(w, "pull-merge-error", "Failed to merge pull request. Try again later.")
+11 -10
appview/state/repo.go
··· 19 "tangled.sh/tangled.sh/core/api/tangled" 20 "tangled.sh/tangled.sh/core/appview" 21 "tangled.sh/tangled.sh/core/appview/db" 22 "tangled.sh/tangled.sh/core/appview/oauth" 23 "tangled.sh/tangled.sh/core/appview/pages" 24 "tangled.sh/tangled.sh/core/appview/pages/markup" ··· 45 return 46 } 47 48 - us, err := NewUnsignedClient(f.Knot, s.config.Core.Dev) 49 if err != nil { 50 log.Printf("failed to create unsigned client for %s", f.Knot) 51 s.pages.Error503(w) ··· 150 151 ref := chi.URLParam(r, "ref") 152 153 - us, err := NewUnsignedClient(f.Knot, s.config.Core.Dev) 154 if err != nil { 155 log.Println("failed to create unsigned client", err) 156 return ··· 416 return 417 } 418 419 - us, err := NewUnsignedClient(f.Knot, s.config.Core.Dev) 420 if err != nil { 421 log.Println("failed to create unsigned client", err) 422 return ··· 474 return 475 } 476 477 - us, err := NewUnsignedClient(f.Knot, s.config.Core.Dev) 478 if err != nil { 479 log.Println("failed to create unsigned client", err) 480 return ··· 657 return 658 } 659 660 - ksClient, err := NewSignedClient(f.Knot, secret, s.config.Core.Dev) 661 if err != nil { 662 log.Println("failed to create client to ", f.Knot) 663 return ··· 752 return 753 } 754 755 - ksClient, err := NewSignedClient(f.Knot, secret, s.config.Core.Dev) 756 if err != nil { 757 log.Println("failed to create client to ", f.Knot) 758 return ··· 847 return 848 } 849 850 - ksClient, err := NewSignedClient(f.Knot, secret, s.config.Core.Dev) 851 if err != nil { 852 log.Println("failed to create client to ", f.Knot) 853 return ··· 893 894 var branchNames []string 895 var defaultBranch string 896 - us, err := NewUnsignedClient(f.Knot, s.config.Core.Dev) 897 if err != nil { 898 log.Println("failed to create unsigned client", err) 899 } else { ··· 1060 1061 knot := f.Knot 1062 var disableFork bool 1063 - us, err := NewUnsignedClient(knot, s.config.Core.Dev) 1064 if err != nil { 1065 log.Printf("failed to create unsigned client for %s: %v", knot, err) 1066 } else { ··· 1862 return 1863 } 1864 1865 - client, err := NewSignedClient(knot, secret, s.config.Core.Dev) 1866 if err != nil { 1867 s.pages.Notice(w, "repo", "Failed to reach knot server.") 1868 return
··· 19 "tangled.sh/tangled.sh/core/api/tangled" 20 "tangled.sh/tangled.sh/core/appview" 21 "tangled.sh/tangled.sh/core/appview/db" 22 + "tangled.sh/tangled.sh/core/appview/knotclient" 23 "tangled.sh/tangled.sh/core/appview/oauth" 24 "tangled.sh/tangled.sh/core/appview/pages" 25 "tangled.sh/tangled.sh/core/appview/pages/markup" ··· 46 return 47 } 48 49 + us, err := knotclient.NewUnsignedClient(f.Knot, s.config.Core.Dev) 50 if err != nil { 51 log.Printf("failed to create unsigned client for %s", f.Knot) 52 s.pages.Error503(w) ··· 151 152 ref := chi.URLParam(r, "ref") 153 154 + us, err := knotclient.NewUnsignedClient(f.Knot, s.config.Core.Dev) 155 if err != nil { 156 log.Println("failed to create unsigned client", err) 157 return ··· 417 return 418 } 419 420 + us, err := knotclient.NewUnsignedClient(f.Knot, s.config.Core.Dev) 421 if err != nil { 422 log.Println("failed to create unsigned client", err) 423 return ··· 475 return 476 } 477 478 + us, err := knotclient.NewUnsignedClient(f.Knot, s.config.Core.Dev) 479 if err != nil { 480 log.Println("failed to create unsigned client", err) 481 return ··· 658 return 659 } 660 661 + ksClient, err := knotclient.NewSignedClient(f.Knot, secret, s.config.Core.Dev) 662 if err != nil { 663 log.Println("failed to create client to ", f.Knot) 664 return ··· 753 return 754 } 755 756 + ksClient, err := knotclient.NewSignedClient(f.Knot, secret, s.config.Core.Dev) 757 if err != nil { 758 log.Println("failed to create client to ", f.Knot) 759 return ··· 848 return 849 } 850 851 + ksClient, err := knotclient.NewSignedClient(f.Knot, secret, s.config.Core.Dev) 852 if err != nil { 853 log.Println("failed to create client to ", f.Knot) 854 return ··· 894 895 var branchNames []string 896 var defaultBranch string 897 + us, err := knotclient.NewUnsignedClient(f.Knot, s.config.Core.Dev) 898 if err != nil { 899 log.Println("failed to create unsigned client", err) 900 } else { ··· 1061 1062 knot := f.Knot 1063 var disableFork bool 1064 + us, err := knotclient.NewUnsignedClient(knot, s.config.Core.Dev) 1065 if err != nil { 1066 log.Printf("failed to create unsigned client for %s: %v", knot, err) 1067 } else { ··· 1863 return 1864 } 1865 1866 + client, err := knotclient.NewSignedClient(knot, secret, s.config.Core.Dev) 1867 if err != nil { 1868 s.pages.Notice(w, "repo", "Failed to reach knot server.") 1869 return
+2 -1
appview/state/repo_util.go
··· 13 "github.com/go-chi/chi/v5" 14 "github.com/go-git/go-git/v5/plumbing/object" 15 "tangled.sh/tangled.sh/core/appview/db" 16 "tangled.sh/tangled.sh/core/appview/oauth" 17 "tangled.sh/tangled.sh/core/appview/pages/repoinfo" 18 ) ··· 45 ref := chi.URLParam(r, "ref") 46 47 if ref == "" { 48 - us, err := NewUnsignedClient(knot, s.config.Core.Dev) 49 if err != nil { 50 return nil, err 51 }
··· 13 "github.com/go-chi/chi/v5" 14 "github.com/go-git/go-git/v5/plumbing/object" 15 "tangled.sh/tangled.sh/core/appview/db" 16 + "tangled.sh/tangled.sh/core/appview/knotclient" 17 "tangled.sh/tangled.sh/core/appview/oauth" 18 "tangled.sh/tangled.sh/core/appview/pages/repoinfo" 19 ) ··· 46 ref := chi.URLParam(r, "ref") 47 48 if ref == "" { 49 + us, err := knotclient.NewUnsignedClient(knot, s.config.Core.Dev) 50 if err != nil { 51 return nil, err 52 }
+1
appview/state/router.go
··· 264 Db: s.db, 265 Store: sessions.NewCookieStore([]byte(s.config.Core.CookieSecret)), 266 OAuth: s.oauth, 267 } 268 269 return oauth.Router()
··· 264 Db: s.db, 265 Store: sessions.NewCookieStore([]byte(s.config.Core.CookieSecret)), 266 OAuth: s.oauth, 267 + Enforcer: s.enforcer, 268 } 269 270 return oauth.Router()
+1 -1
appview/state/signer.go appview/knotclient/signer.go
··· 1 - package state 2 3 import ( 4 "bytes"
··· 1 + package knotclient 2 3 import ( 4 "bytes"
+4 -3
appview/state/state.go
··· 20 "tangled.sh/tangled.sh/core/api/tangled" 21 "tangled.sh/tangled.sh/core/appview" 22 "tangled.sh/tangled.sh/core/appview/db" 23 "tangled.sh/tangled.sh/core/appview/oauth" 24 "tangled.sh/tangled.sh/core/appview/pages" 25 "tangled.sh/tangled.sh/core/jetstream" ··· 309 return 310 } 311 312 - client, err := NewSignedClient(domain, secret, s.config.Core.Dev) 313 if err != nil { 314 log.Println("failed to create client to ", domain) 315 } ··· 551 return 552 } 553 554 - ksClient, err := NewSignedClient(domain, secret, s.config.Core.Dev) 555 if err != nil { 556 log.Println("failed to create client to ", domain) 557 return ··· 672 return 673 } 674 675 - client, err := NewSignedClient(domain, secret, s.config.Core.Dev) 676 if err != nil { 677 s.pages.Notice(w, "repo", "Failed to connect to knot server.") 678 return
··· 20 "tangled.sh/tangled.sh/core/api/tangled" 21 "tangled.sh/tangled.sh/core/appview" 22 "tangled.sh/tangled.sh/core/appview/db" 23 + "tangled.sh/tangled.sh/core/appview/knotclient" 24 "tangled.sh/tangled.sh/core/appview/oauth" 25 "tangled.sh/tangled.sh/core/appview/pages" 26 "tangled.sh/tangled.sh/core/jetstream" ··· 310 return 311 } 312 313 + client, err := knotclient.NewSignedClient(domain, secret, s.config.Core.Dev) 314 if err != nil { 315 log.Println("failed to create client to ", domain) 316 } ··· 552 return 553 } 554 555 + ksClient, err := knotclient.NewSignedClient(domain, secret, s.config.Core.Dev) 556 if err != nil { 557 log.Println("failed to create client to ", domain) 558 return ··· 673 return 674 } 675 676 + client, err := knotclient.NewSignedClient(domain, secret, s.config.Core.Dev) 677 if err != nil { 678 s.pages.Notice(w, "repo", "Failed to connect to knot server.") 679 return