mirror of
https://github.com/cubixle/tuu.git
synced 2026-04-24 19:54:46 +01:00
quick implementation of middleware
This commit is contained in:
114
Gopkg.lock
generated
114
Gopkg.lock
generated
@@ -3,9 +3,15 @@
|
|||||||
|
|
||||||
[[projects]]
|
[[projects]]
|
||||||
branch = "master"
|
branch = "master"
|
||||||
name = "dmitri.shuralyov.com/kebabcase"
|
name = "dmitri.shuralyov.com/text/kebabcase"
|
||||||
packages = ["."]
|
packages = ["."]
|
||||||
revision = "bf160e40a7918fbe9dc3cc841a023d87242bd2eb"
|
revision = "40e40b42552a9cb37d6e98f4ad31f63ae53ea43a"
|
||||||
|
|
||||||
|
[[projects]]
|
||||||
|
branch = "master"
|
||||||
|
name = "github.com/cockroachdb/cockroach-go"
|
||||||
|
packages = ["crdb"]
|
||||||
|
revision = "59c0560478b705bf9bd12f9252224a0fad7c87df"
|
||||||
|
|
||||||
[[projects]]
|
[[projects]]
|
||||||
name = "github.com/davecgh/go-spew"
|
name = "github.com/davecgh/go-spew"
|
||||||
@@ -14,16 +20,16 @@
|
|||||||
version = "v1.1.0"
|
version = "v1.1.0"
|
||||||
|
|
||||||
[[projects]]
|
[[projects]]
|
||||||
branch = "master"
|
|
||||||
name = "github.com/daviddengcn/go-colortext"
|
name = "github.com/daviddengcn/go-colortext"
|
||||||
packages = ["."]
|
packages = ["."]
|
||||||
revision = "17e75f6184bc9e727756cd0d82e0af58b1fc7191"
|
revision = "17e75f6184bc9e727756cd0d82e0af58b1fc7191"
|
||||||
|
version = "1.0.0"
|
||||||
|
|
||||||
[[projects]]
|
[[projects]]
|
||||||
name = "github.com/fatih/color"
|
name = "github.com/fatih/color"
|
||||||
packages = ["."]
|
packages = ["."]
|
||||||
revision = "570b54cabe6b8eb0bc2dfce68d964677d63b5260"
|
revision = "507f6050b8568533fb3f5504de8e5205fa62a114"
|
||||||
version = "v1.5.0"
|
version = "v1.6.0"
|
||||||
|
|
||||||
[[projects]]
|
[[projects]]
|
||||||
name = "github.com/fatih/structs"
|
name = "github.com/fatih/structs"
|
||||||
@@ -40,32 +46,44 @@
|
|||||||
[[projects]]
|
[[projects]]
|
||||||
name = "github.com/gobuffalo/buffalo"
|
name = "github.com/gobuffalo/buffalo"
|
||||||
packages = ["render"]
|
packages = ["render"]
|
||||||
revision = "4220930a985fea6cd3f207efa1f822940ab08c2b"
|
revision = "bfa77a8652f7c8ec0bede640656c8add3cb230c2"
|
||||||
version = "v0.10.2"
|
version = "v0.10.3"
|
||||||
|
|
||||||
[[projects]]
|
[[projects]]
|
||||||
name = "github.com/gobuffalo/envy"
|
name = "github.com/gobuffalo/envy"
|
||||||
packages = ["."]
|
packages = ["."]
|
||||||
revision = "e613c80275b86293880eddeb27417c9a7c670ff3"
|
revision = "197631a8f4c665cf7eeb157d5bc00d988419c4e7"
|
||||||
version = "v1.3.0"
|
version = "v1.5.0"
|
||||||
|
|
||||||
[[projects]]
|
[[projects]]
|
||||||
name = "github.com/gobuffalo/packr"
|
name = "github.com/gobuffalo/packr"
|
||||||
packages = ["."]
|
packages = ["."]
|
||||||
revision = "60f8243a040d5c5c80339403322a5a6fb56c2333"
|
revision = "6434a292ac52e6964adebfdce3f9ce6d9f16be01"
|
||||||
version = "v1.9.10"
|
version = "v1.10.4"
|
||||||
|
|
||||||
[[projects]]
|
[[projects]]
|
||||||
name = "github.com/gobuffalo/plush"
|
name = "github.com/gobuffalo/plush"
|
||||||
packages = [".","ast","lexer","parser","token"]
|
packages = [".","ast","lexer","parser","token"]
|
||||||
revision = "f15814743c4d25c1bc5371e75d1ef51c9afdddba"
|
revision = "a3df688902c0ccd9fa712ed5a1da6b78e7efab0d"
|
||||||
version = "v3.6.0"
|
version = "v3.6.12"
|
||||||
|
|
||||||
[[projects]]
|
[[projects]]
|
||||||
name = "github.com/gobuffalo/tags"
|
name = "github.com/gobuffalo/tags"
|
||||||
packages = [".","form","form/bootstrap"]
|
packages = [".","form","form/bootstrap"]
|
||||||
revision = "fd130d3e089cc2ae7285f7b4f3e45fd3f1aa3482"
|
revision = "ab52126649ee51d858d9525f60bc1618592433b0"
|
||||||
version = "v1.9.0"
|
version = "v2.0.0"
|
||||||
|
|
||||||
|
[[projects]]
|
||||||
|
name = "github.com/gobuffalo/uuid"
|
||||||
|
packages = ["."]
|
||||||
|
revision = "3a9fb6c5c481d4886f1e9323c61ad743fb955860"
|
||||||
|
version = "v2.0.0"
|
||||||
|
|
||||||
|
[[projects]]
|
||||||
|
name = "github.com/gobuffalo/validate"
|
||||||
|
packages = [".","validators"]
|
||||||
|
revision = "42d8db6e06e617cdedcc7a849d6690a2cb5a8d28"
|
||||||
|
version = "v2.0.0"
|
||||||
|
|
||||||
[[projects]]
|
[[projects]]
|
||||||
name = "github.com/gorilla/context"
|
name = "github.com/gorilla/context"
|
||||||
@@ -76,14 +94,14 @@
|
|||||||
[[projects]]
|
[[projects]]
|
||||||
name = "github.com/gorilla/mux"
|
name = "github.com/gorilla/mux"
|
||||||
packages = ["."]
|
packages = ["."]
|
||||||
revision = "7f08801859139f86dfafd1c296e2cba9a80d292e"
|
revision = "53c1911da2b537f792e7cafcb446b05ffe33b996"
|
||||||
version = "v1.6.0"
|
version = "v1.6.1"
|
||||||
|
|
||||||
[[projects]]
|
[[projects]]
|
||||||
branch = "master"
|
branch = "master"
|
||||||
name = "github.com/jmoiron/sqlx"
|
name = "github.com/jmoiron/sqlx"
|
||||||
packages = [".","reflectx"]
|
packages = [".","reflectx"]
|
||||||
revision = "de8647470aafe4854c976707c431dbe1eb2822c6"
|
revision = "cf35089a197953c69420c8d0cecda90809764b1d"
|
||||||
|
|
||||||
[[projects]]
|
[[projects]]
|
||||||
name = "github.com/joho/godotenv"
|
name = "github.com/joho/godotenv"
|
||||||
@@ -95,7 +113,7 @@
|
|||||||
branch = "master"
|
branch = "master"
|
||||||
name = "github.com/lib/pq"
|
name = "github.com/lib/pq"
|
||||||
packages = [".","oid"]
|
packages = [".","oid"]
|
||||||
revision = "83612a56d3dd153a94a629cd64925371c9adad78"
|
revision = "88edab0803230a3898347e77b474f8c1820a1f20"
|
||||||
|
|
||||||
[[projects]]
|
[[projects]]
|
||||||
branch = "master"
|
branch = "master"
|
||||||
@@ -107,25 +125,25 @@
|
|||||||
branch = "master"
|
branch = "master"
|
||||||
name = "github.com/markbates/inflect"
|
name = "github.com/markbates/inflect"
|
||||||
packages = ["."]
|
packages = ["."]
|
||||||
revision = "a12c3aec81a6a938bf584a4bac567afed9256586"
|
revision = "3e32b42850a9f09fac18a6c09bbd04325f51f732"
|
||||||
|
|
||||||
[[projects]]
|
[[projects]]
|
||||||
name = "github.com/markbates/pop"
|
name = "github.com/markbates/pop"
|
||||||
packages = [".","columns","fizz","fizz/translators"]
|
packages = [".","associations","columns","fizz","fizz/translators"]
|
||||||
revision = "b75753936c38f382be88b1ea4221b771994996c9"
|
revision = "f230643ae0f8fa01e9444c2fb857ba1f1a78eb1f"
|
||||||
version = "3.41.10"
|
version = "v4.0.0"
|
||||||
|
|
||||||
[[projects]]
|
[[projects]]
|
||||||
branch = "master"
|
|
||||||
name = "github.com/markbates/validate"
|
name = "github.com/markbates/validate"
|
||||||
packages = [".","validators"]
|
packages = ["."]
|
||||||
revision = "cd8cc34c703420d6b084fbbfd5085e8e71c5b830"
|
revision = "cd8cc34c703420d6b084fbbfd5085e8e71c5b830"
|
||||||
|
version = "v1.0.0"
|
||||||
|
|
||||||
[[projects]]
|
[[projects]]
|
||||||
branch = "master"
|
branch = "master"
|
||||||
name = "github.com/mattn/anko"
|
name = "github.com/mattn/anko"
|
||||||
packages = ["ast","builtins","builtins/encoding/json","builtins/errors","builtins/flag","builtins/fmt","builtins/github.com/daviddengcn/go-colortext","builtins/io","builtins/io/ioutil","builtins/math","builtins/math/big","builtins/math/rand","builtins/net","builtins/net/http","builtins/net/url","builtins/os","builtins/os/exec","builtins/os/signal","builtins/path","builtins/path/filepath","builtins/regexp","builtins/runtime","builtins/sort","builtins/strconv","builtins/strings","builtins/time","parser","vm"]
|
packages = ["ast","builtins","builtins/encoding/json","builtins/errors","builtins/flag","builtins/fmt","builtins/github.com/daviddengcn/go-colortext","builtins/io","builtins/io/ioutil","builtins/math","builtins/math/big","builtins/math/rand","builtins/net","builtins/net/http","builtins/net/url","builtins/os","builtins/os/exec","builtins/os/signal","builtins/path","builtins/path/filepath","builtins/regexp","builtins/runtime","builtins/sort","builtins/strconv","builtins/strings","builtins/time","parser","vm"]
|
||||||
revision = "3b446c7d031bdd754fc0183f599af173cd996715"
|
revision = "d5441ca3f0c7e071a9ede864f9db2cc652690f42"
|
||||||
|
|
||||||
[[projects]]
|
[[projects]]
|
||||||
name = "github.com/mattn/go-colorable"
|
name = "github.com/mattn/go-colorable"
|
||||||
@@ -142,8 +160,8 @@
|
|||||||
[[projects]]
|
[[projects]]
|
||||||
name = "github.com/mattn/go-sqlite3"
|
name = "github.com/mattn/go-sqlite3"
|
||||||
packages = ["."]
|
packages = ["."]
|
||||||
revision = "ed69081a91fd053f17672236b0dd52ba7485e1a3"
|
revision = "6c771bb9887719704b210e87e934f08be014bdb1"
|
||||||
version = "v1.4.0"
|
version = "v1.6.0"
|
||||||
|
|
||||||
[[projects]]
|
[[projects]]
|
||||||
branch = "master"
|
branch = "master"
|
||||||
@@ -170,10 +188,10 @@
|
|||||||
version = "v1.0.0"
|
version = "v1.0.0"
|
||||||
|
|
||||||
[[projects]]
|
[[projects]]
|
||||||
branch = "master"
|
|
||||||
name = "github.com/russross/blackfriday"
|
name = "github.com/russross/blackfriday"
|
||||||
packages = ["."]
|
packages = ["."]
|
||||||
revision = "6d1ef893fcb01b4f50cb6e57ed7df3e2e627b6b2"
|
revision = "55d61fa8aa702f59229e6cff85793c22e580eaf5"
|
||||||
|
version = "v1.5.1"
|
||||||
|
|
||||||
[[projects]]
|
[[projects]]
|
||||||
name = "github.com/satori/go.uuid"
|
name = "github.com/satori/go.uuid"
|
||||||
@@ -187,10 +205,10 @@
|
|||||||
revision = "a683aaf2d516deecd70cad0c72e3ca773ecfcef0"
|
revision = "a683aaf2d516deecd70cad0c72e3ca773ecfcef0"
|
||||||
|
|
||||||
[[projects]]
|
[[projects]]
|
||||||
branch = "master"
|
|
||||||
name = "github.com/sergi/go-diff"
|
name = "github.com/sergi/go-diff"
|
||||||
packages = ["diffmatchpatch"]
|
packages = ["diffmatchpatch"]
|
||||||
revision = "1744e2970ca51c86172c8190fadad617561ed6e7"
|
revision = "1744e2970ca51c86172c8190fadad617561ed6e7"
|
||||||
|
version = "v1.0.0"
|
||||||
|
|
||||||
[[projects]]
|
[[projects]]
|
||||||
branch = "master"
|
branch = "master"
|
||||||
@@ -202,7 +220,7 @@
|
|||||||
branch = "master"
|
branch = "master"
|
||||||
name = "github.com/shurcooL/go"
|
name = "github.com/shurcooL/go"
|
||||||
packages = ["parserutil","printerutil","reflectfind","reflectsource"]
|
packages = ["parserutil","printerutil","reflectfind","reflectsource"]
|
||||||
revision = "004faa6b0118cf52635363b72b51cdcc297800a2"
|
revision = "364c5ae8518b51f5fda954762864d6f4d5c30c89"
|
||||||
|
|
||||||
[[projects]]
|
[[projects]]
|
||||||
branch = "master"
|
branch = "master"
|
||||||
@@ -214,7 +232,7 @@
|
|||||||
branch = "master"
|
branch = "master"
|
||||||
name = "github.com/shurcooL/graphql"
|
name = "github.com/shurcooL/graphql"
|
||||||
packages = ["ident"]
|
packages = ["ident"]
|
||||||
revision = "d0549edd16dceb6939e538fdb1b4f2ec7ee816cc"
|
revision = "3d276b9dcc6b1e0adf19557a8de5cb8632c07697"
|
||||||
|
|
||||||
[[projects]]
|
[[projects]]
|
||||||
branch = "master"
|
branch = "master"
|
||||||
@@ -232,7 +250,7 @@
|
|||||||
branch = "master"
|
branch = "master"
|
||||||
name = "github.com/shurcooL/octiconssvg"
|
name = "github.com/shurcooL/octiconssvg"
|
||||||
packages = ["."]
|
packages = ["."]
|
||||||
revision = "38b02129bb6460858e11f90798a3832da1e502bd"
|
revision = "91d14858bf8188ba5143d67a3a677ea559000b0a"
|
||||||
|
|
||||||
[[projects]]
|
[[projects]]
|
||||||
branch = "master"
|
branch = "master"
|
||||||
@@ -240,6 +258,12 @@
|
|||||||
packages = ["."]
|
packages = ["."]
|
||||||
revision = "86672fcb3f950f35f2e675df2240550f2a50762f"
|
revision = "86672fcb3f950f35f2e675df2240550f2a50762f"
|
||||||
|
|
||||||
|
[[projects]]
|
||||||
|
name = "github.com/sirupsen/logrus"
|
||||||
|
packages = ["."]
|
||||||
|
revision = "c155da19408a8799da419ed3eeb0cb5db0ad5dbc"
|
||||||
|
version = "v1.0.5"
|
||||||
|
|
||||||
[[projects]]
|
[[projects]]
|
||||||
branch = "master"
|
branch = "master"
|
||||||
name = "github.com/sourcegraph/annotate"
|
name = "github.com/sourcegraph/annotate"
|
||||||
@@ -255,14 +279,20 @@
|
|||||||
[[projects]]
|
[[projects]]
|
||||||
name = "github.com/stretchr/testify"
|
name = "github.com/stretchr/testify"
|
||||||
packages = ["assert","require"]
|
packages = ["assert","require"]
|
||||||
revision = "b91bfb9ebec76498946beb6af7c0230c7cc7ba6c"
|
revision = "12b6f73e6084dad08a7c6e575284b177ecafbc71"
|
||||||
version = "v1.2.0"
|
version = "v1.2.1"
|
||||||
|
|
||||||
|
[[projects]]
|
||||||
|
branch = "master"
|
||||||
|
name = "golang.org/x/crypto"
|
||||||
|
packages = ["ssh/terminal"]
|
||||||
|
revision = "c7dcf104e3a7a1417abc0230cb0d5240d764159d"
|
||||||
|
|
||||||
[[projects]]
|
[[projects]]
|
||||||
branch = "master"
|
branch = "master"
|
||||||
name = "golang.org/x/net"
|
name = "golang.org/x/net"
|
||||||
packages = ["context","html","html/atom"]
|
packages = ["context","html","html/atom"]
|
||||||
revision = "d866cfc389cec985d6fda2859936a575a55a3ab6"
|
revision = "ae89d30ce0c63142b652837da33d782e2b0a9b25"
|
||||||
|
|
||||||
[[projects]]
|
[[projects]]
|
||||||
branch = "master"
|
branch = "master"
|
||||||
@@ -273,18 +303,18 @@
|
|||||||
[[projects]]
|
[[projects]]
|
||||||
branch = "master"
|
branch = "master"
|
||||||
name = "golang.org/x/sys"
|
name = "golang.org/x/sys"
|
||||||
packages = ["unix"]
|
packages = ["unix","windows"]
|
||||||
revision = "28a7276518d399b9634904daad79e18b44d481bc"
|
revision = "c28acc882ebcbfbe8ce9f0f14b9ac26ee138dd51"
|
||||||
|
|
||||||
[[projects]]
|
[[projects]]
|
||||||
branch = "v2"
|
|
||||||
name = "gopkg.in/yaml.v2"
|
name = "gopkg.in/yaml.v2"
|
||||||
packages = ["."]
|
packages = ["."]
|
||||||
revision = "c95af922eae69f190717a0b7148960af8c55a072"
|
revision = "7f97868eec74b32b0982dd158a51a446d1da7eb5"
|
||||||
|
version = "v2.1.1"
|
||||||
|
|
||||||
[solve-meta]
|
[solve-meta]
|
||||||
analyzer-name = "dep"
|
analyzer-name = "dep"
|
||||||
analyzer-version = 1
|
analyzer-version = 1
|
||||||
inputs-digest = "5163286dab1e7d44b868e3b51dd6e9b26a3e0453511a704264e72c518f760856"
|
inputs-digest = "686f5e2aed8b743dfbc53e74a1e48185702059972b7a587db36af49ec0eeea8f"
|
||||||
solver-name = "gps-cdcl"
|
solver-name = "gps-cdcl"
|
||||||
solver-version = 1
|
solver-version = 1
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
[[constraint]]
|
[[constraint]]
|
||||||
name = "github.com/gorilla/mux"
|
name = "github.com/gorilla/mux"
|
||||||
version = "1.6.0"
|
version = "1.6.1"
|
||||||
|
|
||||||
[[constraint]]
|
[[constraint]]
|
||||||
name = "github.com/stretchr/testify"
|
name = "github.com/stretchr/testify"
|
||||||
@@ -16,4 +16,7 @@
|
|||||||
|
|
||||||
[[override]]
|
[[override]]
|
||||||
name = "github.com/satori/go.uuid"
|
name = "github.com/satori/go.uuid"
|
||||||
revision = "36e9d2ebbde5e3f13ab2e25625fd453271d6522e"
|
revision = "36e9d2ebbde5e3f13ab2e25625fd453271d6522e"
|
||||||
|
[[constraint]]
|
||||||
|
name = "github.com/sirupsen/logrus"
|
||||||
|
version = "1.0.5"
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import (
|
|||||||
"net/url"
|
"net/url"
|
||||||
|
|
||||||
"github.com/gobuffalo/buffalo/render"
|
"github.com/gobuffalo/buffalo/render"
|
||||||
|
"github.com/sirupsen/logrus"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Context interface {
|
type Context interface {
|
||||||
@@ -18,4 +19,5 @@ type Context interface {
|
|||||||
Render(status int, rr render.Renderer) error
|
Render(status int, rr render.Renderer) error
|
||||||
Redirect(status int, url string) error
|
Redirect(status int, url string) error
|
||||||
Env() string
|
Env() string
|
||||||
|
Logger() *logrus.Logger
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,12 +9,13 @@ import (
|
|||||||
|
|
||||||
"github.com/gobuffalo/buffalo/render"
|
"github.com/gobuffalo/buffalo/render"
|
||||||
"github.com/gorilla/mux"
|
"github.com/gorilla/mux"
|
||||||
|
"github.com/sirupsen/logrus"
|
||||||
)
|
)
|
||||||
|
|
||||||
func NewContext(r Route, res http.ResponseWriter, req *http.Request, env string) *DefaultContext {
|
func newContext(r Route, res http.ResponseWriter, req *http.Request) *DefaultContext {
|
||||||
data := make(map[string]interface{})
|
data := make(map[string]interface{})
|
||||||
data["path"] = r.Path
|
data["path"] = r.Path
|
||||||
data["env"] = env
|
data["env"] = r.Env
|
||||||
|
|
||||||
params := req.URL.Query()
|
params := req.URL.Query()
|
||||||
vars := mux.Vars(req)
|
vars := mux.Vars(req)
|
||||||
@@ -27,7 +28,7 @@ func NewContext(r Route, res http.ResponseWriter, req *http.Request, env string)
|
|||||||
request: req,
|
request: req,
|
||||||
params: params,
|
params: params,
|
||||||
data: data,
|
data: data,
|
||||||
env: env,
|
env: r.Env,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -39,6 +40,7 @@ type DefaultContext struct {
|
|||||||
contentType string
|
contentType string
|
||||||
data map[string]interface{}
|
data map[string]interface{}
|
||||||
env string
|
env string
|
||||||
|
logger *logrus.Logger
|
||||||
}
|
}
|
||||||
|
|
||||||
// Response returns the original Response for the request.
|
// Response returns the original Response for the request.
|
||||||
@@ -118,3 +120,7 @@ func (d *DefaultContext) Redirect(status int, url string) error {
|
|||||||
func (d *DefaultContext) Env() string {
|
func (d *DefaultContext) Env() string {
|
||||||
return d.env
|
return d.env
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (d *DefaultContext) Logger() *logrus.Logger {
|
||||||
|
return d.logger
|
||||||
|
}
|
||||||
|
|||||||
@@ -6,24 +6,20 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
func NewRouter() Router {
|
func NewRouter(opts ...RouterOption) Router {
|
||||||
return &DefaultRouter{}
|
router := &DefaultRouter{}
|
||||||
|
router.Options = &RouterOptions{}
|
||||||
|
for _, opt := range opts {
|
||||||
|
opt(router.Options)
|
||||||
|
}
|
||||||
|
|
||||||
|
return router
|
||||||
}
|
}
|
||||||
|
|
||||||
type DefaultRouter struct {
|
type DefaultRouter struct {
|
||||||
Routes []*Route
|
Routes []*Route
|
||||||
StaticRoutes []*StaticRoute
|
StaticRoutes []*StaticRoute
|
||||||
|
Options *RouterOptions
|
||||||
prefix string
|
|
||||||
env string
|
|
||||||
}
|
|
||||||
|
|
||||||
func (r *DefaultRouter) Prefix(path string) {
|
|
||||||
r.prefix = path
|
|
||||||
}
|
|
||||||
|
|
||||||
func (r *DefaultRouter) SetEnv(env string) {
|
|
||||||
r.env = env
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *DefaultRouter) GET(path string, h Handler) {
|
func (r *DefaultRouter) GET(path string, h Handler) {
|
||||||
@@ -53,15 +49,45 @@ func (r *DefaultRouter) GetStaticRoutes() []*StaticRoute {
|
|||||||
return r.StaticRoutes
|
return r.StaticRoutes
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (r *DefaultRouter) GetOptions() *RouterOptions {
|
||||||
|
return r.Options
|
||||||
|
}
|
||||||
|
|
||||||
func (r *DefaultRouter) addRoute(m, p string, h Handler) {
|
func (r *DefaultRouter) addRoute(m, p string, h Handler) {
|
||||||
if r.prefix != "" {
|
if r.Options.Prefix != "" {
|
||||||
p = fmt.Sprintf("/%s/%s", strings.Trim(r.prefix, "/"), strings.Trim(p, "/"))
|
p = fmt.Sprintf("/%s/%s", strings.Trim(r.Options.Prefix, "/"), strings.Trim(p, "/"))
|
||||||
}
|
}
|
||||||
|
|
||||||
r.Routes = append(r.Routes, &Route{
|
r.Routes = append(r.Routes, &Route{
|
||||||
Method: m,
|
Method: m,
|
||||||
Path: p,
|
Path: p,
|
||||||
Handler: h,
|
Handler: h,
|
||||||
Env: r.env,
|
Env: r.Options.Env,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type RouterOptions struct {
|
||||||
|
Env string
|
||||||
|
Prefix string
|
||||||
|
MiddlewareStack MiddlewareStack
|
||||||
|
}
|
||||||
|
|
||||||
|
type RouterOption func(*RouterOptions)
|
||||||
|
|
||||||
|
func RouterEnv(env string) RouterOption {
|
||||||
|
return func(o *RouterOptions) {
|
||||||
|
o.Env = env
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func RouterPrefix(p string) RouterOption {
|
||||||
|
return func(o *RouterOptions) {
|
||||||
|
o.Prefix = p
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func RouterMiddleware(ms MiddlewareStack) RouterOption {
|
||||||
|
return func(o *RouterOptions) {
|
||||||
|
o.MiddlewareStack = ms
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -37,8 +37,7 @@ func Test_Static_Route_Creation(t *testing.T) {
|
|||||||
func Test_Prefix_Route_Creation(t *testing.T) {
|
func Test_Prefix_Route_Creation(t *testing.T) {
|
||||||
r := require.New(t)
|
r := require.New(t)
|
||||||
|
|
||||||
router := tuu.NewRouter()
|
router := tuu.NewRouter(tuu.RouterPrefix("/prefix"))
|
||||||
router.Prefix("/prefix/")
|
|
||||||
|
|
||||||
router.GET("/home", func(ctx tuu.Context) error { return nil })
|
router.GET("/home", func(ctx tuu.Context) error { return nil })
|
||||||
router.GET("/home/about-us/", func(ctx tuu.Context) error { return nil })
|
router.GET("/home/about-us/", func(ctx tuu.Context) error { return nil })
|
||||||
|
|||||||
@@ -11,8 +11,7 @@ func main() {
|
|||||||
// The render we currently use is the one built by gobuffalo.
|
// The render we currently use is the one built by gobuffalo.
|
||||||
r := render.New(render.Options{})
|
r := render.New(render.Options{})
|
||||||
|
|
||||||
router := tuu.NewRouter()
|
router := tuu.NewRouter(tuu.RouterEnv("env"))
|
||||||
router.SetEnv("dev")
|
|
||||||
router.GET("/home", func(ctx tuu.Context) error {
|
router.GET("/home", func(ctx tuu.Context) error {
|
||||||
ctx.Set("template_data", "some value")
|
ctx.Set("template_data", "some value")
|
||||||
|
|
||||||
@@ -28,13 +27,12 @@ func main() {
|
|||||||
return nil
|
return nil
|
||||||
})
|
})
|
||||||
|
|
||||||
app := tuu.New(router)
|
app := tuu.New(router, tuu.Config{
|
||||||
err := app.Serve(tuu.Config{
|
|
||||||
IPAddr: "127.0.0.1",
|
IPAddr: "127.0.0.1",
|
||||||
Port: "8080",
|
Port: "8080",
|
||||||
Env: "dev",
|
Env: "dev",
|
||||||
}
|
})
|
||||||
|
err := app.Serve()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
|
|||||||
28
middleware.go
Normal file
28
middleware.go
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
package tuu
|
||||||
|
|
||||||
|
type Middleware func(Handler) Handler
|
||||||
|
|
||||||
|
type MiddlewareStack struct {
|
||||||
|
stack []Middleware
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *MiddlewareStack) Use(mw ...Middleware) {
|
||||||
|
m.stack = append(m.stack, mw...)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *MiddlewareStack) Get() []Middleware {
|
||||||
|
return m.stack
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *MiddlewareStack) handler(r *Route) Handler {
|
||||||
|
handler := r.Handler
|
||||||
|
if len(m.stack) == 0 {
|
||||||
|
return handler
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, mw := range m.stack {
|
||||||
|
handler = mw(handler)
|
||||||
|
}
|
||||||
|
|
||||||
|
return handler
|
||||||
|
}
|
||||||
12
middleware/logger.go
Normal file
12
middleware/logger.go
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
package middleware
|
||||||
|
|
||||||
|
import "github.com/lukerodham/tuu"
|
||||||
|
|
||||||
|
// RequestLogger is a default/example implementation of how a logging middleware would be implemented.
|
||||||
|
func RequestLogger(next tuu.Handler) tuu.Handler {
|
||||||
|
return func(c tuu.Context) error {
|
||||||
|
c.Logger().WithField("url", c.Value("path")).Debug("New request")
|
||||||
|
|
||||||
|
return next(c)
|
||||||
|
}
|
||||||
|
}
|
||||||
10
route.go
10
route.go
@@ -3,8 +3,6 @@ package tuu
|
|||||||
import (
|
import (
|
||||||
"net/http"
|
"net/http"
|
||||||
|
|
||||||
"github.com/gorilla/mux"
|
|
||||||
|
|
||||||
gcontext "github.com/gorilla/context"
|
gcontext "github.com/gorilla/context"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -12,16 +10,18 @@ type Route struct {
|
|||||||
Method string
|
Method string
|
||||||
Path string
|
Path string
|
||||||
Handler Handler
|
Handler Handler
|
||||||
MuxHandler mux.Route
|
|
||||||
Env string
|
Env string
|
||||||
|
Middleware MiddlewareStack
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *Route) ServeHTTP(res http.ResponseWriter, req *http.Request) {
|
func (r *Route) ServeHTTP(res http.ResponseWriter, req *http.Request) {
|
||||||
defer gcontext.Clear(req)
|
defer gcontext.Clear(req)
|
||||||
|
|
||||||
c := NewContext(*r, res, req, r.Env)
|
c := newContext(*r, res, req)
|
||||||
|
|
||||||
if err := r.Handler(c); err != nil {
|
err := r.Middleware.handler(r)(c)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
c.Response().WriteHeader(500)
|
c.Response().WriteHeader(500)
|
||||||
c.Response().Write([]byte(err.Error()))
|
c.Response().Write([]byte(err.Error()))
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,9 +5,6 @@ import "net/http"
|
|||||||
type Handler func(Context) error
|
type Handler func(Context) error
|
||||||
|
|
||||||
type Router interface {
|
type Router interface {
|
||||||
Prefix(path string)
|
|
||||||
SetEnv(env string)
|
|
||||||
|
|
||||||
GET(path string, h Handler)
|
GET(path string, h Handler)
|
||||||
POST(path string, h Handler)
|
POST(path string, h Handler)
|
||||||
Static(path string, root http.FileSystem)
|
Static(path string, root http.FileSystem)
|
||||||
@@ -15,4 +12,5 @@ type Router interface {
|
|||||||
|
|
||||||
GetRoutes() []*Route
|
GetRoutes() []*Route
|
||||||
GetStaticRoutes() []*StaticRoute
|
GetStaticRoutes() []*StaticRoute
|
||||||
|
GetOptions() *RouterOptions
|
||||||
}
|
}
|
||||||
|
|||||||
11
tuu.go
11
tuu.go
@@ -17,16 +17,17 @@ type Config struct {
|
|||||||
Env string
|
Env string
|
||||||
}
|
}
|
||||||
|
|
||||||
func New(r Router) *App {
|
func New(r Router, cfg Config) *App {
|
||||||
return &App{router: r}
|
return &App{router: r, cfg: cfg}
|
||||||
}
|
}
|
||||||
|
|
||||||
type App struct {
|
type App struct {
|
||||||
router Router
|
router Router
|
||||||
|
cfg Config
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) Serve(cfg Config) error {
|
func (a *App) Serve() error {
|
||||||
log.Printf("http server running @ http://%s:%s", cfg.IPAddr, cfg.Port)
|
log.Printf("http server running @ http://%s:%s", a.cfg.IPAddr, a.cfg.Port)
|
||||||
|
|
||||||
r := mux.NewRouter()
|
r := mux.NewRouter()
|
||||||
|
|
||||||
@@ -39,7 +40,7 @@ func (a *App) Serve(cfg Config) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
server := http.Server{
|
server := http.Server{
|
||||||
Addr: fmt.Sprintf("%s:%s", cfg.IPAddr, cfg.Port),
|
Addr: fmt.Sprintf("%s:%s", a.cfg.IPAddr, a.cfg.Port),
|
||||||
Handler: r,
|
Handler: r,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user