dyndns-server/auth.go

37 lines
814 B
Go

package main
import (
"golang.org/x/crypto/bcrypt"
"database/sql"
"fmt"
"net/http"
)
func authenticateUser(db *sql.DB, username, password string) bool {
hashedPassword, ok := getPasswordForUser(db, username)
if ok {
err := bcrypt.CompareHashAndPassword(hashedPassword, []byte(password))
//TODO: print error message?
return err == nil
} else {
return false
}
}
func basicAuth(db *sql.DB) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
user, pass, ok := r.BasicAuth()
if !ok || !authenticateUser(db, user, pass) {
w.Header().Set("WWW-Authenticate", `Basic realm="dyndns"`)
w.WriteHeader(401)
w.Write([]byte("badauth"))
return
}
userdata, err := getDataForUser(db, user)
if err != nil {
fmt.Println(err)
}
handleRequest(w, r, userdata)
}
}