2024-06-21 18:38:41 +00:00
package main
import (
2024-06-29 01:00:39 +00:00
// "log"
2024-06-21 18:38:41 +00:00
2024-06-29 01:00:39 +00:00
"github.com/zalando/go-keyring"
// "github.com/99designs/keyring"
2024-06-21 18:38:41 +00:00
"encoding/base64"
2024-06-29 01:00:39 +00:00
// "fmt"
"strings"
2024-06-21 18:38:41 +00:00
)
const (
service = "Tempus"
2024-06-29 01:00:39 +00:00
user = "login"
2024-06-21 18:38:41 +00:00
)
// func debugKeyring() {
// service := "Tempus"
// user := "login"
// password := "secr123123et"
// encoded := base64.StdEncoding.EncodeToString([]byte(password))
// // set password
// err := keyring.Set(service, user, encoded)
// if err != nil {
// log.Fatal(err)
// }
2024-06-29 01:00:39 +00:00
//
2024-06-21 18:38:41 +00:00
// // get password
// secret, err := keyring.Get(service, user)
// if err != nil {
// log.Fatal(err)
// }
2024-06-29 01:00:39 +00:00
//
2024-06-21 18:38:41 +00:00
// log.Println(secret)
2024-06-29 01:00:39 +00:00
//
2024-06-21 18:38:41 +00:00
// decodedByte, err := base64.StdEncoding.DecodeString(secret)
// decoded := string(decodedByte)
// if err != nil {
// fmt.Println("decode error:", err)
// return
// }
// log.Println(decoded)
// }
2024-06-29 01:00:39 +00:00
//TODO we can make custom type e.g. SaveData - with []string and put everything saved there. OR we can make the thing like in inputs[variable] - to make it convinient
//TODO inconsistend global funcs (or is it called 'exported funcs?')
func storeCredentialsToKeyring ( url , login , password , calendar string ) error {
2024-06-21 18:38:41 +00:00
url = base64 . StdEncoding . EncodeToString ( [ ] byte ( url ) )
login = base64 . StdEncoding . EncodeToString ( [ ] byte ( login ) )
password = base64 . StdEncoding . EncodeToString ( [ ] byte ( password ) )
2024-06-29 01:00:39 +00:00
calendar = base64 . StdEncoding . EncodeToString ( [ ] byte ( calendar ) )
2024-06-21 18:38:41 +00:00
2024-06-29 01:00:39 +00:00
credentials := url + " " + login + " " + password + " " + calendar
err := keyring . Set ( service , user , credentials )
if err != nil {
return err
}
return nil
2024-06-21 18:38:41 +00:00
}
2024-06-29 01:00:39 +00:00
func getCredentialsFromKeyring_wrapper ( ) ( url , login , password , calendar string , err error ) {
secret , err := keyring . Get ( service , user )
if err != nil {
return
}
v := strings . Split ( secret , " " )
urlByte , err := base64 . StdEncoding . DecodeString ( v [ 0 ] )
if err != nil {
return
}
loginByte , err := base64 . StdEncoding . DecodeString ( v [ 1 ] )
if err != nil {
return
}
passwordByte , err := base64 . StdEncoding . DecodeString ( v [ 2 ] )
if err != nil {
return
}
calendarByte , err := base64 . StdEncoding . DecodeString ( v [ 3 ] )
if err != nil {
return
}
url = string ( urlByte )
login = string ( loginByte )
password = string ( passwordByte )
calendar = string ( calendarByte )
return
2024-06-21 18:38:41 +00:00
}
2024-06-29 01:00:39 +00:00
func getCredentialsFromKeyring ( ) ( Credentials , error ) {
//TODO inconsistent approach compared to caldav.go
url , username , password , calendar , err := getCredentialsFromKeyring_wrapper ( )
if err != nil { return Credentials { } , err }
return Credentials {
URL : url ,
Username : username ,
Password : password ,
CalendarPath : calendar ,
} , nil
}
2024-06-21 18:38:41 +00:00
// func debugKeyring() {
2024-06-29 01:00:39 +00:00
//
2024-06-21 18:38:41 +00:00
// kr, err := keyring.Open(keyring.Config{
// AllowedBackends: []keyring.BackendType{
// keyring.SecretServiceBackend,
// },
// LibSecretCollectionName: "Defaultkeyring",
// ServiceName: "myapp",
// })
// if err != nil {
// log.Fatal(err)
// }
2024-06-29 01:00:39 +00:00
//
2024-06-21 18:38:41 +00:00
// err = kr.Set(keyring.Item{
// Key: "foo",
// // Data: []byte("secret-bar"),
// })
// if err != nil {
// log.Fatal(err)
// }
2024-06-29 01:00:39 +00:00
//
2024-06-21 18:38:41 +00:00
// v, err := kr.Get("llamas")
// if err != nil {
// log.Fatal(err)
// }
2024-06-29 01:00:39 +00:00
//
2024-06-21 18:38:41 +00:00
// log.Printf("llamas was %v", v)
2024-06-29 01:00:39 +00:00
//
//
//
2024-06-21 18:38:41 +00:00
// }