33 lines
674 B
Go
33 lines
674 B
Go
|
package hwt
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
"errors"
|
||
|
"net/http"
|
||
|
)
|
||
|
|
||
|
const PSK = "some key"
|
||
|
|
||
|
var reqUserKey = new(int)
|
||
|
|
||
|
func Auth(h http.HandlerFunc) http.HandlerFunc {
|
||
|
return func(w http.ResponseWriter, req *http.Request) {
|
||
|
k := req.Header.Get("sm-auth")
|
||
|
if k == "" {
|
||
|
w.Header().Set("www-authenticate", "sm-auth")
|
||
|
http.Error(w, "missing/invalid key", http.StatusUnauthorized)
|
||
|
return
|
||
|
}
|
||
|
ctx := context.WithValue(req.Context(), reqUserKey, "valid user")
|
||
|
h(w, req.WithContext(ctx))
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func getUser(ctx context.Context) (string, error) {
|
||
|
u, ok := ctx.Value(reqUserKey).(string)
|
||
|
if !ok {
|
||
|
return "", errors.New("user key not found in context")
|
||
|
}
|
||
|
return u, nil
|
||
|
}
|