-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #1 from sschonss/database-login
Database login
- Loading branch information
Showing
4 changed files
with
166 additions
and
116 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
user:root | ||
password:root |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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() | ||
} | ||
|
||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,3 +1,3 @@ | ||
module veritasdb | ||
|
||
go 1.20 | ||
go 1.18 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 | ||
|
||
} |