Index: services/vanadium/security/principal_service.go |
diff --git a/services/vanadium/security/principal_service.go b/services/vanadium/security/principal_service.go |
new file mode 100644 |
index 0000000000000000000000000000000000000000..8c6570a22a8fa3e4e1c4c8af5c6e9877e46fa524 |
--- /dev/null |
+++ b/services/vanadium/security/principal_service.go |
@@ -0,0 +1,85 @@ |
+// Copyright 2015 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+package main |
+ |
+import ( |
+ "log" |
+ |
+ "golang.org/x/mobile/app" |
+ |
+ "mojo/public/go/application" |
+ "mojo/public/go/bindings" |
+ "mojo/public/go/system" |
+ "mojo/services/vanadium/security/public/interfaces/principal" |
+) |
+ |
+//#include "mojo/public/c/system/types.h" |
+import "C" |
+ |
+type PrincipalServiceImpl struct { |
+ defaultBlessing *principal.Blessing |
+} |
+ |
+func (p *PrincipalServiceImpl) Login() (b *principal.Blessing, err error) { |
+ return p.defaultBlessing, nil |
+} |
+ |
+func (p *PrincipalServiceImpl) Logout() (err error) { |
+ return nil |
+} |
+ |
+func (p *PrincipalServiceImpl) Sign(msg []byte) (s *principal.Signature, err error) { |
+ return nil, nil |
+} |
+ |
+func (p *PrincipalServiceImpl) GetUserBlessing(app principal.AppName) (b *principal.Blessing, err error) { |
+ return p.defaultBlessing, nil |
+} |
+ |
+type PrincipalServiceDelegate struct { |
+ psImpl *PrincipalServiceImpl |
+ stubs []*bindings.Stub |
+} |
+ |
+func (d *PrincipalServiceDelegate) Initialize(context application.Context) { |
+ defaultCertChain := []principal.Certificate{principal.Certificate{Extension:"default"}} |
+ d.psImpl = &PrincipalServiceImpl{&principal.Blessing{defaultCertChain}} |
+} |
+ |
+func (d *PrincipalServiceDelegate) Create(r principal.PrincipalService_Request) { |
+ stub := principal.NewPrincipalServiceStub(r, d.psImpl, bindings.GetAsyncWaiter()) |
+ d.stubs = append(d.stubs, stub) |
+ go func() { |
+ for { |
+ if err := stub.ServeRequest(); err != nil { |
+ connectionError, ok := err.(*bindings.ConnectionError) |
+ if !ok || !connectionError.Closed() { |
+ log.Println(err) |
+ } |
+ break |
+ } |
+ } |
+ }() |
+} |
+ |
+func (d *PrincipalServiceDelegate) AcceptConnection(connection *application.Connection) { |
+ connection.ProvideServices(&principal.PrincipalService_ServiceFactory{d}) |
+} |
+ |
+func (d *PrincipalServiceDelegate) Quit() { |
+ for _, stub := range d.stubs { |
+ stub.Close() |
+ } |
+} |
+ |
+//export MojoMain |
+func MojoMain(handle C.MojoHandle) C.MojoResult { |
+ application.Run(&PrincipalServiceDelegate{}, system.MojoHandle(handle)) |
+ return C.MOJO_RESULT_OK |
+} |
+ |
+func main() { |
+ app.Run(app.Callbacks{}) |
+} |