mirror of
https://github.com/PretendoNetwork/friends.git
synced 2026-03-21 18:04:11 -05:00
Added gRPC method to query friend PIDs
This commit is contained in:
parent
2cce4a7af4
commit
e14e5d4dc6
27
database/wiiu/get_user_friend_pids.go
Normal file
27
database/wiiu/get_user_friend_pids.go
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
package database_wiiu
|
||||
|
||||
import (
|
||||
"github.com/PretendoNetwork/friends-secure/database"
|
||||
"github.com/PretendoNetwork/friends-secure/globals"
|
||||
)
|
||||
|
||||
// Get a users friend PIDs list
|
||||
func GetUserFriendPIDs(pid uint32) []uint32 {
|
||||
pids := make([]uint32, 0)
|
||||
|
||||
rows, err := database.Postgres.Query(`SELECT user2_pid FROM wiiu.friendships WHERE user1_pid=$1 AND active=true LIMIT 100`, pid)
|
||||
if err != nil {
|
||||
globals.Logger.Critical(err.Error())
|
||||
return pids
|
||||
}
|
||||
defer rows.Close()
|
||||
|
||||
for rows.Next() {
|
||||
var pid uint32
|
||||
rows.Scan(&pid)
|
||||
|
||||
pids = append(pids, pid)
|
||||
}
|
||||
|
||||
return pids
|
||||
}
|
||||
6
go.mod
6
go.mod
|
|
@ -3,9 +3,9 @@ module github.com/PretendoNetwork/friends-secure
|
|||
go 1.18
|
||||
|
||||
require (
|
||||
github.com/PretendoNetwork/grpc-go v0.0.0-20220820112405-4798a22a13f3
|
||||
github.com/PretendoNetwork/grpc-go v0.0.0-20230411011443-bb1bba45a95b
|
||||
github.com/PretendoNetwork/nex-go v1.0.16
|
||||
github.com/PretendoNetwork/nex-protocols-go v1.0.20
|
||||
github.com/PretendoNetwork/nex-protocols-go v1.0.24
|
||||
github.com/PretendoNetwork/plogger-go v1.0.2
|
||||
github.com/gocql/gocql v1.3.2
|
||||
github.com/golang/protobuf v1.5.3
|
||||
|
|
@ -38,7 +38,7 @@ require (
|
|||
golang.org/x/sys v0.7.0 // indirect
|
||||
golang.org/x/term v0.7.0 // indirect
|
||||
golang.org/x/text v0.9.0 // indirect
|
||||
google.golang.org/genproto v0.0.0-20230403163135-c38d8f061ccd // indirect
|
||||
google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1 // indirect
|
||||
google.golang.org/protobuf v1.30.0 // indirect
|
||||
gopkg.in/inf.v0 v0.9.1 // indirect
|
||||
)
|
||||
|
|
|
|||
12
go.sum
12
go.sum
|
|
@ -1,9 +1,9 @@
|
|||
github.com/PretendoNetwork/grpc-go v0.0.0-20220820112405-4798a22a13f3 h1:rXQLOWgjXYrmdBCMiZzoSWoe4VPxPCYbveyf0pCagKU=
|
||||
github.com/PretendoNetwork/grpc-go v0.0.0-20220820112405-4798a22a13f3/go.mod h1:iONEVRP4H4OEkfzSWfAWf0Fvh9upLBv21bq2R2iy8Jk=
|
||||
github.com/PretendoNetwork/grpc-go v0.0.0-20230411011443-bb1bba45a95b h1:fYZKfX6sQlJRw87EIPBc5jtRmMP0y24AwAg3DfPUIDM=
|
||||
github.com/PretendoNetwork/grpc-go v0.0.0-20230411011443-bb1bba45a95b/go.mod h1:XZjEsij9lL7HJBNkH6JPbBIkUSq/1rjflvjGdv+DAj0=
|
||||
github.com/PretendoNetwork/nex-go v1.0.16 h1:g2lJW8G+WOS6/8qsgQ0+jLlzemjJ60tQtLqloLTjElo=
|
||||
github.com/PretendoNetwork/nex-go v1.0.16/go.mod h1:Bx2ONeSefnbJyE0IDIwGopxrjRrnszOV/uQv74Cx+m0=
|
||||
github.com/PretendoNetwork/nex-protocols-go v1.0.20 h1:vUoYHFvVWWx9Bm9/2JiN1siW03tFxtD4NY9w/WfC878=
|
||||
github.com/PretendoNetwork/nex-protocols-go v1.0.20/go.mod h1:Bt7hI7hJ+8r6UU5LSs+3xx4xzsvMVeEUkAW8Cg3lGjQ=
|
||||
github.com/PretendoNetwork/nex-protocols-go v1.0.24 h1:2EKtlIozrIbhosob6lj3aFNet8JAxZT3CoWc8o4D06Y=
|
||||
github.com/PretendoNetwork/nex-protocols-go v1.0.24/go.mod h1:Bt7hI7hJ+8r6UU5LSs+3xx4xzsvMVeEUkAW8Cg3lGjQ=
|
||||
github.com/PretendoNetwork/plogger-go v1.0.2 h1:vWKEnEmJJzYwqLxLyiSsAvCrZV6qnnu/a0GQOjIfzY0=
|
||||
github.com/PretendoNetwork/plogger-go v1.0.2/go.mod h1:7kD6M4vPq1JL4LTuPg6kuB1OvUBOwQOtAvTaUwMbwvU=
|
||||
github.com/bitly/go-hostpool v0.0.0-20171023180738-a3a6125de932 h1:mXoPYz/Ul5HYEDvkta6I8/rnYM5gSdSV2tJ6XbZuEtY=
|
||||
|
|
@ -128,8 +128,8 @@ golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtn
|
|||
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
|
||||
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
google.golang.org/genproto v0.0.0-20230403163135-c38d8f061ccd h1:sLpv7bNL1AsX3fdnWh9WVh7ejIzXdOc1RRHGeAmeStU=
|
||||
google.golang.org/genproto v0.0.0-20230403163135-c38d8f061ccd/go.mod h1:UUQDJDOlWu4KYeJZffbWgBkS1YFobzKbLVfK69pe0Ak=
|
||||
google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1 h1:KpwkzHKEF7B9Zxg18WzOa7djJ+Ha5DzthMyZYQfEn2A=
|
||||
google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1/go.mod h1:nKE/iIaLqn2bQwXBg8f1g2Ylh6r5MN5CmZvuzZCgsCU=
|
||||
google.golang.org/grpc v1.54.0 h1:EhTqbhiYeixwWQtAEZAxmV9MGqcjEU2mFx52xCzNyag=
|
||||
google.golang.org/grpc v1.54.0/go.mod h1:PUSEXI6iWghWaB6lXM4knEgpJNu2qUcKfDtNci3EC2g=
|
||||
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
|
||||
|
|
|
|||
26
grpc/api_key_interceptor.go
Normal file
26
grpc/api_key_interceptor.go
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
package grpc
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"os"
|
||||
|
||||
"google.golang.org/grpc"
|
||||
"google.golang.org/grpc/metadata"
|
||||
)
|
||||
|
||||
func apiKeyInterceptor(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (interface{}, error) {
|
||||
md, ok := metadata.FromIncomingContext(ctx)
|
||||
|
||||
if ok {
|
||||
apiKeyHeader := md.Get("X-API-Key")
|
||||
|
||||
if len(apiKeyHeader) == 0 || apiKeyHeader[0] != os.Getenv("PN_ACT_CONFIG_GRPC_API_KEY") {
|
||||
return nil, errors.New("Missing or invalid API key")
|
||||
}
|
||||
}
|
||||
|
||||
h, err := handler(ctx, req)
|
||||
|
||||
return h, err
|
||||
}
|
||||
17
grpc/get_user_friend_pids.go
Normal file
17
grpc/get_user_friend_pids.go
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
package grpc
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
database_wiiu "github.com/PretendoNetwork/friends-secure/database/wiiu"
|
||||
pb "github.com/PretendoNetwork/grpc-go/friends"
|
||||
)
|
||||
|
||||
func (s *gRPCFriendsServer) GetUserFriendPIDs(ctx context.Context, in *pb.GetUserFriendPIDsRequest) (*pb.GetUserFriendPIDsResponse, error) {
|
||||
|
||||
pids := database_wiiu.GetUserFriendPIDs(in.GetPid())
|
||||
|
||||
return &pb.GetUserFriendPIDsResponse{
|
||||
Pids: pids,
|
||||
}, nil
|
||||
}
|
||||
|
|
@ -1,15 +1,10 @@
|
|||
package grpc
|
||||
|
||||
import (
|
||||
"context"
|
||||
"log"
|
||||
"net"
|
||||
|
||||
"github.com/PretendoNetwork/friends-secure/globals"
|
||||
pb "github.com/PretendoNetwork/grpc-go/friends"
|
||||
nex "github.com/PretendoNetwork/nex-go"
|
||||
nintendo_notifications "github.com/PretendoNetwork/nex-protocols-go/nintendo-notifications"
|
||||
empty "github.com/golang/protobuf/ptypes/empty"
|
||||
"google.golang.org/grpc"
|
||||
)
|
||||
|
||||
|
|
@ -17,47 +12,21 @@ type gRPCFriendsServer struct {
|
|||
pb.UnimplementedFriendsServer
|
||||
}
|
||||
|
||||
// SendUserNotificationWiiU implements helloworld.SendUserNotificationWiiU
|
||||
func (s *gRPCFriendsServer) SendUserNotificationWiiU(ctx context.Context, in *pb.SendUserNotificationWiiURequest) (*empty.Empty, error) {
|
||||
connectedUser := globals.ConnectedUsers[in.GetPid()]
|
||||
|
||||
if connectedUser != nil {
|
||||
rmcRequest := nex.NewRMCRequest()
|
||||
rmcRequest.SetProtocolID(nintendo_notifications.ProtocolID)
|
||||
rmcRequest.SetCallID(3810693103)
|
||||
rmcRequest.SetMethodID(nintendo_notifications.MethodProcessNintendoNotificationEvent2)
|
||||
rmcRequest.SetParameters(in.GetNotificationData())
|
||||
|
||||
rmcRequestBytes := rmcRequest.Bytes()
|
||||
|
||||
requestPacket, _ := nex.NewPacketV0(connectedUser.Client, nil)
|
||||
|
||||
requestPacket.SetVersion(0)
|
||||
requestPacket.SetSource(0xA1)
|
||||
requestPacket.SetDestination(0xAF)
|
||||
requestPacket.SetType(nex.DataPacket)
|
||||
requestPacket.SetPayload(rmcRequestBytes)
|
||||
|
||||
requestPacket.AddFlag(nex.FlagNeedsAck)
|
||||
requestPacket.AddFlag(nex.FlagReliable)
|
||||
|
||||
globals.NEXServer.Send(requestPacket)
|
||||
}
|
||||
|
||||
return &empty.Empty{}, nil
|
||||
}
|
||||
|
||||
func StartGRPCServer() {
|
||||
listener, err := net.Listen("tcp", ":50051")
|
||||
if err != nil {
|
||||
log.Fatalf("failed to listen: %v", err)
|
||||
}
|
||||
|
||||
server := grpc.NewServer()
|
||||
server := grpc.NewServer(
|
||||
grpc.UnaryInterceptor(apiKeyInterceptor),
|
||||
)
|
||||
|
||||
pb.RegisterFriendsServer(server, &gRPCFriendsServer{})
|
||||
|
||||
log.Printf("server listening at %v", listener.Addr())
|
||||
|
||||
server.Serve(listener)
|
||||
if err := server.Serve(listener); err != nil {
|
||||
log.Fatalf("failed to serve: %v", err)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
41
grpc/send_user_notification_wiiu.go
Normal file
41
grpc/send_user_notification_wiiu.go
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
package grpc
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/PretendoNetwork/friends-secure/globals"
|
||||
pb "github.com/PretendoNetwork/grpc-go/friends"
|
||||
nex "github.com/PretendoNetwork/nex-go"
|
||||
nintendo_notifications "github.com/PretendoNetwork/nex-protocols-go/nintendo-notifications"
|
||||
empty "github.com/golang/protobuf/ptypes/empty"
|
||||
)
|
||||
|
||||
// SendUserNotificationWiiU implements helloworld.SendUserNotificationWiiU
|
||||
func (s *gRPCFriendsServer) SendUserNotificationWiiU(ctx context.Context, in *pb.SendUserNotificationWiiURequest) (*empty.Empty, error) {
|
||||
connectedUser := globals.ConnectedUsers[in.GetPid()]
|
||||
|
||||
if connectedUser != nil {
|
||||
rmcRequest := nex.NewRMCRequest()
|
||||
rmcRequest.SetProtocolID(nintendo_notifications.ProtocolID)
|
||||
rmcRequest.SetCallID(3810693103)
|
||||
rmcRequest.SetMethodID(nintendo_notifications.MethodProcessNintendoNotificationEvent2)
|
||||
rmcRequest.SetParameters(in.GetNotificationData())
|
||||
|
||||
rmcRequestBytes := rmcRequest.Bytes()
|
||||
|
||||
requestPacket, _ := nex.NewPacketV0(connectedUser.Client, nil)
|
||||
|
||||
requestPacket.SetVersion(0)
|
||||
requestPacket.SetSource(0xA1)
|
||||
requestPacket.SetDestination(0xAF)
|
||||
requestPacket.SetType(nex.DataPacket)
|
||||
requestPacket.SetPayload(rmcRequestBytes)
|
||||
|
||||
requestPacket.AddFlag(nex.FlagNeedsAck)
|
||||
requestPacket.AddFlag(nex.FlagReliable)
|
||||
|
||||
globals.NEXServer.Send(requestPacket)
|
||||
}
|
||||
|
||||
return &empty.Empty{}, nil
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user