2024-08-01 23:53:19 +00:00
|
|
|
package admin
|
|
|
|
|
|
|
|
import (
|
|
|
|
"fmt"
|
|
|
|
"math/rand"
|
|
|
|
"os"
|
|
|
|
"time"
|
|
|
|
)
|
|
|
|
|
|
|
|
type (
|
|
|
|
Session struct {
|
2024-08-02 21:48:26 +00:00
|
|
|
Token string
|
|
|
|
UserID string
|
|
|
|
Expires time.Time
|
2024-08-01 23:53:19 +00:00
|
|
|
}
|
|
|
|
)
|
|
|
|
|
|
|
|
const TOKEN_LENGTH = 64
|
|
|
|
const TOKEN_CHARS = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
|
|
|
|
|
2024-08-05 15:49:49 +00:00
|
|
|
var ADMIN_BYPASS = func() bool {
|
|
|
|
if os.Getenv("ARIMELODY_ADMIN_BYPASS") == "true" {
|
|
|
|
fmt.Println("WARNING: Admin login is currently BYPASSED by ARIMELODY_ADMIN_BYPASS.")
|
|
|
|
return true
|
|
|
|
}
|
|
|
|
return false
|
|
|
|
}()
|
|
|
|
|
2024-08-01 23:53:19 +00:00
|
|
|
var ADMIN_ID_DISCORD = func() string {
|
|
|
|
envvar := os.Getenv("DISCORD_ADMIN_ID")
|
|
|
|
if envvar == "" {
|
|
|
|
fmt.Printf("DISCORD_ADMIN_ID was not provided. Admin login will be unavailable.\n")
|
|
|
|
}
|
|
|
|
return envvar
|
|
|
|
}()
|
|
|
|
|
|
|
|
var sessions []*Session
|
|
|
|
|
2024-08-02 21:48:26 +00:00
|
|
|
func createSession(username string, expires time.Time) Session {
|
2024-08-01 23:53:19 +00:00
|
|
|
return Session{
|
|
|
|
Token: string(generateToken()),
|
2024-08-02 21:48:26 +00:00
|
|
|
UserID: username,
|
|
|
|
Expires: expires,
|
2024-08-01 23:53:19 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func generateToken() string {
|
|
|
|
var token []byte
|
|
|
|
|
|
|
|
for i := 0; i < TOKEN_LENGTH; i++ {
|
|
|
|
token = append(token, TOKEN_CHARS[rand.Intn(len(TOKEN_CHARS))])
|
|
|
|
}
|
|
|
|
|
|
|
|
return string(token)
|
|
|
|
}
|