git-bug/api/auth/context.go
Michael Muré 2ab6381a94
Reorganize the webUI and API code
Included in the changes:
- create a new /api root package to hold all API code, migrate /graphql in there
- git API handlers all use the cache instead of the repo directly
- git API handlers are now tested
- git API handlers now require a "repo" mux parameter
- lots of untangling of API/handlers/middleware
- less code in commands/webui.go
2020-06-27 23:03:05 +02:00

29 lines
941 B
Go

// Package auth contains helpers for managing identities within the GraphQL API.
package auth
import (
"context"
"github.com/MichaelMure/git-bug/cache"
"github.com/MichaelMure/git-bug/entity"
)
// identityCtxKey is a unique context key, accessible only in this package.
var identityCtxKey = &struct{}{}
// CtxWithUser attaches an Identity to a context.
func CtxWithUser(ctx context.Context, userId entity.Id) context.Context {
return context.WithValue(ctx, identityCtxKey, userId)
}
// UserFromCtx retrieves an IdentityCache from the context.
// If there is no identity in the context, ErrNotAuthenticated is returned.
// If an error occurs while resolving the identity (e.g. I/O error), then it will be returned.
func UserFromCtx(ctx context.Context, r *cache.RepoCache) (*cache.IdentityCache, error) {
id, ok := ctx.Value(identityCtxKey).(entity.Id)
if !ok {
return nil, ErrNotAuthenticated
}
return r.ResolveIdentity(id)
}