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 }