+37
appview/oauth/handler/handler.go
+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
+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
+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
+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
+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
+1
appview/state/router.go
+1
-1
appview/state/signer.go
appview/knotclient/signer.go
+1
-1
appview/state/signer.go
appview/knotclient/signer.go
+4
-3
appview/state/state.go
+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