eh
This commit is contained in:
parent
5c4eb739d6
commit
515f42c664
@ -35,8 +35,8 @@ type httpModUI struct {
|
|||||||
cache CacheHandler
|
cache CacheHandler
|
||||||
}
|
}
|
||||||
|
|
||||||
func createHttpModUI(frontend *httpFrontend) httpModUI {
|
func createHttpModUI(frontend *httpFrontend) *httpModUI {
|
||||||
return httpModUI{frontend.regenAll, frontend.Regen, frontend.RegenerateBoard, frontend.deleteThreadMarkup, frontend.deleteBoardMarkup, make(chan NNTPMessage), frontend.daemon, frontend.daemon.store, frontend.store, frontend.prefix, frontend.prefix + "mod/", frontend.GetCacheHandler()}
|
return &httpModUI{frontend.regenAll, frontend.Regen, frontend.RegenerateBoard, frontend.deleteThreadMarkup, frontend.deleteBoardMarkup, make(chan NNTPMessage), frontend.daemon, frontend.daemon.store, frontend.store, frontend.prefix, frontend.prefix + "mod/", frontend.GetCacheHandler()}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -44,7 +44,7 @@ func extractGroup(param map[string]interface{}) string {
|
|||||||
return extractParam(param, "newsgroup")
|
return extractParam(param, "newsgroup")
|
||||||
}
|
}
|
||||||
|
|
||||||
func (self httpModUI) getAdminFunc(funcname string) AdminFunc {
|
func (self *httpModUI) getAdminFunc(funcname string) AdminFunc {
|
||||||
if funcname == "template.reload" {
|
if funcname == "template.reload" {
|
||||||
return func(param map[string]interface{}) (interface{}, error) {
|
return func(param map[string]interface{}) (interface{}, error) {
|
||||||
tname, ok := param["template"]
|
tname, ok := param["template"]
|
||||||
@ -390,7 +390,7 @@ func (self httpModUI) HandleAdminCommand(wr http.ResponseWriter, r *http.Request
|
|||||||
}, wr, r)
|
}, wr, r)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (self httpModUI) CheckPubkey(pubkey, scope string) (bool, error) {
|
func (self *httpModUI) CheckPubkey(pubkey, scope string) (bool, error) {
|
||||||
is_admin, err := self.daemon.database.CheckAdminPubkey(pubkey)
|
is_admin, err := self.daemon.database.CheckAdminPubkey(pubkey)
|
||||||
if is_admin {
|
if is_admin {
|
||||||
// admin can do what they want
|
// admin can do what they want
|
||||||
@ -413,7 +413,7 @@ func (self httpModUI) CheckPubkey(pubkey, scope string) (bool, error) {
|
|||||||
return false, err
|
return false, err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (self httpModUI) CheckKey(privkey, scope string) (bool, error) {
|
func (self *httpModUI) CheckKey(privkey, scope string) (bool, error) {
|
||||||
privkey_bytes, err := hex.DecodeString(privkey)
|
privkey_bytes, err := hex.DecodeString(privkey)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
pk, _ := naclSeedToKeyPair(privkey_bytes)
|
pk, _ := naclSeedToKeyPair(privkey_bytes)
|
||||||
@ -424,17 +424,17 @@ func (self httpModUI) CheckKey(privkey, scope string) (bool, error) {
|
|||||||
return false, err
|
return false, err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (self httpModUI) MessageChan() chan NNTPMessage {
|
func (self *httpModUI) MessageChan() chan NNTPMessage {
|
||||||
return self.modMessageChan
|
return self.modMessageChan
|
||||||
}
|
}
|
||||||
|
|
||||||
func (self httpModUI) getSession(r *http.Request) *sessions.Session {
|
func (self *httpModUI) getSession(r *http.Request) *sessions.Session {
|
||||||
s, _ := self.store.Get(r, "nntpchan-mod")
|
s, _ := self.store.Get(r, "nntpchan-mod")
|
||||||
return s
|
return s
|
||||||
}
|
}
|
||||||
|
|
||||||
// get the session's private key as bytes or nil if we don't have it
|
// get the session's private key as bytes or nil if we don't have it
|
||||||
func (self httpModUI) getSessionPrivkeyBytes(r *http.Request) []byte {
|
func (self *httpModUI) getSessionPrivkeyBytes(r *http.Request) []byte {
|
||||||
s := self.getSession(r)
|
s := self.getSession(r)
|
||||||
k, ok := s.Values["privkey"]
|
k, ok := s.Values["privkey"]
|
||||||
if ok {
|
if ok {
|
||||||
@ -451,7 +451,7 @@ func (self httpModUI) getSessionPrivkeyBytes(r *http.Request) []byte {
|
|||||||
|
|
||||||
// returns true if the session is okay for a scope
|
// returns true if the session is okay for a scope
|
||||||
// otherwise redirect to login page
|
// otherwise redirect to login page
|
||||||
func (self httpModUI) checkSession(r *http.Request, scope string) bool {
|
func (self *httpModUI) checkSession(r *http.Request, scope string) bool {
|
||||||
s := self.getSession(r)
|
s := self.getSession(r)
|
||||||
k, ok := s.Values["privkey"]
|
k, ok := s.Values["privkey"]
|
||||||
if ok {
|
if ok {
|
||||||
@ -464,11 +464,11 @@ func (self httpModUI) checkSession(r *http.Request, scope string) bool {
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
func (self httpModUI) writeTemplate(wr http.ResponseWriter, r *http.Request, name string) {
|
func (self *httpModUI) writeTemplate(wr http.ResponseWriter, r *http.Request, name string) {
|
||||||
self.writeTemplateParam(wr, r, name, nil)
|
self.writeTemplateParam(wr, r, name, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (self httpModUI) writeTemplateParam(wr http.ResponseWriter, r *http.Request, name string, param map[string]interface{}) {
|
func (self *httpModUI) writeTemplateParam(wr http.ResponseWriter, r *http.Request, name string, param map[string]interface{}) {
|
||||||
if param == nil {
|
if param == nil {
|
||||||
param = make(map[string]interface{})
|
param = make(map[string]interface{})
|
||||||
}
|
}
|
||||||
@ -481,7 +481,7 @@ func (self httpModUI) writeTemplateParam(wr http.ResponseWriter, r *http.Request
|
|||||||
|
|
||||||
// do a function as authenticated
|
// do a function as authenticated
|
||||||
// pass in the request path to the handler
|
// pass in the request path to the handler
|
||||||
func (self httpModUI) asAuthed(scope string, handler func(string), wr http.ResponseWriter, r *http.Request) {
|
func (self *httpModUI) asAuthed(scope string, handler func(string), wr http.ResponseWriter, r *http.Request) {
|
||||||
if self.checkSession(r, scope) {
|
if self.checkSession(r, scope) {
|
||||||
handler(r.URL.Path)
|
handler(r.URL.Path)
|
||||||
} else {
|
} else {
|
||||||
@ -490,7 +490,7 @@ func (self httpModUI) asAuthed(scope string, handler func(string), wr http.Respo
|
|||||||
}
|
}
|
||||||
|
|
||||||
// do stuff to a certain message if with have it and are authed
|
// do stuff to a certain message if with have it and are authed
|
||||||
func (self httpModUI) asAuthedWithMessage(scope string, handler func(ArticleEntry, *http.Request) map[string]interface{}, wr http.ResponseWriter, req *http.Request) {
|
func (self *httpModUI) asAuthedWithMessage(scope string, handler func(ArticleEntry, *http.Request) map[string]interface{}, wr http.ResponseWriter, req *http.Request) {
|
||||||
self.asAuthed(scope, func(path string) {
|
self.asAuthed(scope, func(path string) {
|
||||||
// get the long hash
|
// get the long hash
|
||||||
if strings.Count(path, "/") > 2 {
|
if strings.Count(path, "/") > 2 {
|
||||||
@ -523,7 +523,7 @@ func (self httpModUI) asAuthedWithMessage(scope string, handler func(ArticleEntr
|
|||||||
}, wr, req)
|
}, wr, req)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (self httpModUI) HandlePostSpam(wr http.ResponseWriter, r *http.Request) {
|
func (self *httpModUI) HandlePostSpam(wr http.ResponseWriter, r *http.Request) {
|
||||||
if r.Method != "POST" {
|
if r.Method != "POST" {
|
||||||
wr.WriteHeader(405)
|
wr.WriteHeader(405)
|
||||||
return
|
return
|
||||||
@ -557,13 +557,13 @@ func (self httpModUI) HandlePostSpam(wr http.ResponseWriter, r *http.Request) {
|
|||||||
json.NewEncoder(wr).Encode(resp)
|
json.NewEncoder(wr).Encode(resp)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (self httpModUI) HandleAddPubkey(wr http.ResponseWriter, r *http.Request) {
|
func (self *httpModUI) HandleAddPubkey(wr http.ResponseWriter, r *http.Request) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (self httpModUI) HandleDelPubkey(wr http.ResponseWriter, r *http.Request) {
|
func (self *httpModUI) HandleDelPubkey(wr http.ResponseWriter, r *http.Request) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (self httpModUI) HandleUnbanAddress(wr http.ResponseWriter, r *http.Request) {
|
func (self *httpModUI) HandleUnbanAddress(wr http.ResponseWriter, r *http.Request) {
|
||||||
self.asAuthed("ban", func(path string) {
|
self.asAuthed("ban", func(path string) {
|
||||||
// extract the ip address
|
// extract the ip address
|
||||||
// TODO: ip ranges and prefix detection
|
// TODO: ip ranges and prefix detection
|
||||||
@ -593,7 +593,7 @@ func (self httpModUI) HandleUnbanAddress(wr http.ResponseWriter, r *http.Request
|
|||||||
}
|
}
|
||||||
|
|
||||||
// handle ban logic
|
// handle ban logic
|
||||||
func (self httpModUI) handleBanAddress(msg ArticleEntry, r *http.Request) map[string]interface{} {
|
func (self *httpModUI) handleBanAddress(msg ArticleEntry, r *http.Request) map[string]interface{} {
|
||||||
// get the article headers
|
// get the article headers
|
||||||
resp := make(map[string]interface{})
|
resp := make(map[string]interface{})
|
||||||
msgid := msg.MessageID()
|
msgid := msg.MessageID()
|
||||||
@ -657,7 +657,7 @@ func (self httpModUI) handleBanAddress(msg ArticleEntry, r *http.Request) map[st
|
|||||||
return resp
|
return resp
|
||||||
}
|
}
|
||||||
|
|
||||||
func (self httpModUI) handleDeletePost(msg ArticleEntry, r *http.Request) map[string]interface{} {
|
func (self *httpModUI) handleDeletePost(msg ArticleEntry, r *http.Request) map[string]interface{} {
|
||||||
var mm ModMessage
|
var mm ModMessage
|
||||||
resp := make(map[string]interface{})
|
resp := make(map[string]interface{})
|
||||||
msgid := msg.MessageID()
|
msgid := msg.MessageID()
|
||||||
@ -706,16 +706,16 @@ func (self httpModUI) handleDeletePost(msg ArticleEntry, r *http.Request) map[st
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ban the address of a poster
|
// ban the address of a poster
|
||||||
func (self httpModUI) HandleBanAddress(wr http.ResponseWriter, r *http.Request) {
|
func (self *httpModUI) HandleBanAddress(wr http.ResponseWriter, r *http.Request) {
|
||||||
self.asAuthedWithMessage("ban", self.handleBanAddress, wr, r)
|
self.asAuthedWithMessage("ban", self.handleBanAddress, wr, r)
|
||||||
}
|
}
|
||||||
|
|
||||||
// delete a post
|
// delete a post
|
||||||
func (self httpModUI) HandleDeletePost(wr http.ResponseWriter, r *http.Request) {
|
func (self *httpModUI) HandleDeletePost(wr http.ResponseWriter, r *http.Request) {
|
||||||
self.asAuthedWithMessage("login", self.handleDeletePost, wr, r)
|
self.asAuthedWithMessage("login", self.handleDeletePost, wr, r)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (self httpModUI) HandleLogin(wr http.ResponseWriter, r *http.Request) {
|
func (self *httpModUI) HandleLogin(wr http.ResponseWriter, r *http.Request) {
|
||||||
privkey := r.FormValue("privkey")
|
privkey := r.FormValue("privkey")
|
||||||
msg := "failed login: "
|
msg := "failed login: "
|
||||||
if len(privkey) == 0 {
|
if len(privkey) == 0 {
|
||||||
@ -736,13 +736,13 @@ func (self httpModUI) HandleLogin(wr http.ResponseWriter, r *http.Request) {
|
|||||||
self.writeTemplateParam(wr, r, "modlogin_result", map[string]interface{}{"message": msg, csrf.TemplateTag: csrf.TemplateField(r)})
|
self.writeTemplateParam(wr, r, "modlogin_result", map[string]interface{}{"message": msg, csrf.TemplateTag: csrf.TemplateField(r)})
|
||||||
}
|
}
|
||||||
|
|
||||||
func (self httpModUI) HandleKeyGen(wr http.ResponseWriter, r *http.Request) {
|
func (self *httpModUI) HandleKeyGen(wr http.ResponseWriter, r *http.Request) {
|
||||||
pk, sk := newNaclSignKeypair()
|
pk, sk := newNaclSignKeypair()
|
||||||
tripcode := makeTripcode(pk)
|
tripcode := makeTripcode(pk)
|
||||||
self.writeTemplateParam(wr, r, "keygen", map[string]interface{}{"public": pk, "secret": sk, "tripcode": tripcode})
|
self.writeTemplateParam(wr, r, "keygen", map[string]interface{}{"public": pk, "secret": sk, "tripcode": tripcode})
|
||||||
}
|
}
|
||||||
|
|
||||||
func (self httpModUI) ServeModPage(wr http.ResponseWriter, r *http.Request) {
|
func (self *httpModUI) ServeModPage(wr http.ResponseWriter, r *http.Request) {
|
||||||
if self.checkSession(r, "login") {
|
if self.checkSession(r, "login") {
|
||||||
wr.Header().Set("X-CSRF-Token", csrf.Token(r))
|
wr.Header().Set("X-CSRF-Token", csrf.Token(r))
|
||||||
// we are logged in
|
// we are logged in
|
||||||
|
Reference in New Issue
Block a user