Alexander Belanger пре 4 година
родитељ
комит
4b1e82522e
3 измењених фајлова са 89 додато и 0 уклоњено
  1. 57 0
      api/server/handlers/user/welcome_webhook.go
  2. 25 0
      api/server/router/user.go
  3. 7 0
      api/types/user.go

+ 57 - 0
api/server/handlers/user/welcome_webhook.go

@@ -0,0 +1,57 @@
+package user
+
+import (
+	"net/http"
+	"net/url"
+
+	"github.com/gorilla/schema"
+	"github.com/porter-dev/porter/api/server/handlers"
+	"github.com/porter-dev/porter/api/server/shared"
+	"github.com/porter-dev/porter/api/server/shared/apierrors"
+	"github.com/porter-dev/porter/api/server/shared/config"
+	"github.com/porter-dev/porter/api/types"
+)
+
+type UserWelcomeHandler struct {
+	handlers.PorterHandlerReadWriter
+}
+
+func NewUserWelcomeHandler(
+	config *config.Config,
+	decoderValidator shared.RequestDecoderValidator,
+	writer shared.ResultWriter,
+) *UserWelcomeHandler {
+	return &UserWelcomeHandler{
+		PorterHandlerReadWriter: handlers.NewDefaultPorterHandler(config, decoderValidator, writer),
+	}
+}
+
+func (u *UserWelcomeHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
+	reqVals := &types.WelcomeWebhookRequest{}
+
+	if ok := u.DecodeAndValidate(w, r, reqVals); !ok {
+		return
+	}
+
+	req, err := http.NewRequest("GET", u.Config().ServerConf.WelcomeFormWebhook, nil)
+
+	if err != nil {
+		return
+	}
+
+	encoder := schema.NewEncoder()
+	dst := make(url.Values)
+
+	if err := encoder.Encode(reqVals, dst); err != nil {
+		u.HandleAPIError(w, r, apierrors.NewErrInternal(err))
+		return
+	}
+
+	req.URL.RawQuery = dst.Encode()
+	_, err = http.Get(req.URL.String())
+
+	if err != nil {
+		u.HandleAPIError(w, r, apierrors.NewErrInternal(err))
+		return
+	}
+}

+ 25 - 0
api/server/router/user.go

@@ -48,6 +48,31 @@ func getUserRoutes(
 ) []*Route {
 	routes := make([]*Route, 0)
 
+	// POST /api/welcome -> user.NewUserWelcomeHandler
+	welcomeEndpoint := factory.NewAPIEndpoint(
+		&types.APIRequestMetadata{
+			Verb:   types.APIVerbCreate,
+			Method: types.HTTPVerbPost,
+			Path: &types.Path{
+				Parent:       basePath,
+				RelativePath: "/welcome",
+			},
+			Scopes: []types.PermissionScope{types.UserScope},
+		},
+	)
+
+	welcomeHandler := user.NewUserWelcomeHandler(
+		config,
+		factory.GetDecoderValidator(),
+		factory.GetResultWriter(),
+	)
+
+	routes = append(routes, &Route{
+		Endpoint: welcomeEndpoint,
+		Handler:  welcomeHandler,
+		Router:   r,
+	})
+
 	// GET /api/cli/login -> user.user.NewCLILoginHandler
 	cliLoginUserEndpoint := factory.NewAPIEndpoint(
 		&types.APIRequestMetadata{

+ 7 - 0
api/types/user.go

@@ -60,3 +60,10 @@ type FinalizeResetUserPasswordRequest struct {
 }
 
 type ListUserProjectsResponse []*Project
+
+type WelcomeWebhookRequest struct {
+	Email     string `json:"email" schema:"email"`
+	IsCompany bool   `json:"isCompany" schema:"isCompany"`
+	Company   string `json:"company" schema:"company"`
+	Role      string `json:"role" schema:"role"`
+}