gommunicator/internal/ssh/password.go

45 lines
876 B
Go

package ssh
import (
"errors"
"time"
"golang.org/x/term"
)
func (s *Server) newPassword() error {
password, err := s.uc.GenNewPassword()
if err != nil {
s.log.Error("failed to generate new password", "err", err)
return err
}
s.log.Info("new server password generated", "password", password)
return nil
}
// get user password from terminal
func (s *Server) passwordRequest(term *term.Terminal) error {
// check password
attempts := 3
for {
pass, err := term.ReadPassword("Enter your password: ")
if err != nil {
return err
}
ok, err := s.uc.PasswordExists(pass)
if err != nil {
return err
}
if ok {
term.Write([]byte("Login success\n"))
return nil
}
time.Sleep(time.Second * 1)
attempts -= 1
if attempts <= 0 {
return errors.New("invalid password")
}
term.Write([]byte("Permission denied, please try again.\n"))
}
}