0633aca607
We want to send email verification reminders to users from the satellite core, but some of the functionality required to do so exists in the satellite console service. We could simply import the console service into the core to achieve this, but the service requires a lot of dependencies that would go unused just to be able to send these emails. Instead, we break out the needed functionality into a new service which can be imported separately by the console service and the future email chore. The consoleauth service creates, signs, and checks the expiration of auth tokens. Change-Id: I2ad794b7fd256f8af24c1a8d73a203d508069078
58 lines
1.4 KiB
Go
58 lines
1.4 KiB
Go
// Copyright (C) 2019 Storj Labs, Inc.
|
|
// See LICENSE for copying information.
|
|
|
|
package console
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/zeebo/errs"
|
|
|
|
"storj.io/storj/satellite/console/consoleauth"
|
|
)
|
|
|
|
// TODO: change to JWT or Macaroon based auth
|
|
|
|
// key is a context value key type.
|
|
type key int
|
|
|
|
// authKey is context key for Authorization.
|
|
const authKey key = 0
|
|
|
|
// requestKey is context key for Requests.
|
|
const requestKey key = 1
|
|
|
|
// ErrUnauthorized is error class for authorization related errors.
|
|
var ErrUnauthorized = errs.Class("unauthorized")
|
|
|
|
// Authorization contains auth info of authorized User.
|
|
type Authorization struct {
|
|
User User
|
|
Claims consoleauth.Claims
|
|
}
|
|
|
|
// WithAuth creates new context with Authorization.
|
|
func WithAuth(ctx context.Context, auth Authorization) context.Context {
|
|
return context.WithValue(ctx, authKey, auth)
|
|
}
|
|
|
|
// WithAuthFailure creates new context with authorization failure.
|
|
func WithAuthFailure(ctx context.Context, err error) context.Context {
|
|
return context.WithValue(ctx, authKey, err)
|
|
}
|
|
|
|
// GetAuth gets Authorization from context.
|
|
func GetAuth(ctx context.Context) (Authorization, error) {
|
|
value := ctx.Value(authKey)
|
|
|
|
if auth, ok := value.(Authorization); ok {
|
|
return auth, nil
|
|
}
|
|
|
|
if err, ok := value.(error); ok {
|
|
return Authorization{}, ErrUnauthorized.Wrap(err)
|
|
}
|
|
|
|
return Authorization{}, ErrUnauthorized.New(unauthorizedErrMsg)
|
|
}
|