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  }