peroxide-cfg: Login and store slot-based credentials

Issue #13
create-reload-action
Lukasz Janyst 4 years ago
parent 49b0f3a0f0
commit 5aa57e9f3e
No known key found for this signature in database
GPG Key ID: 32DE641041F17A9A
  1. 27
      cmd/peroxide-cfg/accounts.go
  2. 6
      cmd/peroxide-cfg/main.go

@ -49,14 +49,14 @@ func askPass(prompt string) ([]byte, error) {
}
func listAccounts(b *bridge.Bridge) {
spacing := "%3d: %-20s %-20s %-20s %-15s "
spacing := "%3d: %-20s %-20s %-15s "
for idx, user := range b.Users.GetUsers() {
connected := "disconnected"
if user.IsConnected() {
connected = "connected"
}
fmt.Printf(spacing, idx, user.Username(), user.GetBridgePassword(), user.GetPrimaryAddress(), connected)
fmt.Printf(spacing, idx, user.Username(), user.GetPrimaryAddress(), connected)
for _, address := range user.GetAddresses() {
fmt.Printf("%-20s", address)
@ -100,11 +100,27 @@ func deleteAccount(b *bridge.Bridge, accountName string) error {
return nil
}
func addAccount(b *bridge.Bridge, accountName string) error {
func loginAccount(b *bridge.Bridge, accountName string) error {
if accountName == "" {
return fmt.Errorf("Missing account name")
}
user, _ := b.Users.GetUser(accountName)
if user != nil {
mainKey, err := askPass("Main key")
if err != nil {
return fmt.Errorf("The main key is required to modify an existing user: %s", err)
}
if err := user.UnlockCredentials("main", string(mainKey)); err != nil {
return fmt.Errorf("Unable to unlock credentials: %s", err)
}
if err := user.Logout(); err != nil {
return fmt.Errorf("Unable to logout previous session: %s", err)
}
}
password, err := askPass("Password")
if err != nil {
return fmt.Errorf("Unable to read password: %s", err)
@ -148,12 +164,15 @@ func addAccount(b *bridge.Bridge, accountName string) error {
return fmt.Errorf("Empty mailbox password")
}
user, err := b.Users.FinishLogin(client, auth, mailboxPassword)
user, key, err := b.Users.FinishLogin(client, auth, mailboxPassword, "")
if err != nil {
return fmt.Errorf("Login of account %s failed: %s", accountName, err)
}
fmt.Printf("Account %s has been added successfully.\n", user.Username())
if len(key) != 0 {
fmt.Printf("Main key: %s\n", key)
}
return nil
}

@ -40,7 +40,7 @@ var x509KeyFile = flag.String("x509-key", "key.pem", "output file for the RSA ke
var x509CertFile = flag.String("x509-cert", "cert.pem", "output file for the X509 certificate")
var list = flag.Bool("list-accounts", false, "list user accounts")
var delete = flag.Bool("delete-account", false, "delete user account")
var add = flag.Bool("add-account", false, "add user account")
var login = flag.Bool("login-account", false, "log in user account")
var name = flag.String("name", "", "account name")
var logLevel = flag.String("log-level", "Warning", "account name")
@ -79,8 +79,8 @@ func main() {
} else if *delete {
err = deleteAccount(b, *name)
done = true
} else if *add {
err = addAccount(b, *name)
} else if *login {
err = loginAccount(b, *name)
done = true
}

Loading…
Cancel
Save