Răsfoiți Sursa

fix cli auth issue and write get endpoint + other schema changes

Ivan Galakhov 4 ani în urmă
părinte
comite
7e729b07c9

+ 11 - 5
cli/cmd/api/api.go

@@ -49,8 +49,9 @@ type Event struct {
 
 // StreamEventForm is used to send event data to the api
 type StreamEventForm struct {
-	Event `json:"event"`
-	Token string `json:"token"`
+	Event     `json:"event"`
+	Token     string `json:"token"`
+	ClusterID uint   `json:"cluster_id"`
 }
 
 // NewClient constructs a new client based on a set of options
@@ -98,6 +99,8 @@ func (c *Client) sendRequest(req *http.Request, v interface{}, useCookie bool) (
 		req.AddCookie(c.Cookie)
 	}
 
+	fmt.Printf("%+v\n", req.Header)
+
 	res, err := c.HTTPClient.Do(req)
 
 	if err != nil {
@@ -118,6 +121,8 @@ func (c *Client) sendRequest(req *http.Request, v interface{}, useCookie bool) (
 
 		fmt.Println("error request")
 		fmt.Printf("%+v\n", req)
+		fmt.Println(errRes)
+		fmt.Println(res.StatusCode)
 
 		return nil, fmt.Errorf("unknown error, status code: %d", res.StatusCode)
 	}
@@ -150,10 +155,11 @@ func (c *Client) saveCookie(cookie *http.Cookie) error {
 }
 
 // StreamEvent sends an event from deployment to the api
-func (c *Client) StreamEvent(event Event, token string, projID uint, name string) error {
+func (c *Client) StreamEvent(event Event, token string, projID uint, clusterID uint, name string) error {
 	form := StreamEventForm{
-		Event: event,
-		Token: token,
+		Event:     event,
+		Token:     token,
+		ClusterID: clusterID,
 	}
 
 	body := new(bytes.Buffer)

+ 1 - 2
cli/cmd/deploy/deploy.go

@@ -440,8 +440,7 @@ func (d *DeployAgent) downloadRepoToDir(downloadURL string) (string, error) {
 }
 
 func (d *DeployAgent) StreamEvent(event api.Event, token string) error {
-	//return d.client.StreamEvent(event, token, d.opts.ProjectID, d.release.Name)
-	return nil
+	return d.client.StreamEvent(event, token, d.opts.ProjectID, d.opts.ClusterID, d.release.Name)
 }
 
 type NestedMapFieldNotFoundError struct {

+ 0 - 1
cli/cmd/docker/agent.go

@@ -253,7 +253,6 @@ func (a *Agent) getPushOptions(image string) (types.ImagePushOptions, error) {
 }
 
 func GetServerURLFromTag(image string) (string, error) {
-	image = strings.Replace(image, "index.docker.io", "docker.io", -1)
 	named, err := reference.ParseNamed(image)
 
 	if err != nil {

+ 18 - 0
internal/models/event.go

@@ -27,3 +27,21 @@ type SubEvent struct {
 	Status  EventStatus
 	Info    string
 }
+
+type SubEventExternal struct {
+	EventID string      `json:"event_id"`
+	Name    string      `json:"name"`
+	Index   int64       `json:"index"`
+	Status  EventStatus `json:"status"`
+	Info    string      `json:"info"`
+}
+
+func (event *SubEvent) Externalize() SubEventExternal {
+	return SubEventExternal{
+		EventID: event.EventID,
+		Name:    event.Name,
+		Index:   event.Index,
+		Status:  event.Status,
+		Info:    event.Info,
+	}
+}

+ 1 - 0
internal/repository/event.go

@@ -5,4 +5,5 @@ import "github.com/porter-dev/porter/internal/models"
 type EventRepository interface {
 	CreateEventContainer(am *models.EventContainer) (*models.EventContainer, error)
 	CreateSubEvent(am *models.SubEvent) (*models.SubEvent, error)
+	ReadEventsByContainerID(id uint) ([]*models.SubEvent, error)
 }

+ 8 - 0
internal/repository/gorm/event.go

@@ -30,3 +30,11 @@ func (repo EventRepository) CreateSubEvent(am *models.SubEvent) (*models.SubEven
 	}
 	return am, nil
 }
+
+func (repo EventRepository) ReadEventsByContainerID(id uint) ([]*models.SubEvent, error) {
+	var events []*models.SubEvent
+	if err := repo.db.Where("container_id = ?", id).Find(&events).Error; err != nil {
+		return nil, err
+	}
+	return events, nil
+}

+ 42 - 4
server/api/release_handler.go

@@ -1618,7 +1618,47 @@ func (app *App) HandleRollbackRelease(w http.ResponseWriter, r *http.Request) {
 // HandleGetReleaseSteps returns a list of all steps for a given release
 // note that steps are not guaranteed to be in any specific order, so they should be ordered if needed
 func (app *App) HandleGetReleaseSteps(w http.ResponseWriter, r *http.Request) {
+	name := chi.URLParam(r, "name")
+	vals, err := url.ParseQuery(r.URL.RawQuery)
+
+	if err != nil {
+		app.handleErrorInternal(err, w)
+	}
+
+	namespace := vals["namespace"][0]
+	clusterId, err := strconv.ParseUint(vals["cluster_id"][0], 0, 64)
+
+	if err != nil {
+		app.handleErrorInternal(err, w)
+		return
+	}
+
+	rel, err := app.Repo.Release.ReadRelease(uint(clusterId), name, namespace)
 
+	if err != nil {
+		app.sendExternalError(err, http.StatusNotFound, HTTPError{
+			Code:   ErrReleaseReadData,
+			Errors: []string{"release not found"},
+		}, w)
+
+		return
+	}
+
+	res := make([]models.SubEventExternal, 0)
+
+	if rel.EventContainer != 0 {
+		subevents, err := app.Repo.Event.ReadEventsByContainerID(rel.EventContainer)
+
+		if err != nil {
+			app.handleErrorInternal(err, w)
+		}
+
+		for _, sub := range subevents {
+			res = append(res, sub.Externalize())
+		}
+	}
+
+	json.NewEncoder(w).Encode(res)
 }
 
 type HandleUpdateReleaseStepsForm struct {
@@ -1641,8 +1681,6 @@ func (app *App) HandleUpdateReleaseSteps(w http.ResponseWriter, r *http.Request)
 		return
 	}
 
-	fmt.Printf("%#v", form)
-
 	release, err := app.Repo.Release.ReadReleaseByWebhookToken(form.Token)
 
 	if err != nil {
@@ -1654,11 +1692,11 @@ func (app *App) HandleUpdateReleaseSteps(w http.ResponseWriter, r *http.Request)
 		return
 	}
 
+	fmt.Println(release)
+
 	if release.EventContainer == 0 {
 		// create new event container
 	}
-
-	fmt.Printf("%#v", release.EventContainer)
 }
 
 // ------------------------ Release handler helper functions ------------------------ //

+ 1 - 1
server/router/router.go

@@ -1256,7 +1256,7 @@ func New(a *api.App) *chi.Mux {
 					auth.DoesUserHaveClusterAccess(
 						requestlog.NewHandler(a.HandleUpdateReleaseSteps, l),
 						mw.URLParam,
-						mw.QueryParam,
+						mw.BodyParam,
 					),
 					mw.URLParam,
 					mw.ReadAccess,