Checkpoint audio-only Skald fork work
This commit is contained in:
+35
-35
@@ -17,28 +17,28 @@ var ErrTagMismatch = errors.New("tag mismatch")
|
||||
|
||||
// A stateful token
|
||||
type Stateful struct {
|
||||
Token string `json:"token"`
|
||||
Group string `json:"group"`
|
||||
IncludeSubgroups bool `json:"includeSubgroups,omitempty"`
|
||||
Username *string `json:"username,omitempty"`
|
||||
Permissions []string `json:"permissions"`
|
||||
Expires *time.Time `json:"expires,omitempty"`
|
||||
NotBefore *time.Time `json:"not-before,omitempty"`
|
||||
IssuedAt *time.Time `json:"issuedAt,omitempty"`
|
||||
IssuedBy *string `json:"issuedBy,omitempty"`
|
||||
Token string `json:"token"`
|
||||
Hall string `json:"hall"`
|
||||
IncludeSubhalls bool `json:"includeSubhalls,omitempty"`
|
||||
Username *string `json:"username,omitempty"`
|
||||
Permissions []string `json:"permissions"`
|
||||
Expires *time.Time `json:"expires,omitempty"`
|
||||
NotBefore *time.Time `json:"not-before,omitempty"`
|
||||
IssuedAt *time.Time `json:"issuedAt,omitempty"`
|
||||
IssuedBy *string `json:"issuedBy,omitempty"`
|
||||
}
|
||||
|
||||
func (token *Stateful) Clone() *Stateful {
|
||||
return &Stateful{
|
||||
Token: token.Token,
|
||||
Group: token.Group,
|
||||
IncludeSubgroups: token.IncludeSubgroups,
|
||||
Username: token.Username,
|
||||
Permissions: append([]string(nil), token.Permissions...),
|
||||
Expires: token.Expires,
|
||||
NotBefore: token.NotBefore,
|
||||
IssuedAt: token.IssuedAt,
|
||||
IssuedBy: token.IssuedBy,
|
||||
Token: token.Token,
|
||||
Hall: token.Hall,
|
||||
IncludeSubhalls: token.IncludeSubhalls,
|
||||
Username: token.Username,
|
||||
Permissions: append([]string(nil), token.Permissions...),
|
||||
Expires: token.Expires,
|
||||
NotBefore: token.NotBefore,
|
||||
IssuedAt: token.IssuedAt,
|
||||
IssuedBy: token.IssuedBy,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -86,25 +86,25 @@ func Get(token string) (*Stateful, string, error) {
|
||||
return tokens.Get(token)
|
||||
}
|
||||
|
||||
func (token *Stateful) match(group string) bool {
|
||||
if group == "" {
|
||||
func (token *Stateful) match(hall string) bool {
|
||||
if hall == "" {
|
||||
return false
|
||||
}
|
||||
if group == token.Group {
|
||||
if hall == token.Hall {
|
||||
return true
|
||||
}
|
||||
if token.IncludeSubgroups {
|
||||
if token.Group == "" {
|
||||
if token.IncludeSubhalls {
|
||||
if token.Hall == "" {
|
||||
return true
|
||||
}
|
||||
return strings.HasPrefix(group, token.Group+"/")
|
||||
return strings.HasPrefix(hall, token.Hall+"/")
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func (token *Stateful) Check(host, group string, username *string) (string, []string, error) {
|
||||
if !token.match(group) {
|
||||
return "", nil, errors.New("token for bad group")
|
||||
func (token *Stateful) Check(host, hall string, username *string) (string, []string, error) {
|
||||
if !token.match(hall) {
|
||||
return "", nil, errors.New("token for bad hall")
|
||||
}
|
||||
now := time.Now()
|
||||
if token.Expires == nil || now.After(*token.Expires) {
|
||||
@@ -391,9 +391,9 @@ func (state *state) rewrite() error {
|
||||
}
|
||||
|
||||
// called locked
|
||||
func (state *state) list(group string, all bool) ([]*Stateful, string, error) {
|
||||
if group != "" && all {
|
||||
return nil, "", errors.New("cannot specify both group and all")
|
||||
func (state *state) list(hall string, all bool) ([]*Stateful, string, error) {
|
||||
if hall != "" && all {
|
||||
return nil, "", errors.New("cannot specify both hall and all")
|
||||
}
|
||||
_, err := state.load()
|
||||
if err != nil {
|
||||
@@ -405,7 +405,7 @@ func (state *state) list(group string, all bool) ([]*Stateful, string, error) {
|
||||
return a, state.etag(), nil
|
||||
}
|
||||
for _, t := range state.tokens {
|
||||
if !all && t.Group != group {
|
||||
if !all && t.Hall != hall {
|
||||
continue
|
||||
}
|
||||
a = append(a, t)
|
||||
@@ -422,14 +422,14 @@ func (state *state) list(group string, all bool) ([]*Stateful, string, error) {
|
||||
return a, state.etag(), nil
|
||||
}
|
||||
|
||||
func (state *state) List(group string) ([]*Stateful, string, error) {
|
||||
func (state *state) List(hall string) ([]*Stateful, string, error) {
|
||||
state.mu.Lock()
|
||||
defer state.mu.Unlock()
|
||||
return state.list(group, false)
|
||||
return state.list(hall, false)
|
||||
}
|
||||
|
||||
func List(group string) ([]*Stateful, string, error) {
|
||||
return tokens.List(group)
|
||||
func List(hall string) ([]*Stateful, string, error) {
|
||||
return tokens.List(hall)
|
||||
}
|
||||
|
||||
func (state *state) Expire() error {
|
||||
|
||||
Reference in New Issue
Block a user