project shared
This commit is contained in:
36
servlet/data/data.go
Normal file
36
servlet/data/data.go
Normal file
@@ -0,0 +1,36 @@
|
||||
package data
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"git.loafle.net/commons_go/logging"
|
||||
oogwc "git.loafle.net/overflow/overflow_gateway_websocket/config"
|
||||
oogws "git.loafle.net/overflow/overflow_gateway_websocket/server"
|
||||
oosc "git.loafle.net/overflow/overflow_server_config"
|
||||
)
|
||||
|
||||
const (
|
||||
Name = "data"
|
||||
)
|
||||
|
||||
var (
|
||||
cfg *oosc.Servlet
|
||||
)
|
||||
|
||||
func ServletInit(sh oogws.ServerHandler) {
|
||||
cfg = oogwc.Config.Servlets[Name]
|
||||
if nil == cfg {
|
||||
logging.Logger().Panic(fmt.Sprintf("Webapp: config of servlet[%s] is not exist", Name))
|
||||
}
|
||||
|
||||
rpcGH := newRPCGatewayHandler()
|
||||
rpcSH := sh.RegisterRPCGatewayServlet(Name, rpcGH)
|
||||
sub := newSubscriberHandler(rpcSH)
|
||||
|
||||
sh.RegisterSubscriber(sub)
|
||||
}
|
||||
|
||||
|
||||
func ServletDestroy() {
|
||||
|
||||
}
|
||||
56
servlet/data/rpc_gateway_handlers.go
Normal file
56
servlet/data/rpc_gateway_handlers.go
Normal file
@@ -0,0 +1,56 @@
|
||||
package data
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"git.loafle.net/commons_go/logging"
|
||||
"git.loafle.net/overflow/overflow_gateway_websocket/config"
|
||||
"git.loafle.net/overflow/overflow_gateway_websocket/rpc"
|
||||
jwt "github.com/dgrijalva/jwt-go"
|
||||
"github.com/valyala/fasthttp"
|
||||
)
|
||||
|
||||
func newRPCGatewayHandler() rpc.RPCGatewayHandler {
|
||||
gh := &RPCGatewayHandlers{}
|
||||
|
||||
return gh
|
||||
}
|
||||
|
||||
type RPCGatewayHandlers struct {
|
||||
rpc.RPCGatewayHandlers
|
||||
}
|
||||
|
||||
func (sh *RPCGatewayHandlers) Init() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (sh *RPCGatewayHandlers) Handshake(ctx *fasthttp.RequestCtx) (id string, extensionsHeader *fasthttp.ResponseHeader) {
|
||||
var ok bool
|
||||
// tokenString := string(soc.Conn().Headers().Cookie("AuthToken"))
|
||||
tokenString := "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJpc3MiOiJvdmVyRmxvdyIsImlhdCI6MTUwNDU5NTExOSwiZXhwIjoxNTM2MTMxMTE5LCJhdWQiOiJ3d3cub3ZlcmZsb3cuY2xvdWQiLCJzdWIiOiJvdmVyZmxvd0Bsb2FmbGUuY29tIn0.-WQi3OykPlJ9x8RcZGhWXEtGw4GhU6wmyJ_AWh2rMeUatQylfPzvmum2Xfp6pwKLMmcP76XoDPNyq06i7RKWNQ"
|
||||
token, err := jwt.Parse(tokenString, func(token *jwt.Token) (interface{}, error) {
|
||||
// Don't forget to validate the alg is what you expect:
|
||||
if _, ok := token.Method.(*jwt.SigningMethodHMAC); !ok {
|
||||
return nil, fmt.Errorf("Webapp: Unexpected signing method: %v", token.Header["alg"])
|
||||
}
|
||||
|
||||
// hmacSampleSecret is a []byte containing your secret, e.g. []byte("my_secret_key")
|
||||
return []byte(config.Config.Auth.SigningKey), nil
|
||||
})
|
||||
|
||||
if nil != err {
|
||||
return "", nil
|
||||
}
|
||||
|
||||
var claims jwt.MapClaims
|
||||
if claims, ok = token.Claims.(jwt.MapClaims); !ok || !token.Valid {
|
||||
logging.Logger().Warn(fmt.Sprintf("Webapp: Token is not valid %v", token))
|
||||
return "", nil
|
||||
}
|
||||
|
||||
return claims["sub"].(string), nil
|
||||
}
|
||||
|
||||
func (sh *RPCGatewayHandlers) Validate() {
|
||||
sh.RPCGatewayHandlers.Validate()
|
||||
}
|
||||
34
servlet/data/subscriber_handlers.go
Normal file
34
servlet/data/subscriber_handlers.go
Normal file
@@ -0,0 +1,34 @@
|
||||
package data
|
||||
|
||||
import (
|
||||
"git.loafle.net/commons_go/websocket_fasthttp/websocket"
|
||||
oogws "git.loafle.net/overflow/overflow_gateway_websocket/servlet"
|
||||
oogwsub "git.loafle.net/overflow/overflow_gateway_websocket/subscribe"
|
||||
oos "git.loafle.net/overflow/overflow_subscriber"
|
||||
)
|
||||
|
||||
func newSubscriberHandler(servletHandler oogws.ServletHandler) oogwsub.SubscriberHandler {
|
||||
sh := &SubscriberHandlers{}
|
||||
sh.ServletHandler = servletHandler
|
||||
sh.Channel = cfg.Entry
|
||||
|
||||
return sh
|
||||
}
|
||||
|
||||
type SubscriberHandlers struct {
|
||||
oogwsub.SubscriberHandlers
|
||||
}
|
||||
|
||||
func (sh *SubscriberHandlers) OnSubscribe(channel string, message oos.SubscribeMessage) {
|
||||
for _, uid := range message.Targets {
|
||||
if soc := sh.GetSocket(uid); nil != soc {
|
||||
soc.WriteMessage(websocket.TextMessage, message.Message)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (sh *SubscriberHandlers) Validate() {
|
||||
sh.SubscriberHandlers.Validate()
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user