...

Source file src/edge-infra.dev/pkg/sds/emergencyaccess/authservice/types.go

Documentation: edge-infra.dev/pkg/sds/emergencyaccess/authservice

     1  package authservice
     2  
     3  import (
     4  	"encoding/json"
     5  	"errors"
     6  	"strings"
     7  
     8  	"edge-infra.dev/pkg/sds/emergencyaccess/eaconst"
     9  )
    10  
    11  type userError struct {
    12  	err     error
    13  	userErr string
    14  }
    15  
    16  func (err userError) Error() string {
    17  	return err.err.Error()
    18  }
    19  
    20  func (err userError) userError() string {
    21  	return err.userErr
    22  }
    23  
    24  type ValidationError []userError
    25  
    26  func (myerr ValidationError) Error() string {
    27  	var msg []string
    28  	for _, err := range myerr {
    29  		msg = append(msg, err.Error())
    30  	}
    31  	return strings.Join(msg, ", ")
    32  }
    33  
    34  func (myerr ValidationError) UserError() []string {
    35  	var msg []string
    36  	for _, err := range myerr {
    37  		msg = append(msg, err.userError())
    38  	}
    39  	return msg
    40  }
    41  
    42  // Command struct for the rules engine validatecommand api endpoint
    43  type RulesEngineCommand struct {
    44  	Name string              `json:"name"`
    45  	Type eaconst.RequestType `json:"type"`
    46  }
    47  
    48  type RulesEnginePayload struct {
    49  	Identity identity           `json:"identity"`
    50  	Command  RulesEngineCommand `json:"command"`
    51  	Target   Target             `json:"target"`
    52  }
    53  
    54  type CommandAuthPayload struct {
    55  	Command     string      `json:"command"`
    56  	Target      Target      `json:"target"`
    57  	AuthDetails AuthDetails `json:"authDetails"`
    58  }
    59  
    60  func (ca CommandAuthPayload) Validate() error {
    61  	errs := ValidationError{}
    62  	if len(ca.Command) == 0 {
    63  		errs = append(errs, userError{
    64  			errors.New("command was nil"),
    65  			"Payload missing command"})
    66  	}
    67  	if len(ca.Target.BannerID) == 0 {
    68  		errs = append(errs, userError{
    69  			errors.New("banner id was nil"),
    70  			"Payload missing banner ID"})
    71  	}
    72  	if len(errs) != 0 {
    73  		return errs
    74  	}
    75  	return nil
    76  }
    77  
    78  type AuthorizeRequestPayload struct {
    79  	Request Request `json:"request"`
    80  	Target  Target  `json:"target"`
    81  }
    82  
    83  func (arp AuthorizeRequestPayload) Validate() error {
    84  	errs := ValidationError{}
    85  	if _, err := json.Marshal(arp.Request.Data); err != nil {
    86  		errs = append(errs, userError{
    87  			errors.New("request data could not be marshaled"),
    88  			"Payload has invalid request data"})
    89  	} else if arp.Request.Data == nil {
    90  		errs = append(errs, userError{
    91  			errors.New("request data is nil"),
    92  			"Payload has invalid request data"})
    93  	}
    94  	if tErr := arp.Target.Validate(); tErr != nil {
    95  		errs = append(errs, userError{tErr,
    96  			"Payload has invalid target"})
    97  	}
    98  	if len(errs) != 0 {
    99  		return errs
   100  	}
   101  	return nil
   102  }
   103  
   104  type AuthorizeTargetPayload struct {
   105  	Target Target `json:"target"`
   106  }
   107  
   108  func (atp AuthorizeTargetPayload) Validate() error {
   109  	return atp.Target.Validate()
   110  }
   111  
   112  type ResolveTargetPayload struct {
   113  	Target Target `json:"target"`
   114  }
   115  
   116  func (tap ResolveTargetPayload) Validate() error {
   117  	return tap.Target.Validate()
   118  }
   119  
   120  type Target struct {
   121  	ProjectID  string `json:"projectid,omitempty"`
   122  	BannerID   string `json:"bannerid"`
   123  	StoreID    string `json:"storeid,omitempty"`
   124  	TerminalID string `json:"terminalid,omitempty"`
   125  }
   126  
   127  func (tgt Target) Validate() error {
   128  	errs := ValidationError{}
   129  	if tgt.BannerID == "" {
   130  		errs = append(errs, userError{
   131  			errors.New("banner id was nil"),
   132  			"Payload missing banner ID"})
   133  	}
   134  	if tgt.StoreID == "" {
   135  		errs = append(errs, userError{
   136  			errors.New("store id was nil"),
   137  			"Payload missing store ID"})
   138  	}
   139  	if tgt.TerminalID == "" {
   140  		errs = append(errs, userError{
   141  			errors.New("terminal id was nil"),
   142  			"Payload missing terminal ID"})
   143  	}
   144  	if len(errs) != 0 {
   145  		return errs
   146  	}
   147  	return nil
   148  }
   149  
   150  type AuthDetails struct {
   151  	DarkMode bool `json:"darkmode"`
   152  }
   153  
   154  type identity struct {
   155  	UserID  string   `json:"userid"`
   156  	EAroles []string `json:"earoles"`
   157  }
   158  
   159  type Request struct {
   160  	Data       json.RawMessage   `json:"data"`
   161  	Attributes map[string]string `json:"attributes"`
   162  }
   163  
   164  type Response struct {
   165  	Valid bool `json:"valid"`
   166  }
   167  

View as plain text