Este projeto é uma aplicação web que permite consultar informações sobre CEP, CNPJ e códigos bancários (ISPB) etc, usando a API da BrasilAPI. O backend é implementado em Go, e o frontend utiliza HTMX e Tailwind CSS para uma experiência de usuário moderna e responsiva.
Backend: Go
Frontend: HTMX, Tailwind CSS
API: BrasilAPI (para consulta de CEP, CNPJ, ISPB Bancos, etc.)
Consulta de CEP: Permite buscar informações detalhadas sobre um CEP.
Consulta de CNPJ: Permite buscar informações sobre uma empresa pelo CNPJ.
Consulta de ISPB Bancos: Permite buscar informações sobre bancos utilizando o código ISPB.
cep_handler.go
: Manipulador para consultas de CEP.cnpj_handler.go
: Manipulador para consultas de CNPJ.bank_handler.go
: Manipulador para consultas de ISPB Bancos.cep.go
: Modelo para os dados de CEP.cnpj.go
: Modelo para os dados de CNPJ.bank.go
: Modelo para os dados de ISPB Bancos.cep_service.go
: Serviço para buscar dados de CEP.cnpj_service.go
: Serviço para buscar dados de CNPJ.bank_service.go
: Serviço para buscar dados de ISPB Bancos.Essa estrutura proporciona uma organização clara e modular do código, facilitando a manutenção e a expansão futura da aplicação.
Este projeto implementa funcionalidades de autenticação utilizando JWT (JSON Web Token) para login, registro e logout de usuários. Abaixo estão os detalhes de cada função responsável por processar as requisições HTTP.
O código define três handlers principais:
Esses handlers interagem com o banco de dados MySQL para autenticar usuários e armazenar informações de cadastro.
Login
- Exibe a página de login e processa o login de usuáriosEste handler lida com a autenticação do usuário. Se as credenciais estiverem corretas, ele gera um token JWT e o envia de volta para o cliente via cookie.
login.html
)./tools
.func Login(db *sql.DB) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
if r.Method == http.MethodGet {
tmpl := template.Must(template.ParseFiles("web/templates/login.html"))
tmpl.Execute(w, nil)
return
}
if r.Method == http.MethodPost {
email := r.FormValue("email")
password := r.FormValue("password")
var storedPassword string
err := db.QueryRow("SELECT password FROM users WHERE email = ?", email).Scan(&storedPassword)
if err != nil {
tmpl := template.Must(template.ParseFiles("web/templates/login.html"))
tmpl.Execute(w, LoginData{ErrorMessage: "Email ou senha inválidos."})
return
}
err = bcrypt.CompareHashAndPassword([]byte(storedPassword), []byte(password))
if err != nil {
tmpl := template.Must(template.ParseFiles("web/templates/login.html"))
tmpl.Execute(w, LoginData{ErrorMessage: "Email ou senha inválidos."})
return
}
token := jwt.NewWithClaims(jwt.SigningMethodHS256, jwt.MapClaims{
"email": email,
"exp": time.Now().Add(time.Hour * 1).Unix(),
})
tokenString, err := token.SignedString([]byte(os.Getenv("JWT_SECRET")))
if err != nil {
http.Error(w, "Error generating token", http.StatusInternalServerError)
return
}
http.SetCookie(w, &http.Cookie{
Name: "token",
Value: tokenString,
Expires: time.Now().Add(time.Hour * 1),
Path: "/",
})
http.Redirect(w, r, "/tools", http.StatusSeeOther)
} else {
http.Error(w, "Invalid request method", http.StatusMethodNotAllowed)
}
}
}
Clone o repositório:
git clone https://github.com/devluanpereira/ToolsDev.git
cd ToolsDev
Instale as dependências do Go:
go mod tidy
Execute o servidor:
go run main.go
Acesse a aplicação:
Abra seu navegador e vá para http://localhost:8000
para ver a aplicação em funcionamento. Mais caso a porta esteja em uso mude para que esteja disponivel em main.go
.
git checkout -b minha-alteracao
).git commit -am 'Adiciona minha alteração'
).git push origin minha-alteracao
).Este projeto está licenciado sob a MIT License.
Se você tiver alguma dúvida, sinta-se à vontade para entrar em contato.