+3
appview/config/config.go
+3
appview/config/config.go
+20
-18
appview/oauth/handler/handler.go
+20
-18
appview/oauth/handler/handler.go
···
354
}
355
356
var (
357
-
tangledHandle = "tangled.sh"
358
-
tangledDid = "did:plc:wshs7t2adsemcrrd4snkeqli"
359
defaultSpindle = "spindle.tangled.sh"
360
defaultKnot = "knot1.tangled.sh"
361
)
···
379
}
380
381
log.Printf("adding %s to default spindle", did)
382
-
session, err := o.createAppPasswordSession()
383
if err != nil {
384
log.Printf("failed to create session: %s", err)
385
return
···
392
CreatedAt: time.Now().Format(time.RFC3339),
393
}
394
395
-
if err := session.putRecord(record); err != nil {
396
-
log.Printf("failed to add member to default knot: %s", err)
397
return
398
}
399
···
416
}
417
418
log.Printf("adding %s to default knot", did)
419
-
session, err := o.createAppPasswordSession()
420
if err != nil {
421
log.Printf("failed to create session: %s", err)
422
return
···
429
CreatedAt: time.Now().Format(time.RFC3339),
430
}
431
432
-
if err := session.putRecord(record); err != nil {
433
log.Printf("failed to add member to default knot: %s", err)
434
return
435
}
···
441
type session struct {
442
AccessJwt string `json:"accessJwt"`
443
PdsEndpoint string
444
}
445
446
-
func (o *OAuthHandler) createAppPasswordSession() (*session, error) {
447
-
appPassword := o.config.Core.AppPassword
448
if appPassword == "" {
449
return nil, fmt.Errorf("no app password configured, skipping member addition")
450
}
451
452
-
resolved, err := o.idResolver.ResolveIdent(context.Background(), tangledDid)
453
if err != nil {
454
-
return nil, fmt.Errorf("failed to resolve tangled.sh DID %s: %v", tangledDid, err)
455
}
456
457
pdsEndpoint := resolved.PDSEndpoint()
458
if pdsEndpoint == "" {
459
-
return nil, fmt.Errorf("no PDS endpoint found for tangled.sh DID %s", tangledDid)
460
}
461
462
sessionPayload := map[string]string{
463
-
"identifier": tangledHandle,
464
"password": appPassword,
465
}
466
sessionBytes, err := json.Marshal(sessionPayload)
···
492
}
493
494
session.PdsEndpoint = pdsEndpoint
495
496
return &session, nil
497
}
498
499
-
func (s *session) putRecord(record any) error {
500
recordBytes, err := json.Marshal(record)
501
if err != nil {
502
return fmt.Errorf("failed to marshal knot member record: %w", err)
503
}
504
505
payload := map[string]any{
506
-
"repo": tangledDid,
507
-
"collection": tangled.KnotMemberNSID,
508
"rkey": tid.TID(),
509
"record": json.RawMessage(recordBytes),
510
}
···
526
client := &http.Client{Timeout: 30 * time.Second}
527
resp, err := client.Do(req)
528
if err != nil {
529
-
return fmt.Errorf("failed to add user to default Knot: %w", err)
530
}
531
defer resp.Body.Close()
532
533
if resp.StatusCode != http.StatusOK {
534
-
return fmt.Errorf("failed to add user to default Knot: HTTP %d", resp.StatusCode)
535
}
536
537
return nil
···
354
}
355
356
var (
357
+
tangledDid = "did:plc:wshs7t2adsemcrrd4snkeqli"
358
+
icyDid = "did:plc:hwevmowznbiukdf6uk5dwrrq"
359
+
360
defaultSpindle = "spindle.tangled.sh"
361
defaultKnot = "knot1.tangled.sh"
362
)
···
380
}
381
382
log.Printf("adding %s to default spindle", did)
383
+
session, err := o.createAppPasswordSession(o.config.Core.AppPassword, tangledDid)
384
if err != nil {
385
log.Printf("failed to create session: %s", err)
386
return
···
393
CreatedAt: time.Now().Format(time.RFC3339),
394
}
395
396
+
if err := session.putRecord(record, tangled.SpindleMemberNSID); err != nil {
397
+
log.Printf("failed to add member to default spindle: %s", err)
398
return
399
}
400
···
417
}
418
419
log.Printf("adding %s to default knot", did)
420
+
session, err := o.createAppPasswordSession(o.config.Core.TmpAltAppPassword, icyDid)
421
if err != nil {
422
log.Printf("failed to create session: %s", err)
423
return
···
430
CreatedAt: time.Now().Format(time.RFC3339),
431
}
432
433
+
if err := session.putRecord(record, tangled.KnotMemberNSID); err != nil {
434
log.Printf("failed to add member to default knot: %s", err)
435
return
436
}
···
442
type session struct {
443
AccessJwt string `json:"accessJwt"`
444
PdsEndpoint string
445
+
Did string
446
}
447
448
+
func (o *OAuthHandler) createAppPasswordSession(appPassword, did string) (*session, error) {
449
if appPassword == "" {
450
return nil, fmt.Errorf("no app password configured, skipping member addition")
451
}
452
453
+
resolved, err := o.idResolver.ResolveIdent(context.Background(), did)
454
if err != nil {
455
+
return nil, fmt.Errorf("failed to resolve tangled.sh DID %s: %v", did, err)
456
}
457
458
pdsEndpoint := resolved.PDSEndpoint()
459
if pdsEndpoint == "" {
460
+
return nil, fmt.Errorf("no PDS endpoint found for tangled.sh DID %s", did)
461
}
462
463
sessionPayload := map[string]string{
464
+
"identifier": did,
465
"password": appPassword,
466
}
467
sessionBytes, err := json.Marshal(sessionPayload)
···
493
}
494
495
session.PdsEndpoint = pdsEndpoint
496
+
session.Did = did
497
498
return &session, nil
499
}
500
501
+
func (s *session) putRecord(record any, collection string) error {
502
recordBytes, err := json.Marshal(record)
503
if err != nil {
504
return fmt.Errorf("failed to marshal knot member record: %w", err)
505
}
506
507
payload := map[string]any{
508
+
"repo": s.Did,
509
+
"collection": collection,
510
"rkey": tid.TID(),
511
"record": json.RawMessage(recordBytes),
512
}
···
528
client := &http.Client{Timeout: 30 * time.Second}
529
resp, err := client.Do(req)
530
if err != nil {
531
+
return fmt.Errorf("failed to add user to default service: %w", err)
532
}
533
defer resp.Body.Close()
534
535
if resp.StatusCode != http.StatusOK {
536
+
return fmt.Errorf("failed to add user to default service: HTTP %d", resp.StatusCode)
537
}
538
539
return nil