| 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..b2012a4bb12c84b7b9d55d247e8243cf858dfc45
|
| --- /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.AppInstanceName) (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{})
|
| +}
|
|
|