@@ -15,7 +15,6 @@ import (
1515 "github.com/fil-forge/sprue/pkg/service/ui"
1616 "github.com/fil-forge/sprue/pkg/store/agent"
1717 delegation_store "github.com/fil-forge/sprue/pkg/store/delegation"
18- "github.com/fil-forge/ucantone/did"
1918 "github.com/fil-forge/ucantone/did/key"
2019 "github.com/fil-forge/ucantone/did/plc"
2120 "github.com/fil-forge/ucantone/did/resolver"
@@ -35,6 +34,10 @@ import (
3534 "go.uber.org/zap"
3635)
3736
37+ // DefaultPLCDirectory is the did:plc directory endpoint used when none is
38+ // configured.
39+ const DefaultPLCDirectory = "https://plc.directory"
40+
3841type serviceConfig struct {
3942 serverOptions []server.HTTPOption
4043 insecureDIDResolution bool
@@ -60,7 +63,7 @@ func WithInsecureDIDResolution(enabled bool) Option {
6063
6164// WithPLCDirectory sets the did:plc directory endpoint used to resolve
6265// did:plc issuers (e.g. tenants invoking /provider/add during bucket
63- // provisioning). Empty leaves did:plc unresolvable .
66+ // provisioning). Empty uses DefaultPLCDirectory .
6467func WithPLCDirectory (directory string ) Option {
6568 return func (c * serviceConfig ) {
6669 c .plcDirectory = directory
@@ -113,21 +116,22 @@ func createUCANServer(id multikey.Issuer, agentStore agent.Store, handlers []ser
113116 return nil , fmt .Errorf ("creating DID document for service identity: %w" , err )
114117 }
115118
116- // did:plc resolution is enabled when a directory endpoint is configured β
117- // needed to verify did:plc issuers (e.g. tenants signing /provider/add
118- // invocations during bucket provisioning).
119- var plcResolver did.Resolver
120- if cfg .plcDirectory != "" {
121- u , err := url .Parse (cfg .plcDirectory )
122- if err != nil {
123- return nil , fmt .Errorf ("parsing PLC directory URL %q: %w" , cfg .plcDirectory , err )
124- }
125- p , err := plc .NewResolver (* u )
126- if err != nil {
127- return nil , fmt .Errorf ("creating did:plc resolver: %w" , err )
128- }
129- plcResolver = resolver .NewCached (p , time .Hour * 3 )
119+ // did:plc resolution is always enabled β needed to verify did:plc issuers
120+ // (e.g. tenants signing /provider/add invocations during bucket
121+ // provisioning). An empty configured directory falls back to the default.
122+ plcDirectory := cfg .plcDirectory
123+ if plcDirectory == "" {
124+ plcDirectory = DefaultPLCDirectory
130125 }
126+ u , err := url .Parse (plcDirectory )
127+ if err != nil {
128+ return nil , fmt .Errorf ("parsing PLC directory URL %q: %w" , plcDirectory , err )
129+ }
130+ p , err := plc .NewResolver (* u )
131+ if err != nil {
132+ return nil , fmt .Errorf ("creating did:plc resolver: %w" , err )
133+ }
134+ plcResolver := resolver .NewCached (p , time .Hour * 3 )
131135
132136 resolver := resolver.ByMethod {
133137 "key" : key .Resolver ,
@@ -136,9 +140,7 @@ func createUCANServer(id multikey.Issuer, agentStore agent.Store, handlers []ser
136140 resolver .NewCached (webResolver , time .Hour * 3 ),
137141 },
138142 "mailto" : didmailto .NewResolver (id .DID ()),
139- }
140- if plcResolver != nil {
141- resolver ["plc" ] = plcResolver
143+ "plc" : plcResolver ,
142144 }
143145
144146 factories := validator .DefaultFactories ()
0 commit comments