Add func read and write to JSON
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -1 +1,2 @@
|
|||||||
go-demo/app-1
|
go-demo/app-1
|
||||||
|
go-demo-4/data.json
|
||||||
|
|||||||
1
go-demo-4/.gitignore
vendored
Normal file
1
go-demo-4/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
./data.json
|
||||||
@@ -1,14 +1,12 @@
|
|||||||
package account
|
package account
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"github.com/fatih/color"
|
||||||
"math/rand/v2"
|
"math/rand/v2"
|
||||||
"net/url"
|
"net/url"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/fatih/color"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
var letterRunes = []rune("abcdefghijklmnopqrstuvwxyzABCDEFGIJKLMNOPQRSTUVWXYZ1234567890-*!?()#$%&")
|
var letterRunes = []rune("abcdefghijklmnopqrstuvwxyzABCDEFGIJKLMNOPQRSTUVWXYZ1234567890-*!?()#$%&")
|
||||||
@@ -22,17 +20,9 @@ type Account struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// метод вывода пароля
|
// метод вывода пароля
|
||||||
func (acc *Account) OutputPassword() {
|
func (acc *Account) Output() {
|
||||||
c := color.New(color.FgRed, color.Italic, color.Bold)
|
c := color.New(color.FgRed, color.Italic, color.Bold)
|
||||||
c.Printf("password: %v\n", acc.Password)
|
c.Printf("password: %v, login: %v, URL: %v\n", acc.Password, acc.Login, acc.Url)
|
||||||
}
|
|
||||||
|
|
||||||
func (acc *Account) ToBytes() ([]byte, error) {
|
|
||||||
file, err := json.Marshal(acc)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return file, nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// метод генерации пароля
|
// метод генерации пароля
|
||||||
|
|||||||
64
go-demo-4/account/vault.go
Normal file
64
go-demo-4/account/vault.go
Normal file
@@ -0,0 +1,64 @@
|
|||||||
|
package account
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"password/files"
|
||||||
|
"strings"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/fatih/color"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Vault struct {
|
||||||
|
Accounts []Account `json:"accounts"`
|
||||||
|
UpdatedAt time.Time `json:"updatedAt"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewVault() *Vault {
|
||||||
|
file, err := files.FileRead("data.json")
|
||||||
|
if err != nil {
|
||||||
|
return &Vault{
|
||||||
|
Accounts: []Account{},
|
||||||
|
UpdatedAt: time.Now(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
var vault Vault
|
||||||
|
err = json.Unmarshal(file, &vault)
|
||||||
|
if err != nil {
|
||||||
|
color.Red("Не удалось разобрать файл data.json")
|
||||||
|
return &Vault{
|
||||||
|
Accounts: []Account{},
|
||||||
|
UpdatedAt: time.Now(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return &vault
|
||||||
|
}
|
||||||
|
|
||||||
|
func (vault *Vault) AddAccount(acc Account) {
|
||||||
|
vault.Accounts = append(vault.Accounts, acc)
|
||||||
|
vault.UpdatedAt = time.Now()
|
||||||
|
data, err := vault.ToBytes()
|
||||||
|
if err != nil {
|
||||||
|
color.Red("Не удалось преобразовать")
|
||||||
|
}
|
||||||
|
files.FileWrite(data, "data.json")
|
||||||
|
}
|
||||||
|
|
||||||
|
func (vault *Vault) ToBytes() ([]byte, error) {
|
||||||
|
file, err := json.Marshal(vault)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return file, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (vault *Vault) FindAccountsByUrl(url string) []Account {
|
||||||
|
var accounts []Account
|
||||||
|
for _, account := range vault.Accounts {
|
||||||
|
isMatched := strings.Contains(account.Url, url)
|
||||||
|
if isMatched {
|
||||||
|
accounts = append(accounts, account)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return accounts
|
||||||
|
}
|
||||||
@@ -20,11 +20,10 @@ func FileWrite(content []byte, name string) {
|
|||||||
fmt.Println("Файл успешно записан")
|
fmt.Println("Файл успешно записан")
|
||||||
}
|
}
|
||||||
|
|
||||||
func FileRead() {
|
func FileRead(name string) ([]byte, error) {
|
||||||
data, err := os.ReadFile("test.txt")
|
data, err := os.ReadFile(name)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println(err)
|
return nil, err
|
||||||
return
|
|
||||||
}
|
}
|
||||||
fmt.Println(string(data))
|
return data, nil
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,14 +3,56 @@ package main
|
|||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"password/account"
|
"password/account"
|
||||||
"password/files"
|
|
||||||
|
"github.com/fatih/color"
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
createdAccount()
|
fmt.Println("__Менеджер паролей__")
|
||||||
|
vault := account.NewVault()
|
||||||
|
Menu:
|
||||||
|
for {
|
||||||
|
variant := getMenu()
|
||||||
|
switch variant {
|
||||||
|
case 1:
|
||||||
|
createAccount(vault)
|
||||||
|
case 2:
|
||||||
|
findAccount(vault)
|
||||||
|
case 3:
|
||||||
|
deleteAccount()
|
||||||
|
default:
|
||||||
|
break Menu
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func createdAccount() {
|
func getMenu() int {
|
||||||
|
var variant int
|
||||||
|
fmt.Println("Выберите вариант:")
|
||||||
|
fmt.Println("1. Создать аккаунт")
|
||||||
|
fmt.Println("2. Найти аккаунт")
|
||||||
|
fmt.Println("3. Удалить аккаунт")
|
||||||
|
fmt.Println("4. Выход")
|
||||||
|
fmt.Scan(&variant)
|
||||||
|
return variant
|
||||||
|
}
|
||||||
|
|
||||||
|
func findAccount(vault *account.Vault) {
|
||||||
|
url := account.PromptData("Введите URL для поиска: ")
|
||||||
|
accounts := vault.FindAccountsByUrl(url)
|
||||||
|
if len(accounts) == 0 {
|
||||||
|
color.Red("Аккаунт не найден!")
|
||||||
|
}
|
||||||
|
for _, account := range accounts {
|
||||||
|
account.Output()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func deleteAccount() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func createAccount(vault *account.Vault) {
|
||||||
login := account.PromptData("Введите логин: ")
|
login := account.PromptData("Введите логин: ")
|
||||||
password := account.PromptData("Введите пароль: ")
|
password := account.PromptData("Введите пароль: ")
|
||||||
url := account.PromptData("Введите URL: ")
|
url := account.PromptData("Введите URL: ")
|
||||||
@@ -20,10 +62,6 @@ func createdAccount() {
|
|||||||
fmt.Println("ОШИБКА: Неверный формат URL")
|
fmt.Println("ОШИБКА: Неверный формат URL")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
file, err := myAccount.ToBytes()
|
vault = account.NewVault()
|
||||||
if err != nil {
|
vault.AddAccount(*myAccount)
|
||||||
fmt.Println("Не удалось преобразовать в JSON")
|
|
||||||
return
|
|
||||||
}
|
|
||||||
files.FileWrite(file, "data.json")
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user