// 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 blesser

import (
	"v.io/v23/context"
	"v.io/v23/rpc"
	"v.io/v23/security"
)

type rpcCall struct {
	rpc.ServerCall
	secCall security.Call
}

func (c rpcCall) Security() security.Call { return c.secCall }

func fakeContextAndCall(provider, user security.Principal) (*context.T, rpc.ServerCall) {
	ctx, _ := context.RootContext()
	return ctx, rpcCall{secCall: security.NewCall(&security.CallParams{
		LocalPrincipal:  provider,
		LocalBlessings:  blessSelf(provider, "provider"),
		RemoteBlessings: blessSelf(user, "self-signed-user"),
	})}
}

func blessSelf(p security.Principal, name string) security.Blessings {
	b, err := p.BlessSelf(name)
	if err != nil {
		panic(err)
	}
	return b
}

func newCaveat(c security.Caveat, err error) security.Caveat {
	if err != nil {
		panic(err)
	}
	return c
}
