Skip to content

Commit

Permalink
Merge pull request #1 from sschonss/database-login
Browse files Browse the repository at this point in the history
Database login
  • Loading branch information
sschonss authored Mar 4, 2024
2 parents 0404ade + c687008 commit 9b24430
Show file tree
Hide file tree
Showing 4 changed files with 166 additions and 116 deletions.
2 changes: 2 additions & 0 deletions data/config.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
user:root
password:root
123 changes: 123 additions & 0 deletions database/database.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,123 @@
package database

import (
"bufio"
"fmt"
"os"
"strings"
)

type Database struct {
User string
Password string
}

func (Database) ExecuteQuery(query string) string {
command := strings.Fields(query)[0]
switch strings.ToLower(command) {
case "clear":
fmt.Print("\033[H\033[2J")
case "select":
fmt.Println("Executando comando SELECT")
case "insert":
fmt.Println("Executando comando INSERT")
case "update":
fmt.Println("Executando comando UPDATE")
case "delete":
fmt.Println("Executando comando DELETE")
case "create":
fmt.Println("Executando comando CREATE")
case "drop":
fmt.Println("Executando comando DROP")
case "alter":
fmt.Println("Executando comando ALTER")
default:
fmt.Println("Comando não reconhecido")
}

return "Resultado da execução do comando: " + query
}

func (Database) SaveConfig(user, password string) {
fmt.Println("Salvando configuração...")

configFile, err := os.Create("data/config.txt")
if err != nil {
fmt.Println("Erro ao criar arquivo de configuração")
return
}
defer configFile.Close()

_, err = configFile.WriteString("user:" + user + "\n")
if err != nil {
fmt.Println("Erro ao salvar usuário no arquivo de configuração")
return
}

_, err = configFile.WriteString("password:" + password + "\n")
if err != nil {
fmt.Println("Erro ao salvar senha no arquivo de configuração")
return
}

fmt.Println("Configuração salva com sucesso!")

}

func (Database) LoadConfig() (string, string) {
fmt.Println("Carregando configuração...")

configFile, err := os.Open("data/config.txt")
if err != nil {
fmt.Println("Erro ao abrir arquivo de configuração")
return "", ""
}
defer configFile.Close()

var user, password string
fmt.Fscanf(configFile, "user:%s\n", &user)
fmt.Fscanf(configFile, "password:%s\n", &password)

fmt.Println("Configuração carregada com sucesso!")

return user, password
}

func (Database) CheckConfig() bool {
_, err := os.Stat("data/config.txt")
if os.IsNotExist(err) {
return false
} else {
return true
}
}

func (Database) CheckUser(user, password string) bool {
savedUser, savedPassword := Database{}.LoadConfig()
return user == savedUser && password == savedPassword
}

func (Database) CreateUser(user, password string) {
Database{}.SaveConfig(user, password)
}

func (Database) UpdateUser(user, password string) {
Database{}.SaveConfig(user, password)
}

func (Database) DeleteUser() {
os.Remove("data/config.txt")
}

func (Database) GetUsers() []string {
return []string{"admin"}
}

func GetUserInput() string {
scanner := bufio.NewScanner(os.Stdin)
scanner.Scan()
return scanner.Text()
}



2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
module veritasdb

go 1.20
go 1.18
155 changes: 40 additions & 115 deletions main.go
Original file line number Diff line number Diff line change
@@ -1,137 +1,62 @@
package main

import (
"bufio"
"fmt"
"os"
"strings"

"veritasdb/database"
)

