···1920 // temporarily, to add users to default knot and spindle21 AppPassword string `env:"APP_PASSWORD"`00022}2324type OAuthConfig struct {
···1920 // temporarily, to add users to default knot and spindle21 AppPassword string `env:"APP_PASSWORD"`22+23+ // uhhhh this is because knot1 is under icy's did24+ TmpAltAppPassword string `env:"ALT_APP_PASSWORD, required"`25}2627type OAuthConfig struct {
+20-18
appview/oauth/handler/handler.go
···354}355356var (357- tangledHandle = "tangled.sh"358- tangledDid = "did:plc:wshs7t2adsemcrrd4snkeqli"0359 defaultSpindle = "spindle.tangled.sh"360 defaultKnot = "knot1.tangled.sh"361)···380 }381382 log.Printf("adding %s to default spindle", did)383- session, err := o.createAppPasswordSession()384 if err != nil {385 log.Printf("failed to create session: %s", err)386 return···393 CreatedAt: time.Now().Format(time.RFC3339),394 }395396- if err := session.putRecord(record); err != nil {397- log.Printf("failed to add member to default knot: %s", err)398 return399 }400···417 }418419 log.Printf("adding %s to default knot", did)420- session, err := o.createAppPasswordSession()421 if err != nil {422 log.Printf("failed to create session: %s", err)423 return···430 CreatedAt: time.Now().Format(time.RFC3339),431 }432433- if err := session.putRecord(record); err != nil {434 log.Printf("failed to add member to default knot: %s", err)435 return436 }···442type session struct {443 AccessJwt string `json:"accessJwt"`444 PdsEndpoint string0445}446447-func (o *OAuthHandler) createAppPasswordSession() (*session, error) {448- appPassword := o.config.Core.AppPassword449 if appPassword == "" {450 return nil, fmt.Errorf("no app password configured, skipping member addition")451 }452453- resolved, err := o.idResolver.ResolveIdent(context.Background(), tangledDid)454 if err != nil {455- return nil, fmt.Errorf("failed to resolve tangled.sh DID %s: %v", tangledDid, err)456 }457458 pdsEndpoint := resolved.PDSEndpoint()459 if pdsEndpoint == "" {460- return nil, fmt.Errorf("no PDS endpoint found for tangled.sh DID %s", tangledDid)461 }462463 sessionPayload := map[string]string{464- "identifier": tangledHandle,465 "password": appPassword,466 }467 sessionBytes, err := json.Marshal(sessionPayload)···493 }494495 session.PdsEndpoint = pdsEndpoint0496497 return &session, nil498}499500-func (s *session) putRecord(record any) error {501 recordBytes, err := json.Marshal(record)502 if err != nil {503 return fmt.Errorf("failed to marshal knot member record: %w", err)504 }505506 payload := map[string]any{507- "repo": tangledDid,508- "collection": tangled.KnotMemberNSID,509 "rkey": tid.TID(),510 "record": json.RawMessage(recordBytes),511 }···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 Knot: %w", err)532 }533 defer resp.Body.Close()534535 if resp.StatusCode != http.StatusOK {536- return fmt.Errorf("failed to add user to default Knot: HTTP %d", resp.StatusCode)537 }538539 return nil
···354}355356var (357+ tangledDid = "did:plc:wshs7t2adsemcrrd4snkeqli"358+ icyDid = "did:plc:hwevmowznbiukdf6uk5dwrrq"359+360 defaultSpindle = "spindle.tangled.sh"361 defaultKnot = "knot1.tangled.sh"362)···379 }380381 log.Printf("adding %s to default spindle", did)382+ session, err := o.createAppPasswordSession(o.config.Core.AppPassword, tangledDid)383 if err != nil {384 log.Printf("failed to create session: %s", err)385 return···392 CreatedAt: time.Now().Format(time.RFC3339),393 }394395+ if err := session.putRecord(record, tangled.SpindleMemberNSID); err != nil {396+ log.Printf("failed to add member to default spindle: %s", err)397 return398 }399···416 }417418 log.Printf("adding %s to default knot", did)419+ session, err := o.createAppPasswordSession(o.config.Core.TmpAltAppPassword, icyDid)420 if err != nil {421 log.Printf("failed to create session: %s", err)422 return···429 CreatedAt: time.Now().Format(time.RFC3339),430 }431432+ if err := session.putRecord(record, tangled.KnotMemberNSID); err != nil {433 log.Printf("failed to add member to default knot: %s", err)434 return435 }···441type session struct {442 AccessJwt string `json:"accessJwt"`443 PdsEndpoint string444+ Did string445}446447+func (o *OAuthHandler) createAppPasswordSession(appPassword, did string) (*session, error) {0448 if appPassword == "" {449 return nil, fmt.Errorf("no app password configured, skipping member addition")450 }451452+ resolved, err := o.idResolver.ResolveIdent(context.Background(), did)453 if err != nil {454+ return nil, fmt.Errorf("failed to resolve tangled.sh DID %s: %v", did, err)455 }456457 pdsEndpoint := resolved.PDSEndpoint()458 if pdsEndpoint == "" {459+ return nil, fmt.Errorf("no PDS endpoint found for tangled.sh DID %s", did)460 }461462 sessionPayload := map[string]string{463+ "identifier": did,464 "password": appPassword,465 }466 sessionBytes, err := json.Marshal(sessionPayload)···492 }493494 session.PdsEndpoint = pdsEndpoint495+ session.Did = did496497 return &session, nil498}499500+func (s *session) putRecord(record any, collection string) error {501 recordBytes, err := json.Marshal(record)502 if err != nil {503 return fmt.Errorf("failed to marshal knot member record: %w", err)504 }505506 payload := map[string]any{507+ "repo": s.Did,508+ "collection": collection,509 "rkey": tid.TID(),510 "record": json.RawMessage(recordBytes),511 }···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 service: %w", err)530 }531 defer resp.Body.Close()532533 if resp.StatusCode != http.StatusOK {534+ return fmt.Errorf("failed to add user to default service: HTTP %d", resp.StatusCode)535 }536537 return nil