You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

59 lines
1.2 KiB

package auth
import (
"io"
"log"
"os"
"strings"
"github.com/RasmusLindroth/tut/util"
"github.com/pelletier/go-toml/v2"
)
func GetSecret(s string) string {
var err error
if strings.HasPrefix(s, "!CMD!") {
s, err = util.CmdToString(s)
if err != nil {
log.Fatalf("Couldn't run CMD on auth-file. Error; %v", err)
}
}
return s
}
func GetAccounts(filepath string) (*AccountData, error) {
f, err := os.Open(filepath)
if err != nil {
return &AccountData{}, err
}
defer f.Close()
data, err := io.ReadAll(f)
if err != nil {
return &AccountData{}, err
}
accounts := &AccountData{}
err = toml.Unmarshal(data, accounts)
for i, acc := range accounts.Accounts {
accounts.Accounts[i].ClientID = GetSecret(acc.ClientID)
accounts.Accounts[i].ClientSecret = GetSecret(acc.ClientSecret)
accounts.Accounts[i].AccessToken = GetSecret(acc.AccessToken)
}
return accounts, err
}
func (ad *AccountData) Save(filepath string) error {
marshaled, err := toml.Marshal(ad)
if err != nil {
return err
}
f, err := os.OpenFile(filepath, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0600)
if err != nil {
return err
}
defer f.Close()
_, err = f.Write(marshaled)
return err
}