53 lines
1 KiB
Go
53 lines
1 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
|
||
|
}
|