38 lines
1.0 KiB
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)
|
|
}
|