|
8 | 8 |
|
9 | 9 | "github.com/mindersec/minder/internal/db" |
10 | 10 | minderv1 "github.com/mindersec/minder/pkg/api/protobuf/go/minder/v1" |
| 11 | + provifv1 "github.com/mindersec/minder/pkg/providers/v1" |
11 | 12 | ) |
12 | 13 |
|
13 | 14 | const ( |
@@ -42,80 +43,49 @@ var AppAuthorizationFlows = []db.AuthorizationFlow{ |
42 | 43 | db.AuthorizationFlowGithubAppFlow, |
43 | 44 | } |
44 | 45 |
|
45 | | -// ProviderClassInfo returns class metadata for GitHub-backed provider classes. |
46 | | -func ProviderClassInfo(class db.ProviderClass) (*minderv1.ProviderClassInfo, error) { |
47 | | - switch class { |
| 46 | +// ProviderClassInfo implements the Provider interface. |
| 47 | +func (c *GitHub) ProviderClassInfo() *minderv1.ProviderClassInfo { |
| 48 | + supportedTypes := provifv1.ProviderTypesFromImpl(c) |
| 49 | + supportedEntities := []minderv1.Entity{ |
| 50 | + minderv1.Entity_ENTITY_REPOSITORIES, |
| 51 | + minderv1.Entity_ENTITY_PULL_REQUESTS, |
| 52 | + minderv1.Entity_ENTITY_ARTIFACTS, |
| 53 | + minderv1.Entity_ENTITY_RELEASE, |
| 54 | + } |
| 55 | + switch c.providerClass { |
48 | 56 | case db.ProviderClassGithub: |
49 | 57 | return &minderv1.ProviderClassInfo{ |
50 | 58 | Class: string(db.ProviderClassGithub), |
51 | 59 | DisplayName: "GitHub OAuth", |
52 | 60 | Description: "GitHub provider using OAuth credentials.", |
53 | | - SupportedProviderTypes: dbProviderTypesToPB(OAuthImplements), |
| 61 | + SupportedProviderTypes: supportedTypes, |
54 | 62 | SupportedAuthFlows: dbAuthFlowsToPB(OAuthAuthorizationFlows), |
55 | | - SupportedEntities: []minderv1.Entity{ |
56 | | - minderv1.Entity_ENTITY_REPOSITORIES, |
57 | | - minderv1.Entity_ENTITY_PULL_REQUESTS, |
58 | | - minderv1.Entity_ENTITY_ARTIFACTS, |
59 | | - minderv1.Entity_ENTITY_RELEASE, |
60 | | - }, |
61 | | - DocumentationUrl: providerDocsURL, |
62 | | - }, nil |
| 63 | + SupportedEntities: supportedEntities, |
| 64 | + DocumentationUrl: providerDocsURL, |
| 65 | + } |
63 | 66 | case db.ProviderClassGithubApp: |
64 | 67 | return &minderv1.ProviderClassInfo{ |
65 | 68 | Class: string(db.ProviderClassGithubApp), |
66 | 69 | DisplayName: "GitHub App", |
67 | 70 | Description: "GitHub App-based provider with installation-based authorization.", |
68 | | - SupportedProviderTypes: dbProviderTypesToPB(AppImplements), |
| 71 | + SupportedProviderTypes: supportedTypes, |
69 | 72 | SupportedAuthFlows: dbAuthFlowsToPB(AppAuthorizationFlows), |
70 | | - SupportedEntities: []minderv1.Entity{ |
71 | | - minderv1.Entity_ENTITY_REPOSITORIES, |
72 | | - minderv1.Entity_ENTITY_PULL_REQUESTS, |
73 | | - minderv1.Entity_ENTITY_ARTIFACTS, |
74 | | - minderv1.Entity_ENTITY_RELEASE, |
75 | | - }, |
76 | | - DocumentationUrl: providerDocsURL, |
77 | | - }, nil |
78 | | - case db.ProviderClassGhcr: |
79 | | - fallthrough |
80 | | - case db.ProviderClassDockerhub: |
81 | | - fallthrough |
82 | | - case db.ProviderClassGitlab: |
83 | | - return nil, fmt.Errorf("unsupported GitHub provider class: %s", class) |
| 73 | + SupportedEntities: supportedEntities, |
| 74 | + DocumentationUrl: providerDocsURL, |
| 75 | + } |
84 | 76 | default: |
85 | | - return nil, fmt.Errorf("unsupported GitHub provider class: %s", class) |
86 | | - } |
87 | | -} |
88 | | - |
89 | | -// ProviderClassInfo implements the Provider interface. |
90 | | -func (c *GitHub) ProviderClassInfo() *minderv1.ProviderClassInfo { |
91 | | - info, err := ProviderClassInfo(c.providerClass) |
92 | | - if err != nil { |
93 | 77 | return nil |
94 | 78 | } |
95 | | - |
96 | | - return info |
97 | 79 | } |
98 | 80 |
|
99 | | -func dbProviderTypesToPB(types []db.ProviderType) []minderv1.ProviderType { |
100 | | - out := make([]minderv1.ProviderType, 0, len(types)) |
101 | | - for _, t := range types { |
102 | | - switch t { |
103 | | - case db.ProviderTypeGit: |
104 | | - out = append(out, minderv1.ProviderType_PROVIDER_TYPE_GIT) |
105 | | - case db.ProviderTypeGithub: |
106 | | - out = append(out, minderv1.ProviderType_PROVIDER_TYPE_GITHUB) |
107 | | - case db.ProviderTypeRest: |
108 | | - out = append(out, minderv1.ProviderType_PROVIDER_TYPE_REST) |
109 | | - case db.ProviderTypeRepoLister: |
110 | | - out = append(out, minderv1.ProviderType_PROVIDER_TYPE_REPO_LISTER) |
111 | | - case db.ProviderTypeOci: |
112 | | - out = append(out, minderv1.ProviderType_PROVIDER_TYPE_OCI) |
113 | | - case db.ProviderTypeImageLister: |
114 | | - out = append(out, minderv1.ProviderType_PROVIDER_TYPE_IMAGE_LISTER) |
115 | | - } |
| 81 | +// ProviderClassInfo returns class metadata for GitHub-backed provider classes. |
| 82 | +// It uses a nil-pointer receiver to avoid needing a live client instance. |
| 83 | +func ProviderClassInfo(class db.ProviderClass) (*minderv1.ProviderClassInfo, error) { |
| 84 | + info := (&GitHub{providerClass: class}).ProviderClassInfo() |
| 85 | + if info == nil { |
| 86 | + return nil, fmt.Errorf("unsupported GitHub provider class: %s", class) |
116 | 87 | } |
117 | | - |
118 | | - return out |
| 88 | + return info, nil |
119 | 89 | } |
120 | 90 |
|
121 | 91 | func dbAuthFlowsToPB(flows []db.AuthorizationFlow) []minderv1.AuthorizationFlow { |
|
0 commit comments