53 lines
1.0 KiB
Go
53 lines
1.0 KiB
Go
package goidentity
|
|
|
|
import (
|
|
"context"
|
|
"net/http"
|
|
"time"
|
|
)
|
|
|
|
const (
|
|
CTXKey = "jcmturner/goidentity"
|
|
)
|
|
|
|
type Identity interface {
|
|
UserName() string
|
|
SetUserName(s string)
|
|
Domain() string
|
|
SetDomain(s string)
|
|
DisplayName() string
|
|
SetDisplayName(s string)
|
|
Human() bool
|
|
SetHuman(b bool)
|
|
AuthTime() time.Time
|
|
SetAuthTime(t time.Time)
|
|
AuthzAttributes() []string
|
|
AddAuthzAttribute(a string)
|
|
RemoveAuthzAttribute(a string)
|
|
Authenticated() bool
|
|
SetAuthenticated(b bool)
|
|
Authorized(a string) bool
|
|
SessionID() string
|
|
Expired() bool
|
|
Attributes() map[string]interface{}
|
|
SetAttribute(k string, v interface{})
|
|
SetAttributes(map[string]interface{})
|
|
RemoveAttribute(k string)
|
|
Marshal() ([]byte, error)
|
|
Unmarshal([]byte) error
|
|
}
|
|
|
|
func AddToHTTPRequestContext(id Identity, r *http.Request) *http.Request {
|
|
ctx := r.Context()
|
|
ctx = context.WithValue(ctx, CTXKey, id)
|
|
return r.WithContext(ctx)
|
|
}
|
|
|
|
func FromHTTPRequestContext(r *http.Request) Identity {
|
|
ctx := r.Context()
|
|
if id, ok := ctx.Value(CTXKey).(Identity); ok {
|
|
return id
|
|
}
|
|
return nil
|
|
}
|