Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/wawandco/maildoor
Email based authentication for Go
https://github.com/wawandco/maildoor
authentication awesome-go email-based-login embed go golang passwordless security smtp tailwindcss
Last synced: 2 days ago
JSON representation
Email based authentication for Go
- Host: GitHub
- URL: https://github.com/wawandco/maildoor
- Owner: wawandco
- License: mit
- Created: 2022-01-30T00:15:49.000Z (almost 3 years ago)
- Default Branch: main
- Last Pushed: 2024-08-16T13:35:10.000Z (3 months ago)
- Last Synced: 2024-08-16T22:46:52.162Z (3 months ago)
- Topics: authentication, awesome-go, email-based-login, embed, go, golang, passwordless, security, smtp, tailwindcss
- Language: Go
- Homepage: https://wawand.co
- Size: 27.2 MB
- Stars: 14
- Watchers: 1
- Forks: 2
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
![report card](https://goreportcard.com/badge/github.com/wawandco/maildoor)
# Maildoor
Maildoor is an email based authentication library that allows users to sign up and sign in to your application using their email address. It is a pluggable library that can be used with any go http server.
### Usage
Using maildoor is as simple as creating a new instance of the maildoor.Handler and passing it to your http server.
```go
// Initialize the maildoor handler
auth := maildoor.New(
maildoor.Logo("https://example.com/logo.png"),
maildoor.ProductName("My App"))
maildoor.Prefix("/auth/"), // Prefix for the routes// Defines the email sending mechanism which is up to the
// host application to implement.
maildoor.EmailSender(func(to, html, txt string) error{
// Send email to the user that's loggin in'
return smtp.Send(to, html, txt)
}),// Defines the email validation mechanism
maildoor.EmailValidator(func(email string) bool {
// Validate email with the users package
return users.UserExists(email)
}),// Defines what to do after the user has successfuly logged in
// This is where you would set the user session or redirect to a private page
maildoor.AfterLogin(func w http.ResponseWriter, r http.Request) {
// Redirect to the private page
http.Redirect(w, r, "/private", http.StatusFound)
}),// Defines what to do after the user has successfuly loged out
// This is where you would clear the user session or redirect to a login page
maildoor.Logout(func(w http.ResponseWriter, r *http.Request){
http.Redirect(w, r, "/auth/login", http.StatusFound)
}),
})mux := http.NewServeMux()
mux.Handle("/", auth)
mux.Handle("/private", secure(privateHandler))
http.ListenAndServe(":8080", mux)
```Then, go to `http://localhost:8080/auth/login` to see the login page.
## Features
- Pluggable http.Handler that can be used with any go http server
- Customizable email sending mechanism
- Customizable email validation mechanism
- Customizable logo
- Customizable product name### Roadmap
- Out-of-the-box support for generating time-bound tokens using TOTP (Time-Based One-Time Password).
- Customizable templates (Bring your own).
- Automatically handle token expiration based on time, providing security and convenience.
- Prevend CSRF attacks with token.