mirror of
https://tangled.org/evan.jarrett.net/at-container-registry
synced 2026-09-25 11:44:16 +00:00
remove user oauth flow. hold now contains captain record indicating owner
This commit is contained in:
+2
-59
@@ -2,18 +2,14 @@ package main
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"log"
|
||||
"net/http"
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"atcr.io/pkg/atproto"
|
||||
"atcr.io/pkg/hold"
|
||||
"atcr.io/pkg/hold/pds"
|
||||
indigooauth "github.com/bluesky-social/indigo/atproto/auth/oauth"
|
||||
|
||||
// Import storage drivers
|
||||
_ "github.com/distribution/distribution/v3/registry/storage/driver/filesystem"
|
||||
@@ -48,8 +44,8 @@ func main() {
|
||||
log.Fatalf("Failed to initialize embedded PDS: %v", err)
|
||||
}
|
||||
|
||||
// Bootstrap PDS with hold owner as first crew member
|
||||
if err := holdPDS.Bootstrap(ctx, cfg.Registration.OwnerDID); err != nil {
|
||||
// Bootstrap PDS with captain record and hold owner as first crew member
|
||||
if err := holdPDS.Bootstrap(ctx, cfg.Registration.OwnerDID, cfg.Server.Public, cfg.Registration.AllowAllCrew); err != nil {
|
||||
log.Fatalf("Failed to bootstrap PDS: %v", err)
|
||||
}
|
||||
|
||||
@@ -114,41 +110,6 @@ func main() {
|
||||
service.HandleMultipartPartUpload(w, r, uploadID, partNumber, did, service.MultipartMgr)
|
||||
})
|
||||
|
||||
// Pre-register OAuth callback route (will be populated by auto-registration)
|
||||
var oauthCallbackHandler http.HandlerFunc
|
||||
mux.HandleFunc("/auth/oauth/callback", func(w http.ResponseWriter, r *http.Request) {
|
||||
if oauthCallbackHandler != nil {
|
||||
oauthCallbackHandler(w, r)
|
||||
} else {
|
||||
http.Error(w, "OAuth callback not initialized", http.StatusServiceUnavailable)
|
||||
}
|
||||
})
|
||||
|
||||
// OAuth client metadata endpoint for ATProto OAuth
|
||||
// The hold service serves its metadata at /client-metadata.json
|
||||
// This is referenced by its client ID URL
|
||||
mux.HandleFunc("/client-metadata.json", func(w http.ResponseWriter, r *http.Request) {
|
||||
// Create a temporary config to generate metadata (indigo provides this)
|
||||
redirectURI := cfg.Server.PublicURL + "/auth/oauth/callback"
|
||||
clientID := cfg.Server.PublicURL + "/client-metadata.json"
|
||||
|
||||
// Define scopes needed for hold registration and crew management
|
||||
// Omit action parameter to allow all actions (create, update, delete)
|
||||
scopes := []string{
|
||||
"atproto",
|
||||
fmt.Sprintf("repo:%s", atproto.HoldCollection),
|
||||
fmt.Sprintf("repo:%s", atproto.HoldCrewCollection),
|
||||
fmt.Sprintf("repo:%s", atproto.SailorProfileCollection),
|
||||
}
|
||||
|
||||
config := indigooauth.NewPublicConfig(clientID, redirectURI, scopes)
|
||||
metadata := config.ClientMetadata()
|
||||
|
||||
// Serve as JSON
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
w.Header().Set("Access-Control-Allow-Origin", "*")
|
||||
json.NewEncoder(w).Encode(metadata)
|
||||
})
|
||||
mux.HandleFunc("/blobs/", func(w http.ResponseWriter, r *http.Request) {
|
||||
switch r.Method {
|
||||
case http.MethodGet, http.MethodHead:
|
||||
@@ -183,24 +144,6 @@ func main() {
|
||||
}
|
||||
}()
|
||||
|
||||
// Give server a moment to start
|
||||
time.Sleep(100 * time.Millisecond)
|
||||
|
||||
// Auto-register if owner DID is set (now that server is running)
|
||||
if cfg.Registration.OwnerDID != "" {
|
||||
if err := service.AutoRegister(&oauthCallbackHandler); err != nil {
|
||||
log.Printf("WARNING: Auto-registration failed: %v", err)
|
||||
log.Printf("You can register manually later using the /register endpoint")
|
||||
} else {
|
||||
log.Printf("Successfully registered hold service in PDS")
|
||||
}
|
||||
|
||||
// Reconcile allow-all crew state
|
||||
if err := service.ReconcileAllowAllCrew(&oauthCallbackHandler); err != nil {
|
||||
log.Printf("WARNING: Failed to reconcile allow-all crew state: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
// Wait for server error or shutdown
|
||||
if err := <-serverErr; err != nil {
|
||||
log.Fatalf("Server failed: %v", err)
|
||||
|
||||
Reference in New Issue
Block a user