diff options
-rw-r--r-- | README.md | 30 | ||||
-rw-r--r-- | main.go | 71 |
2 files changed, 59 insertions, 42 deletions
@@ -74,36 +74,18 @@ Any contributions or suggestions are appreciated. Best way to give immediate fee `emailpass:password` +#### local testing + When testing on a local env when setting the `instance` value in the config file you have to append the port number to the local address eg. `instance:localhost:3000` with `instanceport` also being set to the same port. + + If you want to test federation between servers locally you have to use your local ip as the `instance` eg. `instance:192.168.0.2:3000` and `instance:192:168:0:3:3000` adding the port to localhost will not route correctly. + ### Managing the server To access the managment page to create new boards or subscribe to other boards, when you start the server the console will output the `Mod key` and `Admin Login` Use the `Mod key` by appending it to your servers url, `https://fchan.xyz/[Mod key]` once there you will be prompted for the `Admin Login` credentials. - You can manage each board by appending the `Mod key` to the desired board url: `https://fchan.xyz/g/[Mod Key]` + You can manage each board by appending the `Mod key` to the desired board url: `https://fchan.xyz/[Mod Key]/g` The `Mod key` is not static and is reset on server restart. -### Creating a new board - - `CreateNewBoardDB(db *sql.DB, actor Actor)` - - returns Actor. - -### Creating a new actor - - `CreateNewActor(board string, prefName string, summary string, authReq []string, restricted bool)` - - returns Actor - - - `board` is the abbreviated name such as `g` - - - `prefName` is the fully readable name such as `Technology` - - - `summary` is a summary of the board - - - `authReq` is an array string of required privileges to post on the board, default is: `[]string{"captcha","email","passphrase"}` - - - `restricted` is bool. `true` is blue board, `false` is red board - - ## Server Update Check the git repo for the latest commits. If there are commits you want to update to, pull and restart instance. @@ -472,9 +472,14 @@ func main() { FollowingBoards = GetActorFollowingDB(db, Domain) - Boards = GetBoardCollection(db) + Boards = GetBoardCollection(db) + + var redirect string + if(actor.Name != "main") { + redirect = "/" + actor.Name + } - http.Redirect(w, r, r.Header.Get("Referer"), http.StatusSeeOther) + http.Redirect(w, r, "/" + *Key + "/" + redirect, http.StatusSeeOther) } else if manage && actor.Name != "" { t := template.Must(template.ParseFiles("./static/main.html", "./static/manage.html")) @@ -646,7 +651,7 @@ func main() { Boards = GetBoardCollection(db) } - http.Redirect(w, r, r.Header.Get("Referer"), http.StatusSeeOther) + http.Redirect(w, r, "/" + *Key, http.StatusSeeOther) }) http.HandleFunc("/verify", func(w http.ResponseWriter, r *http.Request){ @@ -707,8 +712,9 @@ func main() { http.HandleFunc("/delete", func(w http.ResponseWriter, r *http.Request){ id := r.URL.Query().Get("id") - board := r.URL.Query().Get("board") - actor := GetActorFromPath(db, id, "/") + board := r.URL.Query().Get("board") + col := GetCollectionFromID(id) + actor := col.OrderedItems[0].Actor _, auth := GetPasswordFromSession(r) if id == "" || auth == "" { @@ -723,29 +729,51 @@ func main() { return } + var OP string + if len(col.OrderedItems[0].InReplyTo) > 0 { + OP = col.OrderedItems[0].InReplyTo[0].Id + } + if !IsIDLocal(db, id) { CreateLocalDeleteDB(db, id, "post") - CloseLocalReportDB(db, id, board) - http.Redirect(w, r, r.Header.Get("Referer"), http.StatusSeeOther) + CloseLocalReportDB(db, id, actor.Id) + + if(board != "") { + http.Redirect(w, r, "/" + *Key + "/" + board , http.StatusSeeOther) + } else if(OP != ""){ + http.Redirect(w, r, OP, http.StatusSeeOther) + } else { + http.Redirect(w, r, actor.Id, http.StatusSeeOther) + } + return } var obj ObjectBase obj.Id = id - obj.Actor = &actor + obj.Actor = actor isOP := CheckIfObjectOP(db, obj.Id) if !isOP { DeleteObjectRequest(db, id) DeleteObject(db, obj.Id) - http.Redirect(w, r, r.Header.Get("Referer"), http.StatusSeeOther) + if(board != ""){ + http.Redirect(w, r, "/" + *Key + "/" + board , http.StatusSeeOther) + }else{ + http.Redirect(w, r, OP, http.StatusSeeOther) + } return + } else { DeleteObjectAndRepliesRequest(db, id) DeleteObjectAndReplies(db, obj.Id) - http.Redirect(w, r, r.Header.Get("Referer"), http.StatusSeeOther) + if(board != ""){ + http.Redirect(w, r, "/" + *Key + "/" + board , http.StatusSeeOther) + }else{ + http.Redirect(w, r, actor.Id, http.StatusSeeOther) + } return } @@ -756,7 +784,16 @@ func main() { http.HandleFunc("/deleteattach", func(w http.ResponseWriter, r *http.Request){ id := r.URL.Query().Get("id") + col := GetCollectionFromID(id) + actor := col.OrderedItems[0].Actor + var OP string + if (len(col.OrderedItems[0].InReplyTo) > 0 && col.OrderedItems[0].InReplyTo[0].Id != "") { + OP = col.OrderedItems[0].InReplyTo[0].Id + } else { + OP = id + } + _, auth := GetPasswordFromSession(r) if id == "" || auth == "" { @@ -765,8 +802,6 @@ func main() { return } - actor := GetActorFromPath(db, id, "/") - if !HasAuth(db, auth, actor.Id) { w.WriteHeader(http.StatusBadRequest) w.Write([]byte("")) @@ -775,13 +810,13 @@ func main() { if !IsIDLocal(db, id) { CreateLocalDeleteDB(db, id, "attachment") - http.Redirect(w, r, r.Header.Get("Referer"), http.StatusSeeOther) + http.Redirect(w, r, OP, http.StatusSeeOther) return } DeleteAttachmentFromFile(db, id) DeletePreviewFromFile(db, id) - http.Redirect(w, r, r.Header.Get("Referer"), http.StatusSeeOther) + http.Redirect(w, r, OP, http.StatusSeeOther) }) http.HandleFunc("/report", func(w http.ResponseWriter, r *http.Request){ @@ -818,13 +853,13 @@ func main() { if !IsIDLocal(db, id) { CloseLocalReportDB(db, id, board) - http.Redirect(w, r, r.Header.Get("Referer"), http.StatusSeeOther) + http.Redirect(w, r, "/" + *Key + "/" + board, http.StatusSeeOther) return } reported := DeleteReportActivity(db, id) if reported { - http.Redirect(w, r, r.Header.Get("Referer"), http.StatusSeeOther) + http.Redirect(w, r, "/" + *Key + "/" + board, http.StatusSeeOther) return } @@ -835,13 +870,13 @@ func main() { if !IsIDLocal(db, id) { CreateLocalReportDB(db, id, board, reason) - http.Redirect(w, r, r.Header.Get("Referer"), http.StatusSeeOther) + http.Redirect(w, r, "/" + board + "/" + remoteShort(id), http.StatusSeeOther) return } reported := ReportActivity(db, id, reason) if reported { - http.Redirect(w, r, r.Header.Get("Referer"), http.StatusSeeOther) + http.Redirect(w, r, id, http.StatusSeeOther) return } |