107 lines
2.3 KiB
Go
107 lines
2.3 KiB
Go
package main
|
||
|
||
import (
|
||
"errors"
|
||
"fmt"
|
||
"math/rand/v2"
|
||
"net/url"
|
||
"time"
|
||
)
|
||
|
||
type account struct {
|
||
login string
|
||
password string
|
||
url string
|
||
}
|
||
|
||
type accountWithTimeStamp struct {
|
||
createdAt time.Time
|
||
updatedAt time.Time
|
||
account
|
||
}
|
||
|
||
// метод вывода пароля
|
||
func (acc account) outputPassword() {
|
||
fmt.Println(acc.login, acc.password, acc.url)
|
||
}
|
||
|
||
func (acc accountWithTimeStamp) outputPassword() {
|
||
fmt.Println(acc.login, acc.password, acc.url, acc.createdAt, acc.updatedAt)
|
||
}
|
||
|
||
// метод генерации пароля
|
||
func (acc *account) generatePassword(n int) {
|
||
res := make([]rune, n)
|
||
for i := range res {
|
||
res[i] = letterRunes[rand.IntN(len(letterRunes))]
|
||
}
|
||
acc.password = string(res)
|
||
}
|
||
|
||
// Создание аккаунта с таймстамп
|
||
func newAccountWithTimeStamp(login, password, urlString string) (*accountWithTimeStamp, error) {
|
||
_, err := url.ParseRequestURI(urlString)
|
||
if err != nil {
|
||
return nil, errors.New("INVALID_URL")
|
||
}
|
||
if login == "" {
|
||
return nil, errors.New("INVALID_LOGIN")
|
||
}
|
||
newAcc := &accountWithTimeStamp{
|
||
createdAt: time.Now(),
|
||
updatedAt: time.Now(),
|
||
account: account{
|
||
login: login,
|
||
password: password,
|
||
url: urlString,
|
||
},
|
||
}
|
||
if password == "" {
|
||
newAcc.generatePassword(18)
|
||
}
|
||
return newAcc, nil
|
||
}
|
||
|
||
// создание аккаунта
|
||
/* func newAccount(login, password, urlString string) (*account, error) {
|
||
_, err := url.ParseRequestURI(urlString)
|
||
if err != nil {
|
||
return nil, errors.New("INVALID_URL")
|
||
}
|
||
if login == "" {
|
||
return nil, errors.New("INVALID_LOGIN")
|
||
}
|
||
newAcc := &account{
|
||
login: login,
|
||
password: password,
|
||
url: urlString,
|
||
}
|
||
if password == "" {
|
||
newAcc.generatePassword(18)
|
||
}
|
||
return newAcc, nil
|
||
} */
|
||
|
||
var letterRunes = []rune("abcdefghijklmnopqrstuvwxyzABCDEFGIJKLMNOPQRSTUVWXYZ1234567890-*!?()#$%&")
|
||
|
||
func main() {
|
||
login := promptData("Введите логин: ")
|
||
password := promptData("Введите пароль: ")
|
||
url := promptData("Введите URL: ")
|
||
|
||
myAccount, err := newAccountWithTimeStamp(login, password, url)
|
||
if err != nil {
|
||
fmt.Println("ОШИБКА: Неверный формат URL")
|
||
return
|
||
}
|
||
myAccount.outputPassword()
|
||
}
|
||
|
||
// функция введения данных
|
||
func promptData(prompt string) string {
|
||
fmt.Print(prompt)
|
||
var res string
|
||
fmt.Scanln(&res)
|
||
return res
|
||
}
|