486 lines
11 KiB
Go
486 lines
11 KiB
Go
|
package main
|
||
|
|
||
|
import "log"
|
||
|
import "fmt"
|
||
|
import "strconv"
|
||
|
import "net/http"
|
||
|
import "html"
|
||
|
import "database/sql"
|
||
|
import _ "github.com/go-sql-driver/mysql"
|
||
|
|
||
|
func route_edit_topic(w http.ResponseWriter, r *http.Request) {
|
||
|
user := SessionCheck(w,r)
|
||
|
err := r.ParseForm()
|
||
|
if err != nil {
|
||
|
LocalError("Bad Form", w, r, user)
|
||
|
return
|
||
|
}
|
||
|
is_js := r.PostFormValue("js")
|
||
|
if is_js == "" {
|
||
|
is_js = "0"
|
||
|
}
|
||
|
|
||
|
if !user.Is_Admin {
|
||
|
NoPermissionsJSQ(w,r,user,is_js)
|
||
|
return
|
||
|
}
|
||
|
if user.Is_Banned {
|
||
|
BannedJSQ(w,r,user,is_js)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
var tid int
|
||
|
tid, err = strconv.Atoi(r.URL.Path[len("/topic/edit/submit/"):])
|
||
|
if err != nil {
|
||
|
LocalErrorJSQ("The provided TopicID is not a valid number.",w,r,user,is_js)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
topic_name := r.PostFormValue("topic_name")
|
||
|
topic_status := r.PostFormValue("topic_status")
|
||
|
|
||
|
var is_closed bool
|
||
|
if topic_status == "closed" {
|
||
|
is_closed = true
|
||
|
} else {
|
||
|
is_closed = false
|
||
|
}
|
||
|
|
||
|
topic_content := html.EscapeString(r.PostFormValue("topic_content"))
|
||
|
_, err = edit_topic_stmt.Exec(topic_name, topic_content, parse_message(topic_content), is_closed, tid)
|
||
|
if err != nil {
|
||
|
InternalErrorJSQ(err,w,r,user,is_js)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
if is_js == "0" {
|
||
|
http.Redirect(w, r, "/topic/" + strconv.Itoa(tid), http.StatusSeeOther)
|
||
|
} else {
|
||
|
fmt.Fprintf(w,"{'success': '1'}")
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func route_delete_topic(w http.ResponseWriter, r *http.Request) {
|
||
|
user := SessionCheck(w,r)
|
||
|
if !user.Is_Admin {
|
||
|
NoPermissions(w,r,user)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
tid, err := strconv.Atoi(r.URL.Path[len("/topic/delete/submit/"):])
|
||
|
if err != nil {
|
||
|
LocalError("The provided TopicID is not a valid number.",w,r,user)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
err = db.QueryRow("SELECT tid from topics where tid = ?", tid).Scan(&tid)
|
||
|
if err == sql.ErrNoRows {
|
||
|
LocalError("The topic you tried to delete doesn't exist.",w,r,user)
|
||
|
return
|
||
|
} else if err != nil {
|
||
|
InternalError(err,w,r,user)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
_, err = delete_topic_stmt.Exec(tid)
|
||
|
if err != nil {
|
||
|
InternalError(err,w,r,user)
|
||
|
return
|
||
|
}
|
||
|
log.Print("The topic '" + strconv.Itoa(tid) + "' was deleted by User ID #" + strconv.Itoa(user.ID) + ".")
|
||
|
|
||
|
http.Redirect(w, r, "/", http.StatusSeeOther)
|
||
|
}
|
||
|
|
||
|
func route_stick_topic(w http.ResponseWriter, r *http.Request) {
|
||
|
user := SessionCheck(w,r)
|
||
|
if !user.Is_Admin {
|
||
|
NoPermissions(w,r,user)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
tid, err := strconv.Atoi(r.URL.Path[len("/topic/stick/submit/"):])
|
||
|
if err != nil {
|
||
|
LocalError("The provided TopicID is not a valid number.",w,r,user)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
_, err = stick_topic_stmt.Exec(tid)
|
||
|
if err != nil {
|
||
|
InternalError(err,w,r,user)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
http.Redirect(w, r, "/topic/" + strconv.Itoa(tid), http.StatusSeeOther)
|
||
|
}
|
||
|
|
||
|
func route_unstick_topic(w http.ResponseWriter, r *http.Request) {
|
||
|
user := SessionCheck(w,r)
|
||
|
if !user.Is_Admin {
|
||
|
NoPermissions(w,r,user)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
tid, err := strconv.Atoi(r.URL.Path[len("/topic/unstick/submit/"):])
|
||
|
if err != nil {
|
||
|
LocalError("The provided TopicID is not a valid number.",w,r,user)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
_, err = unstick_topic_stmt.Exec(tid)
|
||
|
if err != nil {
|
||
|
InternalError(err,w,r,user)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
http.Redirect(w, r, "/topic/" + strconv.Itoa(tid), http.StatusSeeOther)
|
||
|
}
|
||
|
|
||
|
func route_reply_edit_submit(w http.ResponseWriter, r *http.Request) {
|
||
|
user := SessionCheck(w,r)
|
||
|
err := r.ParseForm()
|
||
|
if err != nil {
|
||
|
LocalError("Bad Form", w, r, user)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
is_js := r.PostFormValue("js")
|
||
|
if is_js == "" {
|
||
|
is_js = "0"
|
||
|
}
|
||
|
|
||
|
if !user.Is_Admin {
|
||
|
NoPermissionsJSQ(w,r,user,is_js)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
rid, err := strconv.Atoi(r.URL.Path[len("/reply/edit/submit/"):])
|
||
|
if err != nil {
|
||
|
LocalError("The provided Reply ID is not a valid number.",w,r,user)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
content := html.EscapeString(r.PostFormValue("edit_item"))
|
||
|
_, err = edit_reply_stmt.Exec(content, parse_message(content), rid)
|
||
|
if err != nil {
|
||
|
InternalError(err,w,r,user)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
// Get the Reply ID..
|
||
|
var tid int
|
||
|
err = db.QueryRow("select tid from replies where rid = ?", rid).Scan(&tid)
|
||
|
if err != nil {
|
||
|
InternalError(err,w,r,user)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
if is_js == "0" {
|
||
|
http.Redirect(w,r, "/topic/" + strconv.Itoa(tid) + "#reply-" + strconv.Itoa(rid), http.StatusSeeOther)
|
||
|
} else {
|
||
|
fmt.Fprintf(w,"{'success': '1'}")
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func route_reply_delete_submit(w http.ResponseWriter, r *http.Request) {
|
||
|
user := SessionCheck(w,r)
|
||
|
err := r.ParseForm()
|
||
|
if err != nil {
|
||
|
LocalError("Bad Form", w, r, user)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
is_js := r.PostFormValue("is_js")
|
||
|
if is_js == "" {
|
||
|
is_js = "0"
|
||
|
}
|
||
|
|
||
|
if !user.Is_Admin {
|
||
|
NoPermissionsJSQ(w,r,user,is_js)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
rid, err := strconv.Atoi(r.URL.Path[len("/reply/delete/submit/"):])
|
||
|
if err != nil {
|
||
|
LocalErrorJSQ("The provided Reply ID is not a valid number.",w,r,user,is_js)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
var tid int
|
||
|
err = db.QueryRow("SELECT tid from replies where rid = ?", rid).Scan(&tid)
|
||
|
if err == sql.ErrNoRows {
|
||
|
LocalErrorJSQ("The reply you tried to delete doesn't exist.",w,r,user,is_js)
|
||
|
return
|
||
|
} else if err != nil {
|
||
|
InternalErrorJSQ(err,w,r,user,is_js)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
_, err = delete_reply_stmt.Exec(rid)
|
||
|
if err != nil {
|
||
|
InternalErrorJSQ(err,w,r,user,is_js)
|
||
|
return
|
||
|
}
|
||
|
log.Print("The reply '" + strconv.Itoa(rid) + "' was deleted by User ID #" + strconv.Itoa(user.ID) + ".")
|
||
|
|
||
|
if is_js == "0" {
|
||
|
//http.Redirect(w,r, "/topic/" + strconv.Itoa(tid), http.StatusSeeOther)
|
||
|
} else {
|
||
|
fmt.Fprintf(w,"{'success': '1'}")
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func route_profile_reply_edit_submit(w http.ResponseWriter, r *http.Request) {
|
||
|
user := SessionCheck(w,r)
|
||
|
err := r.ParseForm()
|
||
|
if err != nil {
|
||
|
LocalError("Bad Form", w, r, user)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
is_js := r.PostFormValue("js")
|
||
|
if is_js == "" {
|
||
|
is_js = "0"
|
||
|
}
|
||
|
|
||
|
if !user.Is_Admin {
|
||
|
NoPermissionsJSQ(w,r,user,is_js)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
rid, err := strconv.Atoi(r.URL.Path[len("/profile/reply/edit/submit/"):])
|
||
|
if err != nil {
|
||
|
LocalError("The provided Reply ID is not a valid number.",w,r,user)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
content := html.EscapeString(r.PostFormValue("edit_item"))
|
||
|
_, err = edit_profile_reply_stmt.Exec(content, parse_message(content), rid)
|
||
|
if err != nil {
|
||
|
InternalError(err,w,r,user)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
// Get the Reply ID..
|
||
|
var uid int
|
||
|
err = db.QueryRow("select tid from users_replies where rid = ?", rid).Scan(&uid)
|
||
|
if err != nil {
|
||
|
InternalError(err,w,r,user)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
if is_js == "0" {
|
||
|
http.Redirect(w,r, "/user/" + strconv.Itoa(uid) + "#reply-" + strconv.Itoa(rid), http.StatusSeeOther)
|
||
|
} else {
|
||
|
fmt.Fprintf(w,"{'success': '1'}")
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func route_profile_reply_delete_submit(w http.ResponseWriter, r *http.Request) {
|
||
|
user := SessionCheck(w,r)
|
||
|
err := r.ParseForm()
|
||
|
if err != nil {
|
||
|
LocalError("Bad Form", w, r, user)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
is_js := r.PostFormValue("is_js")
|
||
|
if is_js == "" {
|
||
|
is_js = "0"
|
||
|
}
|
||
|
|
||
|
if !user.Is_Admin {
|
||
|
NoPermissionsJSQ(w,r,user,is_js)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
rid, err := strconv.Atoi(r.URL.Path[len("/profile/reply/delete/submit/"):])
|
||
|
if err != nil {
|
||
|
LocalErrorJSQ("The provided Reply ID is not a valid number.",w,r,user,is_js)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
var uid int
|
||
|
err = db.QueryRow("SELECT uid from users_replies where rid = ?", rid).Scan(&uid)
|
||
|
if err == sql.ErrNoRows {
|
||
|
LocalErrorJSQ("The reply you tried to delete doesn't exist.",w,r,user,is_js)
|
||
|
return
|
||
|
} else if err != nil {
|
||
|
InternalErrorJSQ(err,w,r,user,is_js)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
_, err = delete_profile_reply_stmt.Exec(rid)
|
||
|
if err != nil {
|
||
|
InternalErrorJSQ(err,w,r,user,is_js)
|
||
|
return
|
||
|
}
|
||
|
log.Print("The reply '" + strconv.Itoa(rid) + "' was deleted by User ID #" + strconv.Itoa(user.ID) + ".")
|
||
|
|
||
|
if is_js == "0" {
|
||
|
//http.Redirect(w,r, "/user/" + strconv.Itoa(uid), http.StatusSeeOther)
|
||
|
} else {
|
||
|
fmt.Fprintf(w,"{'success': '1'}")
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func route_panel_forums(w http.ResponseWriter, r *http.Request){
|
||
|
user := SessionCheck(w,r)
|
||
|
if !user.Is_Admin {
|
||
|
NoPermissions(w,r,user)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
var forumList map[int]interface{} = make(map[int]interface{})
|
||
|
currentID := 0
|
||
|
|
||
|
for _, forum := range forums {
|
||
|
if forum.ID > -1 {
|
||
|
forumList[currentID] = forum
|
||
|
currentID++
|
||
|
}
|
||
|
}
|
||
|
|
||
|
pi := Page{"Forum Manager","panel-forums",user,forumList,0}
|
||
|
templates.ExecuteTemplate(w,"panel-forums.html", pi)
|
||
|
}
|
||
|
|
||
|
func route_panel_forums_create_submit(w http.ResponseWriter, r *http.Request){
|
||
|
user := SessionCheck(w,r)
|
||
|
if !user.Is_Admin {
|
||
|
NoPermissions(w,r,user)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
err := r.ParseForm()
|
||
|
if err != nil {
|
||
|
LocalError("Bad Form", w, r, user)
|
||
|
return
|
||
|
}
|
||
|
if r.FormValue("session") != user.Session {
|
||
|
SecurityError(w,r,user)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
fname := r.PostFormValue("forum-name")
|
||
|
res, err := create_forum_stmt.Exec(fname)
|
||
|
if err != nil {
|
||
|
InternalError(err,w,r,user)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
lastId, err := res.LastInsertId()
|
||
|
if err != nil {
|
||
|
InternalError(err,w,r,user)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
forums[int(lastId)] = Forum{int(lastId),fname,true,"",0,"",0,""}
|
||
|
http.Redirect(w,r,"/panel/forums/",http.StatusSeeOther)
|
||
|
}
|
||
|
|
||
|
func route_panel_forums_delete(w http.ResponseWriter, r *http.Request){
|
||
|
user := SessionCheck(w,r)
|
||
|
if !user.Is_Admin {
|
||
|
NoPermissions(w,r,user)
|
||
|
return
|
||
|
}
|
||
|
if r.FormValue("session") != user.Session {
|
||
|
SecurityError(w,r,user)
|
||
|
return
|
||
|
}
|
||
|
fid, err := strconv.Atoi(r.URL.Path[len("/panel/forums/delete/"):])
|
||
|
if err != nil {
|
||
|
LocalError("The provided Forum ID is not a valid number.",w,r,user)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
_, ok := forums[fid];
|
||
|
if !ok {
|
||
|
LocalError("The forum you're trying to delete doesn't exist.",w,r,user)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
confirm_msg := "Are you sure you want to delete the '" + forums[fid].Name + "' forum?"
|
||
|
yousure := AreYouSure{"/panel/forums/delete/submit/" + strconv.Itoa(fid),confirm_msg}
|
||
|
|
||
|
pi := Page{"Delete Forum","panel-forums-delete",user,tList,yousure}
|
||
|
templates.ExecuteTemplate(w,"areyousure.html", pi)
|
||
|
}
|
||
|
|
||
|
func route_panel_forums_delete_submit(w http.ResponseWriter, r *http.Request) {
|
||
|
user := SessionCheck(w,r)
|
||
|
if !user.Is_Admin {
|
||
|
NoPermissions(w,r,user)
|
||
|
return
|
||
|
}
|
||
|
if r.FormValue("session") != user.Session {
|
||
|
SecurityError(w,r,user)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
fid, err := strconv.Atoi(r.URL.Path[len("/panel/forums/delete/submit/"):])
|
||
|
if err != nil {
|
||
|
LocalError("The provided Forum ID is not a valid number.",w,r,user)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
_, ok := forums[fid];
|
||
|
if !ok {
|
||
|
LocalError("The forum you're trying to delete doesn't exist.",w,r,user)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
_, err = delete_forum_stmt.Exec(fid)
|
||
|
if err != nil {
|
||
|
InternalError(err,w,r,user)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
// Remove this forum from the forum cache
|
||
|
delete(forums,fid);
|
||
|
http.Redirect(w,r,"/panel/forums/",http.StatusSeeOther)
|
||
|
}
|
||
|
|
||
|
func route_panel_forums_edit_submit(w http.ResponseWriter, r *http.Request) {
|
||
|
user := SessionCheck(w,r)
|
||
|
if !user.Is_Admin {
|
||
|
NoPermissions(w,r,user)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
err := r.ParseForm()
|
||
|
if err != nil {
|
||
|
LocalError("Bad Form", w, r, user)
|
||
|
return
|
||
|
}
|
||
|
if r.FormValue("session") != user.Session {
|
||
|
SecurityError(w,r,user)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
fid, err := strconv.Atoi(r.URL.Path[len("/panel/forums/edit/submit/"):])
|
||
|
if err != nil {
|
||
|
LocalError("The provided Forum ID is not a valid number.",w,r,user)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
forum_name := r.PostFormValue("edit_item")
|
||
|
|
||
|
forum, ok := forums[fid];
|
||
|
if !ok {
|
||
|
LocalError("The forum you're trying to edit doesn't exist.",w,r,user)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
_, err = update_forum_stmt.Exec(forum_name, fid)
|
||
|
if err != nil {
|
||
|
InternalError(err,w,r,user)
|
||
|
return
|
||
|
}
|
||
|
forum.Name = forum_name
|
||
|
forums[fid] = forum
|
||
|
|
||
|
http.Redirect(w,r,"/panel/forums/",http.StatusSeeOther)
|
||
|
}
|