Merge pull request #4 from ItzSwirlz/nex-v2
Some checks failed
Build and Publish Docker Image / build-publish (push) Has been cancelled

chore: Update to v2 NEX libraries
This commit is contained in:
William Oldham 2025-02-22 13:01:03 +00:00 committed by GitHub
commit 93c8573e9a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
16 changed files with 278 additions and 257 deletions

View File

@ -4,7 +4,7 @@ ARG app_dir="/home/go/app"
# * Building the application
FROM golang:1.22-alpine3.20 AS build
FROM golang:1.23.6-alpine AS build
ARG app_dir
WORKDIR ${app_dir}

View File

@ -3,12 +3,13 @@ package database
import (
"database/sql"
ranking_types "github.com/PretendoNetwork/nex-protocols-go/ranking/types"
"github.com/PretendoNetwork/nex-go/v2/types"
ranking_types "github.com/PretendoNetwork/nex-protocols-go/v2/ranking/types"
"github.com/PretendoNetwork/pikmin-3/globals"
)
func GetRankingsByCategoryAndRankingOrderParam(category uint32, rankingOrderParam *ranking_types.RankingOrderParam) (error, []*ranking_types.RankingRankData) {
rankings := make([]*ranking_types.RankingRankData, 0, rankingOrderParam.Length)
func GetRankingsAndCountByCategoryAndRankingOrderParam(category types.UInt32, rankingOrderParam ranking_types.RankingOrderParam) (types.List[ranking_types.RankingRankData], uint32, error) {
rankings := types.NewList[ranking_types.RankingRankData]()
rows, err := Postgres.Query(`
SELECT
@ -23,14 +24,14 @@ func GetRankingsByCategoryAndRankingOrderParam(category uint32, rankingOrderPara
rankingOrderParam.Offset,
)
if err != nil {
return err, rankings
return nil, 0, err
}
row := 1
for rows.Next() {
rankingRankData := ranking_types.NewRankingRankData()
rankingRankData.UniqueID = 0
rankingRankData.Order = uint32(row)
rankingRankData.Order = types.UInt32(row)
rankingRankData.Category = category
err := rows.Scan(
@ -52,5 +53,5 @@ func GetRankingsByCategoryAndRankingOrderParam(category uint32, rankingOrderPara
}
}
return nil, rankings
return rankings, uint32(len(rankings)), nil
}

View File

@ -3,10 +3,11 @@ package database
import (
"time"
ranking_types "github.com/PretendoNetwork/nex-protocols-go/ranking/types"
"github.com/PretendoNetwork/nex-go/v2/types"
ranking_types "github.com/PretendoNetwork/nex-protocols-go/v2/ranking/types"
)
func InsertRankingByPIDAndRankingScoreData(pid uint32, rankingScoreData *ranking_types.RankingScoreData) error {
func InsertRankingByPIDAndRankingScoreData(pid types.PID, rankingScoreData ranking_types.RankingScoreData, uniqueID types.UInt64) error {
now := time.Now().UnixNano()
_, err := Postgres.Exec(`
@ -22,13 +23,13 @@ func InsertRankingByPIDAndRankingScoreData(pid uint32, rankingScoreData *ranking
created_at
)
VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9)`,
pid,
rankingScoreData.Category,
rankingScoreData.Score,
rankingScoreData.OrderBy,
rankingScoreData.UpdateMode,
rankingScoreData.Groups,
rankingScoreData.Param,
uint32(pid),
uint32(rankingScoreData.Category),
uint32(rankingScoreData.Score),
uint8(rankingScoreData.OrderBy),
uint8(rankingScoreData.UpdateMode),
[]byte(rankingScoreData.Groups),
uint64(rankingScoreData.Param),
make([]byte, 0),
now,
)

64
globals/accounts.go Normal file
View File

@ -0,0 +1,64 @@
package globals
import (
"strconv"
"github.com/PretendoNetwork/nex-go/v2"
"github.com/PretendoNetwork/nex-go/v2/types"
)
var AuthenticationServerAccount *nex.Account
var SecureServerAccount *nex.Account
func InitAccounts() {
AuthenticationServerAccount = nex.NewAccount(types.NewPID(1), "Quazal Authentication", KerberosPassword)
SecureServerAccount = nex.NewAccount(types.NewPID(2), "Quazal Rendez-Vous", KerberosPassword)
}
func AccountDetailsByPID(pid types.PID) (*nex.Account, *nex.Error) {
if pid.Equals(AuthenticationServerAccount.PID) {
return AuthenticationServerAccount, nil
}
if pid.Equals(SecureServerAccount.PID) {
return SecureServerAccount, nil
}
password, errorCode := PasswordFromPID(pid)
if errorCode != 0 {
return nil, nex.NewError(errorCode, "Failed to get password from PID")
}
account := nex.NewAccount(pid, strconv.Itoa(int(pid)), password)
return account, nil
}
func AccountDetailsByUsername(username string) (*nex.Account, *nex.Error) {
if username == AuthenticationServerAccount.Username {
return AuthenticationServerAccount, nil
}
if username == SecureServerAccount.Username {
return SecureServerAccount, nil
}
pidInt, err := strconv.Atoi(username)
if err != nil {
Logger.Error(err.Error())
return nil, nex.NewError(nex.ResultCodes.RendezVous.InvalidUsername, "Invalid username")
}
pid := types.NewPID(uint64(pidInt))
password, errorCode := PasswordFromPID(pid)
if errorCode != 0 {
Logger.Errorf("Password err: %v", errorCode)
return nil, nex.NewError(errorCode, "Failed to get password from PID")
}
account := nex.NewAccount(pid, username, password)
return account, nil
}

View File

@ -2,7 +2,7 @@ package globals
import (
pb "github.com/PretendoNetwork/grpc-go/account"
"github.com/PretendoNetwork/nex-go"
"github.com/PretendoNetwork/nex-go/v2"
"github.com/PretendoNetwork/plogger-go"
"google.golang.org/grpc"
"google.golang.org/grpc/metadata"
@ -10,8 +10,10 @@ import (
var Logger *plogger.Logger
var KerberosPassword = "password" // * Default password
var AuthenticationServer *nex.Server
var SecureServer *nex.Server
var AuthenticationServer *nex.PRUDPServer
var AuthenticationEndpoint *nex.PRUDPEndPoint
var SecureServer *nex.PRUDPServer
var SecureEndpoint *nex.PRUDPEndPoint
var GRPCAccountClientConnection *grpc.ClientConn
var GRPCAccountClient pb.AccountClient
var GRPCAccountCommonMetadata metadata.MD

View File

@ -3,19 +3,20 @@ package globals
import (
"context"
"github.com/PretendoNetwork/nex-go/v2/types"
pb "github.com/PretendoNetwork/grpc-go/account"
"github.com/PretendoNetwork/nex-go"
"github.com/PretendoNetwork/nex-protocols-go/globals"
"github.com/PretendoNetwork/nex-go/v2"
"google.golang.org/grpc/metadata"
)
func PasswordFromPID(pid uint32) (string, uint32) {
func PasswordFromPID(pid types.PID) (string, uint32) {
ctx := metadata.NewOutgoingContext(context.Background(), GRPCAccountCommonMetadata)
response, err := GRPCAccountClient.GetNEXPassword(ctx, &pb.GetNEXPasswordRequest{Pid: pid})
response, err := GRPCAccountClient.GetNEXPassword(ctx, &pb.GetNEXPasswordRequest{Pid: uint32(pid)})
if err != nil {
globals.Logger.Error(err.Error())
return "", nex.Errors.RendezVous.InvalidUsername
Logger.Error(err.Error())
return "", nex.ResultCodes.RendezVous.InvalidUsername
}
return response.Password, 0

42
go.mod
View File

@ -1,29 +1,37 @@
module github.com/PretendoNetwork/pikmin-3
go 1.19
go 1.23.0
toolchain go1.23.6
require (
github.com/PretendoNetwork/grpc-go v1.0.1
github.com/PretendoNetwork/nex-go v1.0.28
github.com/PretendoNetwork/nex-protocols-common-go v1.0.22
github.com/PretendoNetwork/nex-protocols-go v1.0.39
github.com/PretendoNetwork/plogger-go v1.0.3
github.com/PretendoNetwork/grpc-go v1.0.2
github.com/PretendoNetwork/nex-go/v2 v2.1.2
github.com/PretendoNetwork/nex-protocols-common-go/v2 v2.2.2
github.com/PretendoNetwork/nex-protocols-go/v2 v2.2.1
github.com/PretendoNetwork/plogger-go v1.1.0
github.com/joho/godotenv v1.5.1
github.com/lib/pq v1.10.9
google.golang.org/grpc v1.56.2
google.golang.org/grpc v1.70.0
)
require (
github.com/fatih/color v1.15.0 // indirect
github.com/golang/protobuf v1.5.3 // indirect
github.com/dolthub/maphash v0.1.0 // indirect
github.com/fatih/color v1.18.0 // indirect
github.com/golang/protobuf v1.5.4 // indirect
github.com/jwalton/go-supportscolor v1.2.0 // indirect
github.com/mattn/go-colorable v0.1.13 // indirect
github.com/mattn/go-isatty v0.0.19 // indirect
github.com/klauspost/compress v1.17.11 // indirect
github.com/lxzan/gws v1.8.8 // indirect
github.com/mattn/go-colorable v0.1.14 // indirect
github.com/mattn/go-isatty v0.0.20 // indirect
github.com/rasky/go-lzo v0.0.0-20200203143853-96a758eda86e // indirect
github.com/superwhiskers/crunch/v3 v3.5.7 // indirect
golang.org/x/net v0.12.0 // indirect
golang.org/x/sys v0.10.0 // indirect
golang.org/x/term v0.10.0 // indirect
golang.org/x/text v0.11.0 // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20230711160842-782d3b101e98 // indirect
google.golang.org/protobuf v1.31.0 // indirect
golang.org/x/exp v0.0.0-20250215185904-eff6e970281f // indirect
golang.org/x/mod v0.23.0 // indirect
golang.org/x/net v0.35.0 // indirect
golang.org/x/sys v0.30.0 // indirect
golang.org/x/term v0.29.0 // indirect
golang.org/x/text v0.22.0 // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20250212204824-5a70512c5d8b // indirect
google.golang.org/protobuf v1.36.5 // indirect
)

110
go.sum
View File

@ -1,52 +1,82 @@
github.com/PretendoNetwork/grpc-go v1.0.1 h1:3O0n4vnRX9rAZfrrjZydDjEOyWb4TbJcvwMrtY3Yz9g=
github.com/PretendoNetwork/grpc-go v1.0.1/go.mod h1:XZjEsij9lL7HJBNkH6JPbBIkUSq/1rjflvjGdv+DAj0=
github.com/PretendoNetwork/nex-go v1.0.28 h1:g3892srP1T7LaeY5JklMtLZ03gTxE8wpXqpPQpXpN74=
github.com/PretendoNetwork/nex-go v1.0.28/go.mod h1:tWfWhrC/DCJuS08jTk0ceOv2R1VtElvKSVv13To6miE=
github.com/PretendoNetwork/nex-protocols-common-go v1.0.22 h1:oIKx3AsBApaKWl1f91q/Vt59YKJOjoUhzxs/F0UA1Vw=
github.com/PretendoNetwork/nex-protocols-common-go v1.0.22/go.mod h1:UwVHUdB1WFlzVn4yq8WLai0J+9OQXw4cg5qNjnJQ3RU=
github.com/PretendoNetwork/nex-protocols-go v1.0.39 h1:l0wezyS1s8WELcuiZBV726C/cYE0GHHnnks2GLP+33Q=
github.com/PretendoNetwork/nex-protocols-go v1.0.39/go.mod h1:jZSnoM2G4oc7tKXeUf2OkJ6VyfJc4nb7gR++2oNEh5A=
github.com/PretendoNetwork/plogger-go v1.0.3 h1:KEnrUfPaCn0LFweg8OrhtiDhlN3pclWpNhlmAtmgfB0=
github.com/PretendoNetwork/plogger-go v1.0.3/go.mod h1:7kD6M4vPq1JL4LTuPg6kuB1OvUBOwQOtAvTaUwMbwvU=
github.com/fatih/color v1.15.0 h1:kOqh6YHBtK8aywxGerMG2Eq3H6Qgoqeo13Bk2Mv/nBs=
github.com/fatih/color v1.15.0/go.mod h1:0h5ZqXfHYED7Bhv2ZJamyIOUej9KtShiJESRwBDUSsw=
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg=
github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=
github.com/PretendoNetwork/grpc-go v1.0.2 h1:9TvKmX7dCOANyoHEra1MMYqS1N/RGav66TRG4SHInvo=
github.com/PretendoNetwork/grpc-go v1.0.2/go.mod h1:XZjEsij9lL7HJBNkH6JPbBIkUSq/1rjflvjGdv+DAj0=
github.com/PretendoNetwork/nex-go/v2 v2.1.2 h1:OJFAS6U6VNzZ4YzteKqUEZ5aJMwWIHODeRrLwNbN7nw=
github.com/PretendoNetwork/nex-go/v2 v2.1.2/go.mod h1:3LyJzsv3AataJW8D0binp15Q8ZH22MWTYly1VNtXi64=
github.com/PretendoNetwork/nex-protocols-common-go/v2 v2.2.2 h1:rBJNZDJ92pa9fU3Og0sanyizJTWnELPoGR0Tjz8zlws=
github.com/PretendoNetwork/nex-protocols-common-go/v2 v2.2.2/go.mod h1:iuNMuBK/zww+44d6ajfLsOusXx/6Llj3zSkmhJwMuuM=
github.com/PretendoNetwork/nex-protocols-go/v2 v2.2.1 h1:/dsuP0W7bZNvrXoXH0ZRdxpxonfbWmmson51WCQdpEQ=
github.com/PretendoNetwork/nex-protocols-go/v2 v2.2.1/go.mod h1:+soBHmwX6ixGxj6cphLuCvfJqxcZPuowc/5e7Qi9Bz0=
github.com/PretendoNetwork/plogger-go v1.1.0 h1:x2XgyeeM8zDFGy+NcIZd3SYC2fNrVWpBBbkqTejOfiM=
github.com/PretendoNetwork/plogger-go v1.1.0/go.mod h1:wpltahp91IXr9nOvWgwep8zGtUKDeCVwm+/Wa484lQ4=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/dolthub/maphash v0.1.0 h1:bsQ7JsF4FkkWyrP3oCnFJgrCUAFbFf3kOl4L/QxPDyQ=
github.com/dolthub/maphash v0.1.0/go.mod h1:gkg4Ch4CdCDu5h6PMriVLawB7koZ+5ijb9puGMV50a4=
github.com/fatih/color v1.18.0 h1:S8gINlzdQ840/4pfAwic/ZE0djQEH3wM94VfqLTZcOM=
github.com/fatih/color v1.18.0/go.mod h1:4FelSpRwEGDpQ12mAdzqdOukCy4u8WUtOY6lkT/6HfU=
github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY=
github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0=
github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4=
github.com/jwalton/go-supportscolor v1.2.0 h1:g6Ha4u7Vm3LIsQ5wmeBpS4gazu0UP1DRDE8y6bre4H8=
github.com/jwalton/go-supportscolor v1.2.0/go.mod h1:hFVUAZV2cWg+WFFC4v8pT2X/S2qUUBYMioBD9AINXGs=
github.com/klauspost/compress v1.17.11 h1:In6xLpyWOi1+C7tXUUWv2ot1QvBjxevKAaI6IXrJmUc=
github.com/klauspost/compress v1.17.11/go.mod h1:pMDklpSncoRMuLFrf1W9Ss9KT+0rH90U12bZKk7uwG0=
github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw=
github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg=
github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA=
github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
github.com/lxzan/gws v1.8.8 h1:st193ZG8qN8sSw8/g/UituFhs7etmKzS7jUqhijg5wM=
github.com/lxzan/gws v1.8.8/go.mod h1:FcGeRMB7HwGuTvMLR24ku0Zx0p6RXqeKASeMc4VYgi4=
github.com/mattn/go-colorable v0.1.14 h1:9A9LHSqF/7dyVVX6g0U9cwm9pG3kP9gSzcuIPHPsaIE=
github.com/mattn/go-colorable v0.1.14/go.mod h1:6LmQG8QLFO4G5z1gPvYEzlUgJ2wF+stgPZH1UqBm1s8=
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/rasky/go-lzo v0.0.0-20200203143853-96a758eda86e h1:dCWirM5F3wMY+cmRda/B1BiPsFtmzXqV9b0hLWtVBMs=
github.com/rasky/go-lzo v0.0.0-20200203143853-96a758eda86e/go.mod h1:9leZcVcItj6m9/CfHY5Em/iBrCz7js8LcRQGTKEEv2M=
github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
github.com/superwhiskers/crunch/v3 v3.5.7 h1:N9RLxaR65C36i26BUIpzPXGy2f6pQ7wisu2bawbKNqg=
github.com/superwhiskers/crunch/v3 v3.5.7/go.mod h1:4ub2EKgF1MAhTjoOCTU4b9uLMsAweHEa89aRrfAypXA=
golang.org/x/net v0.12.0 h1:cfawfvKITfUsFCeJIHJrbSxpeu/E81khclypR0GVT50=
golang.org/x/net v0.12.0/go.mod h1:zEVYFnQC7m/vmpQFELhcD1EWkZlX69l4oqgmer6hfKA=
go.opentelemetry.io/otel v1.32.0 h1:WnBN+Xjcteh0zdk01SVqV55d/m62NJLJdIyb4y/WO5U=
go.opentelemetry.io/otel v1.32.0/go.mod h1:00DCVSB0RQcnzlwyTfqtxSm+DRr9hpYrHjNGiBHVQIg=
go.opentelemetry.io/otel/metric v1.32.0 h1:xV2umtmNcThh2/a/aCP+h64Xx5wsj8qqnkYZktzNa0M=
go.opentelemetry.io/otel/metric v1.32.0/go.mod h1:jH7CIbbK6SH2V2wE16W05BHCtIDzauciCRLoc/SyMv8=
go.opentelemetry.io/otel/sdk v1.32.0 h1:RNxepc9vK59A8XsgZQouW8ue8Gkb4jpWtJm9ge5lEG4=
go.opentelemetry.io/otel/sdk v1.32.0/go.mod h1:LqgegDBjKMmb2GC6/PrTnteJG39I8/vJCAP9LlJXEjU=
go.opentelemetry.io/otel/sdk/metric v1.32.0 h1:rZvFnvmvawYb0alrYkjraqJq0Z4ZUJAiyYCU9snn1CU=
go.opentelemetry.io/otel/sdk/metric v1.32.0/go.mod h1:PWeZlq0zt9YkYAp3gjKZ0eicRYvOh1Gd+X99x6GHpCQ=
go.opentelemetry.io/otel/trace v1.32.0 h1:WIC9mYrXf8TmY/EXuULKc8hR17vE+Hjv2cssQDe03fM=
go.opentelemetry.io/otel/trace v1.32.0/go.mod h1:+i4rkvCraA+tG6AzwloGaCtkx53Fa+L+V8e9a7YvhT8=
golang.org/x/exp v0.0.0-20250215185904-eff6e970281f h1:oFMYAjX0867ZD2jcNiLBrI9BdpmEkvPyi5YrBGXbamg=
golang.org/x/exp v0.0.0-20250215185904-eff6e970281f/go.mod h1:BHOTPb3L19zxehTsLoJXVaTktb06DFgmdW6Wb9s8jqk=
golang.org/x/mod v0.23.0 h1:Zb7khfcRGKk+kqfxFaP5tZqCnDZMjC5VtUBs87Hr6QM=
golang.org/x/mod v0.23.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY=
golang.org/x/net v0.35.0 h1:T5GQRQb2y08kTAByq9L4/bz8cipCdA8FbRTXewonqY8=
golang.org/x/net v0.35.0/go.mod h1:EglIi67kWsHKlRzzVMUD93VMSWGFOMSZgxFjparz1Qk=
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.10.0 h1:SqMFp9UcQJZa+pmYuAKjd9xq1f0j5rLcDIk0mj4qAsA=
golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.30.0 h1:QjkSwP/36a20jFYWkSue1YwXzLmsV5Gfq7Eiy72C1uc=
golang.org/x/sys v0.30.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.10.0 h1:3R7pNqamzBraeqj/Tj8qt1aQ2HpmlC+Cx/qL/7hn4/c=
golang.org/x/term v0.10.0/go.mod h1:lpqdcUyK/oCiQxvxVrppt5ggO2KCZ5QblwqPnfZ6d5o=
golang.org/x/text v0.11.0 h1:LAntKIrcmeSKERyiOh0XMV39LXS8IE9UL2yP7+f5ij4=
golang.org/x/text v0.11.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
google.golang.org/genproto/googleapis/rpc v0.0.0-20230711160842-782d3b101e98 h1:bVf09lpb+OJbByTj913DRJioFFAjf/ZGxEz7MajTp2U=
google.golang.org/genproto/googleapis/rpc v0.0.0-20230711160842-782d3b101e98/go.mod h1:TUfxEVdsvPg18p6AslUXFoLdpED4oBnGwyqk3dV1XzM=
google.golang.org/grpc v1.56.2 h1:fVRFRnXvU+x6C4IlHZewvJOVHoOv1TUuQyoRsYnB4bI=
google.golang.org/grpc v1.56.2/go.mod h1:I9bI3vqKfayGqPUAwGdOSu7kt6oIJLixfffKrpXqQ9s=
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8=
google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
golang.org/x/term v0.29.0 h1:L6pJp37ocefwRRtYPKSWOWzOtWSxVajvz2ldH/xi3iU=
golang.org/x/term v0.29.0/go.mod h1:6bl4lRlvVuDgSf3179VpIxBF0o10JUpXWOnI7nErv7s=
golang.org/x/text v0.22.0 h1:bofq7m3/HAFvbF51jz3Q9wLg3jkvSPuiZu/pD1XwgtM=
golang.org/x/text v0.22.0/go.mod h1:YRoo4H8PVmsu+E3Ou7cqLVH8oXWIHVoX0jqUWALQhfY=
google.golang.org/genproto/googleapis/rpc v0.0.0-20250212204824-5a70512c5d8b h1:FQtJ1MxbXoIIrZHZ33M+w5+dAP9o86rgpjoKr/ZmT7k=
google.golang.org/genproto/googleapis/rpc v0.0.0-20250212204824-5a70512c5d8b/go.mod h1:8BS3B93F/U1juMFq9+EDk+qOT5CO1R9IzXxG3PTqiRk=
google.golang.org/grpc v1.70.0 h1:pWFv03aZoHzlRKHWicjsZytKAiYCtNS0dHbXnIdq7jQ=
google.golang.org/grpc v1.70.0/go.mod h1:ofIJqVKDXx/JiXrwr2IG4/zwdH9txy3IlF40RmcJSQw=
google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM=
google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=

18
init.go
View File

@ -1,12 +1,15 @@
package main
import (
"crypto/rand"
"fmt"
"os"
"strconv"
"strings"
pb "github.com/PretendoNetwork/grpc-go/account"
"github.com/PretendoNetwork/nex-go/v2"
"github.com/PretendoNetwork/nex-go/v2/types"
"github.com/PretendoNetwork/pikmin-3/database"
"github.com/PretendoNetwork/pikmin-3/globals"
"github.com/PretendoNetwork/plogger-go"
@ -27,7 +30,6 @@ func init() {
}
postgresURI := os.Getenv("PN_PIKMIN3_POSTGRES_URI")
kerberosPassword := os.Getenv("PN_PIKMIN3_KERBEROS_PASSWORD")
authenticationServerPort := os.Getenv("PN_PIKMIN3_AUTHENTICATION_SERVER_PORT")
secureServerHost := os.Getenv("PN_PIKMIN3_SECURE_SERVER_HOST")
secureServerPort := os.Getenv("PN_PIKMIN3_SECURE_SERVER_PORT")
@ -40,12 +42,18 @@ func init() {
os.Exit(0)
}
if strings.TrimSpace(kerberosPassword) == "" {
globals.Logger.Warningf("PN_PIKMIN3_KERBEROS_PASSWORD environment variable not set. Using default password: %q", globals.KerberosPassword)
} else {
globals.KerberosPassword = kerberosPassword
kerberosPassword := make([]byte, 0x10)
_, err = rand.Read(kerberosPassword)
if err != nil {
globals.Logger.Error("Error generating Kerberos password")
os.Exit(0)
}
globals.KerberosPassword = string(kerberosPassword)
globals.AuthenticationServerAccount = nex.NewAccount(types.NewPID(1), "Quazal Authentication", globals.KerberosPassword)
globals.SecureServerAccount = nex.NewAccount(types.NewPID(2), "Quazal Rendez-Vous", globals.KerberosPassword)
if strings.TrimSpace(authenticationServerPort) == "" {
globals.Logger.Error("PN_PIKMIN3_AUTHENTICATION_SERVER_PORT environment variable not set")
os.Exit(0)

View File

@ -3,35 +3,38 @@ package nex
import (
"fmt"
"os"
"strconv"
nex "github.com/PretendoNetwork/nex-go"
nex "github.com/PretendoNetwork/nex-go/v2"
"github.com/PretendoNetwork/pikmin-3/globals"
)
var serverBuildString string
func StartAuthenticationServer() {
globals.AuthenticationServer = nex.NewServer()
globals.AuthenticationServer.SetPRUDPVersion(1)
globals.AuthenticationServer.SetPRUDPProtocolMinorVersion(3)
globals.AuthenticationServer.SetDefaultNEXVersion(&nex.NEXVersion{
Major: 3,
Minor: 3,
Patch: 0,
})
globals.AuthenticationServer.SetKerberosPassword(globals.KerberosPassword)
globals.AuthenticationServer.SetAccessKey("f6accfc1")
globals.AuthenticationServer = nex.NewPRUDPServer()
globals.AuthenticationServer.On("Data", func(packet *nex.PacketV1) {
request := packet.RMCRequest()
globals.AuthenticationEndpoint = nex.NewPRUDPEndPoint(1)
globals.AuthenticationEndpoint.ServerAccount = globals.AuthenticationServerAccount
globals.AuthenticationEndpoint.AccountDetailsByPID = globals.AccountDetailsByPID
globals.AuthenticationEndpoint.AccountDetailsByUsername = globals.AccountDetailsByUsername
globals.AuthenticationServer.BindPRUDPEndPoint(globals.AuthenticationEndpoint)
globals.AuthenticationServer.LibraryVersions.SetDefault(nex.NewLibraryVersion(3, 3, 0))
globals.AuthenticationServer.AccessKey = "f6accfc1"
globals.AuthenticationEndpoint.OnData(func(packet nex.PacketInterface) {
request := packet.RMCMessage()
fmt.Println("==PIKMIN 3 - Auth==")
fmt.Printf("Protocol ID: %#v\n", request.ProtocolID())
fmt.Printf("Method ID: %#v\n", request.MethodID())
fmt.Printf("Protocol ID: %#v\n", request.ProtocolID)
fmt.Printf("Method ID: %#v\n", request.MethodID)
fmt.Println("===============")
})
registerCommonAuthenticationServerProtocols()
globals.AuthenticationServer.Listen(fmt.Sprintf(":%s", os.Getenv("PN_PIKMIN3_AUTHENTICATION_SERVER_PORT")))
port, _ := strconv.Atoi(os.Getenv("PN_PIKMIN3_AUTHENTICATION_SERVER_PORT"))
globals.AuthenticationServer.Listen(port)
}

View File

@ -1,65 +0,0 @@
package nex_ranking
import (
"github.com/PretendoNetwork/nex-go"
"github.com/PretendoNetwork/nex-protocols-go/ranking"
ranking_types "github.com/PretendoNetwork/nex-protocols-go/ranking/types"
"github.com/PretendoNetwork/pikmin-3/database"
"github.com/PretendoNetwork/pikmin-3/globals"
)
func GetRanking(err error, client *nex.Client, callID uint32, rankingMode uint8, category uint32, orderParam *ranking_types.RankingOrderParam, uniqueID uint64, principalID uint32) {
rmcResponse := nex.NewRMCResponse(ranking.ProtocolID, callID)
if err != nil {
globals.Logger.Error(err.Error())
rmcResponse.SetError(nex.Errors.Ranking.Unknown)
}
rankDataListErr, rankDataList := database.GetRankingsByCategoryAndRankingOrderParam(category, orderParam)
if rankDataListErr != nil {
globals.Logger.Error(rankDataListErr.Error())
rmcResponse.SetError(nex.Errors.Ranking.Unknown)
}
totalCountErr, totalCount := database.GetTotalRankingsByCategory(category)
if totalCountErr != nil {
globals.Logger.Error(totalCountErr.Error())
rmcResponse.SetError(nex.Errors.Ranking.Unknown)
}
if totalCount == 0 || len(rankDataList) == 0 {
rmcResponse.SetError(nex.Errors.Ranking.NotFound)
}
if rankDataListErr == nil && totalCountErr == nil && totalCount != 0 {
pResult := ranking_types.NewRankingResult()
pResult.RankDataList = rankDataList
pResult.TotalCount = totalCount
pResult.SinceTime = nex.NewDateTime(0x1f40420000) // * 2000-01-01T00:00:00.000Z, this is what the real server sends back
rmcResponseStream := nex.NewStreamOut(globals.SecureServer)
rmcResponseStream.WriteStructure(pResult)
rmcResponseBody := rmcResponseStream.Bytes()
rmcResponse.SetSuccess(ranking.MethodGetRanking, rmcResponseBody)
}
rmcResponseBytes := rmcResponse.Bytes()
responsePacket, _ := nex.NewPacketV1(client, nil)
responsePacket.SetVersion(1)
responsePacket.SetSource(0xA1)
responsePacket.SetDestination(0xAF)
responsePacket.SetType(nex.DataPacket)
responsePacket.SetPayload(rmcResponseBytes)
responsePacket.AddFlag(nex.FlagNeedsAck)
responsePacket.AddFlag(nex.FlagReliable)
globals.SecureServer.Send(responsePacket)
}

View File

@ -1,41 +0,0 @@
package nex_ranking
import (
"github.com/PretendoNetwork/nex-go"
"github.com/PretendoNetwork/nex-protocols-go/ranking"
ranking_types "github.com/PretendoNetwork/nex-protocols-go/ranking/types"
"github.com/PretendoNetwork/pikmin-3/database"
"github.com/PretendoNetwork/pikmin-3/globals"
)
func UploadScore(err error, client *nex.Client, callID uint32, scoreData *ranking_types.RankingScoreData, uniqueID uint64) {
rmcResponse := nex.NewRMCResponse(ranking.ProtocolID, callID)
if err != nil {
globals.Logger.Error(err.Error())
rmcResponse.SetError(nex.Errors.Ranking.Unknown)
}
insertErr := database.InsertRankingByPIDAndRankingScoreData(client.PID(), scoreData)
if insertErr != nil {
globals.Logger.Error(insertErr.Error())
rmcResponse.SetError(nex.Errors.Ranking.Unknown)
} else {
rmcResponse.SetSuccess(ranking.MethodUploadScore, nil)
}
rmcResponseBytes := rmcResponse.Bytes()
responsePacket, _ := nex.NewPacketV1(client, nil)
responsePacket.SetVersion(1)
responsePacket.SetSource(0xA1)
responsePacket.SetDestination(0xAF)
responsePacket.SetType(nex.DataPacket)
responsePacket.SetPayload(rmcResponseBytes)
responsePacket.AddFlag(nex.FlagNeedsAck)
responsePacket.AddFlag(nex.FlagReliable)
globals.SecureServer.Send(responsePacket)
}

View File

@ -2,27 +2,33 @@ package nex
import (
"os"
"strconv"
nex "github.com/PretendoNetwork/nex-go"
ticket_granting "github.com/PretendoNetwork/nex-protocols-common-go/ticket-granting"
"github.com/PretendoNetwork/nex-go/v2/constants"
nex_types "github.com/PretendoNetwork/nex-go/v2/types"
common_ticket_granting "github.com/PretendoNetwork/nex-protocols-common-go/v2/ticket-granting"
ticket_granting "github.com/PretendoNetwork/nex-protocols-go/v2/ticket-granting"
"github.com/PretendoNetwork/pikmin-3/globals"
)
func registerCommonAuthenticationServerProtocols() {
ticketGrantingProtocol := ticket_granting.NewCommonTicketGrantingProtocol(globals.AuthenticationServer)
ticketGrantingProtocol := ticket_granting.NewProtocol()
globals.AuthenticationEndpoint.RegisterServiceProtocol(ticketGrantingProtocol)
commonTicketGrantingProtocol := common_ticket_granting.NewCommonProtocol(ticketGrantingProtocol)
secureStationURL := nex.NewStationURL("")
secureStationURL.SetScheme("prudps")
port, _ := strconv.Atoi(os.Getenv("PN_PIKMIN3_SECURE_SERVER_PORT"))
secureStationURL := nex_types.NewStationURL("")
secureStationURL.SetURLType(constants.StationURLPRUDPS)
secureStationURL.SetAddress(os.Getenv("PN_PIKMIN3_SECURE_SERVER_HOST"))
secureStationURL.SetPort(os.Getenv("PN_PIKMIN3_SECURE_SERVER_PORT"))
secureStationURL.SetCID("1")
secureStationURL.SetPID("2")
secureStationURL.SetSID("1")
secureStationURL.SetStream("10")
secureStationURL.SetType("2")
secureStationURL.SetPortNumber(uint16(port))
secureStationURL.SetConnectionID(1)
secureStationURL.SetPrincipalID(nex_types.NewPID(2))
secureStationURL.SetStreamID(1)
secureStationURL.SetStreamType(constants.StreamTypeRVSecure)
secureStationURL.SetType(uint8(constants.StationURLFlagPublic))
ticketGrantingProtocol.SetSecureStationURL(secureStationURL)
ticketGrantingProtocol.SetBuildName(serverBuildString)
globals.AuthenticationServer.SetPasswordFromPIDFunction(globals.PasswordFromPID)
commonTicketGrantingProtocol.SecureStationURL = secureStationURL
commonTicketGrantingProtocol.BuildName = nex_types.NewString(serverBuildString)
commonTicketGrantingProtocol.SecureServerAccount = globals.SecureServerAccount
}

View File

@ -1,10 +1,24 @@
package nex
import (
secureconnection "github.com/PretendoNetwork/nex-protocols-common-go/secure-connection"
secureconnection "github.com/PretendoNetwork/nex-protocols-common-go/v2/secure-connection"
secure "github.com/PretendoNetwork/nex-protocols-go/v2/secure-connection"
common_ranking "github.com/PretendoNetwork/nex-protocols-common-go/v2/ranking"
ranking "github.com/PretendoNetwork/nex-protocols-go/v2/ranking"
"github.com/PretendoNetwork/pikmin-3/database"
"github.com/PretendoNetwork/pikmin-3/globals"
)
func registerCommonSecureServerProtocols() {
secureconnection.NewCommonSecureConnectionProtocol(globals.SecureServer)
secureProtocol := secure.NewProtocol()
globals.SecureEndpoint.RegisterServiceProtocol(secureProtocol)
secureconnection.NewCommonProtocol(secureProtocol)
rankingProtocol := ranking.NewProtocol()
globals.SecureEndpoint.RegisterServiceProtocol(rankingProtocol)
commonRankingProtocol := common_ranking.NewCommonProtocol(rankingProtocol)
commonRankingProtocol.GetRankingsAndCountByCategoryAndRankingOrderParam = database.GetRankingsAndCountByCategoryAndRankingOrderParam
commonRankingProtocol.InsertRankingByPIDAndRankingScoreData = database.InsertRankingByPIDAndRankingScoreData
}

View File

@ -1,14 +0,0 @@
package nex
import (
"github.com/PretendoNetwork/nex-protocols-go/ranking"
"github.com/PretendoNetwork/pikmin-3/globals"
nex_ranking "github.com/PretendoNetwork/pikmin-3/nex/ranking"
)
func registerSecureServerNEXProtocols() {
rankingProtocol := ranking.NewRankingProtocol(globals.SecureServer)
rankingProtocol.UploadScore(nex_ranking.UploadScore)
rankingProtocol.GetRanking(nex_ranking.GetRanking)
}

View File

@ -3,34 +3,37 @@ package nex
import (
"fmt"
"os"
"strconv"
nex "github.com/PretendoNetwork/nex-go"
nex "github.com/PretendoNetwork/nex-go/v2"
"github.com/PretendoNetwork/pikmin-3/globals"
)
func StartSecureServer() {
globals.SecureServer = nex.NewServer()
globals.SecureServer.SetPRUDPVersion(1)
globals.SecureServer.SetPRUDPProtocolMinorVersion(3)
globals.SecureServer.SetDefaultNEXVersion(&nex.NEXVersion{
Major: 3,
Minor: 3,
Patch: 0,
})
globals.SecureServer.SetKerberosPassword(globals.KerberosPassword)
globals.SecureServer.SetAccessKey("f6accfc1")
globals.SecureServer = nex.NewPRUDPServer()
globals.SecureServer.On("Data", func(packet *nex.PacketV1) {
request := packet.RMCRequest()
globals.SecureEndpoint = nex.NewPRUDPEndPoint(1)
globals.SecureEndpoint.IsSecureEndPoint = true
globals.SecureEndpoint.ServerAccount = globals.SecureServerAccount
globals.SecureEndpoint.AccountDetailsByPID = globals.AccountDetailsByPID
globals.SecureEndpoint.AccountDetailsByUsername = globals.AccountDetailsByUsername
globals.SecureServer.BindPRUDPEndPoint(globals.SecureEndpoint)
globals.SecureServer.LibraryVersions.SetDefault(nex.NewLibraryVersion(3, 3, 0))
globals.SecureServer.AccessKey = "f6accfc1"
globals.SecureEndpoint.OnData(func(packet nex.PacketInterface) {
request := packet.RMCMessage()
fmt.Println("==PIKMIN 3 - Secure==")
fmt.Printf("Protocol ID: %#v\n", request.ProtocolID())
fmt.Printf("Method ID: %#v\n", request.MethodID())
fmt.Printf("Protocol ID: %#v\n", request.ProtocolID)
fmt.Printf("Method ID: %#v\n", request.MethodID)
fmt.Println("===============")
})
registerCommonSecureServerProtocols()
registerSecureServerNEXProtocols()
globals.SecureServer.Listen(fmt.Sprintf(":%s", os.Getenv("PN_PIKMIN3_SECURE_SERVER_PORT")))
port, _ := strconv.Atoi(os.Getenv("PN_PIKMIN3_SECURE_SERVER_PORT"))
globals.SecureServer.Listen(port)
}