git.frostfs.info/TrueCloudLab/frostfs-sdk-go@v0.0.0-20241022124111-5361f0ecebd3/session/test/session.go (about)

     1  package sessiontest
     2  
     3  import (
     4  	"crypto/ecdsa"
     5  	"crypto/elliptic"
     6  	"crypto/rand"
     7  
     8  	cidtest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id/test"
     9  	frostfsecdsa "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/crypto/ecdsa"
    10  	oidtest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/id/test"
    11  	"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/session"
    12  	"github.com/google/uuid"
    13  	"github.com/nspcc-dev/neo-go/pkg/crypto/keys"
    14  )
    15  
    16  var p ecdsa.PrivateKey
    17  
    18  func init() {
    19  	k, err := keys.NewPrivateKey()
    20  	if err != nil {
    21  		panic(err)
    22  	}
    23  
    24  	p = k.PrivateKey
    25  }
    26  
    27  // Container returns random session.Container.
    28  //
    29  // Resulting token is unsigned.
    30  func Container() *session.Container {
    31  	var tok session.Container
    32  
    33  	priv, err := ecdsa.GenerateKey(elliptic.P256(), rand.Reader)
    34  	if err != nil {
    35  		panic(err)
    36  	}
    37  
    38  	tok.ForVerb(session.VerbContainerPut)
    39  	tok.ApplyOnlyTo(cidtest.ID())
    40  	tok.SetID(uuid.New())
    41  	tok.SetAuthKey((*frostfsecdsa.PublicKey)(&priv.PublicKey))
    42  	tok.SetExp(11)
    43  	tok.SetNbf(22)
    44  	tok.SetIat(33)
    45  
    46  	return &tok
    47  }
    48  
    49  // ContainerSigned returns signed random session.Container.
    50  //
    51  // Panics if token could not be signed (actually unexpected).
    52  func ContainerSigned() *session.Container {
    53  	tok := Container()
    54  
    55  	err := tok.Sign(p)
    56  	if err != nil {
    57  		panic(err)
    58  	}
    59  
    60  	return tok
    61  }
    62  
    63  // Object returns random session.Object.
    64  //
    65  // Resulting token is unsigned.
    66  func Object() *session.Object {
    67  	var tok session.Object
    68  
    69  	priv, err := ecdsa.GenerateKey(elliptic.P256(), rand.Reader)
    70  	if err != nil {
    71  		panic(err)
    72  	}
    73  
    74  	tok.ForVerb(session.VerbObjectPut)
    75  	tok.BindContainer(cidtest.ID())
    76  	tok.LimitByObjects(oidtest.ID(), oidtest.ID())
    77  	tok.SetID(uuid.New())
    78  	tok.SetAuthKey((*frostfsecdsa.PublicKey)(&priv.PublicKey))
    79  	tok.SetExp(11)
    80  	tok.SetNbf(22)
    81  	tok.SetIat(33)
    82  
    83  	return &tok
    84  }
    85  
    86  // ObjectSigned returns signed random session.Object.
    87  //
    88  // Panics if token could not be signed (actually unexpected).
    89  func ObjectSigned() *session.Object {
    90  	tok := Object()
    91  
    92  	err := tok.Sign(p)
    93  	if err != nil {
    94  		panic(err)
    95  	}
    96  
    97  	return tok
    98  }