63 lines
1.5 KiB
Go
63 lines
1.5 KiB
Go
package main
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"os"
|
|
"time"
|
|
|
|
"github.com/spf13/viper"
|
|
)
|
|
|
|
// loadToken loads the token from the token file
|
|
func loadToken() (*TokenInfo, error) {
|
|
tokenFilePath := viper.GetString("token-file")
|
|
if tokenFilePath == "" {
|
|
home, err := os.UserHomeDir()
|
|
if err != nil {
|
|
return nil, fmt.Errorf("error getting home directory: %w", err)
|
|
}
|
|
tokenFilePath = fmt.Sprintf("%s/.mcias-token", home)
|
|
}
|
|
|
|
data, err := os.ReadFile(tokenFilePath)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("error reading token file: %w", err)
|
|
}
|
|
|
|
var tokenInfo TokenInfo
|
|
if err := json.Unmarshal(data, &tokenInfo); err != nil {
|
|
return nil, fmt.Errorf("error parsing token file: %w", err)
|
|
}
|
|
|
|
// Check if token is expired
|
|
if tokenInfo.Expires > 0 && tokenInfo.Expires < time.Now().Unix() {
|
|
return nil, fmt.Errorf("token has expired, please login again")
|
|
}
|
|
|
|
return &tokenInfo, nil
|
|
}
|
|
|
|
// saveToken saves the token to the token file
|
|
func saveToken(tokenInfo TokenInfo) error {
|
|
tokenFilePath := viper.GetString("token-file")
|
|
if tokenFilePath == "" {
|
|
home, err := os.UserHomeDir()
|
|
if err != nil {
|
|
return fmt.Errorf("error getting home directory: %w", err)
|
|
}
|
|
tokenFilePath = fmt.Sprintf("%s/.mcias-token", home)
|
|
}
|
|
|
|
jsonData, err := json.Marshal(tokenInfo)
|
|
if err != nil {
|
|
return fmt.Errorf("error encoding token: %w", err)
|
|
}
|
|
|
|
if err := os.WriteFile(tokenFilePath, jsonData, 0600); err != nil {
|
|
return fmt.Errorf("error saving token to file: %w", err)
|
|
}
|
|
|
|
fmt.Printf("Token saved to %s\n", tokenFilePath)
|
|
return nil
|
|
} |