54 lines
1.4 KiB
Go
54 lines
1.4 KiB
Go
|
package models
|
||
|
|
||
|
import (
|
||
|
"time"
|
||
|
|
||
|
log "github.com/sirupsen/logrus"
|
||
|
)
|
||
|
|
||
|
const (
|
||
|
// ScopeCanSendUserMessages will allow sending chat messages as users.
|
||
|
ScopeCanSendUserMessages = "CAN_SEND_MESSAGES"
|
||
|
// ScopeCanSendSystemMessages will allow sending chat messages as the system.
|
||
|
ScopeCanSendSystemMessages = "CAN_SEND_SYSTEM_MESSAGES"
|
||
|
// ScopeHasAdminAccess will allow performing administrative actions on the server.
|
||
|
ScopeHasAdminAccess = "HAS_ADMIN_ACCESS"
|
||
|
)
|
||
|
|
||
|
// For a scope to be seen as "valid" it must live in this slice.
|
||
|
var validAccessTokenScopes = []string{
|
||
|
ScopeCanSendUserMessages,
|
||
|
ScopeCanSendSystemMessages,
|
||
|
ScopeHasAdminAccess,
|
||
|
}
|
||
|
|
||
|
// AccessToken gives access to 3rd party code to access specific Owncast APIs.
|
||
|
type AccessToken struct {
|
||
|
Token string `json:"token"`
|
||
|
Name string `json:"name"`
|
||
|
Scopes []string `json:"scopes"`
|
||
|
Timestamp time.Time `json:"timestamp"`
|
||
|
LastUsed *time.Time `json:"lastUsed"`
|
||
|
}
|
||
|
|
||
|
// HasValidScopes will verify that all the scopes provided are valid.
|
||
|
// This is not a efficient method.
|
||
|
func HasValidScopes(scopes []string) bool {
|
||
|
for _, scope := range scopes {
|
||
|
if !findItemInSlice(validAccessTokenScopes, scope) {
|
||
|
log.Errorln("Invalid scope", scope)
|
||
|
return false
|
||
|
}
|
||
|
}
|
||
|
return true
|
||
|
}
|
||
|
|
||
|
func findItemInSlice(slice []string, value string) bool {
|
||
|
for _, item := range slice {
|
||
|
if item == value {
|
||
|
return true
|
||
|
}
|
||
|
}
|
||
|
return false
|
||
|
}
|