func main() {

configFile, err := os.Open("data/login.txt")
if err != nil {
fmt.Println("Arquivo de configuração não encontrado. Por favor, insira as informações de login.")
fmt.Print("Usuário: ")
user := getUserInput()
fmt.Print("Senha: ")
password := getUserInput()

saveConfig(user, password)


} else {
scanner := bufio.NewScanner(configFile)
scanner.Scan()
user := strings.Split(scanner.Text(), ":")[1]
scanner.Scan()
password := strings.Split(scanner.Text(), ":")[1]
var db database.Database

config := db.CheckConfig()
if config == true {
fmt.Println("Configurações encontradas.")
fmt.Println("Digite o usuário e a senha para carregar as configurações.")
fmt.Print("Usuário: ")
inputUser := getUserInput()
user := database.GetUserInput()
fmt.Print("Senha: ")
inputPassword := getUserInput()

for i := 0; i < 3; i++ {
if inputUser == user && inputPassword == password {
break
} else {
fmt.Println("Usuário ou senha inválidos. Tente novamente.")
fmt.Print("Usuário: ")
inputUser = getUserInput()
fmt.Print("Senha: ")
inputPassword = getUserInput()
password := database.GetUserInput()
valid := db.CheckUser(user, password)
count_try := 0
for valid == false {
count_try++
if count_try > 2 {
fmt.Println("Número de tentativas excedido.")
return
}
fmt.Println("Usuário ou senha inválidos.")
fmt.Print("Usuário: ")
user = database.GetUserInput()
fmt.Print("Senha: ")
password = database.GetUserInput()
valid = db.CheckUser(user, password)
}
if inputUser != user || inputPassword != password {
fmt.Println("Usuário ou senha inválidos. Tente novamente.")
return
}

}

for {
fmt.Print("Digite um comando SQL (ou 'exit' para sair): ")
command := getUserInput()

if strings.ToLower(command) == "exit" {
break
}
}
}

func getUserInput() string {
scanner := bufio.NewScanner(os.Stdin)
scanner.Scan()
return scanner.Text()
}

func saveConfig(user, password string) {
if _, err := os.Stat("data"); os.IsNotExist(err) {
err := os.Mkdir("data", 0755)
if err != nil {
fmt.Println("Erro ao criar o diretório 'data':", err)
return
}
}
db = database.Database{User: user, Password: password}

configFile, err := os.Create("data/login.txt")
if err != nil {
fmt.Println("Erro ao criar arquivo de configuração:", err)
return
}
defer configFile.Close()

_, err = configFile.WriteString("user:" + user + "\n")
if err != nil {
fmt.Println("Erro ao escrever no arquivo de configuração:", err)
return
}

_, err = configFile.WriteString("password:" + password + "\n")
if err != nil {
fmt.Println("Erro ao escrever no arquivo de configuração:", err)
return
}else {
fmt.Println("Nenhuma configuração encontrada.")
fmt.Println("Digite o usuário e a senha para salvar as configurações.")
fmt.Print("Usuário: ")
user := database.GetUserInput()
fmt.Print("Senha: ")
password := database.GetUserInput()
db = database.Database{User: user, Password: password}
db.CreateUser(user, password)
}

fmt.Println("Configurações salvas com sucesso.")
}


type Database struct {
Name string
DataPath string
}

func NewDatabase(name, dataPath string) *Database {
return &Database{
Name: name,
DataPath: dataPath,
}
}
fmt.Println("Bem-vindo ao VeritasDB!")

func (db *Database) ExecuteQuery(query string) string {
for {
fmt.Print("veritasdb> ")
query := database.GetUserInput()
if query == "exit" {
break
}
fmt.Println(db.ExecuteQuery(query))

command := strings.Fields(query)[0]
switch strings.ToLower(command) {
case "select":
fmt.Println("Executando comando SELECT")
case "insert":
fmt.Println("Executando comando INSERT")
case "update":
fmt.Println("Executando comando UPDATE")
case "delete":
fmt.Println("Executando comando DELETE")
case "create":
fmt.Println("Executando comando CREATE")
case "drop":
fmt.Println("Executando comando DROP")
case "alter":
fmt.Println("Executando comando ALTER")
default:
fmt.Println("Comando não reconhecido")
}

return "Resultado da execução do comando: " + query

}

0 comments on commit 9b24430

Please sign in to comment.