1
0
mirror of https://github.com/kataras/iris.git synced 2025-12-21 11:57:02 +00:00
Gerasimos (Makis) Maropoulos
2020-09-10 11:24:23 +03:00
parent 333be428c4
commit cf0338d342
4 changed files with 110 additions and 40 deletions

View File

@@ -4,16 +4,14 @@ import (
"time"
"github.com/kataras/iris/v12"
"github.com/kataras/iris/v12/cache"
"github.com/kataras/iris/v12/middleware/basicauth"
)
var markdownContents = []byte(`## Hello Markdown
This is a sample of Markdown contents
Features
--------
@@ -23,36 +21,7 @@ All features of Sundown are supported, including:
the --tidy option. Without --tidy, the differences are
mostly in whitespace and entity escaping, where blackfriday is
more consistent and cleaner.
* **Common extensions**, including table support, fenced code
blocks, autolinks, strikethroughs, non-strict emphasis, etc.
* **Safety**. Blackfriday is paranoid when parsing, making it safe
to feed untrusted user input without fear of bad things
happening. The test suite stress tests this and there are no
known inputs that make it crash. If you find one, please let me
know and send me the input that does it.
NOTE: "safety" in this context means *runtime safety only*. In order to
protect yourself against JavaScript injection in untrusted content, see
[this example](https://github.com/russross/blackfriday#sanitize-untrusted-content).
* **Fast processing**. It is fast enough to render on-demand in
most web applications without having to cache the output.
* **Routine safety**. You can run multiple parsers in different
goroutines without ill effect. There is no dependence on global
shared state.
* **Minimal dependencies**. Blackfriday only depends on standard
library packages in Go. The source code is pretty
self-contained, so it is easy to add to any project, including
Google App Engine projects.
* **Standards compliant**. Output successfully validates using the
W3C validation tool for HTML 4.01 and XHTML 1.0 Transitional.
[this is a link](https://github.com/kataras/iris) `)
`)
// Cache should not be used on handlers that contain dynamic data.
// Cache is a good and a must-feature on static content, i.e "about page" or for a whole blog site.
@@ -63,6 +32,30 @@ func main() {
// saves its content on the first request and serves it instead of re-calculating the content.
// After 10 seconds it will be cleared and reset.
pages := app.Party("/pages")
pages.Use(cache.Handler(10 * time.Second)) // Per Party.
pages.Get("/", pagesIndex)
pages.Post("/", pagesIndexPost)
// Note: on authenticated requests
// the cache middleare does not run at all (see iris/cache/ruleset).
auth := basicauth.Default(map[string]string{
"admin": "admin",
})
app.Get("/protected", auth, cache.Handler(5*time.Second), protected)
// Set custom cache key/identifier,
// for the sake of the example
// we will SHARE the keys on both GET and POST routes
// so the first one is executed that's the body
// for both of the routes. Please don't do that
// on production, this is just an example.
custom := app.Party("/custom")
custom.Use(cache.WithKey("shared"))
custom.Use(cache.Handler(10 * time.Second))
custom.Get("/", customIndex)
custom.Post("/", customIndexPost)
app.Listen(":8080")
}
@@ -74,7 +67,32 @@ func writeMarkdown(ctx iris.Context) {
ctx.Markdown(markdownContents)
}
func pagesIndex(ctx iris.Context) {
println("Handler executed. Content refreshed.")
ctx.WriteString("GET: hello")
}
func pagesIndexPost(ctx iris.Context) {
println("Handler executed. Content refreshed.")
ctx.WriteString("POST: hello")
}
func protected(ctx iris.Context) {
username, _, _ := ctx.Request().BasicAuth()
ctx.Writef("Hello, %s!", username)
}
func customIndex(ctx iris.Context) {
ctx.WriteString("Contents from GET custom index")
}
func customIndexPost(ctx iris.Context) {
ctx.WriteString("Contents from POST custom index")
}
/* Note that `HandleDir` does use the browser's disk caching by-default
therefore, register the cache handler AFTER any HandleDir calls,
for a faster solution that server doesn't need to keep track of the response
navigate to https://github.com/kataras/iris/blob/master/_examples/cache/client-side/main.go */
navigate to https://github.com/kataras/iris/blob/master/_examples/cache/client-side/main.go.
The `HandleDir` has its own cache mechanism, read the 'file-server' examples. */