This commit is contained in:
crusader
2017-12-15 18:20:41 +09:00
parent 47d4bc7749
commit d581075198
5 changed files with 26 additions and 19 deletions

35
servlet/auth/auth.go Normal file
View File

@@ -0,0 +1,35 @@
package auth
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 = "auth"
)
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 := newGatewayRPCHandler()
rpcSH := sh.RegisterRPCGatewayServlet(Name, rpcGH)
sub := newSubscriberHandler(rpcSH)
sh.RegisterSubscriber(sub)
}
func ServletDestroy() {
}

View File

@@ -0,0 +1,89 @@
package auth
import (
"context"
"encoding/base64"
"encoding/json"
cwf "git.loafle.net/commons_go/websocket_fasthttp"
oocmn "git.loafle.net/overflow/overflow_commons_go/modules/noauthprobe"
noauthprobeM "git.loafle.net/overflow/overflow_commons_go/modules/noauthprobe/model"
oogweg "git.loafle.net/overflow/overflow_gateway_websocket/external/grpc"
"git.loafle.net/overflow/overflow_gateway_websocket/rpc"
"github.com/valyala/fasthttp"
)
func newGatewayRPCHandler() rpc.GatewayRPCHandler {
gh := &GatewayRPCHandlers{}
return gh
}
type GatewayRPCHandlers struct {
rpc.GatewayRPCHandlers
}
func (sh *GatewayRPCHandlers) Init(serverCTX cwf.ServerContext) error {
return nil
}
func (sh *GatewayRPCHandlers) Handshake(socketCTX cwf.SocketContext, ctx *fasthttp.RequestCtx) (id string, extensionsHeader *fasthttp.ResponseHeader) {
bMethod := ctx.Request.Header.Peek(oocmn.HTTPRequestHeaderKey_NoAuthProbe_Method)
if nil == bMethod {
return "", nil
}
method := string(bMethod)
switch method {
case oocmn.HTTPRequestHeaderValue_NoAuthProbe_Method_Regist:
bInfo := ctx.Request.Header.Peek(oocmn.HTTPRequestHeaderKey_NoAuthProbe_Info)
if nil == bInfo {
return "", nil
}
rJSON := make([]byte, base64.StdEncoding.DecodedLen(len(bInfo)))
_, err := base64.StdEncoding.Decode(rJSON, bInfo)
if nil != err {
return "", nil
}
grpcCTX := context.Background()
r, err := oogweg.Exec(grpcCTX, "NoAuthProbeService.regist", []string{string(rJSON)})
if nil != err {
return "", nil
}
nap := &noauthprobeM.NoAuthProbe{}
err = json.Unmarshal([]byte(r), nap)
if nil != err {
return "", nil
}
id = nap.TempProbeKey
extensionsHeader = &fasthttp.ResponseHeader{}
extensionsHeader.Add(oocmn.HTTPResponseHeaderKey_NoAuthProbe_SetTempProbeKey, nap.TempProbeKey)
return
case oocmn.HTTPRequestHeaderValue_NoAuthProbe_Method_Connect:
bTempProbeKey := ctx.Request.Header.Peek(oocmn.HTTPRequestHeaderKey_NoAuthProbe_TempProbeKey)
if nil == bTempProbeKey {
return "", nil
}
grpcCTX := context.Background()
r, err := oogweg.Exec(grpcCTX, "NoAuthProbeService.readByTempKey", []string{string(bTempProbeKey)})
if nil != err {
return "", nil
}
nap := &noauthprobeM.NoAuthProbe{}
err = json.Unmarshal([]byte(r), nap)
if nil != err {
return "", nil
}
id = string(bTempProbeKey)
return
default:
return "", nil
}
}
func (sh *GatewayRPCHandlers) Validate() {
sh.GatewayRPCHandlers.Validate()
}

View File

@@ -0,0 +1,32 @@
package auth
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()
}