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
Raw Normal View History

package directive
import (
"context"
"github.com/pkg/errors"
"github.com/99designs/gqlgen/graphql"
2021-07-14 04:58:10 +00:00
2022-09-20 16:46:47 +00:00
"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{}
2021-05-02 06:36:10 +00:00
func (d *Directive) Authenticated(ctx context.Context, _ interface{}, next graphql.Resolver, yes bool) (interface{}, error) {
_, err := middleware.UserFromContext(ctx)
if yes && err != nil {
2021-05-02 06:36:10 +00:00
return nil, errorutil.Wrap(err, messageMustBeSignedIn)
} else if !yes && err == nil {
return nil, errors.New(messageMustBeSignedOut)
}
return next(ctx)
}
2021-07-14 04:58:10 +00:00
func (d *Directive) HasRole(ctx context.Context, _ interface{}, next graphql.Resolver, role model.Role) (interface{}, error) {
user, err := middleware.UserFromContext(ctx)
if err != nil {
2021-05-02 06:36:10 +00:00
return nil, errorutil.Wrap(err, messageMustBeSignedIn)
}
if user.Role != role {
return nil, errors.New(messageUnauthorized)
}
return next(ctx)
}