75 lines
1.8 KiB
Go
75 lines
1.8 KiB
Go
package webserver
|
|
|
|
import (
|
|
"net/http"
|
|
"strings"
|
|
"text/template"
|
|
)
|
|
|
|
type LoginPageData struct {
|
|
IsHiddenClassList string
|
|
LoginData CustomizableLoginData
|
|
}
|
|
type AuthStyle int
|
|
|
|
const (
|
|
AuthStylePassword AuthStyle = 0
|
|
AuthStyleOAuth AuthStyle = 1
|
|
)
|
|
|
|
type AuthData interface{}
|
|
|
|
type PasswordAuthData struct {
|
|
Username string
|
|
Password string
|
|
}
|
|
|
|
type OAuthAuthData struct {
|
|
ResponseWriter *http.ResponseWriter
|
|
Request *http.Request
|
|
}
|
|
|
|
type CustomizableLoginData struct {
|
|
ServiceName string
|
|
AuthRequestFunction func(AuthStyle, AuthData) bool
|
|
}
|
|
|
|
var LoginPageDataCustomizations CustomizableLoginData
|
|
|
|
func loginHandler(w http.ResponseWriter, r *http.Request) {
|
|
w.Header().Set("Content-Type", "text/html; charset=utf-8")
|
|
tmpl := template.Must(template.ParseFiles("webserver/pages/login_page.html"))
|
|
if r.Method == http.MethodGet {
|
|
tmpl.Execute(w, LoginPageData{IsHiddenClassList: "hidden", LoginData: LoginPageDataCustomizations})
|
|
return
|
|
}
|
|
|
|
if r.Method == http.MethodPost {
|
|
action := r.FormValue("action")
|
|
|
|
if action == "password" {
|
|
username := r.FormValue("username")
|
|
if strings.Contains(username, "/") {
|
|
tmpl.Execute(w, LoginPageData{IsHiddenClassList: "", LoginData: LoginPageDataCustomizations})
|
|
}
|
|
password := r.FormValue("password")
|
|
|
|
auth_success := LoginPageDataCustomizations.AuthRequestFunction(AuthStylePassword, PasswordAuthData{
|
|
Username: username,
|
|
Password: password,
|
|
})
|
|
if auth_success == false {
|
|
tmpl.Execute(w, LoginPageData{IsHiddenClassList: "", LoginData: LoginPageDataCustomizations})
|
|
}
|
|
} else {
|
|
auth_success := LoginPageDataCustomizations.AuthRequestFunction(AuthStyleOAuth, OAuthAuthData{
|
|
ResponseWriter: &w,
|
|
Request: r,
|
|
})
|
|
if auth_success == false {
|
|
tmpl.Execute(w, LoginPageData{IsHiddenClassList: "", LoginData: LoginPageDataCustomizations})
|
|
}
|
|
}
|
|
}
|
|
}
|