context

package module
v0.0.22 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 30, 2024 License: MIT Imports: 8 Imported by: 0

README

context

一个轻量却强大的上下文管理器,一个请求会生成一个context,贯穿整个请求,context记录原始请求上下文,请求时间,客户端信息,权限校验信息,及负责判断是否内部调用, 及附带唯一traceId的日志记录器

支持http及fasthttp,并支持自定义的请求类型 context

usage

Basic

new
import (
	stdcontext "context"
	"github.com/hopeio/context"
)

 ctx:= context.NewContext(stdcontext.Background())
wrap and unwrap
stdctx = ctx.Wrapper()
ctx = context.FromContextValue(stdctx)

request context

new
import (
    "github.com/hopeio/context/httpctx"
)
func Handle(w http.ResponseWriter, r *http.Request) {
 ctx:= httpctx.FromRequest(httpctx.RequestCtx{r,w})
}

wrap and unwrap
func Middleware(w http.ResponseWriter, r *http.Request) {
    ctx:= httpctx.FromRequest(httpctx.RequestCtx{r,w})
    r.WithContext(ctx.Wrapper())
}
func Handle(w http.ResponseWriter, r *http.Request) {
    reqctx := httpctx.FromContextValue(r.Context())
}

auth 示例

import (
  "errors"
  "encoding/json"
  "strings"
  "github.com/golang-jwt/jwt/v5"
  "github.com/hopeio/context/httpctx"
)
var tokenSecret = []byte("xxx")
type AuthInfo struct {
	Id uint64 `json:"id"`
}

type Authorization struct {
    *AuthInfo `json:"auth"`
    jwt.RegisteredClaims
    AuthInfoRaw string `json:"-"`
}

func (x *Authorization) Validate() error {
    return nil
}

func (x *Authorization) GenerateToken(secret []byte) (string, error) {
    tokenClaims := jwt.NewWithClaims(jwt.SigningMethodHS256, x)
    token, err := tokenClaims.SignedString(secret)
    return token, err
}

func (x *Authorization) ParseToken(token string, secret []byte) error {
    _, err := jwti.ParseToken(x, token, secret)
    if err != nil {
        return err
    }
    x.ID = x.AuthInfo.IdStr()
    authBytes, _ := json.Marshal(x.AuthInfo)
    x.AuthInfoRaw = string(authBytes)
    return nil
}

func GetAuth(ctx *httpctx.Context) (*AuthInfo, error) {
    signature := ctx.Token[strings.LastIndexByte(ctx.Token, '.')+1:]
	
    authorization := Authorization{AuthInfo: &AuthInfo{}}
    if err := authorization.ParseToken(ctx.Token, tokenSecret); err != nil {
        return nil, err
    }
    authInfo := authorization.AuthInfo
    ctx.AuthID = authInfo.IdStr()
    ctx.AuthInfo = authInfo
    ctx.AuthInfoRaw = authorization.AuthInfoRaw
	
    return authInfo, nil
}

Documentation

Index

Constants

View Source
const (
	KindKey = attribute.Key("context.key")
)

Variables

This section is empty.

Functions

func Meter

func Meter() metric.Meter

func SetMeter

func SetMeter(m metric.Meter)

func SetTracer

func SetTracer(t trace.Tracer)

func StartSpan

func StartSpan(ctx context.Context, name string, o ...trace.SpanStartOption) (context.Context, trace.Span)

func Tracer

func Tracer() trace.Tracer

func WrapperKey

func WrapperKey() ctxKey

Types

type Context

type Context struct {
	TraceID string
	// contains filtered or unexported fields
}

func FromContextValue

func FromContextValue(ctx context.Context) *Context

func NewContext

func NewContext(ctx context.Context) *Context

func (*Context) BaseContext

func (c *Context) BaseContext() context.Context

func (*Context) Error

func (c *Context) Error(args ...interface{})

func (*Context) ErrorLog

func (c *Context) ErrorLog(err, originErr error, funcName string) error

func (*Context) HandleError

func (c *Context) HandleError(err error)

func (*Context) RootSpan

func (c *Context) RootSpan() trace.Span

func (*Context) SetBaseContext

func (c *Context) SetBaseContext(ctx context.Context)

func (*Context) StartSpan

func (c *Context) StartSpan(name string, o ...trace.SpanStartOption) trace.Span

func (*Context) StartSpanEnd

func (c *Context) StartSpanEnd(name string, o ...trace.SpanStartOption) func(options ...trace.SpanEndOption)

func (*Context) StartSpanX

func (c *Context) StartSpanX(name string, o ...trace.SpanStartOption) (*Context, trace.Span)

func (*Context) Wrapper

func (c *Context) Wrapper() context.Context

type ValueContext

type ValueContext[V any] struct {
	Context
	Value V
}

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL