| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 | package mainimport (	"context"	"flag"	"fmt"	"github.com/longjoy/micro-go-course/section31/config"	"github.com/longjoy/micro-go-course/section31/endpoint"	"github.com/longjoy/micro-go-course/section31/model"	"github.com/longjoy/micro-go-course/section31/service"	"github.com/longjoy/micro-go-course/section31/transport"	"net/http"	"os"	"os/signal"	"strconv"	"syscall")func main() {	var (		servicePort = flag.Int("service.port", 10098, "service port")	)	flag.Parse()	ctx := context.Background()	errChan := make(chan error)	var tokenService service.TokenService	var tokenGranter service.TokenGranter	var tokenEnhancer service.TokenEnhancer	var tokenStore service.TokenStore	var userDetailsService service.UserDetailsService	var clientDetailsService service.ClientDetailsService	var srv service.Service	tokenEnhancer = service.NewJwtTokenEnhancer("secret")	tokenStore = service.NewJwtTokenStore(tokenEnhancer.(*service.JwtTokenEnhancer))	tokenService = service.NewTokenService(tokenStore, tokenEnhancer)	userDetailsService = service.NewInMemoryUserDetailsService([] *model.UserDetails{{		Username:    "aoho",		Password:    "123456",		UserId:      1,		Authorities: []string{"Simple"},	},		{			Username:    "admin",			Password:    "123456",			UserId:      1,			Authorities: []string{"Admin"},		}})	clientDetailsService = service.NewInMemoryClientDetailService([] *model.ClientDetails{{		"clientId",		"clientSecret",		1800,		18000,		"http://127.0.0.1",		[] string{"password", "refresh_token"},	}})	tokenGranter = service.NewComposeTokenGranter(map[string]service.TokenGranter{		"password": service.NewUsernamePasswordTokenGranter("password", userDetailsService,  tokenService),		"refresh_token": service.NewRefreshGranter("refresh_token", userDetailsService,  tokenService),	})	tokenEndpoint := endpoint.MakeTokenEndpoint(tokenGranter, clientDetailsService)	tokenEndpoint = endpoint.MakeClientAuthorizationMiddleware(config.KitLogger)(tokenEndpoint)	checkTokenEndpoint := endpoint.MakeCheckTokenEndpoint(tokenService)	checkTokenEndpoint = endpoint.MakeClientAuthorizationMiddleware(config.KitLogger)(checkTokenEndpoint)	srv = service.NewCommonService()	//创建健康检查的Endpoint	healthEndpoint := endpoint.MakeHealthCheckEndpoint(srv)	endpts := endpoint.OAuth2Endpoints{		TokenEndpoint:tokenEndpoint,		CheckTokenEndpoint:checkTokenEndpoint,		HealthCheckEndpoint: healthEndpoint,	}	//创建http.Handler	r := transport.MakeHttpHandler(ctx, endpts, tokenService, clientDetailsService, config.KitLogger)	go func() {		config.Logger.Println("Http Server start at port:" + strconv.Itoa(*servicePort))		handler := r		errChan <- http.ListenAndServe(":"  + strconv.Itoa(*servicePort), handler)	}()	go func() {		c := make(chan os.Signal, 1)		signal.Notify(c, syscall.SIGINT, syscall.SIGTERM)		errChan <- fmt.Errorf("%s", <-c)	}()	error := <-errChan	config.Logger.Println(error)}
 |