diff --git a/go.mod b/go.mod index 6b0db2b..616d0e0 100644 --- a/go.mod +++ b/go.mod @@ -15,6 +15,8 @@ require ( github.com/sirupsen/logrus v1.9.0 github.com/stretchr/testify v1.8.0 github.com/zitadel/logging v0.3.4 + golang.org/x/crypto v0.0.0-20210921155107-089bfa567519 // indirect + golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f // indirect golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43 golang.org/x/text v0.3.7 gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b // indirect diff --git a/go.sum b/go.sum index 57260a4..68116ea 100644 --- a/go.sum +++ b/go.sum @@ -157,8 +157,9 @@ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACk golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 h1:psW17arqaxU48Z5kZ0CQnkZWQJsqcURM6tKiBApRjXI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20210921155107-089bfa567519 h1:7I4JAnoQBe7ZtJcBaYHi5UtiO8tQHbUSXxL+pnGRANg= +golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -216,8 +217,10 @@ golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/ golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4 h1:4nGaVu0QrbjT/AK2PRLuQfQuh6DJve+pELhqTdAj3x0= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= +golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f h1:OfiFi4JbukWwe3lzw+xunroH1mnC1e2Gy5cxNJApiSY= +golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -262,7 +265,9 @@ golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220207234003-57398862261d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8 h1:0A+M6Uqn+Eje4kHMK80dtF3JCXC4ykBgQG4Fe06QRhQ= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -272,6 +277,7 @@ golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= diff --git a/pkg/op/applicationtype_enumer.go b/pkg/op/applicationtype_enumer.go new file mode 100644 index 0000000..7f0b1e0 --- /dev/null +++ b/pkg/op/applicationtype_enumer.go @@ -0,0 +1,342 @@ +// Code generated by "enumer -linecomment -sql -json -text -yaml -gqlgen -type=ApplicationType,AccessTokenType"; DO NOT EDIT. + +package op + +import ( + "database/sql/driver" + "encoding/json" + "fmt" + "io" + "strconv" + "strings" +) + +const _ApplicationTypeName = "webuser_agentnative" + +var _ApplicationTypeIndex = [...]uint8{0, 3, 13, 19} + +const _ApplicationTypeLowerName = "webuser_agentnative" + +func (i ApplicationType) String() string { + if i < 0 || i >= ApplicationType(len(_ApplicationTypeIndex)-1) { + return fmt.Sprintf("ApplicationType(%d)", i) + } + return _ApplicationTypeName[_ApplicationTypeIndex[i]:_ApplicationTypeIndex[i+1]] +} + +// An "invalid array index" compiler error signifies that the constant values have changed. +// Re-run the stringer command to generate them again. +func _ApplicationTypeNoOp() { + var x [1]struct{} + _ = x[ApplicationTypeWeb-(0)] + _ = x[ApplicationTypeUserAgent-(1)] + _ = x[ApplicationTypeNative-(2)] +} + +var _ApplicationTypeValues = []ApplicationType{ApplicationTypeWeb, ApplicationTypeUserAgent, ApplicationTypeNative} + +var _ApplicationTypeNameToValueMap = map[string]ApplicationType{ + _ApplicationTypeName[0:3]: ApplicationTypeWeb, + _ApplicationTypeLowerName[0:3]: ApplicationTypeWeb, + _ApplicationTypeName[3:13]: ApplicationTypeUserAgent, + _ApplicationTypeLowerName[3:13]: ApplicationTypeUserAgent, + _ApplicationTypeName[13:19]: ApplicationTypeNative, + _ApplicationTypeLowerName[13:19]: ApplicationTypeNative, +} + +var _ApplicationTypeNames = []string{ + _ApplicationTypeName[0:3], + _ApplicationTypeName[3:13], + _ApplicationTypeName[13:19], +} + +// ApplicationTypeString retrieves an enum value from the enum constants string name. +// Throws an error if the param is not part of the enum. +func ApplicationTypeString(s string) (ApplicationType, error) { + if val, ok := _ApplicationTypeNameToValueMap[s]; ok { + return val, nil + } + + if val, ok := _ApplicationTypeNameToValueMap[strings.ToLower(s)]; ok { + return val, nil + } + return 0, fmt.Errorf("%s does not belong to ApplicationType values", s) +} + +// ApplicationTypeValues returns all values of the enum +func ApplicationTypeValues() []ApplicationType { + return _ApplicationTypeValues +} + +// ApplicationTypeStrings returns a slice of all String values of the enum +func ApplicationTypeStrings() []string { + strs := make([]string, len(_ApplicationTypeNames)) + copy(strs, _ApplicationTypeNames) + return strs +} + +// IsAApplicationType returns "true" if the value is listed in the enum definition. "false" otherwise +func (i ApplicationType) IsAApplicationType() bool { + for _, v := range _ApplicationTypeValues { + if i == v { + return true + } + } + return false +} + +// MarshalJSON implements the json.Marshaler interface for ApplicationType +func (i ApplicationType) MarshalJSON() ([]byte, error) { + return json.Marshal(i.String()) +} + +// UnmarshalJSON implements the json.Unmarshaler interface for ApplicationType +func (i *ApplicationType) UnmarshalJSON(data []byte) error { + var s string + if err := json.Unmarshal(data, &s); err != nil { + return fmt.Errorf("ApplicationType should be a string, got %s", data) + } + + var err error + *i, err = ApplicationTypeString(s) + return err +} + +// MarshalText implements the encoding.TextMarshaler interface for ApplicationType +func (i ApplicationType) MarshalText() ([]byte, error) { + return []byte(i.String()), nil +} + +// UnmarshalText implements the encoding.TextUnmarshaler interface for ApplicationType +func (i *ApplicationType) UnmarshalText(text []byte) error { + var err error + *i, err = ApplicationTypeString(string(text)) + return err +} + +// MarshalYAML implements a YAML Marshaler for ApplicationType +func (i ApplicationType) MarshalYAML() (interface{}, error) { + return i.String(), nil +} + +// UnmarshalYAML implements a YAML Unmarshaler for ApplicationType +func (i *ApplicationType) UnmarshalYAML(unmarshal func(interface{}) error) error { + var s string + if err := unmarshal(&s); err != nil { + return err + } + + var err error + *i, err = ApplicationTypeString(s) + return err +} + +func (i ApplicationType) Value() (driver.Value, error) { + return i.String(), nil +} + +func (i *ApplicationType) Scan(value interface{}) error { + if value == nil { + return nil + } + + var str string + switch v := value.(type) { + case []byte: + str = string(v) + case string: + str = v + case fmt.Stringer: + str = v.String() + default: + return fmt.Errorf("invalid value of ApplicationType: %[1]T(%[1]v)", value) + } + + val, err := ApplicationTypeString(str) + if err != nil { + return err + } + + *i = val + return nil +} + +// MarshalGQL implements the graphql.Marshaler interface for ApplicationType +func (i ApplicationType) MarshalGQL(w io.Writer) { + fmt.Fprint(w, strconv.Quote(i.String())) +} + +// UnmarshalGQL implements the graphql.Unmarshaler interface for ApplicationType +func (i *ApplicationType) UnmarshalGQL(value interface{}) error { + str, ok := value.(string) + if !ok { + return fmt.Errorf("ApplicationType should be a string, got %T", value) + } + + var err error + *i, err = ApplicationTypeString(str) + return err +} + +const _AccessTokenTypeName = "bearerJWT" + +var _AccessTokenTypeIndex = [...]uint8{0, 6, 9} + +const _AccessTokenTypeLowerName = "bearerjwt" + +func (i AccessTokenType) String() string { + if i < 0 || i >= AccessTokenType(len(_AccessTokenTypeIndex)-1) { + return fmt.Sprintf("AccessTokenType(%d)", i) + } + return _AccessTokenTypeName[_AccessTokenTypeIndex[i]:_AccessTokenTypeIndex[i+1]] +} + +// An "invalid array index" compiler error signifies that the constant values have changed. +// Re-run the stringer command to generate them again. +func _AccessTokenTypeNoOp() { + var x [1]struct{} + _ = x[AccessTokenTypeBearer-(0)] + _ = x[AccessTokenTypeJWT-(1)] +} + +var _AccessTokenTypeValues = []AccessTokenType{AccessTokenTypeBearer, AccessTokenTypeJWT} + +var _AccessTokenTypeNameToValueMap = map[string]AccessTokenType{ + _AccessTokenTypeName[0:6]: AccessTokenTypeBearer, + _AccessTokenTypeLowerName[0:6]: AccessTokenTypeBearer, + _AccessTokenTypeName[6:9]: AccessTokenTypeJWT, + _AccessTokenTypeLowerName[6:9]: AccessTokenTypeJWT, +} + +var _AccessTokenTypeNames = []string{ + _AccessTokenTypeName[0:6], + _AccessTokenTypeName[6:9], +} + +// AccessTokenTypeString retrieves an enum value from the enum constants string name. +// Throws an error if the param is not part of the enum. +func AccessTokenTypeString(s string) (AccessTokenType, error) { + if val, ok := _AccessTokenTypeNameToValueMap[s]; ok { + return val, nil + } + + if val, ok := _AccessTokenTypeNameToValueMap[strings.ToLower(s)]; ok { + return val, nil + } + return 0, fmt.Errorf("%s does not belong to AccessTokenType values", s) +} + +// AccessTokenTypeValues returns all values of the enum +func AccessTokenTypeValues() []AccessTokenType { + return _AccessTokenTypeValues +} + +// AccessTokenTypeStrings returns a slice of all String values of the enum +func AccessTokenTypeStrings() []string { + strs := make([]string, len(_AccessTokenTypeNames)) + copy(strs, _AccessTokenTypeNames) + return strs +} + +// IsAAccessTokenType returns "true" if the value is listed in the enum definition. "false" otherwise +func (i AccessTokenType) IsAAccessTokenType() bool { + for _, v := range _AccessTokenTypeValues { + if i == v { + return true + } + } + return false +} + +// MarshalJSON implements the json.Marshaler interface for AccessTokenType +func (i AccessTokenType) MarshalJSON() ([]byte, error) { + return json.Marshal(i.String()) +} + +// UnmarshalJSON implements the json.Unmarshaler interface for AccessTokenType +func (i *AccessTokenType) UnmarshalJSON(data []byte) error { + var s string + if err := json.Unmarshal(data, &s); err != nil { + return fmt.Errorf("AccessTokenType should be a string, got %s", data) + } + + var err error + *i, err = AccessTokenTypeString(s) + return err +} + +// MarshalText implements the encoding.TextMarshaler interface for AccessTokenType +func (i AccessTokenType) MarshalText() ([]byte, error) { + return []byte(i.String()), nil +} + +// UnmarshalText implements the encoding.TextUnmarshaler interface for AccessTokenType +func (i *AccessTokenType) UnmarshalText(text []byte) error { + var err error + *i, err = AccessTokenTypeString(string(text)) + return err +} + +// MarshalYAML implements a YAML Marshaler for AccessTokenType +func (i AccessTokenType) MarshalYAML() (interface{}, error) { + return i.String(), nil +} + +// UnmarshalYAML implements a YAML Unmarshaler for AccessTokenType +func (i *AccessTokenType) UnmarshalYAML(unmarshal func(interface{}) error) error { + var s string + if err := unmarshal(&s); err != nil { + return err + } + + var err error + *i, err = AccessTokenTypeString(s) + return err +} + +func (i AccessTokenType) Value() (driver.Value, error) { + return i.String(), nil +} + +func (i *AccessTokenType) Scan(value interface{}) error { + if value == nil { + return nil + } + + var str string + switch v := value.(type) { + case []byte: + str = string(v) + case string: + str = v + case fmt.Stringer: + str = v.String() + default: + return fmt.Errorf("invalid value of AccessTokenType: %[1]T(%[1]v)", value) + } + + val, err := AccessTokenTypeString(str) + if err != nil { + return err + } + + *i = val + return nil +} + +// MarshalGQL implements the graphql.Marshaler interface for AccessTokenType +func (i AccessTokenType) MarshalGQL(w io.Writer) { + fmt.Fprint(w, strconv.Quote(i.String())) +} + +// UnmarshalGQL implements the graphql.Unmarshaler interface for AccessTokenType +func (i *AccessTokenType) UnmarshalGQL(value interface{}) error { + str, ok := value.(string) + if !ok { + return fmt.Errorf("AccessTokenType should be a string, got %T", value) + } + + var err error + *i, err = AccessTokenTypeString(str) + return err +} diff --git a/pkg/op/client.go b/pkg/op/client.go index d3d32b7..d9f7ab0 100644 --- a/pkg/op/client.go +++ b/pkg/op/client.go @@ -6,15 +6,18 @@ import ( "github.com/zitadel/oidc/pkg/oidc" ) +//go:generate go get github.com/dmarkham/enumer +//go:generate go run github.com/dmarkham/enumer -linecomment -sql -json -text -yaml -gqlgen -type=ApplicationType,AccessTokenType + const ( - ApplicationTypeWeb ApplicationType = iota - ApplicationTypeUserAgent - ApplicationTypeNative + ApplicationTypeWeb ApplicationType = iota // web + ApplicationTypeUserAgent // user_agent + ApplicationTypeNative // native ) const ( - AccessTokenTypeBearer AccessTokenType = iota - AccessTokenTypeJWT + AccessTokenTypeBearer AccessTokenType = iota // bearer + AccessTokenTypeJWT // JWT ) type ApplicationType int