fixed auth
This commit is contained in:
parent
a074f264df
commit
5d359cbd5e
3 changed files with 54 additions and 7 deletions
30
auth/auth.go
30
auth/auth.go
|
|
@ -54,3 +54,33 @@ func (a *Authenticator) Middleware(in http.Handler) http.Handler {
|
|||
})
|
||||
return handler
|
||||
}
|
||||
|
||||
// func (s *Store) AddUser(login, password string) error {
|
||||
// _, exists := s.GetUser(login)
|
||||
// if exists {
|
||||
// return errors.New("the user already exists")
|
||||
// }
|
||||
// query := "insert into user (login, password, salt) values(?, ?, ?)"
|
||||
// salt := crypto.GenerateKey()
|
||||
// hash := crypto.PasswordHash(password, salt)
|
||||
// _, err := s.db.Exec(query, login, hash, salt)
|
||||
// if err == nil {
|
||||
// s.users[login] = models.User{Password: hash, Salt: salt}
|
||||
// }
|
||||
// return err
|
||||
// }
|
||||
func (a *Authenticator) AddUser(login, password string) error {
|
||||
var user models.User
|
||||
|
||||
result := a.db.First(&user, "login = ?", login)
|
||||
if result.Error != gorm.ErrRecordNotFound {
|
||||
return errors.New("user already exists")
|
||||
}
|
||||
|
||||
salt := crypto.GenerateKey()
|
||||
hash := crypto.PasswordHash(password, salt)
|
||||
|
||||
result = a.db.Save(&models.User{Login: login, Password: hash, Salt: salt})
|
||||
|
||||
return result.Error
|
||||
}
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@ func (a *Authenticator) getSession(r *http.Request) (models.Token, error) {
|
|||
return models.Token{}, err
|
||||
}
|
||||
var session models.Token
|
||||
result := a.db.First(&session, c.Value)
|
||||
result := a.db.First(&session, "token = ?", c.Value)
|
||||
if result.Error != nil {
|
||||
return models.Token{}, errors.New("session not found")
|
||||
}
|
||||
|
|
@ -58,9 +58,11 @@ func (a *Authenticator) logout(w http.ResponseWriter, r *http.Request) {
|
|||
|
||||
func (a *Authenticator) newSession(user string) http.Cookie {
|
||||
key := crypto.GenerateKey()
|
||||
var session models.Token
|
||||
session.User = user
|
||||
session.Expiration = time.Now().Add(time.Hour * 24)
|
||||
session := models.Token{
|
||||
User: user,
|
||||
Expiration: time.Now().Add(time.Hour * 24),
|
||||
Token: key,
|
||||
}
|
||||
a.db.Create(&session)
|
||||
|
||||
cookie := http.Cookie{
|
||||
|
|
|
|||
21
main.go
21
main.go
|
|
@ -3,27 +3,42 @@ package main
|
|||
import (
|
||||
"log"
|
||||
"net/http"
|
||||
"os"
|
||||
|
||||
"github.com/Bronku/iroon/auth"
|
||||
"github.com/Bronku/iroon/logging"
|
||||
"github.com/Bronku/iroon/models"
|
||||
"github.com/Bronku/iroon/server"
|
||||
"gorm.io/driver/sqlite"
|
||||
"gorm.io/gorm"
|
||||
"gorm.io/gorm/logger"
|
||||
)
|
||||
|
||||
func main() {
|
||||
db, err := gorm.Open(sqlite.Open("foo.db"), &gorm.Config{})
|
||||
newLogger := logger.New(
|
||||
log.New(os.Stdout, "\r\n", log.LstdFlags),
|
||||
logger.Config{
|
||||
IgnoreRecordNotFoundError: true},
|
||||
)
|
||||
db, err := gorm.Open(sqlite.Open("foo.db"), &gorm.Config{
|
||||
Logger: newLogger,
|
||||
})
|
||||
if err != nil {
|
||||
log.Fatal("failed to connect database")
|
||||
}
|
||||
db.AutoMigrate(&models.Order{}, &models.OrderItem{}, &models.Product{})
|
||||
|
||||
//s.AddUser("admin", "secret")
|
||||
a := auth.New(db)
|
||||
err = a.AddUser("admin", "secret")
|
||||
if err != nil {
|
||||
log.Println("add user:", err)
|
||||
}
|
||||
|
||||
h := server.New(db)
|
||||
|
||||
var handler http.Handler = h
|
||||
handler = a.Middleware(handler)
|
||||
handler = logging.Middleware(handler)
|
||||
//handler = auth.New(s).Middleware(handler)
|
||||
log.Println("starting server")
|
||||
log.Fatal(http.ListenAndServe(":8080", handler))
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue