notify.moe/arn/APIKeys.go

115 lines
2.3 KiB
Go

package arn
import (
"os"
"path"
"github.com/animenotifier/anilist"
jsoniter "github.com/json-iterator/go"
)
// Root is the full path to the root directory of notify.moe repository.
var Root = os.Getenv("ARN_ROOT")
// APIKeys are global API keys for several services
var APIKeys APIKeysData
// APIKeysData represents the API keys defined in "security/api-keys.json".
type APIKeysData struct {
Google struct {
ID string `json:"id"`
Secret string `json:"secret"`
} `json:"google"`
Facebook struct {
ID string `json:"id"`
Secret string `json:"secret"`
} `json:"facebook"`
Twitter struct {
ID string `json:"id"`
Secret string `json:"secret"`
} `json:"twitter"`
Discord struct {
ID string `json:"id"`
Secret string `json:"secret"`
Token string `json:"token"`
} `json:"discord"`
SoundCloud struct {
ID string `json:"id"`
Secret string `json:"secret"`
} `json:"soundcloud"`
GoogleAPI struct {
Key string `json:"key"`
} `json:"googleAPI"`
IPInfoDB struct {
ID string `json:"id"`
} `json:"ipInfoDB"`
AniList struct {
ID string `json:"id"`
Secret string `json:"secret"`
} `json:"anilist"`
PayPal struct {
ID string `json:"id"`
Secret string `json:"secret"`
} `json:"paypal"`
VAPID struct {
Subject string `json:"subject"`
PublicKey string `json:"publicKey"`
PrivateKey string `json:"privateKey"`
} `json:"vapid"`
Mailgun struct {
Domain string `json:"domain"`
PrivateKey string `json:"privateKey"`
} `json:"mailgun"`
S3 struct {
ID string `json:"id"`
Secret string `json:"secret"`
} `json:"s3"`
}
func init() {
// Path for API keys
apiKeysPath := path.Join(Root, "security/api-keys.json")
// If the API keys file is not available, create a symlink to the default API keys
if _, err := os.Stat(apiKeysPath); os.IsNotExist(err) {
defaultAPIKeysPath := path.Join(Root, "security/default/api-keys.json")
err := os.Link(defaultAPIKeysPath, apiKeysPath)
if err != nil {
panic(err)
}
}
// Load API keys
data, err := os.ReadFile(apiKeysPath)
if err != nil {
panic(err)
}
// Parse JSON
err = jsoniter.Unmarshal(data, &APIKeys)
if err != nil {
panic(err)
}
// Set Anilist API keys
anilist.APIKeyID = APIKeys.AniList.ID
anilist.APIKeySecret = APIKeys.AniList.Secret
// Initialize file storage
initSpaces()
}