本文整理汇总了Golang中github.com/webx-top/echo.Context类的典型用法代码示例。如果您正苦于以下问题:Golang Context类的具体用法?Golang Context怎么用?Golang Context使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了Context类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: Expired
func (c *Config) Expired(rule *Rule, ctx echo.Context, saveFile string) (int64, bool) {
var expired int64
if rule.ExpireTime > 0 {
expired = int64(rule.ExpireTime)
} else if rule.ExpireFunc != nil {
return rule.ExpireFunc(saveFile, ctx)
} else {
switch c.HtmlCacheTime.(type) {
case int:
expired = int64(c.HtmlCacheTime.(int))
case int64:
expired = c.HtmlCacheTime.(int64)
case func(string, echo.Context) (int64, bool):
fn := c.HtmlCacheTime.(func(string, echo.Context) (int64, bool))
return fn(saveFile, ctx)
}
}
mtime, err := com.FileMTime(saveFile)
if err != nil {
ctx.Object().Echo().Logger().Debug(err)
}
if mtime == 0 {
return mtime, true
}
if time.Now().Local().Unix() > mtime+expired {
return mtime, true
}
return mtime, false
}
示例2: OverrideRequestMethod
// OverrideRequestMethod overrides the http
// request's method with the specified method.
func OverrideRequestMethod(c echo.Context, method string) error {
if !isValidOverrideMethod(method) {
return ErrInvalidOverrideMethod
}
c.Request().Header().Set(HeaderHTTPMethodOverride, method)
return nil
}
示例3: sleep
func sleep(e echo.Context, d time.Duration) {
w := e.Response()
var clientGone <-chan bool
if cn, ok := w.(http.CloseNotifier); ok {
clientGone = cn.CloseNotify()
}
select {
case <-time.After(d):
case <-clientGone:
}
}
示例4: Write
func (c *Config) Write(b []byte, ctx echo.Context) bool {
if !c.HtmlCacheOn || ctx.Request().Method() != `GET` || X.X(ctx).Code != http.StatusOK {
return false
}
tmpl := X.MustString(ctx, `webx:saveHtmlFile`)
if tmpl == `` {
return false
}
if err := com.WriteFile(tmpl, b); err != nil {
ctx.Object().Echo().Logger().Debug(err)
}
return true
}
示例5: HttpCache
func HttpCache(ctx echo.Context, eTag interface{}, etagValidator func(oldEtag, newEtag string) bool) bool {
var etag string
if eTag == nil {
etag = fmt.Sprintf(`%v`, time.Now().UTC().Unix())
} else {
etag = fmt.Sprintf(`%v`, eTag)
}
resp := ctx.Response()
//resp.Header().Set(`Connection`, `keep-alive`)
resp.Header().Set(`X-Cache`, `HIT from Webx-Page-Cache`)
if inm := ctx.Request().Header().Get("If-None-Match"); inm != `` {
var valid bool
if etagValidator != nil {
valid = etagValidator(inm, etag)
} else {
valid = inm == etag
}
if valid {
resp.Header().Del(`Content-Type`)
resp.Header().Del(`Content-Length`)
resp.WriteHeader(http.StatusNotModified)
ctx.Object().Echo().Logger().Debugf(`%v is not modified.`, ctx.Path())
return true
}
}
resp.Header().Set(`Etag`, etag)
resp.Header().Set(`Cache-Control`, `public,max-age=1`)
return false
}
示例6: Index
// Index responds with the pprof-formatted profile named by the request.
// For example, "/debug/pprof/heap" serves the "heap" profile.
// Index responds to a request for "/debug/pprof/" with an HTML page
// listing the available profiles.
func Index(e echo.Context) {
r := e.Request()
w := e.Response()
if strings.HasPrefix(r.URL().Path(), "/debug/pprof/") {
name := strings.TrimPrefix(r.URL().Path(), "/debug/pprof/")
if name != "" {
handler(name).ServeHTTP(e)
return
}
}
profiles := pprof.Profiles()
if err := indexTmpl.Execute(w, profiles); err != nil {
log.Print(err)
}
}
示例7: Symbol
// Symbol looks up the program counters listed in the request,
// responding with a table mapping program counters to function names.
// The package initialization registers it as /debug/pprof/symbol.
func Symbol(e echo.Context) {
w := e.Response()
r := e.Request()
w.Header().Set("Content-Type", "text/plain; charset=utf-8")
// We have to read the whole POST body before
// writing any output. Buffer the output here.
var buf bytes.Buffer
// We don't know how many symbols we have, but we
// do have symbol information. Pprof only cares whether
// this number is 0 (no symbols available) or > 0.
fmt.Fprintf(&buf, "num_symbols: 1\n")
var b *bufio.Reader
if r.Method() == "POST" {
b = bufio.NewReader(r.Body())
} else {
b = bufio.NewReader(strings.NewReader(r.URL().RawQuery()))
}
for {
word, err := b.ReadSlice('+')
if err == nil {
word = word[0 : len(word)-1] // trim +
}
pc, _ := strconv.ParseUint(string(word), 0, 64)
if pc != 0 {
f := runtime.FuncForPC(uintptr(pc))
if f != nil {
fmt.Fprintf(&buf, "%#x %s\n", pc, f.Name())
}
}
// Wait until here to check for err; the last
// symbol will have an err because it doesn't end in +.
if err != nil {
if err != io.EOF {
fmt.Fprintf(&buf, "reading request: %v\n", err)
}
break
}
}
w.Write(buf.Bytes())
}
示例8: ServeHTTP
func (name handler) ServeHTTP(e echo.Context) {
w := e.Response()
r := e.Request()
w.Header().Set("Content-Type", "text/plain; charset=utf-8")
debug, _ := strconv.Atoi(r.FormValue("debug"))
p := pprof.Lookup(string(name))
if p == nil {
w.WriteHeader(404)
fmt.Fprintf(w, "Unknown profile: %s\n", name)
return
}
gc, _ := strconv.Atoi(r.FormValue("gc"))
if name == "heap" && gc > 0 {
runtime.GC()
}
p.WriteTo(w, debug)
return
}
示例9: Trace
// Trace responds with the execution trace in binary form.
// Tracing lasts for duration specified in seconds GET parameter, or for 1 second if not specified.
// The package initialization registers it as /debug/pprof/trace.
func Trace(e echo.Context) {
w := e.Response()
r := e.Request()
sec, _ := strconv.ParseInt(r.FormValue("seconds"), 10, 64)
if sec == 0 {
sec = 1
}
// Set Content Type assuming trace.Start will work,
// because if it does it starts writing.
w.Header().Set("Content-Type", "application/octet-stream")
if err := trace.Start(w); err != nil {
// trace.Start failed, so no writes yet.
// Can change header back to text content and send error code.
w.Header().Set("Content-Type", "text/plain; charset=utf-8")
w.WriteHeader(http.StatusInternalServerError)
fmt.Fprintf(w, "Could not enable tracing: %s\n", err)
return
}
sleep(e, time.Duration(sec)*time.Second)
trace.Stop()
}
示例10: Register
func (c *Xsrf) Register(ctx echo.Context) {
ctx.SetFunc("XsrfForm", func() template.HTML {
return c.Form(ctx)
})
ctx.SetFunc("XsrfValue", func() string {
return c.Value(ctx)
})
ctx.SetFunc("XsrfName", func() string {
return c.FieldName
})
}
示例11: MustInt64
func MustInt64(c echo.Context, k string) (r int64) {
if v, ok := c.Get(k).(int64); ok {
r = v
}
return
}
示例12: MustBool
func MustBool(c echo.Context, k string) (r bool) {
if v, ok := c.Get(k).(bool); ok {
r = v
}
return
}
示例13: MustString
func MustString(c echo.Context, k string) (r string) {
if v, ok := c.Get(k).(string); ok {
r = v
}
return
}
示例14: Ignore
func (j *JWT) Ignore(on bool, c echo.Context) {
c.Set(`webx:ignoreJwt`, on)
}
示例15: Claims
func (j *JWT) Claims(c echo.Context) map[string]interface{} {
r, _ := c.Get(`webx:jwtClaims`).(map[string]interface{})
return r
}