Files
remark42/app/rest/httperrors.go
T
UmputunandGitHub 6aee34bb1e feature/ts - read-only support (#57)
* extend post info with ts and add info implemenation to engine

* info controller

* remove unused

* docker froendly new test

* tree find to include post info struct

* remove leftovers from codeconv

* test for empty tree request

* add func name to error rest report

* test with disabled proxy

* add read only age and reject updates on old posts

* lint: shaddow err

* make info calls fast. needs migration!

* fix backup restore script

* increase limiter timeout

* add local exporter

* migrate list to new info

* fix rest list tests

* add manual backup script

* default backup path

* fix eait on sec change failing rss tests

* add RO status bucket and rest

* add admin RO controller test
2018-05-28 14:57:36 -05:00

45 lines
1.3 KiB
Go

package rest
import (
"fmt"
"log"
"net/http"
"net/url"
"runtime"
"strings"
"github.com/go-chi/render"
)
// SendErrorJSON makes {error: blah, details: blah} json body and responds with error code
func SendErrorJSON(w http.ResponseWriter, r *http.Request, code int, err error, details string) {
log.Printf("[DEBUG] %s", errDetailsMsg(r, code, err, details))
render.Status(r, code)
render.JSON(w, r, map[string]interface{}{"error": err.Error(), "details": details})
}
func errDetailsMsg(r *http.Request, code int, err error, details string) string {
uinfoStr := ""
if user, e := GetUserInfo(r); e == nil {
uinfoStr = user.Name + "/" + user.ID + " - "
}
q := r.URL.String()
if qun, e := url.QueryUnescape(q); e == nil {
q = qun
}
srcFileInfo := ""
if pc, file, line, ok := runtime.Caller(2); ok {
fnameElems := strings.Split(file, "/")
funcNameElems := strings.Split(runtime.FuncForPC(pc).Name(), "/")
srcFileInfo = fmt.Sprintf(" [caused by %s:%d %s]", strings.Join(fnameElems[len(fnameElems)-3:], "/"),
line, funcNameElems[len(funcNameElems)-1])
}
remoteIP := r.RemoteAddr
if pos := strings.Index(remoteIP, ":"); pos >= 0 {
remoteIP = remoteIP[:pos]
}
return fmt.Sprintf("%s - %v - %d - %s%s - %s%s", details, err, code, uinfoStr, remoteIP, q, srcFileInfo)
}