blob: bd2dfe7d1d9fdf72dfeb8b33703f696710c0bb29 [file] [log] [blame]
// Copyright 2015 The Vanadium 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 xproxy
import (
"fmt"
"v.io/v23"
"v.io/v23/context"
"v.io/v23/flow"
"v.io/v23/flow/message"
"v.io/v23/naming"
"v.io/v23/security"
slib "v.io/x/ref/lib/security"
)
type proxyAuthorizer struct{}
func (proxyAuthorizer) AuthorizePeer(
ctx *context.T,
localEndpoint, remoteEndpoint naming.Endpoint,
remoteBlessings security.Blessings,
remoteDischarges map[string]security.Discharge,
) ([]string, []security.RejectedBlessing, error) {
return nil, nil, nil
}
func (a proxyAuthorizer) BlessingsForPeer(ctx *context.T, serverBlessings []string) (
security.Blessings, map[string]security.Discharge, error) {
blessings := v23.GetPrincipal(ctx).BlessingStore().ForPeer(serverBlessings...)
discharges, _ := slib.PrepareDischarges(ctx, blessings, serverBlessings, "", nil)
return blessings, discharges, nil
}
func writeMessage(ctx *context.T, m message.Message, f flow.Flow) error {
w, err := message.Append(ctx, m, nil)
if err != nil {
return err
}
_, err = f.WriteMsg(w)
return err
}
func readMessage(ctx *context.T, f flow.Flow) (message.Message, error) {
b, err := f.ReadMsg()
if err != nil {
return nil, err
}
return message.Read(ctx, b)
}
func readProxyResponse(ctx *context.T, f flow.Flow) ([]naming.Endpoint, error) {
msg, err := readMessage(ctx, f)
if err != nil {
return nil, err
}
switch m := msg.(type) {
case *message.ProxyResponse:
return m.Endpoints, nil
case *message.ProxyErrorResponse:
f.Close()
return nil, NewErrProxyResponse(ctx, m.Error)
default:
f.Close()
return nil, NewErrUnexpectedMessage(ctx, fmt.Sprintf("%t", m))
}
}