aboutsummaryrefslogblamecommitdiffstats
path: root/api/auth/context.go
blob: 1119e00f9cd8b5c527876880af985dddd23359cd (plain) (tree)
1
2
3
4
5
6
7
8





                                                                                

                                           

















                                                                                              
                                         
 
// Package auth contains helpers for managing identities within the GraphQL API.
package auth

import (
	"context"

	"github.com/git-bug/git-bug/cache"
	"github.com/git-bug/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.Identities().Resolve(id)
}