Alexander Belanger 5 лет назад
Родитель
Сommit
09184c1bb8

+ 27 - 0
api/server/handlers/user/auth_check.go

@@ -0,0 +1,27 @@
+package user
+
+import (
+	"net/http"
+
+	"github.com/porter-dev/porter/api/server/shared"
+	"github.com/porter-dev/porter/api/types"
+	"github.com/porter-dev/porter/internal/models"
+)
+
+type AuthCheckHandler struct {
+	config *shared.Config
+	writer shared.ResultWriter
+}
+
+func NewAuthCheckHandler(
+	config *shared.Config,
+	writer shared.ResultWriter,
+) *AuthCheckHandler {
+	return &AuthCheckHandler{config, writer}
+}
+
+func (a *AuthCheckHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
+	user, _ := r.Context().Value(types.UserScope).(*models.User)
+
+	a.writer.WriteResult(w, user.ToUserType())
+}

+ 36 - 0
api/server/handlers/user/auth_check_test.go

@@ -0,0 +1,36 @@
+package user_test
+
+import (
+	"testing"
+
+	"github.com/porter-dev/porter/api/server/handlers/user"
+	"github.com/porter-dev/porter/api/server/shared"
+	"github.com/porter-dev/porter/api/server/shared/apitest"
+	"github.com/porter-dev/porter/api/types"
+)
+
+func TestAuthCheckSuccessful(t *testing.T) {
+	// create a test project
+	config := apitest.LoadConfig(t)
+	authUser := apitest.CreateTestUser(t, config)
+	req, rr := apitest.GetRequestAndRecorder(t, string(types.HTTPVerbPost), "/api/auth/check", nil)
+
+	req = apitest.WithAuthenticatedUser(t, req, authUser)
+
+	handler := user.NewAuthCheckHandler(
+		config,
+		shared.NewDefaultResultWriter(config),
+	)
+
+	handler.ServeHTTP(rr, req)
+
+	expUser := &types.GetAuthenticatedUserResponse{
+		ID:            1,
+		Email:         "test@test.it",
+		EmailVerified: true,
+	}
+
+	gotUser := &types.GetAuthenticatedUserResponse{}
+
+	apitest.AssertResponseExpected(t, rr, expUser, gotUser)
+}

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

@@ -3,6 +3,7 @@ package router
 import (
 	"github.com/go-chi/chi"
 	"github.com/porter-dev/porter/api/server/handlers/project"
+	"github.com/porter-dev/porter/api/server/handlers/user"
 	"github.com/porter-dev/porter/api/server/shared"
 	"github.com/porter-dev/porter/api/types"
 )
@@ -42,6 +43,30 @@ func getUserRoutes(
 ) []*Route {
 	routes := make([]*Route, 0)
 
+	// GET /api/auth/check -> user.NewAuthCheckHandler
+	authCheckEndpoint := factory.NewAPIEndpoint(
+		&types.APIRequestMetadata{
+			Verb:   types.APIVerbGet,
+			Method: types.HTTPVerbGet,
+			Path: &types.Path{
+				Parent:       basePath,
+				RelativePath: "/auth/check",
+			},
+			Scopes: []types.PermissionScope{types.UserScope},
+		},
+	)
+
+	authCheckHandler := user.NewAuthCheckHandler(
+		config,
+		factory.GetResultWriter(),
+	)
+
+	routes = append(routes, &Route{
+		Endpoint: authCheckEndpoint,
+		Handler:  authCheckHandler,
+		Router:   r,
+	})
+
 	// POST /api/projects -> project.NewProjectCreateHandler
 	createEndpoint := factory.NewAPIEndpoint(
 		&types.APIRequestMetadata{

+ 2 - 0
api/types/user.go

@@ -12,3 +12,5 @@ type CreateUserRequest struct {
 }
 
 type CreateUserResponse User
+
+type GetAuthenticatedUserResponse User