Externalize requestparser, flush persister on http request end
This commit is contained in:
		
							parent
							
								
									8e3ff27bb8
								
							
						
					
					
						commit
						681f293d3c
					
				@ -195,7 +195,8 @@ func main() {
 | 
			
		||||
	}
 | 
			
		||||
	defer stateStore.Close()
 | 
			
		||||
 | 
			
		||||
	sh := httpserver.NewSessionHandler(cfg, rs, stateStore, userdataStore, hl.Init)
 | 
			
		||||
	rp := &httpserver.DefaultRequestParser{}
 | 
			
		||||
	sh := httpserver.NewSessionHandler(cfg, rs, stateStore, userdataStore, rp, hl.Init)
 | 
			
		||||
	s := &http.Server{
 | 
			
		||||
		Addr: fmt.Sprintf("%s:%s", host, strconv.Itoa(int(port))),
 | 
			
		||||
		Handler: sh,
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										2
									
								
								go.mod
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								go.mod
									
									
									
									
									
								
							@ -3,7 +3,7 @@ module git.grassecon.net/urdt/ussd
 | 
			
		||||
go 1.22.6
 | 
			
		||||
 | 
			
		||||
require (
 | 
			
		||||
	git.defalsify.org/vise.git v0.1.0-rc.2.0.20240907200911-15fe28c9d5b0
 | 
			
		||||
	git.defalsify.org/vise.git v0.1.0-rc.3.0.20240910220239-03876d1a78bd
 | 
			
		||||
	github.com/alecthomas/assert/v2 v2.2.2
 | 
			
		||||
	gopkg.in/leonelquinteros/gotext.v1 v1.3.1
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										4
									
								
								go.sum
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								go.sum
									
									
									
									
									
								
							@ -1,5 +1,5 @@
 | 
			
		||||
git.defalsify.org/vise.git v0.1.0-rc.2.0.20240907200911-15fe28c9d5b0 h1:B9kE2XXjrYmHNIgRV6fR1WLWE8+z8OvDhJSc96lbGPQ=
 | 
			
		||||
git.defalsify.org/vise.git v0.1.0-rc.2.0.20240907200911-15fe28c9d5b0/go.mod h1:JDguWmcoWBdsnpw7PUjVZAEpdC/ubBmjdUBy3tjP63M=
 | 
			
		||||
git.defalsify.org/vise.git v0.1.0-rc.3.0.20240910220239-03876d1a78bd h1:pEYKEwz8qHiLfhQC+yYPv3jun7+WAa8xlGtaJpOErQ0=
 | 
			
		||||
git.defalsify.org/vise.git v0.1.0-rc.3.0.20240910220239-03876d1a78bd/go.mod h1:JDguWmcoWBdsnpw7PUjVZAEpdC/ubBmjdUBy3tjP63M=
 | 
			
		||||
github.com/alecthomas/assert/v2 v2.2.2 h1:Z/iVC0xZfWTaFNE6bA3z07T86hd45Xe2eLt6WVy2bbk=
 | 
			
		||||
github.com/alecthomas/assert/v2 v2.2.2/go.mod h1:pXcQ2Asjp247dahGEmsZ6ru0UVwnkhktn7S0bBDLxvQ=
 | 
			
		||||
github.com/alecthomas/participle/v2 v2.0.0 h1:Fgrq+MbuSsJwIkw3fEj9h75vDP0Er5JzepJ0/HNHv0g=
 | 
			
		||||
 | 
			
		||||
@ -16,10 +16,15 @@ var (
 | 
			
		||||
	logg = logging.NewVanilla().WithDomain("httpserver")
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type RequestParser struct {
 | 
			
		||||
type RequestParser interface {
 | 
			
		||||
	GetSessionId(rq *http.Request) (string, error)
 | 
			
		||||
	GetInput(rq *http.Request) ([]byte, error)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func(rp *RequestParser) GetSessionId(rq *http.Request) (string, error) {
 | 
			
		||||
type DefaultRequestParser struct {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func(rp *DefaultRequestParser) GetSessionId(rq *http.Request) (string, error) {
 | 
			
		||||
	v := rq.Header.Get("X-Vise-Session")
 | 
			
		||||
	if v == "" {
 | 
			
		||||
		return "", fmt.Errorf("no session found")
 | 
			
		||||
@ -27,7 +32,7 @@ func(rp *RequestParser) GetSessionId(rq *http.Request) (string, error) {
 | 
			
		||||
	return v, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func(rp *RequestParser) GetInput(rq *http.Request) ([]byte, error) {
 | 
			
		||||
func(rp *DefaultRequestParser) GetInput(rq *http.Request) ([]byte, error) {
 | 
			
		||||
	defer rq.Body.Close()
 | 
			
		||||
	v, err := ioutil.ReadAll(rq.Body)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
@ -44,12 +49,12 @@ type SessionHandler struct {
 | 
			
		||||
	provider StorageProvider
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func NewSessionHandler(cfg engine.Config, rs resource.Resource, stateDb db.Db, userdataDb db.Db, first resource.EntryFunc) *SessionHandler {
 | 
			
		||||
func NewSessionHandler(cfg engine.Config, rs resource.Resource, stateDb db.Db, userdataDb db.Db, rp RequestParser, first resource.EntryFunc) *SessionHandler {
 | 
			
		||||
	return &SessionHandler{
 | 
			
		||||
		cfgTemplate: cfg,
 | 
			
		||||
		rs: rs,
 | 
			
		||||
		first: first,
 | 
			
		||||
		rp: RequestParser{},
 | 
			
		||||
		rp: rp,
 | 
			
		||||
		provider: NewSimpleStorageProvider(stateDb, userdataDb),
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
@ -128,6 +133,7 @@ func(f *SessionHandler) ServeHTTP(w http.ResponseWriter, req *http.Request) {
 | 
			
		||||
		f.writeError(w, 500, "Engine finish fail", err)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	_ = r
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -22,6 +22,7 @@ type SimpleStorageProvider struct {
 | 
			
		||||
 | 
			
		||||
func NewSimpleStorageProvider(stateStore db.Db, userdataStore db.Db) StorageProvider {
 | 
			
		||||
	pe := persist.NewPersister(stateStore)
 | 
			
		||||
	pe = pe.WithFlush()
 | 
			
		||||
	return &SimpleStorageProvider{
 | 
			
		||||
		Storage: Storage{
 | 
			
		||||
			Persister: pe,
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user