wings/router/tokens/websocket.go

47 lines
848 B
Go
Raw Normal View History

package tokens
2020-04-06 01:00:33 +00:00
import (
"encoding/json"
"github.com/gbrlsnchs/jwt/v3"
"strings"
"sync"
2020-04-06 01:00:33 +00:00
)
type WebsocketPayload struct {
2020-04-06 01:00:33 +00:00
jwt.Payload
sync.RWMutex
2020-04-06 01:00:33 +00:00
UserID json.Number `json:"user_id"`
ServerUUID string `json:"server_uuid"`
Permissions []string `json:"permissions"`
}
// Returns the JWT payload.
func (p *WebsocketPayload) GetPayload() *jwt.Payload {
p.RLock()
defer p.RUnlock()
return &p.Payload
}
func (p *WebsocketPayload) GetServerUuid() string {
p.RLock()
defer p.RUnlock()
return p.ServerUUID
}
2020-04-06 01:00:33 +00:00
// Checks if the given token payload has a permission string.
func (p *WebsocketPayload) HasPermission(permission string) bool {
p.RLock()
defer p.RUnlock()
2020-04-06 01:00:33 +00:00
for _, k := range p.Permissions {
if k == permission || (!strings.HasPrefix(permission, "admin") && k == "*") {
2020-04-06 01:00:33 +00:00
return true
}
}
return false
}