func GenerateImageCache(w traffic.ResponseWriter, r *traffic.Request) { if !exists(cache_folder) { if err := os.Mkdir(cache_folder, 0644); err != nil { panic(err) } } filename := fmt.Sprintf("%s/%dx%d.jpg", cache_folder, w.GetVar("width"), w.GetVar("height")) w.SetVar("filename", filename) if !exists(filename) { // file does not exists, generate a cached version width := w.GetVar("width").(int) height := w.GetVar("height").(int) src_image := loadImageFromFile(image_file) pattern := resizeImage(src_image, width, height) var dst_image image.Image if width > height { dst_image = tileImageHorizontally(pattern, width, height) } else { dst_image = tileImageVertically(pattern, width, height) } saveImageToFile(filename, dst_image) } }
func RequireValidImageParameters(w traffic.ResponseWriter, r *traffic.Request) { width, err := strconv.Atoi(r.Param("width")) if err != nil { w.WriteHeader(http.StatusNotFound) return } height, err := strconv.Atoi(r.Param("height")) if err != nil { height = width } if (width <= 2560 && width > 0) && (height <= 2560 && height > 0) { w.SetVar("width", width) w.SetVar("height", height) // log latest greatest creation if err := ioutil.WriteFile(filepath.Join(cache_folder, "/latest"), []byte(fmt.Sprintf("%d/%d", width, height)), 0644); err != nil { // panic is trapped by Traffic and show us a nice stack trace in the browser // a proper error handling should be provided, but in this simple example // it's used to remind you to always check for errors panic(err) } } else { // bad request w.WriteHeader(http.StatusBadRequest) w.Render("400") } }
// If the request path is "/ping", it writes PONG in the response and returns without calling the next middleware // Otherwise it sets the variable "PING" with PONG as value and calls the next middleware. // The next middleware and the final handler can get that variable with: // w.GetVar("ping") func (c *PingMiddleware) ServeHTTP(w traffic.ResponseWriter, r *traffic.Request, next traffic.NextMiddlewareFunc) { if r.URL.Path == "/ping" { w.WriteText("pong\n") return } if nextMiddleware := next(); nextMiddleware != nil { w.SetVar("ping", "pong") nextMiddleware.ServeHTTP(w, r, next) } return }
func (c *Middleware) ServeHTTP(w traffic.ResponseWriter, r *traffic.Request, next traffic.NextMiddlewareFunc) { ok := miniprofiler.Enable(r.Request) if ok && strings.HasPrefix(r.Request.URL.Path, miniprofiler.PATH) { miniprofiler.MiniProfilerHandler(w, r.Request) return } p := miniprofiler.NewProfile(w, r.Request, r.URL.Path) w.SetVar("miniprofiler", p.Includes()) w.SetVar("miniprofiler_timer", p) if nextMiddleware := next(); nextMiddleware != nil { nextMiddleware.ServeHTTP(w, r, next) } if ok { p.Finalize() } return }
func (middleware *trafficCompositeMiddleware) ServeHTTP(w traffic.ResponseWriter, r *traffic.Request, next traffic.NextMiddlewareFunc) { if nextMiddleware := next(); nextMiddleware != nil { w.SetVar("field", r.URL.Path) nextMiddleware.ServeHTTP(w, r, next) } }