cmd/stepd: Buffer templates
This commit is contained in:
		
							parent
							
								
									c85bd09ac5
								
							
						
					
					
						commit
						60f1b62965
					
				@ -5,6 +5,7 @@ import "fmt"
 | 
				
			|||||||
import "path"
 | 
					import "path"
 | 
				
			||||||
import "io/fs"
 | 
					import "io/fs"
 | 
				
			||||||
import "strings"
 | 
					import "strings"
 | 
				
			||||||
 | 
					import "strconv"
 | 
				
			||||||
import "net/http"
 | 
					import "net/http"
 | 
				
			||||||
import "path/filepath"
 | 
					import "path/filepath"
 | 
				
			||||||
import "git.tebibyte.media/sashakoshka/step"
 | 
					import "git.tebibyte.media/sashakoshka/step"
 | 
				
			||||||
@ -75,22 +76,43 @@ func (this *handler) serveFile (res http.ResponseWriter, req *http.Request, file
 | 
				
			|||||||
		return
 | 
							return
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// parse and execute
 | 
						// parse
 | 
				
			||||||
	document, err := this.environment.Parse(name)
 | 
						document, err := this.environment.Parse(name)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		this.serveError(res, req, http.StatusInternalServerError, err)
 | 
							this.serveError(res, req, http.StatusInternalServerError, err)
 | 
				
			||||||
		return
 | 
							return
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if contentType, ok := document.FrontMatter["content-type"]; ok {
 | 
					
 | 
				
			||||||
		res.Header().Set("Content-Type", contentType)
 | 
						// set up HTTP response recorder
 | 
				
			||||||
 | 
						recorder := step.HTTPResponseRecorder {
 | 
				
			||||||
 | 
							Status: http.StatusOK,
 | 
				
			||||||
 | 
							Head:   res.Header(),
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
						if contentType, ok := document.FrontMatter["content-type"]; ok {
 | 
				
			||||||
 | 
							recorder.Header().Set("Content-Type", contentType)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if status, ok := document.FrontMatter["status"]; ok {
 | 
				
			||||||
 | 
							if status, err := strconv.Atoi(status); err == nil {
 | 
				
			||||||
 | 
								recorder.Status = status
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// execute document
 | 
				
			||||||
	data := step.HTTPData { }
 | 
						data := step.HTTPData { }
 | 
				
			||||||
	data.Res.Header      = make(http.Header)
 | 
						data.Res.Header      = make(http.Header)
 | 
				
			||||||
	data.Res.WriteHeader = res.WriteHeader
 | 
						data.Res.WriteHeader = recorder.WriteHeader
 | 
				
			||||||
 | 
						data.Res.Reset       = recorder.Reset
 | 
				
			||||||
	data.Req = req
 | 
						data.Req = req
 | 
				
			||||||
	err = document.Execute(res, step.ExecutionData {
 | 
						err = document.Execute(&recorder, step.ExecutionData {
 | 
				
			||||||
		Data: data,
 | 
							Data: data,
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							this.serveError(res, req, http.StatusInternalServerError, err)
 | 
				
			||||||
 | 
							return
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// play back recorded response
 | 
				
			||||||
 | 
						err = recorder.Play(res)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		this.logErr(name, err)
 | 
							this.logErr(name, err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user