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

     1  package eacl
     2  
     3  import (
     4  	v2acl "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/acl"
     5  )
     6  
     7  // Action taken if ContainerEACL record matched request.
     8  // Action is compatible with v2 acl.Action enum.
     9  type Action uint32
    10  
    11  const (
    12  	// ActionUnknown is an Action value used to mark action as undefined.
    13  	ActionUnknown Action = iota
    14  
    15  	// ActionAllow is an Action value that allows access to the operation from context.
    16  	ActionAllow
    17  
    18  	// ActionDeny is an Action value that denies access to the operation from context.
    19  	ActionDeny
    20  )
    21  
    22  // Operation is a object service method to match request.
    23  // Operation is compatible with v2 acl.Operation enum.
    24  type Operation uint32
    25  
    26  const (
    27  	// OperationUnknown is an Operation value used to mark operation as undefined.
    28  	OperationUnknown Operation = iota
    29  
    30  	// OperationGet is an object get Operation.
    31  	OperationGet
    32  
    33  	// OperationHead is an Operation of getting the object header.
    34  	OperationHead
    35  
    36  	// OperationPut is an object put Operation.
    37  	OperationPut
    38  
    39  	// OperationDelete is an object delete Operation.
    40  	OperationDelete
    41  
    42  	// OperationSearch is an object search Operation.
    43  	OperationSearch
    44  
    45  	// OperationRange is an object payload range retrieval Operation.
    46  	OperationRange
    47  
    48  	// OperationRangeHash is an object payload range hashing Operation.
    49  	OperationRangeHash
    50  )
    51  
    52  // Role is a group of request senders to match request.
    53  // Role is compatible with v2 acl.Role enum.
    54  type Role uint32
    55  
    56  const (
    57  	// RoleUnknown is a Role value used to mark role as undefined.
    58  	RoleUnknown Role = iota
    59  
    60  	// RoleUser is a group of senders that contains only key of container owner.
    61  	RoleUser
    62  
    63  	// RoleSystem is a group of senders that contains keys of container nodes and
    64  	// inner ring nodes.
    65  	RoleSystem
    66  
    67  	// RoleOthers is a group of senders that contains none of above keys.
    68  	RoleOthers
    69  )
    70  
    71  // Match is binary operation on filer name and value to check if request is matched.
    72  // Match is compatible with v2 acl.MatchType enum.
    73  type Match uint32
    74  
    75  const (
    76  	// MatchUnknown is a Match value used to mark matcher as undefined.
    77  	MatchUnknown Match = iota
    78  
    79  	// MatchStringEqual is a Match of string equality.
    80  	MatchStringEqual
    81  
    82  	// MatchStringNotEqual is a Match of string inequality.
    83  	MatchStringNotEqual
    84  )
    85  
    86  // FilterHeaderType indicates source of headers to make matches.
    87  // FilterHeaderType is compatible with v2 acl.HeaderType enum.
    88  type FilterHeaderType uint32
    89  
    90  const (
    91  	// HeaderTypeUnknown is a FilterHeaderType value used to mark header type as undefined.
    92  	HeaderTypeUnknown FilterHeaderType = iota
    93  
    94  	// HeaderFromRequest is a FilterHeaderType for request X-Header.
    95  	HeaderFromRequest
    96  
    97  	// HeaderFromObject is a FilterHeaderType for object header.
    98  	HeaderFromObject
    99  
   100  	// HeaderFromService is a FilterHeaderType for service header.
   101  	HeaderFromService
   102  )
   103  
   104  // ToV2 converts Action to v2 Action enum value.
   105  func (a Action) ToV2() v2acl.Action {
   106  	switch a {
   107  	case ActionAllow:
   108  		return v2acl.ActionAllow
   109  	case ActionDeny:
   110  		return v2acl.ActionDeny
   111  	default:
   112  		return v2acl.ActionUnknown
   113  	}
   114  }
   115  
   116  // ActionFromV2 converts v2 Action enum value to Action.
   117  func ActionFromV2(action v2acl.Action) (a Action) {
   118  	switch action {
   119  	case v2acl.ActionAllow:
   120  		a = ActionAllow
   121  	case v2acl.ActionDeny:
   122  		a = ActionDeny
   123  	default:
   124  		a = ActionUnknown
   125  	}
   126  
   127  	return a
   128  }
   129  
   130  // String returns string representation of Action.
   131  //
   132  // String mapping:
   133  //   - ActionAllow: ALLOW;
   134  //   - ActionDeny: DENY;
   135  //   - ActionUnknown, default: ACTION_UNSPECIFIED.
   136  func (a Action) String() string {
   137  	return a.ToV2().String()
   138  }
   139  
   140  // FromString parses Action from a string representation.
   141  // It is a reverse action to String().
   142  //
   143  // Returns true if s was parsed successfully.
   144  func (a *Action) FromString(s string) bool {
   145  	var g v2acl.Action
   146  
   147  	ok := g.FromString(s)
   148  
   149  	if ok {
   150  		*a = ActionFromV2(g)
   151  	}
   152  
   153  	return ok
   154  }
   155  
   156  // ToV2 converts Operation to v2 Operation enum value.
   157  func (o Operation) ToV2() v2acl.Operation {
   158  	switch o {
   159  	case OperationGet:
   160  		return v2acl.OperationGet
   161  	case OperationHead:
   162  		return v2acl.OperationHead
   163  	case OperationPut:
   164  		return v2acl.OperationPut
   165  	case OperationDelete:
   166  		return v2acl.OperationDelete
   167  	case OperationSearch:
   168  		return v2acl.OperationSearch
   169  	case OperationRange:
   170  		return v2acl.OperationRange
   171  	case OperationRangeHash:
   172  		return v2acl.OperationRangeHash
   173  	default:
   174  		return v2acl.OperationUnknown
   175  	}
   176  }
   177  
   178  // OperationFromV2 converts v2 Operation enum value to Operation.
   179  func OperationFromV2(operation v2acl.Operation) (o Operation) {
   180  	switch operation {
   181  	case v2acl.OperationGet:
   182  		o = OperationGet
   183  	case v2acl.OperationHead:
   184  		o = OperationHead
   185  	case v2acl.OperationPut:
   186  		o = OperationPut
   187  	case v2acl.OperationDelete:
   188  		o = OperationDelete
   189  	case v2acl.OperationSearch:
   190  		o = OperationSearch
   191  	case v2acl.OperationRange:
   192  		o = OperationRange
   193  	case v2acl.OperationRangeHash:
   194  		o = OperationRangeHash
   195  	default:
   196  		o = OperationUnknown
   197  	}
   198  
   199  	return o
   200  }
   201  
   202  // String returns string representation of Operation.
   203  //
   204  // String mapping:
   205  //   - OperationGet: GET;
   206  //   - OperationHead: HEAD;
   207  //   - OperationPut: PUT;
   208  //   - OperationDelete: DELETE;
   209  //   - OperationSearch: SEARCH;
   210  //   - OperationRange: GETRANGE;
   211  //   - OperationRangeHash: GETRANGEHASH;
   212  //   - OperationUnknown, default: OPERATION_UNSPECIFIED.
   213  func (o Operation) String() string {
   214  	return o.ToV2().String()
   215  }
   216  
   217  // FromString parses Operation from a string representation.
   218  // It is a reverse action to String().
   219  //
   220  // Returns true if s was parsed successfully.
   221  func (o *Operation) FromString(s string) bool {
   222  	var g v2acl.Operation
   223  
   224  	ok := g.FromString(s)
   225  
   226  	if ok {
   227  		*o = OperationFromV2(g)
   228  	}
   229  
   230  	return ok
   231  }
   232  
   233  // ToV2 converts Role to v2 Role enum value.
   234  func (r Role) ToV2() v2acl.Role {
   235  	switch r {
   236  	case RoleUser:
   237  		return v2acl.RoleUser
   238  	case RoleSystem:
   239  		return v2acl.RoleSystem
   240  	case RoleOthers:
   241  		return v2acl.RoleOthers
   242  	default:
   243  		return v2acl.RoleUnknown
   244  	}
   245  }
   246  
   247  // RoleFromV2 converts v2 Role enum value to Role.
   248  func RoleFromV2(role v2acl.Role) (r Role) {
   249  	switch role {
   250  	case v2acl.RoleUser:
   251  		r = RoleUser
   252  	case v2acl.RoleSystem:
   253  		r = RoleSystem
   254  	case v2acl.RoleOthers:
   255  		r = RoleOthers
   256  	default:
   257  		r = RoleUnknown
   258  	}
   259  
   260  	return r
   261  }
   262  
   263  // String returns string representation of Role.
   264  //
   265  // String mapping:
   266  //   - RoleUser: USER;
   267  //   - RoleSystem: SYSTEM;
   268  //   - RoleOthers: OTHERS;
   269  //   - RoleUnknown, default: ROLE_UNKNOWN.
   270  func (r Role) String() string {
   271  	return r.ToV2().String()
   272  }
   273  
   274  // FromString parses Role from a string representation.
   275  // It is a reverse action to String().
   276  //
   277  // Returns true if s was parsed successfully.
   278  func (r *Role) FromString(s string) bool {
   279  	var g v2acl.Role
   280  
   281  	ok := g.FromString(s)
   282  
   283  	if ok {
   284  		*r = RoleFromV2(g)
   285  	}
   286  
   287  	return ok
   288  }
   289  
   290  // ToV2 converts Match to v2 MatchType enum value.
   291  func (m Match) ToV2() v2acl.MatchType {
   292  	switch m {
   293  	case MatchStringEqual:
   294  		return v2acl.MatchTypeStringEqual
   295  	case MatchStringNotEqual:
   296  		return v2acl.MatchTypeStringNotEqual
   297  	default:
   298  		return v2acl.MatchTypeUnknown
   299  	}
   300  }
   301  
   302  // MatchFromV2 converts v2 MatchType enum value to Match.
   303  func MatchFromV2(match v2acl.MatchType) (m Match) {
   304  	switch match {
   305  	case v2acl.MatchTypeStringEqual:
   306  		m = MatchStringEqual
   307  	case v2acl.MatchTypeStringNotEqual:
   308  		m = MatchStringNotEqual
   309  	default:
   310  		m = MatchUnknown
   311  	}
   312  
   313  	return m
   314  }
   315  
   316  // String returns string representation of Match.
   317  //
   318  // String mapping:
   319  //   - MatchStringEqual: STRING_EQUAL;
   320  //   - MatchStringNotEqual: STRING_NOT_EQUAL;
   321  //   - MatchUnknown, default: MATCH_TYPE_UNSPECIFIED.
   322  func (m Match) String() string {
   323  	return m.ToV2().String()
   324  }
   325  
   326  // FromString parses Match from a string representation.
   327  // It is a reverse action to String().
   328  //
   329  // Returns true if s was parsed successfully.
   330  func (m *Match) FromString(s string) bool {
   331  	var g v2acl.MatchType
   332  
   333  	ok := g.FromString(s)
   334  
   335  	if ok {
   336  		*m = MatchFromV2(g)
   337  	}
   338  
   339  	return ok
   340  }
   341  
   342  // ToV2 converts FilterHeaderType to v2 HeaderType enum value.
   343  func (h FilterHeaderType) ToV2() v2acl.HeaderType {
   344  	switch h {
   345  	case HeaderFromRequest:
   346  		return v2acl.HeaderTypeRequest
   347  	case HeaderFromObject:
   348  		return v2acl.HeaderTypeObject
   349  	case HeaderFromService:
   350  		return v2acl.HeaderTypeService
   351  	default:
   352  		return v2acl.HeaderTypeUnknown
   353  	}
   354  }
   355  
   356  // FilterHeaderTypeFromV2 converts v2 HeaderType enum value to FilterHeaderType.
   357  func FilterHeaderTypeFromV2(header v2acl.HeaderType) (h FilterHeaderType) {
   358  	switch header {
   359  	case v2acl.HeaderTypeRequest:
   360  		h = HeaderFromRequest
   361  	case v2acl.HeaderTypeObject:
   362  		h = HeaderFromObject
   363  	case v2acl.HeaderTypeService:
   364  		h = HeaderFromService
   365  	default:
   366  		h = HeaderTypeUnknown
   367  	}
   368  
   369  	return h
   370  }
   371  
   372  // String returns string representation of FilterHeaderType.
   373  //
   374  // String mapping:
   375  //   - HeaderFromRequest: REQUEST;
   376  //   - HeaderFromObject: OBJECT;
   377  //   - HeaderTypeUnknown, default: HEADER_UNSPECIFIED.
   378  func (h FilterHeaderType) String() string {
   379  	return h.ToV2().String()
   380  }
   381  
   382  // FromString parses FilterHeaderType from a string representation.
   383  // It is a reverse action to String().
   384  //
   385  // Returns true if s was parsed successfully.
   386  func (h *FilterHeaderType) FromString(s string) bool {
   387  	var g v2acl.HeaderType
   388  
   389  	ok := g.FromString(s)
   390  
   391  	if ok {
   392  		*h = FilterHeaderTypeFromV2(g)
   393  	}
   394  
   395  	return ok
   396  }