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
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 |
|
}
|
|
|