Checkpoint audio-only Skald fork work

This commit is contained in:
Storm Dragon
2026-05-18 13:06:57 -04:00
parent a8ada950d5
commit 965347cad4
48 changed files with 1080 additions and 3651 deletions
+35 -35
View File
@@ -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 {