Add dependency injection
This commit is contained in:
@@ -14,27 +14,41 @@ type Vault struct {
|
|||||||
UpdatedAt time.Time `json:"updatedAt"`
|
UpdatedAt time.Time `json:"updatedAt"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewVault() *Vault {
|
type VaultWithDb struct {
|
||||||
file, err := files.FileRead("data.json")
|
Vault
|
||||||
|
db files.JsonDb
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewVault(db *files.JsonDb) *VaultWithDb {
|
||||||
|
file, err := db.Read()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return &Vault{
|
return &VaultWithDb{
|
||||||
|
Vault: Vault{
|
||||||
Accounts: []Account{},
|
Accounts: []Account{},
|
||||||
UpdatedAt: time.Now(),
|
UpdatedAt: time.Now(),
|
||||||
|
},
|
||||||
|
db: *db,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
var vault Vault
|
var vault Vault
|
||||||
err = json.Unmarshal(file, &vault)
|
err = json.Unmarshal(file, &vault)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
color.Red("Не удалось разобрать файл data.json")
|
color.Red("Не удалось разобрать файл data.json")
|
||||||
return &Vault{
|
return &VaultWithDb{
|
||||||
|
Vault: Vault{
|
||||||
Accounts: []Account{},
|
Accounts: []Account{},
|
||||||
UpdatedAt: time.Now(),
|
UpdatedAt: time.Now(),
|
||||||
|
},
|
||||||
|
db: *db,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return &vault
|
return &VaultWithDb{
|
||||||
|
Vault: vault,
|
||||||
|
db: *db,
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (vault *Vault) AddAccount(acc Account) {
|
func (vault *VaultWithDb) AddAccount(acc Account) {
|
||||||
vault.Accounts = append(vault.Accounts, acc)
|
vault.Accounts = append(vault.Accounts, acc)
|
||||||
vault.save()
|
vault.save()
|
||||||
}
|
}
|
||||||
@@ -47,7 +61,7 @@ func (vault *Vault) ToBytes() ([]byte, error) {
|
|||||||
return file, nil
|
return file, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (vault *Vault) FindAccountsByUrl(url string) []Account {
|
func (vault *VaultWithDb) FindAccountsByUrl(url string) []Account {
|
||||||
var accounts []Account
|
var accounts []Account
|
||||||
for _, account := range vault.Accounts {
|
for _, account := range vault.Accounts {
|
||||||
isMatched := strings.Contains(account.Url, url)
|
isMatched := strings.Contains(account.Url, url)
|
||||||
@@ -58,7 +72,7 @@ func (vault *Vault) FindAccountsByUrl(url string) []Account {
|
|||||||
return accounts
|
return accounts
|
||||||
}
|
}
|
||||||
|
|
||||||
func (vault *Vault) DeleteAccountByUrl(url string) bool {
|
func (vault *VaultWithDb) DeleteAccountByUrl(url string) bool {
|
||||||
var accounts []Account
|
var accounts []Account
|
||||||
isDeleted := false
|
isDeleted := false
|
||||||
for _, account := range vault.Accounts {
|
for _, account := range vault.Accounts {
|
||||||
@@ -74,11 +88,11 @@ func (vault *Vault) DeleteAccountByUrl(url string) bool {
|
|||||||
return isDeleted
|
return isDeleted
|
||||||
}
|
}
|
||||||
|
|
||||||
func (vault *Vault) save() {
|
func (vault *VaultWithDb) save() {
|
||||||
vault.UpdatedAt = time.Now()
|
vault.UpdatedAt = time.Now()
|
||||||
data, err := vault.ToBytes()
|
data, err := vault.Vault.ToBytes()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
color.Red("Не удалось преобразовать")
|
color.Red("Не удалось преобразовать")
|
||||||
}
|
}
|
||||||
files.FileWrite(data, "data.json")
|
vault.db.Write(data)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,8 +5,26 @@ import (
|
|||||||
"os"
|
"os"
|
||||||
)
|
)
|
||||||
|
|
||||||
func FileWrite(content []byte, name string) {
|
type JsonDb struct {
|
||||||
file, err := os.Create(name)
|
filename string
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewJsonDb(name string) *JsonDb {
|
||||||
|
return &JsonDb{
|
||||||
|
filename: name,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (db *JsonDb) Read() ([]byte, error) {
|
||||||
|
data, err := os.ReadFile(db.filename)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return data, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (db *JsonDb) Write(content []byte) {
|
||||||
|
file, err := os.Create(db.filename)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println(err)
|
fmt.Println(err)
|
||||||
}
|
}
|
||||||
@@ -19,11 +37,3 @@ func FileWrite(content []byte, name string) {
|
|||||||
}
|
}
|
||||||
fmt.Println("Файл успешно записан")
|
fmt.Println("Файл успешно записан")
|
||||||
}
|
}
|
||||||
|
|
||||||
func FileRead(name string) ([]byte, error) {
|
|
||||||
data, err := os.ReadFile(name)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return data, nil
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -3,13 +3,14 @@ package main
|
|||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"password/account"
|
"password/account"
|
||||||
|
"password/files"
|
||||||
|
|
||||||
"github.com/fatih/color"
|
"github.com/fatih/color"
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
fmt.Println("__Менеджер паролей__")
|
fmt.Println("__Менеджер паролей__")
|
||||||
vault := account.NewVault()
|
vault := account.NewVault(files.NewJsonDb("data.json"))
|
||||||
Menu:
|
Menu:
|
||||||
for {
|
for {
|
||||||
variant := getMenu()
|
variant := getMenu()
|
||||||
@@ -37,7 +38,7 @@ func getMenu() int {
|
|||||||
return variant
|
return variant
|
||||||
}
|
}
|
||||||
|
|
||||||
func findAccount(vault *account.Vault) {
|
func findAccount(vault *account.VaultWithDb) {
|
||||||
url := account.PromptData("Введите URL для поиска: ")
|
url := account.PromptData("Введите URL для поиска: ")
|
||||||
accounts := vault.FindAccountsByUrl(url)
|
accounts := vault.FindAccountsByUrl(url)
|
||||||
if len(accounts) == 0 {
|
if len(accounts) == 0 {
|
||||||
@@ -48,7 +49,7 @@ func findAccount(vault *account.Vault) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func deleteAccount(vault *account.Vault) {
|
func deleteAccount(vault *account.VaultWithDb) {
|
||||||
url := account.PromptData("Введите URL для поиска: ")
|
url := account.PromptData("Введите URL для поиска: ")
|
||||||
isDeleted := vault.DeleteAccountByUrl(url)
|
isDeleted := vault.DeleteAccountByUrl(url)
|
||||||
if isDeleted {
|
if isDeleted {
|
||||||
@@ -58,16 +59,15 @@ func deleteAccount(vault *account.Vault) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func createAccount(vault *account.Vault) {
|
func createAccount(vault *account.VaultWithDb) {
|
||||||
login := account.PromptData("Введите логин: ")
|
login := account.PromptData("Введите логин: ")
|
||||||
password := account.PromptData("Введите пароль: ")
|
password := account.PromptData("Введите пароль: ")
|
||||||
url := account.PromptData("Введите URL: ")
|
url := account.PromptData("Введите URL: ")
|
||||||
|
|
||||||
myAccount, err := account.NewAccount(login, password, url)
|
myAccount, err := account.NewAccount(login, password, url)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println("ОШИБКА: Неверный формат URL")
|
fmt.Println("ОШИБКА: Неверный формат URL или Login")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
vault = account.NewVault()
|
|
||||||
vault.AddAccount(*myAccount)
|
vault.AddAccount(*myAccount)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user