package usecase import ( "fmt" "time" "golang.org/x/exp/rand" ) // GenNewPassword generates new password, writes it to the memory and returns. func (u *Usecase) GenNewPassword() (string, error) { rand.Seed(uint64(time.Now().UnixNano())) // gen new password pass := genPasswordString() // save to the memory if err := u.memory.SavePassword(pass); err != nil { return "", fmt.Errorf("failed to save password in the memory: %w", err) } return pass, nil } const ( passwordLen = 8 letterBytes = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890" ) func genPasswordString() string { b := make([]byte, passwordLen) for i := range b { b[i] = letterBytes[rand.Intn(len(letterBytes))] } return string(b) } // PasswordExists checks that password exists in the memory. func (u *Usecase) PasswordExists(password string) (bool, error) { exists, err := u.memory.PasswordExists(password) if err != nil { return false, fmt.Errorf("failed to check password in the memory: %w", err) } return exists, nil }