45 lines
876 B
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"))
|
|
}
|
|
}
|