wsprd: Pass the user language between wspr and JS
Fixes: https://github.com/vanadium/issues/issues/364
MultiPart: 2/2
Change-Id: I31ca64005c9d04b462658e0fcfc8f6dc278e0b34
diff --git a/services/wspr/internal/app/app.go b/services/wspr/internal/app/app.go
index baa5bda..1496e41 100644
--- a/services/wspr/internal/app/app.go
+++ b/services/wspr/internal/app/app.go
@@ -17,6 +17,7 @@
"v.io/v23"
"v.io/v23/context"
+ "v.io/v23/i18n"
"v.io/v23/naming"
"v.io/v23/options"
"v.io/v23/rpc"
@@ -510,6 +511,7 @@
vlog.VI(2).Infof("Rpc: %s.%s(..., streaming=%v)", msg.Name, msg.Method, msg.IsStreaming)
spanName := fmt.Sprintf("<wspr>%q.%s", msg.Name, msg.Method)
ctx, span := vtrace.WithContinuedTrace(ctx, spanName, msg.TraceRequest)
+ ctx = i18n.WithLangID(ctx, i18n.LangID(msg.Context.Language))
var cctx *context.T
var cancel context.CancelFunc
diff --git a/services/wspr/internal/app/app.vdl b/services/wspr/internal/app/app.vdl
index 46d7689..f29c6be 100644
--- a/services/wspr/internal/app/app.vdl
+++ b/services/wspr/internal/app/app.vdl
@@ -23,6 +23,7 @@
IsStreaming bool
Deadline time.WireDeadline
TraceRequest vtrace.Request
+ Context server.Context
CallOptions []RpcCallOption
}
diff --git a/services/wspr/internal/app/app.vdl.go b/services/wspr/internal/app/app.vdl.go
index 76358f7..8c12344 100644
--- a/services/wspr/internal/app/app.vdl.go
+++ b/services/wspr/internal/app/app.vdl.go
@@ -30,6 +30,7 @@
IsStreaming bool
Deadline time_2.Deadline
TraceRequest vtrace.Request
+ Context server.Context
CallOptions []RpcCallOption
}
diff --git a/services/wspr/internal/rpc/server/server.go b/services/wspr/internal/rpc/server/server.go
index 2069d8c..ac7d2b5 100644
--- a/services/wspr/internal/rpc/server/server.go
+++ b/services/wspr/internal/rpc/server/server.go
@@ -14,6 +14,7 @@
"v.io/v23"
"v.io/v23/context"
+ "v.io/v23/i18n"
"v.io/v23/naming"
"v.io/v23/rpc"
"v.io/v23/security"
@@ -63,6 +64,7 @@
ServerId uint32 `json:"serverId"`
Handle int32 `json:"handle"`
Call SecurityCall `json:"call"`
+ Context Context
}
type Server struct {
@@ -152,9 +154,12 @@
}
rpcCall := ServerRpcRequestCall{
- SecurityCall: securityCall,
- Deadline: timeout,
- TraceRequest: vtrace.GetRequest(ctx),
+ SecurityCall: securityCall,
+ Deadline: timeout,
+ TraceRequest: vtrace.GetRequest(ctx),
+ Context: Context{
+ Language: string(i18n.GetLangID(ctx)),
+ },
GrantedBlessings: grantedBlessings,
}
@@ -270,6 +275,9 @@
SecurityCall: securityCall,
Deadline: timeout,
GrantedBlessings: grantedBlessings,
+ Context: Context{
+ Language: string(i18n.GetLangID(ctx)),
+ },
}
// Send a invocation request to JavaScript
@@ -366,6 +374,9 @@
flow := s.helper.CreateNewFlow(s, nil)
req := CaveatValidationRequest{
Call: ConvertSecurityCall(s.helper, ctx, call, false),
+ Context: Context{
+ Language: string(i18n.GetLangID(ctx)),
+ },
Cavs: cavs,
}
@@ -546,6 +557,9 @@
ServerId: s.id,
Handle: handle,
Call: securityCall,
+ Context: Context{
+ Language: string(i18n.GetLangID(ctx)),
+ },
}
vlog.VI(0).Infof("Sending out auth request for %v, %v", flow.ID, message)
diff --git a/services/wspr/internal/rpc/server/server.vdl b/services/wspr/internal/rpc/server/server.vdl
index 06eda35..f069c39 100644
--- a/services/wspr/internal/rpc/server/server.vdl
+++ b/services/wspr/internal/rpc/server/server.vdl
@@ -12,6 +12,10 @@
"v.io/x/ref/services/wspr/internal/principal"
)
+type Context struct {
+ Language string
+}
+
type SecurityCall struct {
Method string
Suffix string
@@ -26,6 +30,7 @@
type CaveatValidationRequest struct {
Call SecurityCall
+ Context Context
Cavs [][]security.Caveat
}
@@ -42,6 +47,7 @@
type ServerRpcRequestCall struct {
SecurityCall SecurityCall
Deadline time.WireDeadline
+ Context Context
TraceRequest vtrace.Request
GrantedBlessings ?principal.JsBlessings
}
diff --git a/services/wspr/internal/rpc/server/server.vdl.go b/services/wspr/internal/rpc/server/server.vdl.go
index 1f3aafe..3df8ccf 100644
--- a/services/wspr/internal/rpc/server/server.vdl.go
+++ b/services/wspr/internal/rpc/server/server.vdl.go
@@ -21,6 +21,15 @@
"v.io/x/ref/services/wspr/internal/principal"
)
+type Context struct {
+ Language string
+}
+
+func (Context) __VDLReflect(struct {
+ Name string "v.io/x/ref/services/wspr/internal/rpc/server.Context"
+}) {
+}
+
type SecurityCall struct {
Method string
Suffix string
@@ -39,8 +48,9 @@
}
type CaveatValidationRequest struct {
- Call SecurityCall
- Cavs [][]security.Caveat
+ Call SecurityCall
+ Context Context
+ Cavs [][]security.Caveat
}
func (CaveatValidationRequest) __VDLReflect(struct {
@@ -60,6 +70,7 @@
type ServerRpcRequestCall struct {
SecurityCall SecurityCall
Deadline time.Deadline
+ Context Context
TraceRequest vtrace.Request
GrantedBlessings *principal.JsBlessings
}
@@ -84,6 +95,7 @@
}
func init() {
+ vdl.Register((*Context)(nil))
vdl.Register((*SecurityCall)(nil))
vdl.Register((*CaveatValidationRequest)(nil))
vdl.Register((*CaveatValidationResponse)(nil))