fix: gorm fields && syncUserinfo dubplicate insertion
This commit is contained in:
113
cmd/mp-auth-http/main.go
Normal file
113
cmd/mp-auth-http/main.go
Normal file
@@ -0,0 +1,113 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"flag"
|
||||
"net/http"
|
||||
|
||||
pb "git.esin.io/lab/weixin/protobuf/clientapi/mp/auth"
|
||||
"google.golang.org/grpc"
|
||||
)
|
||||
|
||||
var (
|
||||
lisPort string
|
||||
authServerEndpoint string
|
||||
)
|
||||
|
||||
func init() {
|
||||
flag.StringVar(&lisPort, "port", "3000", "server listen port")
|
||||
flag.StringVar(&authServerEndpoint, "auth.server", "localhost:13721", "auth grpc server endpoint")
|
||||
}
|
||||
|
||||
func main() {
|
||||
flag.Parse()
|
||||
|
||||
if err := run(); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
|
||||
func run() error {
|
||||
grpcDialOpts := []grpc.DialOption{
|
||||
grpc.WithInsecure(),
|
||||
grpc.WithBlock(),
|
||||
}
|
||||
grpcConn, err := grpc.Dial(authServerEndpoint, grpcDialOpts...)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
h := NewHandler(pb.NewAuthServiceClient(grpcConn))
|
||||
|
||||
http.HandleFunc("/url", h.getCodeURL)
|
||||
http.HandleFunc("/token", h.exchangeToken)
|
||||
http.HandleFunc("/userinfo", h.getUserinfo)
|
||||
http.HandleFunc("/userinfo/sync", h.syncUserinfo)
|
||||
|
||||
return http.ListenAndServe(":"+lisPort, nil)
|
||||
}
|
||||
|
||||
type restHandler struct {
|
||||
client pb.AuthServiceClient
|
||||
}
|
||||
|
||||
func NewHandler(client pb.AuthServiceClient) *restHandler {
|
||||
return &restHandler{
|
||||
client: client,
|
||||
}
|
||||
}
|
||||
|
||||
func (h restHandler) getCodeURL(w http.ResponseWriter, r *http.Request) {
|
||||
resp, err := h.client.GetCodeURL(r.Context(), &pb.GetCodeURLRequest{
|
||||
RedirectUrl: r.FormValue("redirect_url"),
|
||||
State: r.FormValue("state"),
|
||||
Scope: pb.GetCodeURLRequest_snsapi_base,
|
||||
})
|
||||
if err != nil {
|
||||
http.Error(w, err.Error(), http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
encoder := json.NewEncoder(w)
|
||||
encoder.SetEscapeHTML(false)
|
||||
encoder.Encode(resp)
|
||||
}
|
||||
|
||||
func (h restHandler) exchangeToken(w http.ResponseWriter, r *http.Request) {
|
||||
code := r.FormValue("code")
|
||||
|
||||
resp, err := h.client.ExchangeToken(r.Context(), &pb.ExchangeTokenRequest{
|
||||
Code: code,
|
||||
})
|
||||
if err != nil {
|
||||
http.Error(w, err.Error(), http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
|
||||
json.NewEncoder(w).Encode(resp)
|
||||
}
|
||||
|
||||
func (h restHandler) getUserinfo(w http.ResponseWriter, r *http.Request) {
|
||||
openid := r.FormValue("openid")
|
||||
resp, err := h.client.GetUserinfo(r.Context(), &pb.GetUserinfoRequest{
|
||||
OpenId: openid,
|
||||
Lang: pb.GetUserinfoRequest_zh_CN,
|
||||
})
|
||||
if err != nil {
|
||||
http.Error(w, err.Error(), http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
json.NewEncoder(w).Encode(resp)
|
||||
}
|
||||
|
||||
func (h restHandler) syncUserinfo(w http.ResponseWriter, r *http.Request) {
|
||||
openid := r.FormValue("openid")
|
||||
resp, err := h.client.SyncUserinfo(r.Context(), &pb.SyncUserinfoRequest{
|
||||
OpenId: openid,
|
||||
Lang: pb.SyncUserinfoRequest_zh_CN,
|
||||
})
|
||||
if err != nil {
|
||||
http.Error(w, err.Error(), http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
json.NewEncoder(w).Encode(resp)
|
||||
}
|
Reference in New Issue
Block a user