services/identity: Add --mountprefix flag
Add a flag to specify the prefix for the name that identityd published
in the namespace. The default value is "identity", just like the
previously hard-coded value.
I intend to set --mountprefix=/ns.dev.v.io:8101/identity on the
production instance such that the published name does not depend on the
local namespace provided by the device manager.
Change-Id: Icc82fb655fc0947ab406808f5148982864913112
diff --git a/services/identity/identityd/main.go b/services/identity/identityd/main.go
index f87b419..5f14b6d 100644
--- a/services/identity/identityd/main.go
+++ b/services/identity/identityd/main.go
@@ -39,6 +39,7 @@
httpaddr = flag.String("httpaddr", "localhost:8125", "Address on which the HTTP server listens on.")
tlsconfig = flag.String("tlsconfig", "", "Comma-separated list of TLS certificate and private key files, in that order. This must be provided.")
assetsprefix = flag.String("assetsprefix", "", "host serving the web assets for the identity server")
+ mountPrefix = flag.String("mountprefix", "identity", "mount name prefix to use. May be rooted.")
)
func main() {
@@ -79,7 +80,8 @@
googleOAuthBlesserParams(googleoauth, revocationManager),
caveats.NewBrowserCaveatSelector(*assetsprefix),
&emailClassifier,
- *assetsprefix)
+ *assetsprefix,
+ *mountPrefix)
s.Serve(ctx, &listenSpec, *externalHttpAddr, *httpaddr, *tlsconfig)
}
diff --git a/services/identity/identityd_test/main.go b/services/identity/identityd_test/main.go
index 124a816..0e58ec9 100644
--- a/services/identity/identityd_test/main.go
+++ b/services/identity/identityd_test/main.go
@@ -31,6 +31,7 @@
httpAddr = flag.String("httpaddr", "localhost:0", "Address on which the HTTP server listens on.")
tlsconfig = flag.String("tlsconfig", "", "Comma-separated list of TLS certificate and private key files, in that order. This must be provided.")
assetsprefix = flag.String("assetsprefix", "", "host serving the web assets for the identity server")
+ mountPrefix = flag.String("mountprefix", "identity", "mount name prefix to use. May be rooted.")
)
func main() {
@@ -81,7 +82,8 @@
params,
caveats.NewMockCaveatSelector(),
nil,
- *assetsprefix)
+ *assetsprefix,
+ *mountPrefix)
s.Serve(ctx, &listenSpec, *externalHttpAddr, *httpAddr, *tlsconfig)
}
diff --git a/services/identity/internal/server/identityd.go b/services/identity/internal/server/identityd.go
index e0bcf59..1a8c130 100644
--- a/services/identity/internal/server/identityd.go
+++ b/services/identity/internal/server/identityd.go
@@ -61,6 +61,7 @@
emailClassifier *util.EmailClassifier
rootedObjectAddrs []naming.Endpoint
assetsPrefix string
+ mountNamePrefix string
}
// NewIdentityServer returns a IdentityServer that:
@@ -68,7 +69,7 @@
// - auditor and blessingLogReader to audit the root principal and read audit logs
// - revocationManager to store revocation data and grant discharges
// - oauthBlesserParams to configure the identity.OAuthBlesser service
-func NewIdentityServer(oauthProvider oauth.OAuthProvider, auditor audit.Auditor, blessingLogReader auditor.BlessingLogReader, revocationManager revocation.RevocationManager, oauthBlesserParams blesser.OAuthBlesserParams, caveatSelector caveats.CaveatSelector, emailClassifier *util.EmailClassifier, assetsPrefix string) *IdentityServer {
+func NewIdentityServer(oauthProvider oauth.OAuthProvider, auditor audit.Auditor, blessingLogReader auditor.BlessingLogReader, revocationManager revocation.RevocationManager, oauthBlesserParams blesser.OAuthBlesserParams, caveatSelector caveats.CaveatSelector, emailClassifier *util.EmailClassifier, assetsPrefix, mountNamePrefix string) *IdentityServer {
return &IdentityServer{
oauthProvider: oauthProvider,
auditor: auditor,
@@ -78,6 +79,7 @@
caveatSelector: caveatSelector,
emailClassifier: emailClassifier,
assetsPrefix: assetsPrefix,
+ mountNamePrefix: mountNamePrefix,
}
}
@@ -214,17 +216,18 @@
}
principal := v23.GetPrincipal(ctx)
- objectAddr := naming.Join("identity", fmt.Sprintf("%v", principal.BlessingStore().Default()))
- var rootedObjectAddr string
- if eps, err := server.Listen(*listenSpec); err != nil {
+ objectAddr := naming.Join(s.mountNamePrefix, fmt.Sprintf("%v", principal.BlessingStore().Default()))
+ if s.rootedObjectAddrs, err = server.Listen(*listenSpec); err != nil {
defer server.Stop()
return nil, nil, fmt.Errorf("server.Listen(%v) failed: %v", *listenSpec, err)
+ }
+ var rootedObjectAddr string
+ if naming.Rooted(objectAddr) {
+ rootedObjectAddr = objectAddr
} else if nsroots := v23.GetNamespace(ctx).Roots(); len(nsroots) >= 1 {
rootedObjectAddr = naming.Join(nsroots[0], objectAddr)
- s.rootedObjectAddrs = eps
} else {
- rootedObjectAddr = eps[0].Name()
- s.rootedObjectAddrs = eps
+ rootedObjectAddr = s.rootedObjectAddrs[0].Name()
}
dispatcher := newDispatcher(macaroonKey, oauthBlesserParams(s.oauthBlesserParams, rootedObjectAddr))
if err := server.ServeDispatcher(objectAddr, dispatcher); err != nil {
diff --git a/services/identity/modules/test_identityd.go b/services/identity/modules/test_identityd.go
index 9b5ebac..d8309b1 100644
--- a/services/identity/modules/test_identityd.go
+++ b/services/identity/modules/test_identityd.go
@@ -93,7 +93,8 @@
params,
caveats.NewMockCaveatSelector(),
nil,
- "")
+ "",
+ "identity")
l := v23.GetListenSpec(ctx)