forked from grassrootseconomics/visedriver
remove session package
This commit is contained in:
92
request/http/server.go
Normal file
92
request/http/server.go
Normal file
@@ -0,0 +1,92 @@
|
||||
package http
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
"strconv"
|
||||
|
||||
"git.defalsify.org/vise.git/logging"
|
||||
"git.grassecon.net/grassrootseconomics/visedriver/request"
|
||||
"git.grassecon.net/grassrootseconomics/visedriver/errors"
|
||||
)
|
||||
|
||||
var (
|
||||
logg = logging.NewVanilla().WithDomain("visedriver.http.session")
|
||||
)
|
||||
|
||||
// HTTPRequestHandler implements the session handler for HTTP
|
||||
type HTTPRequestHandler struct {
|
||||
request.RequestHandler
|
||||
}
|
||||
|
||||
func (f *HTTPRequestHandler) WriteError(w http.ResponseWriter, code int, err error) {
|
||||
s := err.Error()
|
||||
w.Header().Set("Content-Length", strconv.Itoa(len(s)))
|
||||
w.WriteHeader(code)
|
||||
_, err = w.Write([]byte(s))
|
||||
if err != nil {
|
||||
logg.Errorf("error writing error!!", "err", err, "olderr", s)
|
||||
w.WriteHeader(500)
|
||||
}
|
||||
}
|
||||
|
||||
func NewHTTPRequestHandler(h request.RequestHandler) *HTTPRequestHandler {
|
||||
return &HTTPRequestHandler{
|
||||
RequestHandler: h,
|
||||
}
|
||||
}
|
||||
|
||||
func (hh *HTTPRequestHandler) ServeHTTP(w http.ResponseWriter, req *http.Request) {
|
||||
var code int
|
||||
var err error
|
||||
var perr error
|
||||
|
||||
rqs := request.RequestSession{
|
||||
Ctx: req.Context(),
|
||||
Writer: w,
|
||||
}
|
||||
|
||||
rp := hh.GetRequestParser()
|
||||
cfg := hh.GetConfig()
|
||||
cfg.SessionId, err = rp.GetSessionId(req.Context(), req)
|
||||
if err != nil {
|
||||
logg.ErrorCtxf(rqs.Ctx, "", "header processing error", err)
|
||||
hh.WriteError(w, 400, err)
|
||||
}
|
||||
rqs.Config = cfg
|
||||
rqs.Input, err = rp.GetInput(req)
|
||||
if err != nil {
|
||||
logg.ErrorCtxf(rqs.Ctx, "", "header processing error", err)
|
||||
hh.WriteError(w, 400, err)
|
||||
return
|
||||
}
|
||||
|
||||
rqs, err = hh.Process(rqs)
|
||||
switch err {
|
||||
case errors.ErrStorage:
|
||||
code = 500
|
||||
case errors.ErrEngineInit:
|
||||
code = 500
|
||||
case errors.ErrEngineExec:
|
||||
code = 500
|
||||
default:
|
||||
code = 200
|
||||
}
|
||||
|
||||
if code != 200 {
|
||||
hh.WriteError(w, 500, err)
|
||||
return
|
||||
}
|
||||
|
||||
w.WriteHeader(200)
|
||||
w.Header().Set("Content-Type", "text/plain")
|
||||
rqs, err = hh.Output(rqs)
|
||||
rqs, perr = hh.Reset(rqs)
|
||||
if err != nil {
|
||||
hh.WriteError(w, 500, err)
|
||||
return
|
||||
}
|
||||
if perr != nil {
|
||||
hh.WriteError(w, 500, perr)
|
||||
return
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user