This repository has been archived on 2023-08-20. You can view files and clone it, but cannot push or open issues or pull requests.
backend/internal/graphql/directive/directive.go

38 lines
1.0 KiB
Go

package directive
import (
"context"
"github.com/pkg/errors"
"github.com/99designs/gqlgen/graphql"
"gitea.dwysokinski.me/zdam-egzamin-zawodowy/backend/internal/chi/middleware"
"gitea.dwysokinski.me/zdam-egzamin-zawodowy/backend/internal/model"
"gitea.dwysokinski.me/zdam-egzamin-zawodowy/backend/util/errorutil"
)
type Directive struct{}
func (d *Directive) Authenticated(ctx context.Context, _ interface{}, next graphql.Resolver, yes bool) (interface{}, error) {
_, err := middleware.UserFromContext(ctx)
if yes && err != nil {
return nil, errorutil.Wrap(err, messageMustBeSignedIn)
} else if !yes && err == nil {
return nil, errors.New(messageMustBeSignedOut)
}
return next(ctx)
}
func (d *Directive) HasRole(ctx context.Context, _ interface{}, next graphql.Resolver, role model.Role) (interface{}, error) {
user, err := middleware.UserFromContext(ctx)
if err != nil {
return nil, errorutil.Wrap(err, messageMustBeSignedIn)
}
if user.Role != role {
return nil, errors.New(messageUnauthorized)
}
return next(ctx)
}