diff options
author | 2018-01-02 22:04:48 -0800 | |
---|---|---|
committer | 2018-01-02 22:04:48 -0800 | |
commit | 320d1b016747ba4501da9417d9ce5f99368a5768 (patch) | |
tree | 1054d96afde6022951b76cc4a09b78e1e3f05058 /http/handler/request.go | |
parent | c39f2e1a8d2de6d412bcc673d29eb0f7a2d1f5f7 (diff) | |
download | v2-320d1b016747ba4501da9417d9ce5f99368a5768.tar.gz v2-320d1b016747ba4501da9417d9ce5f99368a5768.tar.zst v2-320d1b016747ba4501da9417d9ce5f99368a5768.zip |
Refactor packages to have more idiomatic code base
Diffstat (limited to 'http/handler/request.go')
-rw-r--r-- | http/handler/request.go | 124 |
1 files changed, 124 insertions, 0 deletions
diff --git a/http/handler/request.go b/http/handler/request.go new file mode 100644 index 00000000..7289a70f --- /dev/null +++ b/http/handler/request.go @@ -0,0 +1,124 @@ +// Copyright 2017 Frédéric Guillot. All rights reserved. +// Use of this source code is governed by the Apache 2.0 +// license that can be found in the LICENSE file. + +package handler + +import ( + "fmt" + "io" + "mime/multipart" + "net/http" + "strconv" + + "github.com/gorilla/mux" + "github.com/miniflux/miniflux/logger" +) + +// Request is a thin wrapper around "http.Request". +type Request struct { + request *http.Request +} + +// Request returns the raw Request struct. +func (r *Request) Request() *http.Request { + return r.request +} + +// Body returns the request body. +func (r *Request) Body() io.ReadCloser { + return r.request.Body +} + +// File returns uploaded file properties. +func (r *Request) File(name string) (multipart.File, *multipart.FileHeader, error) { + return r.request.FormFile(name) +} + +// Cookie returns the cookie value. +func (r *Request) Cookie(name string) string { + cookie, err := r.request.Cookie(name) + if err == http.ErrNoCookie { + return "" + } + + return cookie.Value +} + +// FormValue returns a form value as integer. +func (r *Request) FormValue(param string) string { + return r.request.FormValue(param) +} + +// FormIntegerValue returns a form value as integer. +func (r *Request) FormIntegerValue(param string) int64 { + value := r.request.FormValue(param) + integer, _ := strconv.Atoi(value) + return int64(integer) +} + +// IntegerParam returns an URL parameter as integer. +func (r *Request) IntegerParam(param string) (int64, error) { + vars := mux.Vars(r.request) + value, err := strconv.Atoi(vars[param]) + if err != nil { + logger.Error("[IntegerParam] %v", err) + return 0, fmt.Errorf("%s parameter is not an integer", param) + } + + if value < 0 { + return 0, nil + } + + return int64(value), nil +} + +// StringParam returns an URL parameter as string. +func (r *Request) StringParam(param, defaultValue string) string { + vars := mux.Vars(r.request) + value := vars[param] + if value == "" { + value = defaultValue + } + return value +} + +// QueryStringParam returns a querystring parameter as string. +func (r *Request) QueryStringParam(param, defaultValue string) string { + value := r.request.URL.Query().Get(param) + if value == "" { + value = defaultValue + } + return value +} + +// QueryIntegerParam returns a querystring parameter as string. +func (r *Request) QueryIntegerParam(param string, defaultValue int) int { + value := r.request.URL.Query().Get(param) + if value == "" { + return defaultValue + } + + val, err := strconv.Atoi(value) + if err != nil { + return defaultValue + } + + if val < 0 { + return defaultValue + } + + return val +} + +// HasQueryParam checks if the query string contains the given parameter. +func (r *Request) HasQueryParam(param string) bool { + values := r.request.URL.Query() + _, ok := values[param] + return ok +} + +// NewRequest returns a new Request. +func NewRequest(r *http.Request) *Request { + return &Request{r} +} |