Files

49 lines
1.4 KiB
Go

package plg_handler_site
import (
"net/http"
"strings"
. "github.com/mickael-kerjean/filestash/server/common"
"golang.org/x/crypto/bcrypt"
)
func cors(fn HandlerFunc) HandlerFunc {
return HandlerFunc(func(ctx *App, w http.ResponseWriter, r *http.Request) {
if allowed := PluginParamCORSAllowOrigins(); allowed != "" {
w.Header().Add("Vary", "Origin")
w.Header().Set("Access-Control-Allow-Methods", "GET, HEAD, OPTIONS")
switch allowed {
case "*":
w.Header().Set("Access-Control-Allow-Origin", "*")
default:
origin := r.Header.Get("Origin")
for _, o := range strings.Split(allowed, ",") {
if strings.TrimSpace(o) == origin {
w.Header().Set("Access-Control-Allow-Origin", origin)
break
}
}
}
}
fn(ctx, w, r)
})
}
func basicAdmin(fn HandlerFunc) HandlerFunc {
return HandlerFunc(func(ctx *App, w http.ResponseWriter, r *http.Request) {
user, pass, ok := r.BasicAuth()
if !ok || user != "admin" {
w.Header().Set("WWW-Authenticate", `Basic realm="Restricted"`)
http.Error(w, "Unauthorized", http.StatusUnauthorized)
return
} else if err := bcrypt.CompareHashAndPassword([]byte(Config.Get("auth.admin").String()), []byte(pass)); err != nil {
w.Header().Set("WWW-Authenticate", `Basic realm="Restricted"`)
http.Error(w, "Unauthorized", http.StatusUnauthorized)
return
}
fn(ctx, w, r)
})
}