mirror of
https://github.com/mickael-kerjean/filestash.git
synced 2025-10-27 19:53:41 +08:00
49 lines
1.4 KiB
Go
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)
|
|
})
|
|
}
|