From 468b7a41451701c14d6685d8fc924815c27a7761 Mon Sep 17 00:00:00 2001 From: catttam Date: Thu, 5 Sep 2024 14:17:09 +0200 Subject: [PATCH] Added no auth run --- cmd/service_run.go | 15 +++++++++-- pkg/service/service.go | 56 ++++++++++++++++++++++++++---------------- 2 files changed, 48 insertions(+), 23 deletions(-) diff --git a/cmd/service_run.go b/cmd/service_run.go index 964cf52..279b742 100644 --- a/cmd/service_run.go +++ b/cmd/service_run.go @@ -42,6 +42,16 @@ func serviceRunFunc(cmd *cobra.Command, args []string) error { return err } + // Check if the cluster has auth + endpoint, _ := cmd.Flags().GetString("endpoint") + token, _ := cmd.Flags().GetString("token") + + if endpoint != "" && token == "" { + // Error missing token + } + if token != "" && endpoint == "" { + // Error missing endpoint + } // Parse input (only --input or --text-input are allowed) (AND one of them is required) inputFile, _ := cmd.Flags().GetString("input") textInput, _ := cmd.Flags().GetString("text-input") @@ -79,9 +89,8 @@ func serviceRunFunc(cmd *cobra.Command, args []string) error { } writer.Close() }() - // Make the request - resBody, err := service.RunService(conf.Oscar[cluster], args[0], reader) + resBody, err := service.RunService(conf.Oscar[cluster], args[0], token, endpoint, reader) if err != nil { return err } @@ -157,6 +166,8 @@ func makeServiceRunCmd() *cobra.Command { } serviceRunCmd.Flags().StringP("cluster", "c", "", "set the cluster") + serviceRunCmd.Flags().StringP("endpoint", "e", "", "endpoint of a non registered cluster") + serviceRunCmd.Flags().StringP("token", "t", "", "token of the service") serviceRunCmd.Flags().StringP("input", "i", "", "input file for the request") serviceRunCmd.Flags().StringP("text-input", "t", "", "text input string for the request") serviceRunCmd.Flags().StringP("output", "o", "", "file path to store the output") diff --git a/pkg/service/service.go b/pkg/service/service.go index ce229c4..1040ad4 100644 --- a/pkg/service/service.go +++ b/pkg/service/service.go @@ -221,43 +221,57 @@ func ApplyService(svc *types.Service, c *cluster.Cluster, method string) error { } // RunService invokes a service synchronously (a Serverless backend in the cluster is required) -func RunService(c *cluster.Cluster, name string, input io.Reader) (responseBody io.ReadCloser, err error) { +func RunService(c *cluster.Cluster, name string, token string, endpoint string, input io.Reader) (responseBody io.ReadCloser, err error) { - runServiceURL, err := url.Parse(c.Endpoint) - if err != nil { - return nil, cluster.ErrParsingEndpoint + var runServiceURL *url.URL + if token != "" { + runServiceURL, err = url.Parse(endpoint) + } else { + runServiceURL, err = url.Parse(c.Endpoint) } - runServiceURL.Path = path.Join(runServiceURL.Path, runPath, name) - // Get the service - svc, err := GetService(c, name) if err != nil { - return nil, err + return nil, cluster.ErrParsingEndpoint } - + runServiceURL.Path = path.Join(runServiceURL.Path, runPath, name) // Make the request req, err := http.NewRequest(http.MethodPost, runServiceURL.String(), input) if err != nil { return nil, cluster.ErrMakingRequest } - // Add service's token if defined (OSCAR >= v2.2.0) - if svc.Token != "" { - bearer := "Bearer " + strings.TrimSpace(svc.Token) + var res *http.Response + if token != "" { + bearer := "Bearer " + strings.TrimSpace(token) req.Header.Add("Authorization", bearer) - } - // Update cluster client timeout - client := c.GetClient() - client.Timeout = time.Second * 300 + client := &http.Client{} + res, err = client.Do(req) + } else { - // Update client transport to remove basic auth - client.Transport = &http.Transport{ - // Enable/disable ssl verification - TLSClientConfig: &tls.Config{InsecureSkipVerify: !c.SSLVerify}, + // Get the service + svc, err := GetService(c, name) + if err != nil { + return nil, err + } + // Add service's token if defined (OSCAR >= v2.2.0) + if svc.Token != "" { + bearer := "Bearer " + strings.TrimSpace(svc.Token) + req.Header.Add("Authorization", bearer) + } + // Update cluster client timeout + client := c.GetClient() + client.Timeout = time.Second * 300 + + // Update client transport to remove basic auth + client.Transport = &http.Transport{ + // Enable/disable ssl verification + TLSClientConfig: &tls.Config{InsecureSkipVerify: !c.SSLVerify}, + } + + res, err = client.Do(req) } - res, err := client.Do(req) if err != nil { return nil, cluster.ErrSendingRequest }