package goidentity
import (
"bytes"
"encoding/gob"
"github.com/hashicorp/go-uuid"
"time"
)
type User struct {
authenticated bool
domain string
userName string
displayName string
email string
human bool
groupMembership map [string ]bool
authTime time .Time
sessionID string
expiry time .Time
attributes map [string ]interface {}
}
func NewUser (username string ) User {
uuid , err := uuid .GenerateUUID ()
if err != nil {
uuid = "00unique-sess-ions-uuid-unavailable0"
}
return User {
userName : username ,
groupMembership : make (map [string ]bool ),
sessionID : uuid ,
}
}
func (u *User ) UserName () string {
return u .userName
}
func (u *User ) SetUserName (s string ) {
u .userName = s
}
func (u *User ) Domain () string {
return u .domain
}
func (u *User ) SetDomain (s string ) {
u .domain = s
}
func (u *User ) DisplayName () string {
if u .displayName == "" {
return u .userName
}
return u .displayName
}
func (u *User ) SetDisplayName (s string ) {
u .displayName = s
}
func (u *User ) Human () bool {
return u .human
}
func (u *User ) SetHuman (b bool ) {
u .human = b
}
func (u *User ) AuthTime () time .Time {
return u .authTime
}
func (u *User ) SetAuthTime (t time .Time ) {
u .authTime = t
}
func (u *User ) AuthzAttributes () []string {
s := make ([]string , len (u .groupMembership ))
i := 0
for a := range u .groupMembership {
s [i ] = a
i ++
}
return s
}
func (u *User ) Authenticated () bool {
return u .authenticated
}
func (u *User ) SetAuthenticated (b bool ) {
u .authenticated = b
}
func (u *User ) AddAuthzAttribute (a string ) {
u .groupMembership [a ] = true
}
func (u *User ) RemoveAuthzAttribute (a string ) {
if _ , ok := u .groupMembership [a ]; !ok {
return
}
delete (u .groupMembership , a )
}
func (u *User ) EnableAuthzAttribute (a string ) {
if enabled , ok := u .groupMembership [a ]; ok && !enabled {
u .groupMembership [a ] = true
}
}
func (u *User ) DisableAuthzAttribute (a string ) {
if enabled , ok := u .groupMembership [a ]; ok && enabled {
u .groupMembership [a ] = false
}
}
func (u *User ) Authorized (a string ) bool {
if enabled , ok := u .groupMembership [a ]; ok && enabled {
return true
}
return false
}
func (u *User ) SessionID () string {
return u .sessionID
}
func (u *User ) SetExpiry (t time .Time ) {
u .expiry = t
}
func (u *User ) Expired () bool {
if !u .expiry .IsZero () && time .Now ().UTC ().After (u .expiry ) {
return true
}
return false
}
func (u *User ) Attributes () map [string ]interface {} {
return u .attributes
}
func (u *User ) SetAttribute (k string , v interface {}) {
u .attributes [k ] = v
}
func (u *User ) SetAttributes (a map [string ]interface {}) {
u .attributes = a
}
func (u *User ) RemoveAttribute (k string ) {
delete (u .attributes , k )
}
func (u *User ) Marshal () ([]byte , error ) {
buf := new (bytes .Buffer )
enc := gob .NewEncoder (buf )
err := enc .Encode (u )
if err != nil {
return []byte {}, err
}
return buf .Bytes (), nil
}
func (u *User ) Unmarshal (b []byte ) error {
buf := bytes .NewBuffer (b )
dec := gob .NewDecoder (buf )
return dec .Decode (u )
}
The pages are generated with Golds v0.6.7 . (GOOS=linux GOARCH=amd64)
Golds is a Go 101 project developed by Tapir Liu .
PR and bug reports are welcome and can be submitted to the issue list .
Please follow @Go100and1 (reachable from the left QR code) to get the latest news of Golds .