331 lines
7.0 KiB
Go
331 lines
7.0 KiB
Go
package main
|
|
|
|
import (
|
|
"log"
|
|
"net/http"
|
|
"net/url"
|
|
)
|
|
|
|
func profilePage(res http.ResponseWriter, req *http.Request) {
|
|
log.Println("GET /profile/view")
|
|
uname := getUserName(req)
|
|
if uname == "" {
|
|
http.Redirect(res, req, "/", 302)
|
|
}
|
|
user, err := findLDAPAccountForDisplay(uname)
|
|
if err != nil {
|
|
log.Printf("Error loading profile: %v\n", err)
|
|
http.Error(res, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError)
|
|
return
|
|
}
|
|
data := struct {
|
|
Title string
|
|
Username string
|
|
LoggedIn bool
|
|
User User
|
|
}{
|
|
"Profile",
|
|
uname,
|
|
true,
|
|
user,
|
|
}
|
|
tpl.ExecuteTemplate(res, "profile", data)
|
|
}
|
|
func profileEditPage(res http.ResponseWriter, req *http.Request) {
|
|
log.Println("GET /profile/edit")
|
|
uname := getUserName(req)
|
|
if uname == "" {
|
|
http.Redirect(res, req, "/", 302)
|
|
}
|
|
user, err := findLDAPAccountForDisplay(uname)
|
|
if err != nil {
|
|
log.Printf("Error loading profile: %v\n", err)
|
|
http.Error(res, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError)
|
|
return
|
|
}
|
|
data := struct {
|
|
Title string
|
|
Username string
|
|
LoggedIn bool
|
|
User User
|
|
}{
|
|
"Profile",
|
|
uname,
|
|
true,
|
|
user,
|
|
}
|
|
tpl.ExecuteTemplate(res, "profile_edit", data)
|
|
}
|
|
|
|
func minecraftPage(res http.ResponseWriter, req *http.Request) {
|
|
log.Println("GET /minecraft")
|
|
u := getUserName(req)
|
|
if u == "" {
|
|
http.Redirect(res, req, "/", 302)
|
|
} else {
|
|
mcuser, err := findLDAPMCAccount(u)
|
|
mclink := true
|
|
if err != nil {
|
|
mclink = false
|
|
mcuser = "N/A"
|
|
}
|
|
data := struct {
|
|
Title string
|
|
Username string
|
|
LoggedIn bool
|
|
Linked bool
|
|
MinecraftAccount string
|
|
}{
|
|
"Link Minecraft Account",
|
|
u,
|
|
true,
|
|
mclink,
|
|
mcuser,
|
|
}
|
|
tpl.ExecuteTemplate(res, "minecraft", data)
|
|
}
|
|
}
|
|
func minecraftLinkSuccessPage(res http.ResponseWriter, req *http.Request) {
|
|
log.Println("GET /minecraft/link/success")
|
|
u := getUserName(req)
|
|
if u == "" {
|
|
http.Redirect(res, req, "/404", 302)
|
|
}
|
|
genericSuccessPage(res, "Minecraft Link Success", u, true, "Succesfully linked Minecraft account.")
|
|
return
|
|
}
|
|
func minecraftLinkErrorPage(res http.ResponseWriter, req *http.Request) {
|
|
log.Println("GET /minecraft/link/error")
|
|
u := getUserName(req)
|
|
if u == "" {
|
|
http.Redirect(res, req, "/404", 302)
|
|
}
|
|
genericErrorPage(res, "Minecraft Link Failure", u, true, "Undefined", "link Minecraft account.")
|
|
return
|
|
}
|
|
|
|
func changePageFront(res http.ResponseWriter, req *http.Request) {
|
|
u := getUserName(req)
|
|
if u == "" {
|
|
http.Redirect(res, req, "/reset", 302)
|
|
}
|
|
data := struct {
|
|
Title string
|
|
Username string
|
|
LoggedIn bool
|
|
}{
|
|
"Change Password",
|
|
u,
|
|
true,
|
|
}
|
|
tpl.ExecuteTemplate(res, "change_password_page_front", data)
|
|
}
|
|
|
|
func changeSuccessPage(res http.ResponseWriter, req *http.Request) {
|
|
log.Println("GET /change/success")
|
|
u := getUserName(req)
|
|
|
|
genericSuccessPage(res, "Change Password Success", u, false, "Succesfully Changed Password")
|
|
return
|
|
}
|
|
func changeErrorPage(res http.ResponseWriter, req *http.Request) {
|
|
log.Println("GET /change/error")
|
|
u := getUserName(req)
|
|
|
|
genericErrorPage(res, "Change Password Failure", u, false, "Undefined", "reset password")
|
|
return
|
|
}
|
|
|
|
func resetPageFront(res http.ResponseWriter, req *http.Request) {
|
|
log.Println("GET /reset")
|
|
u := getUserName(req)
|
|
if u != "" {
|
|
http.Redirect(res, req, "/", 302) //TODO create password change form, direct to that
|
|
} else {
|
|
data := struct {
|
|
Title string
|
|
Username string
|
|
LoggedIn bool
|
|
}{
|
|
"Reset Password",
|
|
"Unregistered",
|
|
false,
|
|
}
|
|
tpl.ExecuteTemplate(res, "reset_password_page_front", data)
|
|
}
|
|
}
|
|
|
|
func resetPageBack(res http.ResponseWriter, req *http.Request) {
|
|
log.Println("GET /reset/form")
|
|
u := getUserName(req)
|
|
token := ""
|
|
if u != "" {
|
|
http.Redirect(res, req, "/", 302) //TODO create password change form, direct to that
|
|
} else {
|
|
keys, ok := req.URL.Query()["token"]
|
|
if !ok || len(keys[0]) < 1 {
|
|
token = ""
|
|
} else {
|
|
token = keys[0]
|
|
}
|
|
data := struct {
|
|
Title string
|
|
Username string
|
|
LoggedIn bool
|
|
Token string
|
|
}{
|
|
"Reset Password",
|
|
"Unregistered",
|
|
false,
|
|
token,
|
|
}
|
|
tpl.ExecuteTemplate(res, "reset_password_page_back", data)
|
|
}
|
|
}
|
|
func resetSuccessPage(res http.ResponseWriter, req *http.Request) {
|
|
log.Println("GET /reset/success")
|
|
genericSuccessPage(res, "Reset Password Success", "Unregistered", false, "Succesfully Reset Password")
|
|
return
|
|
}
|
|
func resetErrorPage(res http.ResponseWriter, req *http.Request) {
|
|
log.Println("GET /reset/error")
|
|
genericErrorPage(res, "Reset Password Failure", "Unregistered", false, "Undefined", "reset password")
|
|
return
|
|
}
|
|
func signupPage(res http.ResponseWriter, req *http.Request) {
|
|
log.Println("GET /register")
|
|
u := getUserName(req)
|
|
secret := ""
|
|
if u != "" {
|
|
http.Redirect(res, req, "/", 302)
|
|
} else {
|
|
keys, ok := req.URL.Query()["secret"]
|
|
if !ok || len(keys[0]) < 1 {
|
|
secret = ""
|
|
} else {
|
|
secret = keys[0]
|
|
}
|
|
data := struct {
|
|
Title string
|
|
Username string
|
|
LoggedIn bool
|
|
Secret string
|
|
}{
|
|
"Register",
|
|
"Unregistered",
|
|
false,
|
|
secret,
|
|
}
|
|
tpl.ExecuteTemplate(res, "register", data)
|
|
}
|
|
return
|
|
}
|
|
|
|
func loginPage(res http.ResponseWriter, req *http.Request) {
|
|
log.Println("GET /login")
|
|
u := getUserName(req)
|
|
if u != "" {
|
|
http.Redirect(res, req, "/", 302)
|
|
} else {
|
|
data := struct {
|
|
Title string
|
|
Username string
|
|
LoggedIn bool
|
|
}{
|
|
"Login",
|
|
"Unregistered",
|
|
false,
|
|
}
|
|
tpl.ExecuteTemplate(res, "login", data)
|
|
}
|
|
return
|
|
}
|
|
|
|
func logoutPage(res http.ResponseWriter, req *http.Request) {
|
|
log.Println("GET /logout")
|
|
logout(res, req)
|
|
tpl.ExecuteTemplate(res, "logout", nil)
|
|
return
|
|
}
|
|
|
|
func tokenPage(res http.ResponseWriter, req *http.Request) {
|
|
log.Println("GET /token")
|
|
u := getUserName(req)
|
|
if u == "" {
|
|
http.Redirect(res, req, "/", 302)
|
|
}
|
|
token, err := generateToken(u)
|
|
if err != nil {
|
|
log.Printf("Error generating token: %v", err)
|
|
tpl.ExecuteTemplate(res, "error", nil)
|
|
}
|
|
data := struct {
|
|
Title string
|
|
Username string
|
|
LoggedIn bool
|
|
Token string
|
|
TokenURL string
|
|
}{
|
|
"Token Generation",
|
|
u,
|
|
true,
|
|
token,
|
|
url.QueryEscape(token),
|
|
}
|
|
tpl.ExecuteTemplate(res, "token", data)
|
|
}
|
|
|
|
func homePage(res http.ResponseWriter, req *http.Request) {
|
|
u := getUserName(req)
|
|
active := false
|
|
uname := "Unregistered"
|
|
if u != "" {
|
|
uname = u
|
|
active = true
|
|
}
|
|
data := struct {
|
|
Title string
|
|
Username string
|
|
LoggedIn bool
|
|
}{
|
|
"Index",
|
|
uname,
|
|
active,
|
|
}
|
|
|
|
tpl.ExecuteTemplate(res, "index", data)
|
|
}
|
|
|
|
func genericSuccessPage(res http.ResponseWriter, title string, uname string, login bool, action string) {
|
|
data := struct {
|
|
Title string
|
|
Username string
|
|
LoggedIn bool
|
|
Action string
|
|
}{
|
|
title,
|
|
uname,
|
|
login,
|
|
action,
|
|
}
|
|
tpl.ExecuteTemplate(res, "generic_success", data)
|
|
return
|
|
}
|
|
func genericErrorPage(res http.ResponseWriter, title string, uname string, login bool, err string, action string) {
|
|
data := struct {
|
|
Title string
|
|
Username string
|
|
LoggedIn bool
|
|
Error string
|
|
Action string
|
|
}{
|
|
title,
|
|
uname,
|
|
login,
|
|
err,
|
|
action,
|
|
}
|
|
tpl.ExecuteTemplate(res, "generic_error", data)
|
|
return
|
|
}
|