123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146 |
- package endpoint
- import (
- "context"
- "errors"
- "github.com/go-kit/kit/endpoint"
- "github.com/go-kit/kit/log"
- . "github.com/longjoy/micro-go-course/section32/model"
- "github.com/longjoy/micro-go-course/section32/service"
- )
- // CalculateEndpoint define endpoint
- type OAuth2Endpoints struct {
- IndexEndpoint endpoint.Endpoint
- SampleEndpoint endpoint.Endpoint
- AdminEndpoint endpoint.Endpoint
- HealthCheckEndpoint endpoint.Endpoint
- }
- func MakeOAuth2AuthorizationMiddleware(logger log.Logger) endpoint.Middleware {
- return func(next endpoint.Endpoint) endpoint.Endpoint {
- return func(ctx context.Context, request interface{}) (response interface{}, err error) {
- if err, ok := ctx.Value(OAuth2ErrorKey).(error); ok{
- return nil, err
- }
- if _, ok := ctx.Value(OAuth2DetailsKey).(*OAuth2Details); !ok{
- return nil, ErrInvalidUserRequest
- }
- return next(ctx, request)
- }
- }
- }
- func MakeAuthorityAuthorizationMiddleware(authority string, logger log.Logger) endpoint.Middleware {
- return func(next endpoint.Endpoint) endpoint.Endpoint {
- return func(ctx context.Context, request interface{}) (response interface{}, err error) {
- if err, ok := ctx.Value(OAuth2ErrorKey).(error); ok{
- return nil, err
- }
- if details, ok := ctx.Value(OAuth2DetailsKey).(*OAuth2Details); !ok{
- return nil, ErrInvalidClientRequest
- }else {
- for _, value := range details.User.Authorities{
- if value == authority{
- return next(ctx, request)
- }
- }
- return nil, ErrNotPermit
- }
- }
- }
- }
- const (
- OAuth2DetailsKey = "OAuth2Details"
- OAuth2ErrorKey = "OAuth2Error"
- )
- var (
- ErrInvalidClientRequest = errors.New("invalid client message")
- ErrInvalidUserRequest = errors.New("invalid user message")
- ErrNotPermit = errors.New("not permit")
- )
- type IndexRequest struct {
- }
- type IndexResponse struct {
- Result string `json:"result"`
- Error string `json:"error"`
- }
- type SampleRequest struct {
- }
- type SampleResponse struct {
- Result string `json:"result"`
- Error string `json:"error"`
- }
- type AdminRequest struct {
- }
- type AdminResponse struct {
- Result string `json:"result"`
- Error string `json:"error"`
- }
- func MakeIndexEndpoint(svc service.Service) endpoint.Endpoint {
- return func(ctx context.Context, request interface{}) (response interface{}, err error) {
- result := svc.Index()
- return &SampleResponse{
- Result:result,
- }, nil
- }
- }
- func MakeSampleEndpoint(svc service.Service) endpoint.Endpoint {
- return func(ctx context.Context, request interface{}) (response interface{}, err error) {
- result := svc.Sample(ctx.Value(OAuth2DetailsKey).(*OAuth2Details).User.Username)
- return &SampleResponse{
- Result:result,
- }, nil
- }
- }
- func MakeAdminEndpoint(svc service.Service) endpoint.Endpoint {
- return func(ctx context.Context, request interface{}) (response interface{}, err error) {
- result := svc.Admin(ctx.Value(OAuth2DetailsKey).(*OAuth2Details).User.Username)
- return &AdminResponse{
- Result:result,
- }, nil
- }
- }
- // HealthRequest 健康检查请求结构
- type HealthRequest struct{}
- // HealthResponse 健康检查响应结构
- type HealthResponse struct {
- Status bool `json:"status"`
- }
- // MakeHealthCheckEndpoint 创建健康检查Endpoint
- func MakeHealthCheckEndpoint(svc service.Service) endpoint.Endpoint {
- return func(ctx context.Context, request interface{}) (response interface{}, err error) {
- status := svc.HealthCheck()
- return HealthResponse{
- Status:status,
- }, nil
- }
- }
|