Skip to content

Commit

Permalink
Handlers renamed (#88)
Browse files Browse the repository at this point in the history
* updated openApi docs, added new params and descriptions

* updated users endpoint in gateway and user_service, now we need to security headers, api-key and jwt token
  • Loading branch information
RafalSalwa committed May 26, 2024
1 parent fb3fe41 commit 1561b0c
Show file tree
Hide file tree
Showing 17 changed files with 310 additions and 174 deletions.
1 change: 1 addition & 0 deletions .golangci.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ linters:
- dogsled
- dupl
- errcheck
- errorlint
- exportloopref
- forbidigo
- funlen
Expand Down
8 changes: 4 additions & 4 deletions cmd/auth_service/internal/services/user_gorm_service.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,17 +13,17 @@ type (
Load(ctx context.Context, id string) (*models.UserDBModel, error)
}
userService struct {
repository repository.UserRepository
repo repository.UserRepository
}
)

func NewORMUserService(repository repository.UserRepository) UserService {
return &userService{repository: repository}
func NewORMUserService(repo repository.UserRepository) UserService {

Check warning on line 20 in cmd/auth_service/internal/services/user_gorm_service.go

View workflow job for this annotation

GitHub Actions / golint-github-check

[golint-github-check] cmd/auth_service/internal/services/user_gorm_service.go#L20

exported function NewORMUserService should have comment or be unexported
Raw output
cmd/auth_service/internal/services/user_gorm_service.go:20:1: exported function NewORMUserService should have comment or be unexported
return &userService{repo: repo}
}

func (s *userService) Load(ctx context.Context, id string) (*models.UserDBModel, error) {
uid, _ := strconv.ParseInt(id, 10, 64)
res, err := s.repository.GetOrCreate(ctx, uid)
res, err := s.repo.GetOrCreate(ctx, uid)
if err != nil {
return nil, err
}
Expand Down
87 changes: 44 additions & 43 deletions cmd/gateway/internal/handler/auth.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,31 +29,33 @@ type (
GetVerificationCode() http.HandlerFunc
}
authHandler struct {
cqrs *cqrs.Application
logger *logger.Logger
application *cqrs.Application
logger *logger.Logger
}
)

func (a authHandler) RegisterRoutes(r *mux.Router, cfg interface{}) {
const verificationCodeParam = "code"

func (h authHandler) RegisterRoutes(r *mux.Router, cfg interface{}) {
params := cfg.(auth.Auth)
authorizer, _ := auth.NewAuthorizer(&params)

sr := r.PathPrefix("/auth/").Subrouter()

sr.Methods(http.MethodPost).Path("/signup").HandlerFunc(authorizer.Middleware(a.SignUpUser()))
sr.Methods(http.MethodPost).Path("/signin/{auth_code}").HandlerFunc(authorizer.Middleware(a.SignInUserByCode()))
sr.Methods(http.MethodPost).Path("/signin").HandlerFunc(authorizer.Middleware(a.SignInUser()))
sr.Methods(http.MethodPost).Path("/signup").HandlerFunc(authorizer.Middleware(h.SignUpUser()))
sr.Methods(http.MethodPost).Path("/signin/{auth_code}").HandlerFunc(authorizer.Middleware(h.SignInUserByCode()))
sr.Methods(http.MethodPost).Path("/signin").HandlerFunc(authorizer.Middleware(h.SignInUser()))

sr.Methods(http.MethodGet).Path("/verify/{code}").HandlerFunc(authorizer.Middleware(a.Verify()))
sr.Methods(http.MethodPost).Path("/code").HandlerFunc(authorizer.Middleware(a.GetVerificationCode()))
sr.Methods(http.MethodGet).Path("/code/{code}").HandlerFunc(authorizer.Middleware(a.GetUserByCode()))
sr.Methods(http.MethodGet).Path("/verify/{code}").HandlerFunc(authorizer.Middleware(h.Verify()))
sr.Methods(http.MethodPost).Path("/code").HandlerFunc(authorizer.Middleware(h.GetVerificationCode()))
sr.Methods(http.MethodGet).Path("/code/{code}").HandlerFunc(authorizer.Middleware(h.GetUserByCode()))
}

func NewAuthHandler(cqrs *cqrs.Application, l *logger.Logger) AuthHandler {
return authHandler{cqrs, l}
func NewAuthHandler(application *cqrs.Application, l *logger.Logger) AuthHandler {

Check warning on line 54 in cmd/gateway/internal/handler/auth.go

View workflow job for this annotation

GitHub Actions / golint-github-check

[golint-github-check] cmd/gateway/internal/handler/auth.go#L54

exported function NewAuthHandler should have comment or be unexported
Raw output
cmd/gateway/internal/handler/auth.go:54:1: exported function NewAuthHandler should have comment or be unexported
return authHandler{application, l}
}

func (a authHandler) SignInUser() http.HandlerFunc {
func (h authHandler) SignInUser() http.HandlerFunc {
reqUser := models.SignInUserRequest{}

res := &models.UserResponse{}
Expand All @@ -62,17 +64,17 @@ func (a authHandler) SignInUser() http.HandlerFunc {
defer span.End()

if err := validate.UserInput(r, &reqUser); err != nil {
a.logger.Error().Err(err).Msg("SignInUser: validate")
h.logger.Error().Err(err).Msg("SignInUser: validate")

responses.RespondBadRequest(w, err.Error())
return
}

var errQuery error
res, errQuery = a.cqrs.SigninCommand(ctx, reqUser)
res, errQuery = h.application.SigninCommand(ctx, reqUser)

if errQuery != nil {
a.logger.Error().Err(errQuery).Msg("SignInUser: grpc signIn")
h.logger.Error().Err(errQuery).Msg("SignInUser: grpc signIn")

if e, ok := status.FromError(errQuery); ok {
responses.FromGRPCError(e, w)
Expand All @@ -85,7 +87,7 @@ func (a authHandler) SignInUser() http.HandlerFunc {
}
}

func (a authHandler) SignInUserByCode() http.HandlerFunc {
func (h authHandler) SignInUserByCode() http.HandlerFunc {
var authCode string
reqSignIn := models.VerificationCodeRequest{}
res := &models.UserResponse{}
Expand All @@ -103,17 +105,17 @@ func (a authHandler) SignInUserByCode() http.HandlerFunc {
}
if err := validate.UserInput(r, &reqSignIn); err != nil {
tracing.RecordError(span, err)
a.logger.Error().Err(err).Msg("SignInUserByCode: decode")
h.logger.Error().Err(err).Msg("SignInUserByCode: decode")

responses.RespondBadRequest(w, err.Error())
return
}

var errQuery error
res, errQuery = a.cqrs.SigninByCodeCommand(ctx, reqSignIn.Email, authCode)
res, errQuery = h.application.SigninByCodeCommand(ctx, reqSignIn.Email, authCode)

if errQuery != nil {
a.logger.Error().Err(errQuery).Msg("SignInUser: grpc signIn")
h.logger.Error().Err(errQuery).Msg("SignInUser: grpc signIn")

if e, ok := status.FromError(errQuery); ok {
responses.FromGRPCError(e, w)
Expand All @@ -126,27 +128,26 @@ func (a authHandler) SignInUserByCode() http.HandlerFunc {
}
}

func (a authHandler) SignUpUser() http.HandlerFunc {
func (h authHandler) SignUpUser() http.HandlerFunc {
var reqUser models.SignUpUserRequest

return func(w http.ResponseWriter, r *http.Request) {
ctx, span := otel.GetTracerProvider().Tracer("Handler").Start(r.Context(), "Handler/SignUpUser")
ctx, span := otel.GetTracerProvider().Tracer("Handler").Start(r.Context(), "AuthHandler/SignUpUser")
defer span.End()

if err := validate.UserInput(r, &reqUser); err != nil {
tracing.RecordError(span, err)
a.logger.Error().Err(err).Msg("SignUpUser: decode")
h.logger.Error().Err(err).Msg("SignUpUser: validate")

responses.RespondBadRequest(w, err.Error())
return
}

err := a.cqrs.SignupUserCommand(ctx, reqUser)
err := h.application.SignupUserCommand(ctx, reqUser)

if err != nil {
span.RecordError(err, trace.WithStackTrace(true))
span.SetStatus(codes.Error, err.Error())
a.logger.Error().Err(err).Msg("SignUpUser:create")
tracing.RecordError(span, err)
h.logger.Error().Err(err).Msg("SignUpUser:create")

if e, ok := status.FromError(err); ok {
responses.FromGRPCError(e, w)
Expand All @@ -159,7 +160,7 @@ func (a authHandler) SignUpUser() http.HandlerFunc {
}
}

func (a authHandler) GetVerificationCode() http.HandlerFunc {
func (h authHandler) GetVerificationCode() http.HandlerFunc {
reqSignIn := models.VerificationCodeRequest{}
resp := models.UserResponse{}

Expand All @@ -169,17 +170,17 @@ func (a authHandler) GetVerificationCode() http.HandlerFunc {

if err := validate.UserInput(r, &reqSignIn); err != nil {
tracing.RecordError(span, err)
a.logger.Error().Err(err).Msg("GetVerificationCode: validate")
h.logger.Error().Err(err).Msg("GetVerificationCode: validate")

responses.RespondBadRequest(w, err.Error())
return
}

_, err := a.cqrs.GetUser(ctx, models.UserRequest{Email: reqSignIn.Email})
_, err := h.application.GetUser(ctx, models.UserRequest{Email: reqSignIn.Email})
if err != nil {
span.RecordError(err, trace.WithStackTrace(true))
span.SetStatus(codes.Error, err.Error())
a.logger.Error().Err(err).Msg("GetVerificationCode: fetchUser")
h.logger.Error().Err(err).Msg("GetVerificationCode: fetchUser")

if e, ok := status.FromError(err); ok {
responses.FromGRPCError(e, w)
Expand All @@ -189,11 +190,11 @@ func (a authHandler) GetVerificationCode() http.HandlerFunc {
return
}

resp, err = a.cqrs.GetVerificationCode(ctx, reqSignIn.Email)
resp, err = h.application.GetVerificationCode(ctx, reqSignIn.Email)
if err != nil {
span.RecordError(err, trace.WithStackTrace(true))
span.SetStatus(codes.Error, err.Error())
a.logger.Error().Err(err).Msg("GetVerificationCode: GetVerificationCode")
h.logger.Error().Err(err).Msg("GetVerificationCode: GetVerificationCode")

if e, ok := status.FromError(err); ok {
responses.FromGRPCError(e, w)
Expand All @@ -206,35 +207,35 @@ func (a authHandler) GetVerificationCode() http.HandlerFunc {
}
}

func (a authHandler) GetUserByCode() http.HandlerFunc {
func (h authHandler) GetUserByCode() http.HandlerFunc {
var vCode string

return func(w http.ResponseWriter, r *http.Request) {
ctx, span := otel.GetTracerProvider().Tracer("user-handler").Start(r.Context(), "GetUserByCode")
defer span.End()

vCode = mux.Vars(r)["code"]
vCode = mux.Vars(r)[verificationCodeParam]
if vCode == "" {
vCode = r.URL.Query().Get("code")
vCode = r.URL.Query().Get(verificationCodeParam)
if vCode == "" {
responses.RespondBadRequest(w, "code param is missing")
return
}
}

user, err := a.cqrs.GetUserByCode(ctx, vCode)
user, err := h.application.GetUserByCode(ctx, vCode)
if err != nil {
span.RecordError(err, trace.WithStackTrace(true))
span.SetStatus(codes.Error, err.Error())
a.logger.Error().Err(err).Msg("GetUserByID:header:getId")
h.logger.Error().Err(err).Msg("GetUserByID:header:getId")
responses.RespondBadRequest(w, err.Error())
return
}

if err != nil {
span.RecordError(err, trace.WithStackTrace(true))
span.SetStatus(codes.Error, err.Error())
a.logger.Error().Err(err).Msg("GetUserByID:grpc:getUser")
h.logger.Error().Err(err).Msg("GetUserByID:grpc:getUser")

if e, ok := status.FromError(err); ok {
responses.FromGRPCError(e, w)
Expand All @@ -247,29 +248,29 @@ func (a authHandler) GetUserByCode() http.HandlerFunc {
}
}

func (a authHandler) Verify() http.HandlerFunc {
func (h authHandler) Verify() http.HandlerFunc {
var vCode string

return func(w http.ResponseWriter, r *http.Request) {
ctx, span := otel.GetTracerProvider().Tracer("auth-handler").Start(r.Context(), "Handler SignUpUser")
defer span.End()

vCode = mux.Vars(r)["code"]
vCode = mux.Vars(r)[verificationCodeParam]

if vCode == "" {
vCode = r.URL.Query().Get("code")
vCode = r.URL.Query().Get(verificationCodeParam)
if vCode == "" {
responses.RespondBadRequest(w, "code param is missing")
return
}
}

err := a.cqrs.Commands.VerifyUserByCode.Handle(ctx, command.VerifyCode{VerificationCode: vCode})
err := h.application.Commands.VerifyUserByCode.Handle(ctx, command.VerifyCode{VerificationCode: vCode})

if err != nil {
span.RecordError(err, trace.WithStackTrace(true))
span.SetStatus(codes.Error, err.Error())
a.logger.Error().Err(err).Msg("Verify")
h.logger.Error().Err(err).Msg("Verify")

if e, ok := status.FromError(err); ok {
responses.FromGRPCError(e, w)
Expand Down
24 changes: 11 additions & 13 deletions cmd/gateway/internal/handler/crypton.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,10 @@ import (
"net/http"

"github.com/RafalSalwa/auth-api/pkg/encdec"
"github.com/RafalSalwa/auth-api/pkg/logger"
"github.com/RafalSalwa/auth-api/pkg/responses"
"go.opentelemetry.io/otel"

"github.com/gorilla/mux"

"github.com/RafalSalwa/auth-api/pkg/logger"
"go.opentelemetry.io/otel"
)

type (
Expand All @@ -24,12 +22,16 @@ type (
}
)

func (c cryptonHandler) RegisterRoutes(r *mux.Router, cfg interface{}) {
r.Methods(http.MethodGet).Path("/encrypt/{message}").HandlerFunc(c.Encrypt())
r.Methods(http.MethodGet).Path("/decrypt/{message}").HandlerFunc(c.Decrypt())
func NewCryptonHandler(l *logger.Logger) CryptonHandler {

Check warning on line 25 in cmd/gateway/internal/handler/crypton.go

View workflow job for this annotation

GitHub Actions / golint-github-check

[golint-github-check] cmd/gateway/internal/handler/crypton.go#L25

exported function NewCryptonHandler should have comment or be unexported
Raw output
cmd/gateway/internal/handler/crypton.go:25:1: exported function NewCryptonHandler should have comment or be unexported
return cryptonHandler{l}
}

func (h cryptonHandler) RegisterRoutes(r *mux.Router, cfg interface{}) {
r.Methods(http.MethodGet).Path("/encrypt/{message}").HandlerFunc(h.Encrypt())
r.Methods(http.MethodGet).Path("/decrypt/{message}").HandlerFunc(h.Decrypt())
}

func (c cryptonHandler) Encrypt() http.HandlerFunc {
func (h cryptonHandler) Encrypt() http.HandlerFunc {
var message string
return func(w http.ResponseWriter, r *http.Request) {
_, span := otel.GetTracerProvider().Tracer("Encrypt").Start(r.Context(), "Encrypt Handler")
Expand All @@ -41,7 +43,7 @@ func (c cryptonHandler) Encrypt() http.HandlerFunc {
}
}

func (c cryptonHandler) Decrypt() http.HandlerFunc {
func (h cryptonHandler) Decrypt() http.HandlerFunc {
var message string
return func(w http.ResponseWriter, r *http.Request) {
_, span := otel.GetTracerProvider().Tracer("Encrypt").Start(r.Context(), "Encrypt Handler")
Expand All @@ -52,7 +54,3 @@ func (c cryptonHandler) Decrypt() http.HandlerFunc {
responses.RespondString(w, encrypted)
}
}

func NewCryptonHandler(l *logger.Logger) CryptonHandler {
return cryptonHandler{l}
}
Loading

0 comments on commit 1561b0c

Please sign in to comment.