Ctrl K
ComunidadGuías…

cli/allowlistflag.go

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
package cli

import (
	"encoding/csv"
	"strings"

	"github.com/spf13/pflag"
	"golang.org/x/xerrors"

	"github.com/coder/coder/v2/codersdk"
)

var (
	_ pflag.SliceValue = &AllowListFlag{}
	_ pflag.Value      = &AllowListFlag{}
)

// AllowListFlag implements pflag.SliceValue for codersdk.APIAllowListTarget entries.
type AllowListFlag []codersdk.APIAllowListTarget

func AllowListFlagOf(al *[]codersdk.APIAllowListTarget) *AllowListFlag {
	return (*AllowListFlag)(al)
}

func (a AllowListFlag) String() string {
	return strings.Join(a.GetSlice(), ",")
}

func (a AllowListFlag) Value() []codersdk.APIAllowListTarget {
	return []codersdk.APIAllowListTarget(a)
}

func (AllowListFlag) Type() string { return "allow-list" }

func (a *AllowListFlag) Set(set string) error {
	values, err := csv.NewReader(strings.NewReader(set)).Read()
	if err != nil {
		return xerrors.Errorf("parse allow list entries as csv: %w", err)
	}
	for _, v := range values {
		if err := a.Append(v); err != nil {
			return err
		}
	}
	return nil
}

func (a *AllowListFlag) Append(value string) error {
	value = strings.TrimSpace(value)
	if value == "" {
		return xerrors.New("allow list entry cannot be empty")
	}
	var target codersdk.APIAllowListTarget
	if err := target.UnmarshalText([]byte(value)); err != nil {
		return err
	}

	*a = append(*a, target)
	return nil
}

func (a *AllowListFlag) Replace(items []string) error {
	*a = []codersdk.APIAllowListTarget{}
	for _, item := range items {
		if err := a.Append(item); err != nil {
			return err
		}
	}
	return nil
}

func (a *AllowListFlag) GetSlice() []string {
	out := make([]string, len(*a))
	for i, entry := range *a {
		out[i] = entry.String()
	}
	return out
}