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) { func listAccounts(b *bridge.Bridge) {
spacing := "%3d: %-20s %-20s %-20s %-15s " spacing := "%3d: %-20s %-20s %-15s "
for idx, user := range b.Users.GetUsers() { for idx, user := range b.Users.GetUsers() {
connected := "disconnected" connected := "disconnected"
if user.IsConnected() { if user.IsConnected() {
connected = "connected" 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() { for _, address := range user.GetAddresses() {
fmt.Printf("%-20s", address) fmt.Printf("%-20s", address)
@ -100,11 +100,27 @@ func deleteAccount(b *bridge.Bridge, accountName string) error {
return nil return nil
} }
func addAccount(b *bridge.Bridge, accountName string) error { func loginAccount(b *bridge.Bridge, accountName string) error {
if accountName == "" { if accountName == "" {
return fmt.Errorf("Missing account name") 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") password, err := askPass("Password")
if err != nil { if err != nil {
return fmt.Errorf("Unable to read password: %s", err) 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") 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 { if err != nil {
return fmt.Errorf("Login of account %s failed: %s", accountName, err) return fmt.Errorf("Login of account %s failed: %s", accountName, err)
} }
fmt.Printf("Account %s has been added successfully.\n", user.Username()) fmt.Printf("Account %s has been added successfully.\n", user.Username())
if len(key) != 0 {
fmt.Printf("Main key: %s\n", key)
}
return nil 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 x509CertFile = flag.String("x509-cert", "cert.pem", "output file for the X509 certificate")
var list = flag.Bool("list-accounts", false, "list user accounts") var list = flag.Bool("list-accounts", false, "list user accounts")
var delete = flag.Bool("delete-account", false, "delete user account") 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 name = flag.String("name", "", "account name")
var logLevel = flag.String("log-level", "Warning", "account name") var logLevel = flag.String("log-level", "Warning", "account name")
@ -79,8 +79,8 @@ func main() {
} else if *delete { } else if *delete {
err = deleteAccount(b, *name) err = deleteAccount(b, *name)
done = true done = true
} else if *add { } else if *login {
err = addAccount(b, *name) err = loginAccount(b, *name)
done = true done = true
} }

Loading…
Cancel
Save