[#525] morph/container: Accept container session token in PutEACL
`SetEACL` method of latest `Container` contract accepts binary session token as an argument. Provide `SetEACLArgs.SetSessionToken` method. Accept session token as a `[]byte` in `Wrapper.PutEACL` method and attach it to `SetEACLArgs`. Marshal session token from container in `wrapper.PutEACL` function and pass it to the method. Signed-off-by: Leonard Lyubich <leonard@nspcc.ru>
This commit is contained in:
parent
c4a3adc8b0
commit
959610080a
3 changed files with 17 additions and 4 deletions
|
@ -69,7 +69,7 @@ func (cp *Processor) checkEACLOwnership(binTable []byte, key *keys.PublicKey) er
|
||||||
}
|
}
|
||||||
|
|
||||||
func (cp *Processor) approveSetEACL(e container.SetEACL) {
|
func (cp *Processor) approveSetEACL(e container.SetEACL) {
|
||||||
err := cp.cnrClient.PutEACL(e.Table(), e.PublicKey(), e.Signature())
|
err := cp.cnrClient.PutEACL(e.Table(), e.PublicKey(), e.Signature(), nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
cp.log.Error("could not approve set EACL",
|
cp.log.Error("could not approve set EACL",
|
||||||
zap.String("error", err.Error()),
|
zap.String("error", err.Error()),
|
||||||
|
|
|
@ -34,6 +34,13 @@ func (p *SetEACLArgs) SetPublicKey(v []byte) {
|
||||||
p.pubkey = v
|
p.pubkey = v
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// SetSessionToken sets token of the session
|
||||||
|
// within which the eACL table was set
|
||||||
|
// in a binary format.
|
||||||
|
func (p *SetEACLArgs) SetSessionToken(v []byte) {
|
||||||
|
p.token = v
|
||||||
|
}
|
||||||
|
|
||||||
// SetEACL invokes the call of set eACL method
|
// SetEACL invokes the call of set eACL method
|
||||||
// of NeoFS Container contract.
|
// of NeoFS Container contract.
|
||||||
func (c *Client) SetEACL(args SetEACLArgs) error {
|
func (c *Client) SetEACL(args SetEACLArgs) error {
|
||||||
|
|
|
@ -70,16 +70,21 @@ func PutEACL(w *Wrapper, table *eacl.Table) error {
|
||||||
return fmt.Errorf("can't marshal eacl table: %w", err)
|
return fmt.Errorf("can't marshal eacl table: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
sig := table.Signature()
|
binToken, err := table.SessionToken().Marshal()
|
||||||
|
if err != nil {
|
||||||
return w.PutEACL(data, sig.Key(), sig.Sign())
|
return fmt.Errorf("could not marshal session token: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// PutEACL saves binary eACL table with its key and signature
|
sig := table.Signature()
|
||||||
|
|
||||||
|
return w.PutEACL(data, sig.Key(), sig.Sign(), binToken)
|
||||||
|
}
|
||||||
|
|
||||||
|
// PutEACL saves binary eACL table with its session token, key and signature
|
||||||
// in NeoFS system through Container contract call.
|
// in NeoFS system through Container contract call.
|
||||||
//
|
//
|
||||||
// Returns any error encountered that caused the saving to interrupt.
|
// Returns any error encountered that caused the saving to interrupt.
|
||||||
func (w *Wrapper) PutEACL(table, key, sig []byte) error {
|
func (w *Wrapper) PutEACL(table, key, sig, token []byte) error {
|
||||||
if len(sig) == 0 || len(key) == 0 {
|
if len(sig) == 0 || len(key) == 0 {
|
||||||
return errNilArgument
|
return errNilArgument
|
||||||
}
|
}
|
||||||
|
@ -88,6 +93,7 @@ func (w *Wrapper) PutEACL(table, key, sig []byte) error {
|
||||||
args.SetSignature(sig)
|
args.SetSignature(sig)
|
||||||
args.SetPublicKey(key)
|
args.SetPublicKey(key)
|
||||||
args.SetEACL(table)
|
args.SetEACL(table)
|
||||||
|
args.SetSessionToken(token)
|
||||||
|
|
||||||
return w.client.SetEACL(args)
|
return w.client.SetEACL(args)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue