github.com/TrueCloudLab/frostfs-api-go/v2@v2.0.0-20230228134343-196241c4e79a/acl/convert.go (about)

     1  package acl
     2  
     3  import (
     4  	acl "github.com/TrueCloudLab/frostfs-api-go/v2/acl/grpc"
     5  	"github.com/TrueCloudLab/frostfs-api-go/v2/refs"
     6  	refsGRPC "github.com/TrueCloudLab/frostfs-api-go/v2/refs/grpc"
     7  	"github.com/TrueCloudLab/frostfs-api-go/v2/rpc/grpc"
     8  	"github.com/TrueCloudLab/frostfs-api-go/v2/rpc/message"
     9  )
    10  
    11  // RoleToGRPCField converts unified role enum into grpc enum.
    12  func RoleToGRPCField(t Role) acl.Role {
    13  	switch t {
    14  	case RoleUser:
    15  		return acl.Role_USER
    16  	case RoleSystem:
    17  		return acl.Role_SYSTEM
    18  	case RoleOthers:
    19  		return acl.Role_OTHERS
    20  	default:
    21  		return acl.Role_ROLE_UNSPECIFIED
    22  	}
    23  }
    24  
    25  // RoleFromGRPCField converts grpc enum into unified role enum.
    26  func RoleFromGRPCField(t acl.Role) Role {
    27  	switch t {
    28  	case acl.Role_USER:
    29  		return RoleUser
    30  	case acl.Role_SYSTEM:
    31  		return RoleSystem
    32  	case acl.Role_OTHERS:
    33  		return RoleOthers
    34  	default:
    35  		return RoleUnknown
    36  	}
    37  }
    38  
    39  // OperationToGRPCField converts unified operation enum into grpc enum.
    40  func OperationToGRPCField(t Operation) acl.Operation {
    41  	switch t {
    42  	case OperationPut:
    43  		return acl.Operation_PUT
    44  	case OperationDelete:
    45  		return acl.Operation_DELETE
    46  	case OperationGet:
    47  		return acl.Operation_GET
    48  	case OperationHead:
    49  		return acl.Operation_HEAD
    50  	case OperationSearch:
    51  		return acl.Operation_SEARCH
    52  	case OperationRange:
    53  		return acl.Operation_GETRANGE
    54  	case OperationRangeHash:
    55  		return acl.Operation_GETRANGEHASH
    56  	default:
    57  		return acl.Operation_OPERATION_UNSPECIFIED
    58  	}
    59  }
    60  
    61  // OperationFromGRPCField converts grpc enum into unified operation enum.
    62  func OperationFromGRPCField(t acl.Operation) Operation {
    63  	switch t {
    64  	case acl.Operation_PUT:
    65  		return OperationPut
    66  	case acl.Operation_DELETE:
    67  		return OperationDelete
    68  	case acl.Operation_GET:
    69  		return OperationGet
    70  	case acl.Operation_HEAD:
    71  		return OperationHead
    72  	case acl.Operation_SEARCH:
    73  		return OperationSearch
    74  	case acl.Operation_GETRANGE:
    75  		return OperationRange
    76  	case acl.Operation_GETRANGEHASH:
    77  		return OperationRangeHash
    78  	default:
    79  		return OperationUnknown
    80  	}
    81  }
    82  
    83  // ActionToGRPCField converts unified action enum into grpc enum.
    84  func ActionToGRPCField(t Action) acl.Action {
    85  	switch t {
    86  	case ActionDeny:
    87  		return acl.Action_DENY
    88  	case ActionAllow:
    89  		return acl.Action_ALLOW
    90  	default:
    91  		return acl.Action_ACTION_UNSPECIFIED
    92  	}
    93  }
    94  
    95  // ActionFromGRPCField converts grpc enum into unified action enum.
    96  func ActionFromGRPCField(t acl.Action) Action {
    97  	switch t {
    98  	case acl.Action_DENY:
    99  		return ActionDeny
   100  	case acl.Action_ALLOW:
   101  		return ActionAllow
   102  	default:
   103  		return ActionUnknown
   104  	}
   105  }
   106  
   107  // HeaderTypeToGRPCField converts unified header type enum into grpc enum.
   108  func HeaderTypeToGRPCField(t HeaderType) acl.HeaderType {
   109  	switch t {
   110  	case HeaderTypeRequest:
   111  		return acl.HeaderType_REQUEST
   112  	case HeaderTypeObject:
   113  		return acl.HeaderType_OBJECT
   114  	case HeaderTypeService:
   115  		return acl.HeaderType_SERVICE
   116  	default:
   117  		return acl.HeaderType_HEADER_UNSPECIFIED
   118  	}
   119  }
   120  
   121  // HeaderTypeFromGRPCField converts grpc enum into unified header type enum.
   122  func HeaderTypeFromGRPCField(t acl.HeaderType) HeaderType {
   123  	switch t {
   124  	case acl.HeaderType_REQUEST:
   125  		return HeaderTypeRequest
   126  	case acl.HeaderType_OBJECT:
   127  		return HeaderTypeObject
   128  	case acl.HeaderType_SERVICE:
   129  		return HeaderTypeService
   130  	default:
   131  		return HeaderTypeUnknown
   132  	}
   133  }
   134  
   135  // MatchTypeToGRPCField converts unified match type enum into grpc enum.
   136  func MatchTypeToGRPCField(t MatchType) acl.MatchType {
   137  	switch t {
   138  	case MatchTypeStringEqual:
   139  		return acl.MatchType_STRING_EQUAL
   140  	case MatchTypeStringNotEqual:
   141  		return acl.MatchType_STRING_NOT_EQUAL
   142  	default:
   143  		return acl.MatchType_MATCH_TYPE_UNSPECIFIED
   144  	}
   145  }
   146  
   147  // MatchTypeFromGRPCField converts grpc enum into unified match type enum.
   148  func MatchTypeFromGRPCField(t acl.MatchType) MatchType {
   149  	switch t {
   150  	case acl.MatchType_STRING_EQUAL:
   151  		return MatchTypeStringEqual
   152  	case acl.MatchType_STRING_NOT_EQUAL:
   153  		return MatchTypeStringNotEqual
   154  	default:
   155  		return MatchTypeUnknown
   156  	}
   157  }
   158  
   159  func (f *HeaderFilter) ToGRPCMessage() grpc.Message {
   160  	var m *acl.EACLRecord_Filter
   161  
   162  	if f != nil {
   163  		m = new(acl.EACLRecord_Filter)
   164  
   165  		m.SetKey(f.key)
   166  		m.SetValue(f.value)
   167  		m.SetHeader(HeaderTypeToGRPCField(f.hdrType))
   168  		m.SetMatchType(MatchTypeToGRPCField(f.matchType))
   169  	}
   170  
   171  	return m
   172  }
   173  
   174  func (f *HeaderFilter) FromGRPCMessage(m grpc.Message) error {
   175  	v, ok := m.(*acl.EACLRecord_Filter)
   176  	if !ok {
   177  		return message.NewUnexpectedMessageType(m, v)
   178  	}
   179  
   180  	f.key = v.GetKey()
   181  	f.value = v.GetValue()
   182  	f.hdrType = HeaderTypeFromGRPCField(v.GetHeaderType())
   183  	f.matchType = MatchTypeFromGRPCField(v.GetMatchType())
   184  
   185  	return nil
   186  }
   187  
   188  func HeaderFiltersToGRPC(fs []HeaderFilter) (res []*acl.EACLRecord_Filter) {
   189  	if fs != nil {
   190  		res = make([]*acl.EACLRecord_Filter, 0, len(fs))
   191  
   192  		for i := range fs {
   193  			res = append(res, fs[i].ToGRPCMessage().(*acl.EACLRecord_Filter))
   194  		}
   195  	}
   196  
   197  	return
   198  }
   199  
   200  func HeaderFiltersFromGRPC(fs []*acl.EACLRecord_Filter) (res []HeaderFilter, err error) {
   201  	if fs != nil {
   202  		res = make([]HeaderFilter, len(fs))
   203  
   204  		for i := range fs {
   205  			if fs[i] != nil {
   206  				err = res[i].FromGRPCMessage(fs[i])
   207  				if err != nil {
   208  					return
   209  				}
   210  			}
   211  		}
   212  	}
   213  
   214  	return
   215  }
   216  
   217  func (t *Target) ToGRPCMessage() grpc.Message {
   218  	var m *acl.EACLRecord_Target
   219  
   220  	if t != nil {
   221  		m = new(acl.EACLRecord_Target)
   222  
   223  		m.SetRole(RoleToGRPCField(t.role))
   224  		m.SetKeys(t.keys)
   225  	}
   226  
   227  	return m
   228  }
   229  
   230  func (t *Target) FromGRPCMessage(m grpc.Message) error {
   231  	v, ok := m.(*acl.EACLRecord_Target)
   232  	if !ok {
   233  		return message.NewUnexpectedMessageType(m, v)
   234  	}
   235  
   236  	t.role = RoleFromGRPCField(v.GetRole())
   237  	t.keys = v.GetKeys()
   238  
   239  	return nil
   240  }
   241  
   242  func TargetsToGRPC(ts []Target) (res []*acl.EACLRecord_Target) {
   243  	if ts != nil {
   244  		res = make([]*acl.EACLRecord_Target, 0, len(ts))
   245  
   246  		for i := range ts {
   247  			res = append(res, ts[i].ToGRPCMessage().(*acl.EACLRecord_Target))
   248  		}
   249  	}
   250  
   251  	return
   252  }
   253  
   254  func TargetsFromGRPC(fs []*acl.EACLRecord_Target) (res []Target, err error) {
   255  	if fs != nil {
   256  		res = make([]Target, len(fs))
   257  
   258  		for i := range fs {
   259  			if fs[i] != nil {
   260  				err = res[i].FromGRPCMessage(fs[i])
   261  				if err != nil {
   262  					return
   263  				}
   264  			}
   265  		}
   266  	}
   267  
   268  	return
   269  }
   270  
   271  func (r *Record) ToGRPCMessage() grpc.Message {
   272  	var m *acl.EACLRecord
   273  
   274  	if r != nil {
   275  		m = new(acl.EACLRecord)
   276  
   277  		m.SetOperation(OperationToGRPCField(r.op))
   278  		m.SetAction(ActionToGRPCField(r.action))
   279  		m.SetFilters(HeaderFiltersToGRPC(r.filters))
   280  		m.SetTargets(TargetsToGRPC(r.targets))
   281  	}
   282  
   283  	return m
   284  }
   285  
   286  func (r *Record) FromGRPCMessage(m grpc.Message) error {
   287  	v, ok := m.(*acl.EACLRecord)
   288  	if !ok {
   289  		return message.NewUnexpectedMessageType(m, v)
   290  	}
   291  
   292  	var err error
   293  
   294  	r.filters, err = HeaderFiltersFromGRPC(v.GetFilters())
   295  	if err != nil {
   296  		return err
   297  	}
   298  
   299  	r.targets, err = TargetsFromGRPC(v.GetTargets())
   300  	if err != nil {
   301  		return err
   302  	}
   303  
   304  	r.op = OperationFromGRPCField(v.GetOperation())
   305  	r.action = ActionFromGRPCField(v.GetAction())
   306  
   307  	return nil
   308  }
   309  
   310  func RecordsToGRPC(ts []Record) (res []*acl.EACLRecord) {
   311  	if ts != nil {
   312  		res = make([]*acl.EACLRecord, 0, len(ts))
   313  
   314  		for i := range ts {
   315  			res = append(res, ts[i].ToGRPCMessage().(*acl.EACLRecord))
   316  		}
   317  	}
   318  
   319  	return
   320  }
   321  
   322  func RecordsFromGRPC(fs []*acl.EACLRecord) (res []Record, err error) {
   323  	if fs != nil {
   324  		res = make([]Record, len(fs))
   325  
   326  		for i := range fs {
   327  			if fs[i] != nil {
   328  				err = res[i].FromGRPCMessage(fs[i])
   329  				if err != nil {
   330  					return
   331  				}
   332  			}
   333  		}
   334  	}
   335  
   336  	return
   337  }
   338  
   339  func (t *Table) ToGRPCMessage() grpc.Message {
   340  	var m *acl.EACLTable
   341  
   342  	if t != nil {
   343  		m = new(acl.EACLTable)
   344  
   345  		m.SetVersion(t.version.ToGRPCMessage().(*refsGRPC.Version))
   346  		m.SetContainerId(t.cid.ToGRPCMessage().(*refsGRPC.ContainerID))
   347  		m.SetRecords(RecordsToGRPC(t.records))
   348  	}
   349  
   350  	return m
   351  }
   352  
   353  func (t *Table) FromGRPCMessage(m grpc.Message) error {
   354  	v, ok := m.(*acl.EACLTable)
   355  	if !ok {
   356  		return message.NewUnexpectedMessageType(m, v)
   357  	}
   358  
   359  	var err error
   360  
   361  	cid := v.GetContainerId()
   362  	if cid == nil {
   363  		t.cid = nil
   364  	} else {
   365  		if t.cid == nil {
   366  			t.cid = new(refs.ContainerID)
   367  		}
   368  
   369  		err = t.cid.FromGRPCMessage(cid)
   370  		if err != nil {
   371  			return err
   372  		}
   373  	}
   374  
   375  	version := v.GetVersion()
   376  	if version == nil {
   377  		t.version = nil
   378  	} else {
   379  		if t.version == nil {
   380  			t.version = new(refs.Version)
   381  		}
   382  
   383  		err = t.version.FromGRPCMessage(version)
   384  		if err != nil {
   385  			return err
   386  		}
   387  	}
   388  
   389  	t.records, err = RecordsFromGRPC(v.GetRecords())
   390  
   391  	return err
   392  }
   393  
   394  func (l *TokenLifetime) ToGRPCMessage() grpc.Message {
   395  	var m *acl.BearerToken_Body_TokenLifetime
   396  
   397  	if l != nil {
   398  		m = new(acl.BearerToken_Body_TokenLifetime)
   399  
   400  		m.SetExp(l.exp)
   401  		m.SetIat(l.iat)
   402  		m.SetNbf(l.nbf)
   403  	}
   404  
   405  	return m
   406  }
   407  
   408  func (l *TokenLifetime) FromGRPCMessage(m grpc.Message) error {
   409  	v, ok := m.(*acl.BearerToken_Body_TokenLifetime)
   410  	if !ok {
   411  		return message.NewUnexpectedMessageType(m, v)
   412  	}
   413  
   414  	l.exp = v.GetExp()
   415  	l.iat = v.GetIat()
   416  	l.nbf = v.GetNbf()
   417  
   418  	return nil
   419  }
   420  
   421  func (bt *BearerTokenBody) ToGRPCMessage() grpc.Message {
   422  	var m *acl.BearerToken_Body
   423  
   424  	if bt != nil {
   425  		m = new(acl.BearerToken_Body)
   426  
   427  		m.SetOwnerId(bt.ownerID.ToGRPCMessage().(*refsGRPC.OwnerID))
   428  		m.SetLifetime(bt.lifetime.ToGRPCMessage().(*acl.BearerToken_Body_TokenLifetime))
   429  		m.SetEaclTable(bt.eacl.ToGRPCMessage().(*acl.EACLTable))
   430  	}
   431  
   432  	return m
   433  }
   434  
   435  func (bt *BearerTokenBody) FromGRPCMessage(m grpc.Message) error {
   436  	v, ok := m.(*acl.BearerToken_Body)
   437  	if !ok {
   438  		return message.NewUnexpectedMessageType(m, v)
   439  	}
   440  
   441  	var err error
   442  
   443  	ownerID := v.GetOwnerId()
   444  	if ownerID == nil {
   445  		bt.ownerID = nil
   446  	} else {
   447  		if bt.ownerID == nil {
   448  			bt.ownerID = new(refs.OwnerID)
   449  		}
   450  
   451  		err = bt.ownerID.FromGRPCMessage(ownerID)
   452  		if err != nil {
   453  			return err
   454  		}
   455  	}
   456  
   457  	lifetime := v.GetLifetime()
   458  	if lifetime == nil {
   459  		bt.lifetime = nil
   460  	} else {
   461  		if bt.lifetime == nil {
   462  			bt.lifetime = new(TokenLifetime)
   463  		}
   464  
   465  		err = bt.lifetime.FromGRPCMessage(lifetime)
   466  		if err != nil {
   467  			return err
   468  		}
   469  	}
   470  
   471  	eacl := v.GetEaclTable()
   472  	if eacl == nil {
   473  		bt.eacl = nil
   474  	} else {
   475  		if bt.eacl == nil {
   476  			bt.eacl = new(Table)
   477  		}
   478  
   479  		err = bt.eacl.FromGRPCMessage(eacl)
   480  	}
   481  
   482  	return err
   483  }
   484  
   485  func (bt *BearerToken) ToGRPCMessage() grpc.Message {
   486  	var m *acl.BearerToken
   487  
   488  	if bt != nil {
   489  		m = new(acl.BearerToken)
   490  
   491  		m.SetBody(bt.body.ToGRPCMessage().(*acl.BearerToken_Body))
   492  		m.SetSignature(bt.sig.ToGRPCMessage().(*refsGRPC.Signature))
   493  	}
   494  
   495  	return m
   496  }
   497  
   498  func (bt *BearerToken) FromGRPCMessage(m grpc.Message) error {
   499  	v, ok := m.(*acl.BearerToken)
   500  	if !ok {
   501  		return message.NewUnexpectedMessageType(m, v)
   502  	}
   503  
   504  	var err error
   505  
   506  	body := v.GetBody()
   507  	if body == nil {
   508  		bt.body = nil
   509  	} else {
   510  		if bt.body == nil {
   511  			bt.body = new(BearerTokenBody)
   512  		}
   513  
   514  		err = bt.body.FromGRPCMessage(body)
   515  		if err != nil {
   516  			return err
   517  		}
   518  	}
   519  
   520  	sig := v.GetSignature()
   521  	if sig == nil {
   522  		bt.sig = nil
   523  	} else {
   524  		if bt.sig == nil {
   525  			bt.sig = new(refs.Signature)
   526  		}
   527  
   528  		err = bt.sig.FromGRPCMessage(sig)
   529  	}
   530  
   531  	return err
   532  }