github.com/pluralsh/plural-cli@v0.9.5/pkg/api/installations.go (about) 1 package api 2 3 import ( 4 "github.com/pluralsh/gqlclient" 5 "github.com/pluralsh/gqlclient/pkg/utils" 6 ) 7 8 type Binding struct { 9 UserId string 10 GroupId string 11 } 12 13 type OidcProviderAttributes struct { 14 RedirectUris []string 15 AuthMethod string 16 Bindings []Binding 17 } 18 19 func (client *client) GetInstallation(name string) (*Installation, error) { 20 resp, err := client.pluralClient.GetInstallation(client.ctx, &name) 21 if err != nil { 22 return nil, err 23 } 24 25 return convertInstallation(resp.Installation), nil 26 27 } 28 29 func (client *client) GetInstallationById(id string) (*Installation, error) { 30 resp, err := client.pluralClient.GetInstallationByID(client.ctx, &id) 31 if err != nil { 32 return nil, err 33 } 34 return convertInstallation(resp.Installation), nil 35 } 36 37 func (client *client) DeleteInstallation(id string) error { 38 _, err := client.pluralClient.DeleteInstallation(client.ctx, id) 39 return err 40 } 41 42 func (client *client) CreateInstallation(id string) (string, error) { 43 resp, err := client.pluralClient.CreateInstallation(client.ctx, id) 44 if err != nil { 45 return "", err 46 } 47 return resp.CreateInstallation.ID, err 48 } 49 50 func convertInstallation(installation *gqlclient.InstallationFragment) *Installation { 51 if installation == nil { 52 return nil 53 } 54 i := &Installation{ 55 Id: installation.ID, 56 LicenseKey: utils.ConvertStringPointer(installation.LicenseKey), 57 Context: installation.Context, 58 AcmeKeyId: utils.ConvertStringPointer(installation.AcmeKeyID), 59 AcmeSecret: utils.ConvertStringPointer(installation.AcmeSecret), 60 } 61 if installation.Repository != nil { 62 i.Repository = &Repository{ 63 Id: installation.Repository.ID, 64 Name: installation.Repository.Name, 65 Description: utils.ConvertStringPointer(installation.Repository.Description), 66 Icon: utils.ConvertStringPointer(installation.Repository.Icon), 67 DarkIcon: utils.ConvertStringPointer(installation.Repository.DarkIcon), 68 Notes: utils.ConvertStringPointer(installation.Repository.Notes), 69 Recipes: []*Recipe{}, 70 } 71 if installation.Repository.Publisher != nil { 72 i.Repository.Publisher = &Publisher{ 73 Name: installation.Repository.Publisher.Name, 74 } 75 } 76 for _, recipe := range installation.Repository.Recipes { 77 i.Repository.Recipes = append(i.Repository.Recipes, &Recipe{ 78 Name: recipe.Name, 79 }) 80 } 81 } 82 83 if installation.OidcProvider != nil { 84 i.OIDCProvider = &OIDCProvider{ 85 Id: installation.OidcProvider.ID, 86 ClientId: installation.OidcProvider.ClientID, 87 ClientSecret: installation.OidcProvider.ClientSecret, 88 RedirectUris: utils.ConvertStringArrayPointer(installation.OidcProvider.RedirectUris), 89 Bindings: []*ProviderBinding{}, 90 } 91 if installation.OidcProvider.Configuration != nil { 92 i.OIDCProvider.Configuration = &OAuthConfiguration{ 93 Issuer: utils.ConvertStringPointer(installation.OidcProvider.Configuration.Issuer), 94 AuthorizationEndpoint: utils.ConvertStringPointer(installation.OidcProvider.Configuration.AuthorizationEndpoint), 95 TokenEndpoint: utils.ConvertStringPointer(installation.OidcProvider.Configuration.TokenEndpoint), 96 JwksUri: utils.ConvertStringPointer(installation.OidcProvider.Configuration.JwksURI), 97 UserinfoEndpoint: utils.ConvertStringPointer(installation.OidcProvider.Configuration.UserinfoEndpoint), 98 } 99 } 100 for _, binding := range installation.OidcProvider.Bindings { 101 pb := &ProviderBinding{} 102 if binding.User != nil { 103 pb.User = &User{ 104 Id: binding.User.ID, 105 Email: binding.User.Email, 106 } 107 } 108 if binding.Group != nil { 109 pb.Group = &Group{ 110 Id: binding.Group.ID, 111 Name: binding.Group.Name, 112 } 113 } 114 i.OIDCProvider.Bindings = append(i.OIDCProvider.Bindings, pb) 115 } 116 } 117 118 return i 119 } 120 121 func (client *client) GetInstallations() ([]*Installation, error) { 122 result := make([]*Installation, 0) 123 124 resp, err := client.pluralClient.GetInstallations(client.ctx) 125 if err != nil { 126 return result, err 127 } 128 129 for _, edge := range resp.Installations.Edges { 130 result = append(result, convertInstallation(edge.Node)) 131 } 132 133 return result, err 134 } 135 136 func (client *client) OIDCProvider(id string, attributes *OidcProviderAttributes) error { 137 bindings := make([]*gqlclient.BindingAttributes, 0) 138 for _, bind := range attributes.Bindings { 139 groupId := bind.GroupId 140 userId := bind.UserId 141 bindings = append(bindings, &gqlclient.BindingAttributes{ 142 GroupID: &groupId, 143 UserID: &userId, 144 }) 145 } 146 147 redirectUris := convertRedirectUris(attributes.RedirectUris) 148 _, err := client.pluralClient.UpsertOidcProvider(client.ctx, id, gqlclient.OidcAttributes{ 149 AuthMethod: gqlclient.OidcAuthMethod(attributes.AuthMethod), 150 Bindings: bindings, 151 RedirectUris: redirectUris, 152 }) 153 return err 154 } 155 156 func (client *client) ResetInstallations() (int, error) { 157 resp, err := client.pluralClient.ResetInstallations(client.ctx) 158 if err != nil { 159 return 0, err 160 } 161 162 return int(*resp.ResetInstallations), err 163 } 164 165 func (client *client) MarkSynced(repo string) error { 166 _, err := client.pluralClient.MarkSynced(client.ctx, repo) 167 return err 168 } 169 170 func convertRedirectUris(uris []string) []*string { 171 res := make([]*string, len(uris)) 172 for i := range uris { 173 res[i] = &uris[i] 174 } 175 return res 176 }