bedrocktool/utils/auth.go

74 lines
1.4 KiB
Go
Raw Normal View History

2022-09-04 14:26:32 +00:00
package utils
2022-08-17 18:04:13 +00:00
import (
"encoding/json"
"os"
"github.com/bedrock-tool/bedrocktool/locale"
2022-08-17 18:04:13 +00:00
"github.com/sandertv/gophertunnel/minecraft/auth"
2022-08-23 19:06:08 +00:00
"github.com/sandertv/gophertunnel/minecraft/realms"
2022-09-04 00:24:58 +00:00
"github.com/sirupsen/logrus"
2022-08-17 18:04:13 +00:00
"golang.org/x/oauth2"
)
2023-01-29 21:20:13 +00:00
const TokenFile = "token.json"
2022-09-04 14:26:32 +00:00
2023-01-29 21:20:13 +00:00
var gTokenSrc oauth2.TokenSource
2022-08-17 18:04:13 +00:00
func GetTokenSource() oauth2.TokenSource {
2023-01-29 21:20:13 +00:00
if gTokenSrc != nil {
return gTokenSrc
2022-08-17 18:04:13 +00:00
}
2023-01-29 21:20:13 +00:00
token := getToken()
gTokenSrc = auth.RefreshTokenSource(&token)
newToken, err := gTokenSrc.Token()
2022-08-17 18:04:13 +00:00
if err != nil {
panic(err)
}
if !token.Valid() {
logrus.Info(locale.Loc("refreshed_token", nil))
2023-01-29 21:20:13 +00:00
writeToken(newToken)
2022-08-17 18:04:13 +00:00
}
2023-01-29 21:20:13 +00:00
return gTokenSrc
2022-08-17 18:04:13 +00:00
}
2023-01-29 21:20:13 +00:00
var gRealmsAPI *realms.Client
2022-08-17 18:04:13 +00:00
2023-01-29 21:20:13 +00:00
func GetRealmsAPI() *realms.Client {
if gRealmsAPI == nil {
gRealmsAPI = realms.NewClient(GetTokenSource())
2022-08-17 18:04:13 +00:00
}
2023-01-29 21:20:13 +00:00
return gRealmsAPI
2022-08-17 18:04:13 +00:00
}
2023-01-29 21:20:13 +00:00
func writeToken(token *oauth2.Token) {
2022-08-17 18:04:13 +00:00
buf, err := json.Marshal(token)
if err != nil {
panic(err)
}
2023-01-29 21:20:13 +00:00
os.WriteFile(TokenFile, buf, 0o755)
2022-08-17 18:04:13 +00:00
}
2023-01-29 21:20:13 +00:00
func getToken() oauth2.Token {
2022-08-17 18:04:13 +00:00
var token oauth2.Token
2023-01-29 21:20:13 +00:00
if _, err := os.Stat(TokenFile); err == nil {
f, err := os.Open(TokenFile)
2022-08-17 18:04:13 +00:00
if err != nil {
panic(err)
}
defer f.Close()
if err := json.NewDecoder(f).Decode(&token); err != nil {
panic(err)
}
} else {
_token, err := auth.RequestLiveToken()
if err != nil {
panic(err)
}
2023-01-29 21:20:13 +00:00
writeToken(_token)
2022-08-17 18:04:13 +00:00
token = *_token
}
return token
}