summaryrefslogtreecommitdiff
path: root/internal/command/commandargs/authorized_principals.go
blob: 746ae3f67c539dcb5bddbc055a6813851581af7b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
package commandargs

import (
	"errors"
	"fmt"
)

type AuthorizedPrincipals struct {
	Arguments  []string
	KeyId      string
	Principals []string
}

func (ap *AuthorizedPrincipals) Parse() error {
	if err := ap.validate(); err != nil {
		return err
	}

	ap.KeyId = ap.Arguments[0]
	ap.Principals = ap.Arguments[1:]

	return nil
}

func (ap *AuthorizedPrincipals) GetArguments() []string {
	return ap.Arguments
}

func (ap *AuthorizedPrincipals) validate() error {
	argsSize := len(ap.Arguments)

	if argsSize < 2 {
		return errors.New(fmt.Sprintf("# Insufficient arguments. %d. Usage\n#\tgitlab-shell-authorized-principals-check <key-id> <principal1> [<principal2>...]", argsSize))
	}

	keyId := ap.Arguments[0]
	principals := ap.Arguments[1:]

	if keyId == "" {
		return errors.New("# No key_id provided")
	}

	for _, principal := range principals {
		if principal == "" {
			return errors.New("# An invalid principal was provided")
		}
	}

	return nil
}