42 lines
1.0 KiB
Go
42 lines
1.0 KiB
Go
package qbit
|
|
|
|
import (
|
|
"context"
|
|
"crypto/subtle"
|
|
"github.com/go-chi/chi/v5"
|
|
"net/http"
|
|
"strings"
|
|
)
|
|
|
|
func (q *QBit) authMiddleware(next http.Handler) http.Handler {
|
|
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
|
user, pass, ok := r.BasicAuth()
|
|
if !ok {
|
|
http.Error(w, "Unauthorized", http.StatusUnauthorized)
|
|
return
|
|
}
|
|
if subtle.ConstantTimeCompare([]byte(user), []byte(q.Username)) != 1 || subtle.ConstantTimeCompare([]byte(pass), []byte(q.Password)) != 1 {
|
|
http.Error(w, "Unauthorized", http.StatusUnauthorized)
|
|
return
|
|
}
|
|
next.ServeHTTP(w, r)
|
|
})
|
|
}
|
|
|
|
func HashesCtx(next http.Handler) http.Handler {
|
|
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
|
_hashes := chi.URLParam(r, "hashes")
|
|
var hashes []string
|
|
if _hashes != "" {
|
|
hashes = strings.Split(_hashes, "|")
|
|
}
|
|
if hashes == nil {
|
|
// Get hashes from form
|
|
_ = r.ParseForm()
|
|
hashes = r.Form["hashes"]
|
|
}
|
|
ctx := context.WithValue(r.Context(), "hashes", hashes)
|
|
next.ServeHTTP(w, r.WithContext(ctx))
|
|
})
|
|
}
|