mirror of
https://github.com/PretendoNetwork/super-mario-maker.git
synced 2026-04-24 07:17:19 -05:00
Merge pull request #15 from TraceEntertains/master
Some checks are pending
Build and Publish Docker Image / build-publish (push) Waiting to run
Some checks are pending
Build and Publish Docker Image / build-publish (push) Waiting to run
Update to nex-go v2 libraries
This commit is contained in:
commit
a458ecd583
|
|
@ -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-alpine3.20 AS build
|
||||
ARG app_dir
|
||||
|
||||
WORKDIR ${app_dir}
|
||||
|
|
|
|||
|
|
@ -55,7 +55,6 @@ All configuration options are handled via environment variables
|
|||
| `PN_SMM_AUTHENTICATION_SERVER_PORT` | Port for the authentication server | Yes |
|
||||
| `PN_SMM_SECURE_SERVER_HOST` | Host name for the secure server | Yes |
|
||||
| `PN_SMM_SECURE_SERVER_PORT` | Port for the secure server | Yes |
|
||||
| `PN_SMM_KERBEROS_PASSWORD` | Password used as part of the internal server data in Kerberos tickets | No (Default password `password` will be used) |
|
||||
| `PN_SMM_CONFIG_S3_ENDPOINT` | S3 server endpoint | Yes |
|
||||
| `PN_SMM_CONFIG_S3_ACCESS_KEY` | S3 access key ID | Yes |
|
||||
| `PN_SMM_CONFIG_S3_ACCESS_SECRET` | S3 secret | Yes |
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ import (
|
|||
"database/sql"
|
||||
"os"
|
||||
|
||||
"github.com/PretendoNetwork/super-mario-maker-secure/globals"
|
||||
"github.com/PretendoNetwork/super-mario-maker/globals"
|
||||
_ "github.com/lib/pq"
|
||||
)
|
||||
|
||||
|
|
|
|||
|
|
@ -1,23 +1,24 @@
|
|||
package datastore_db
|
||||
|
||||
import (
|
||||
"github.com/PretendoNetwork/nex-go"
|
||||
"github.com/PretendoNetwork/super-mario-maker-secure/database"
|
||||
"github.com/PretendoNetwork/super-mario-maker-secure/globals"
|
||||
"github.com/PretendoNetwork/nex-go/v2"
|
||||
"github.com/PretendoNetwork/nex-go/v2/types"
|
||||
"github.com/PretendoNetwork/super-mario-maker/database"
|
||||
"github.com/PretendoNetwork/super-mario-maker/globals"
|
||||
)
|
||||
|
||||
func DeleteObjectByDataID(dataID uint64) uint32 {
|
||||
errCode := IsObjectAvailable(dataID)
|
||||
if errCode != 0 {
|
||||
return errCode
|
||||
func DeleteObjectByDataID(dataID types.UInt64) *nex.Error {
|
||||
nexError := IsObjectAvailable(dataID)
|
||||
if nexError != nil {
|
||||
return nexError
|
||||
}
|
||||
|
||||
_, err := database.Postgres.Exec(`UPDATE datastore.objects SET deleted=TRUE WHERE data_id=$1`, dataID)
|
||||
if err != nil {
|
||||
globals.Logger.Error(err.Error())
|
||||
// TODO - Send more specific errors?
|
||||
return nex.Errors.DataStore.Unknown
|
||||
return nex.NewError(nex.ResultCodes.DataStore.Unknown, err.Error())
|
||||
}
|
||||
|
||||
return 0
|
||||
return nil
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,27 +4,25 @@ import (
|
|||
"database/sql"
|
||||
"time"
|
||||
|
||||
"github.com/PretendoNetwork/nex-go"
|
||||
datastore_types "github.com/PretendoNetwork/nex-protocols-go/datastore/types"
|
||||
"github.com/PretendoNetwork/super-mario-maker-secure/database"
|
||||
"github.com/PretendoNetwork/super-mario-maker-secure/globals"
|
||||
"github.com/PretendoNetwork/nex-go/v2"
|
||||
"github.com/PretendoNetwork/nex-go/v2/types"
|
||||
datastore_types "github.com/PretendoNetwork/nex-protocols-go/v2/datastore/types"
|
||||
"github.com/PretendoNetwork/super-mario-maker/database"
|
||||
"github.com/PretendoNetwork/super-mario-maker/globals"
|
||||
"github.com/lib/pq"
|
||||
)
|
||||
|
||||
func GetObjectInfoByDataID(dataID uint64) (*datastore_types.DataStoreMetaInfo, uint32) {
|
||||
errCode := IsObjectAvailable(dataID)
|
||||
if errCode != 0 {
|
||||
return nil, errCode
|
||||
func GetObjectInfoByDataID(dataID types.UInt64) (datastore_types.DataStoreMetaInfo, *nex.Error) {
|
||||
nexError := IsObjectAvailable(dataID)
|
||||
if nexError != nil {
|
||||
return datastore_types.NewDataStoreMetaInfo(), nexError
|
||||
}
|
||||
|
||||
metaInfo := datastore_types.NewDataStoreMetaInfo()
|
||||
metaInfo.Permission = datastore_types.NewDataStorePermission()
|
||||
metaInfo.DelPermission = datastore_types.NewDataStorePermission()
|
||||
metaInfo.CreatedTime = nex.NewDateTime(0)
|
||||
metaInfo.UpdatedTime = nex.NewDateTime(0)
|
||||
metaInfo.ReferredTime = nex.NewDateTime(0)
|
||||
metaInfo.ExpireTime = nex.NewDateTime(0x9C3f3E0000) // * 9999-12-31T00:00:00.000Z. This is what the real server sends
|
||||
metaInfo.Ratings = make([]*datastore_types.DataStoreRatingInfoWithSlot, 0)
|
||||
metaInfo.ExpireTime = types.NewDateTime(0x9C3F3E0000) // * 9999-12-31T00:00:00.000Z. This is what the real server sends
|
||||
metaInfo.Ratings = types.NewList[datastore_types.DataStoreRatingInfoWithSlot]()
|
||||
|
||||
var createdDate time.Time
|
||||
var updatedDate time.Time
|
||||
|
|
@ -67,18 +65,18 @@ func GetObjectInfoByDataID(dataID uint64) (*datastore_types.DataStoreMetaInfo, u
|
|||
|
||||
if err != nil {
|
||||
if err == sql.ErrNoRows {
|
||||
return nil, nex.Errors.DataStore.NotFound
|
||||
return datastore_types.NewDataStoreMetaInfo(), nex.NewError(nex.ResultCodes.DataStore.NotFound, "Object not found")
|
||||
}
|
||||
|
||||
globals.Logger.Error(err.Error())
|
||||
|
||||
// TODO - Send more specific errors?
|
||||
return nil, nex.Errors.DataStore.Unknown
|
||||
return datastore_types.NewDataStoreMetaInfo(), nex.NewError(nex.ResultCodes.DataStore.Unknown, err.Error())
|
||||
}
|
||||
|
||||
ratings, errCode := GetObjectRatingsWithSlotByDataID(metaInfo.DataID)
|
||||
if errCode != 0 {
|
||||
return nil, errCode
|
||||
ratings, nexError := GetObjectRatingsWithSlotByDataID(metaInfo.DataID)
|
||||
if nexError != nil {
|
||||
return datastore_types.NewDataStoreMetaInfo(), nexError
|
||||
}
|
||||
|
||||
metaInfo.Ratings = ratings
|
||||
|
|
@ -87,5 +85,5 @@ func GetObjectInfoByDataID(dataID uint64) (*datastore_types.DataStoreMetaInfo, u
|
|||
metaInfo.UpdatedTime.FromTimestamp(updatedDate)
|
||||
metaInfo.ReferredTime.FromTimestamp(createdDate) // * This is what the real server does
|
||||
|
||||
return metaInfo, 0
|
||||
return metaInfo, nil
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,27 +4,25 @@ import (
|
|||
"database/sql"
|
||||
"time"
|
||||
|
||||
"github.com/PretendoNetwork/nex-go"
|
||||
datastore_types "github.com/PretendoNetwork/nex-protocols-go/datastore/types"
|
||||
"github.com/PretendoNetwork/super-mario-maker-secure/database"
|
||||
"github.com/PretendoNetwork/super-mario-maker-secure/globals"
|
||||
"github.com/PretendoNetwork/nex-go/v2"
|
||||
"github.com/PretendoNetwork/nex-go/v2/types"
|
||||
datastore_types "github.com/PretendoNetwork/nex-protocols-go/v2/datastore/types"
|
||||
"github.com/PretendoNetwork/super-mario-maker/database"
|
||||
"github.com/PretendoNetwork/super-mario-maker/globals"
|
||||
"github.com/lib/pq"
|
||||
)
|
||||
|
||||
func GetObjectInfoByDataIDWithPassword(dataID uint64, password uint64) (*datastore_types.DataStoreMetaInfo, uint32) {
|
||||
errCode := IsObjectAvailableWithPassword(dataID, password)
|
||||
if errCode != 0 {
|
||||
return nil, errCode
|
||||
func GetObjectInfoByDataIDWithPassword(dataID, password types.UInt64) (datastore_types.DataStoreMetaInfo, *nex.Error) {
|
||||
nexError := IsObjectAvailableWithPassword(dataID, password)
|
||||
if nexError != nil {
|
||||
return datastore_types.NewDataStoreMetaInfo(), nexError
|
||||
}
|
||||
|
||||
metaInfo := datastore_types.NewDataStoreMetaInfo()
|
||||
metaInfo.Permission = datastore_types.NewDataStorePermission()
|
||||
metaInfo.DelPermission = datastore_types.NewDataStorePermission()
|
||||
metaInfo.CreatedTime = nex.NewDateTime(0)
|
||||
metaInfo.UpdatedTime = nex.NewDateTime(0)
|
||||
metaInfo.ReferredTime = nex.NewDateTime(0)
|
||||
metaInfo.ExpireTime = nex.NewDateTime(0x9C3f3E0000) // * 9999-12-31T00:00:00.000Z. This is what the real server sends
|
||||
metaInfo.Ratings = make([]*datastore_types.DataStoreRatingInfoWithSlot, 0)
|
||||
metaInfo.ExpireTime = types.NewDateTime(0x9C3F3E0000) // * 9999-12-31T00:00:00.000Z. This is what the real server sends
|
||||
metaInfo.Ratings = types.NewList[datastore_types.DataStoreRatingInfoWithSlot]()
|
||||
|
||||
var createdDate time.Time
|
||||
var updatedDate time.Time
|
||||
|
|
@ -67,17 +65,17 @@ func GetObjectInfoByDataIDWithPassword(dataID uint64, password uint64) (*datasto
|
|||
|
||||
if err != nil {
|
||||
if err == sql.ErrNoRows {
|
||||
return nil, nex.Errors.DataStore.NotFound
|
||||
return datastore_types.NewDataStoreMetaInfo(), nex.NewError(nex.ResultCodes.DataStore.NotFound, err.Error())
|
||||
}
|
||||
|
||||
globals.Logger.Error(err.Error())
|
||||
// TODO - Send more specific errors?
|
||||
return nil, nex.Errors.DataStore.Unknown
|
||||
return datastore_types.NewDataStoreMetaInfo(), nex.NewError(nex.ResultCodes.DataStore.Unknown, err.Error())
|
||||
}
|
||||
|
||||
ratings, errCode := GetObjectRatingsWithSlotByDataIDWithPassword(metaInfo.DataID, password)
|
||||
if errCode != 0 {
|
||||
return nil, errCode
|
||||
ratings, nexError := GetObjectRatingsWithSlotByDataIDWithPassword(metaInfo.DataID, password)
|
||||
if nexError != nil {
|
||||
return datastore_types.NewDataStoreMetaInfo(), nexError
|
||||
}
|
||||
|
||||
metaInfo.Ratings = ratings
|
||||
|
|
@ -86,5 +84,5 @@ func GetObjectInfoByDataIDWithPassword(dataID uint64, password uint64) (*datasto
|
|||
metaInfo.UpdatedTime.FromTimestamp(updatedDate)
|
||||
metaInfo.ReferredTime.FromTimestamp(createdDate) // * This is what the real server does
|
||||
|
||||
return metaInfo, 0
|
||||
return metaInfo, nil
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,24 +4,22 @@ import (
|
|||
"database/sql"
|
||||
"time"
|
||||
|
||||
"github.com/PretendoNetwork/nex-go"
|
||||
datastore_types "github.com/PretendoNetwork/nex-protocols-go/datastore/types"
|
||||
"github.com/PretendoNetwork/super-mario-maker-secure/database"
|
||||
"github.com/PretendoNetwork/super-mario-maker-secure/globals"
|
||||
"github.com/PretendoNetwork/nex-go/v2"
|
||||
"github.com/PretendoNetwork/nex-go/v2/types"
|
||||
datastore_types "github.com/PretendoNetwork/nex-protocols-go/v2/datastore/types"
|
||||
"github.com/PretendoNetwork/super-mario-maker/database"
|
||||
"github.com/PretendoNetwork/super-mario-maker/globals"
|
||||
"github.com/lib/pq"
|
||||
)
|
||||
|
||||
func GetObjectInfoByPersistenceTargetWithPassword(persistenceTarget *datastore_types.DataStorePersistenceTarget, password uint64) (*datastore_types.DataStoreMetaInfo, uint32) {
|
||||
func GetObjectInfoByPersistenceTargetWithPassword(persistenceTarget datastore_types.DataStorePersistenceTarget, password types.UInt64) (datastore_types.DataStoreMetaInfo, *nex.Error) {
|
||||
metaInfo := datastore_types.NewDataStoreMetaInfo()
|
||||
metaInfo.Permission = datastore_types.NewDataStorePermission()
|
||||
metaInfo.DelPermission = datastore_types.NewDataStorePermission()
|
||||
metaInfo.CreatedTime = nex.NewDateTime(0)
|
||||
metaInfo.UpdatedTime = nex.NewDateTime(0)
|
||||
metaInfo.ReferredTime = nex.NewDateTime(0)
|
||||
metaInfo.ExpireTime = nex.NewDateTime(0x9C3f3E0000) // * 9999-12-31T00:00:00.000Z. This is what the real server sends
|
||||
metaInfo.Ratings = make([]*datastore_types.DataStoreRatingInfoWithSlot, 0)
|
||||
metaInfo.ExpireTime = types.NewDateTime(0x9C3F3E0000) // * 9999-12-31T00:00:00.000Z. This is what the real server sends
|
||||
metaInfo.Ratings = types.NewList[datastore_types.DataStoreRatingInfoWithSlot]()
|
||||
|
||||
var accessPassword uint64
|
||||
var accessPassword types.UInt64
|
||||
var underReview bool
|
||||
var createdDate time.Time
|
||||
var updatedDate time.Time
|
||||
|
|
@ -68,27 +66,27 @@ func GetObjectInfoByPersistenceTargetWithPassword(persistenceTarget *datastore_t
|
|||
|
||||
if err != nil {
|
||||
if err == sql.ErrNoRows {
|
||||
return nil, nex.Errors.DataStore.NotFound
|
||||
return datastore_types.NewDataStoreMetaInfo(), nex.NewError(nex.ResultCodes.DataStore.NotFound, "Object not found")
|
||||
}
|
||||
|
||||
globals.Logger.Error(err.Error())
|
||||
|
||||
// TODO - Send more specific errors?
|
||||
return nil, nex.Errors.DataStore.Unknown
|
||||
return datastore_types.NewDataStoreMetaInfo(), nex.NewError(nex.ResultCodes.DataStore.Unknown, err.Error())
|
||||
}
|
||||
|
||||
if accessPassword != 0 && accessPassword != password {
|
||||
return nil, nex.Errors.DataStore.InvalidPassword
|
||||
return datastore_types.NewDataStoreMetaInfo(), nex.NewError(nex.ResultCodes.DataStore.InvalidPassword, "Invalid password")
|
||||
}
|
||||
|
||||
if underReview {
|
||||
return nil, nex.Errors.DataStore.UnderReviewing
|
||||
return datastore_types.NewDataStoreMetaInfo(), nex.NewError(nex.ResultCodes.DataStore.UnderReviewing, "This object is currently under review")
|
||||
}
|
||||
|
||||
ratings, errCode := GetObjectRatingsWithSlotByDataIDWithPassword(metaInfo.DataID, password)
|
||||
if errCode != 0 {
|
||||
ratings, nexError := GetObjectRatingsWithSlotByDataIDWithPassword(metaInfo.DataID, password)
|
||||
if nexError != nil {
|
||||
globals.Logger.Errorf("Failed to get ratings for object %d with password %d", metaInfo.DataID, password)
|
||||
return nil, errCode
|
||||
return datastore_types.NewDataStoreMetaInfo(), nexError
|
||||
}
|
||||
|
||||
metaInfo.Ratings = ratings
|
||||
|
|
@ -97,5 +95,5 @@ func GetObjectInfoByPersistenceTargetWithPassword(persistenceTarget *datastore_t
|
|||
metaInfo.UpdatedTime.FromTimestamp(updatedDate)
|
||||
metaInfo.ReferredTime.FromTimestamp(createdDate) // * This is what the real server does
|
||||
|
||||
return metaInfo, 0
|
||||
return metaInfo, nil
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,24 +3,25 @@ package datastore_db
|
|||
import (
|
||||
"database/sql"
|
||||
|
||||
"github.com/PretendoNetwork/nex-go"
|
||||
"github.com/PretendoNetwork/super-mario-maker-secure/database"
|
||||
"github.com/PretendoNetwork/super-mario-maker-secure/globals"
|
||||
"github.com/PretendoNetwork/nex-go/v2"
|
||||
"github.com/PretendoNetwork/nex-go/v2/types"
|
||||
"github.com/PretendoNetwork/super-mario-maker/database"
|
||||
"github.com/PretendoNetwork/super-mario-maker/globals"
|
||||
)
|
||||
|
||||
func GetObjectOwnerByDataID(dataID uint64) (uint32, uint32) {
|
||||
func GetObjectOwnerByDataID(dataID types.UInt64) (uint32, *nex.Error) {
|
||||
var owner uint32
|
||||
|
||||
err := database.Postgres.QueryRow(`SELECT owner FROM datastore.objects WHERE data_id=$1`, dataID).Scan(&owner)
|
||||
if err != nil {
|
||||
if err == sql.ErrNoRows {
|
||||
return 0, nex.Errors.DataStore.NotFound
|
||||
return 0, nex.NewError(nex.ResultCodes.DataStore.NotFound, "Object not found")
|
||||
}
|
||||
|
||||
globals.Logger.Error(err.Error())
|
||||
// TODO - Send more specific errors?
|
||||
return 0, nex.Errors.DataStore.Unknown
|
||||
return 0, nex.NewError(nex.ResultCodes.DataStore.Unknown, err.Error())
|
||||
}
|
||||
|
||||
return owner, 0
|
||||
return owner, nil
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,30 +3,31 @@ package datastore_db
|
|||
import (
|
||||
"database/sql"
|
||||
|
||||
"github.com/PretendoNetwork/nex-go"
|
||||
datastore_types "github.com/PretendoNetwork/nex-protocols-go/datastore/types"
|
||||
"github.com/PretendoNetwork/super-mario-maker-secure/database"
|
||||
"github.com/PretendoNetwork/super-mario-maker-secure/globals"
|
||||
"github.com/PretendoNetwork/nex-go/v2"
|
||||
"github.com/PretendoNetwork/nex-go/v2/types"
|
||||
datastore_types "github.com/PretendoNetwork/nex-protocols-go/v2/datastore/types"
|
||||
"github.com/PretendoNetwork/super-mario-maker/database"
|
||||
"github.com/PretendoNetwork/super-mario-maker/globals"
|
||||
)
|
||||
|
||||
func GetObjectRatingsWithSlotByDataID(dataID uint64) ([]*datastore_types.DataStoreRatingInfoWithSlot, uint32) {
|
||||
errCode := IsObjectAvailable(dataID)
|
||||
if errCode != 0 {
|
||||
return nil, errCode
|
||||
func GetObjectRatingsWithSlotByDataID(dataID types.UInt64) ([]datastore_types.DataStoreRatingInfoWithSlot, *nex.Error) {
|
||||
nexError := IsObjectAvailable(dataID)
|
||||
if nexError != nil {
|
||||
return nil, nexError
|
||||
}
|
||||
|
||||
ratings := make([]*datastore_types.DataStoreRatingInfoWithSlot, 0)
|
||||
ratings := types.NewList[datastore_types.DataStoreRatingInfoWithSlot]()
|
||||
|
||||
rows, err := database.Postgres.Query(`SELECT slot, total_value, count, initial_value FROM datastore.object_ratings WHERE data_id=$1`, dataID)
|
||||
if err != nil {
|
||||
if err == sql.ErrNoRows {
|
||||
return nil, nex.Errors.DataStore.NotFound
|
||||
return nil, nex.NewError(nex.ResultCodes.DataStore.NotFound, "Object not found")
|
||||
}
|
||||
|
||||
globals.Logger.Error(err.Error())
|
||||
|
||||
// TODO - Send more specific errors?
|
||||
return nil, nex.Errors.DataStore.Unknown
|
||||
return nil, nex.NewError(nex.ResultCodes.DataStore.Unknown, err.Error())
|
||||
}
|
||||
|
||||
defer rows.Close()
|
||||
|
|
@ -40,7 +41,7 @@ func GetObjectRatingsWithSlotByDataID(dataID uint64) ([]*datastore_types.DataSto
|
|||
if err != nil {
|
||||
globals.Logger.Error(err.Error())
|
||||
// TODO - Send more specific errors?
|
||||
return nil, nex.Errors.DataStore.Unknown
|
||||
return nil, nex.NewError(nex.ResultCodes.DataStore.Unknown, err.Error())
|
||||
}
|
||||
|
||||
ratings = append(ratings, rating)
|
||||
|
|
@ -49,8 +50,8 @@ func GetObjectRatingsWithSlotByDataID(dataID uint64) ([]*datastore_types.DataSto
|
|||
if err := rows.Err(); err != nil {
|
||||
globals.Logger.Error(err.Error())
|
||||
// TODO - Send more specific errors?
|
||||
return nil, nex.Errors.DataStore.Unknown
|
||||
return nil, nex.NewError(nex.ResultCodes.DataStore.Unknown, err.Error())
|
||||
}
|
||||
|
||||
return ratings, 0
|
||||
return ratings, nil
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,30 +3,31 @@ package datastore_db
|
|||
import (
|
||||
"database/sql"
|
||||
|
||||
"github.com/PretendoNetwork/nex-go"
|
||||
datastore_types "github.com/PretendoNetwork/nex-protocols-go/datastore/types"
|
||||
"github.com/PretendoNetwork/super-mario-maker-secure/database"
|
||||
"github.com/PretendoNetwork/super-mario-maker-secure/globals"
|
||||
"github.com/PretendoNetwork/nex-go/v2"
|
||||
"github.com/PretendoNetwork/nex-go/v2/types"
|
||||
datastore_types "github.com/PretendoNetwork/nex-protocols-go/v2/datastore/types"
|
||||
"github.com/PretendoNetwork/super-mario-maker/database"
|
||||
"github.com/PretendoNetwork/super-mario-maker/globals"
|
||||
)
|
||||
|
||||
func GetObjectRatingsWithSlotByDataIDWithPassword(dataID uint64, password uint64) ([]*datastore_types.DataStoreRatingInfoWithSlot, uint32) {
|
||||
errCode := IsObjectAvailableWithPassword(dataID, password)
|
||||
if errCode != 0 {
|
||||
return nil, errCode
|
||||
func GetObjectRatingsWithSlotByDataIDWithPassword(dataID, password types.UInt64) ([]datastore_types.DataStoreRatingInfoWithSlot, *nex.Error) {
|
||||
nexError := IsObjectAvailableWithPassword(dataID, password)
|
||||
if nexError != nil {
|
||||
return nil, nexError
|
||||
}
|
||||
|
||||
ratings := make([]*datastore_types.DataStoreRatingInfoWithSlot, 0)
|
||||
ratings := types.NewList[datastore_types.DataStoreRatingInfoWithSlot]()
|
||||
|
||||
rows, err := database.Postgres.Query(`SELECT slot, total_value, count, initial_value FROM datastore.object_ratings WHERE data_id=$1`, dataID)
|
||||
if err != nil {
|
||||
if err == sql.ErrNoRows {
|
||||
return nil, nex.Errors.DataStore.NotFound
|
||||
return nil, nex.NewError(nex.ResultCodes.DataStore.NotFound, "Object not found")
|
||||
}
|
||||
|
||||
globals.Logger.Error(err.Error())
|
||||
|
||||
// TODO - Send more specific errors?
|
||||
return nil, nex.Errors.DataStore.Unknown
|
||||
return nil, nex.NewError(nex.ResultCodes.DataStore.Unknown, err.Error())
|
||||
}
|
||||
|
||||
defer rows.Close()
|
||||
|
|
@ -40,7 +41,7 @@ func GetObjectRatingsWithSlotByDataIDWithPassword(dataID uint64, password uint64
|
|||
if err != nil {
|
||||
globals.Logger.Error(err.Error())
|
||||
// TODO - Send more specific errors?
|
||||
return nil, nex.Errors.DataStore.Unknown
|
||||
return nil, nex.NewError(nex.ResultCodes.DataStore.Unknown, err.Error())
|
||||
}
|
||||
|
||||
ratings = append(ratings, rating)
|
||||
|
|
@ -49,8 +50,8 @@ func GetObjectRatingsWithSlotByDataIDWithPassword(dataID uint64, password uint64
|
|||
if err := rows.Err(); err != nil {
|
||||
globals.Logger.Error(err.Error())
|
||||
// TODO - Send more specific errors?
|
||||
return nil, nex.Errors.DataStore.Unknown
|
||||
return nil, nex.NewError(nex.ResultCodes.DataStore.Unknown, err.Error())
|
||||
}
|
||||
|
||||
return ratings, 0
|
||||
return ratings, nil
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,24 +3,25 @@ package datastore_db
|
|||
import (
|
||||
"database/sql"
|
||||
|
||||
"github.com/PretendoNetwork/nex-go"
|
||||
"github.com/PretendoNetwork/super-mario-maker-secure/database"
|
||||
"github.com/PretendoNetwork/super-mario-maker-secure/globals"
|
||||
"github.com/PretendoNetwork/nex-go/v2"
|
||||
"github.com/PretendoNetwork/nex-go/v2/types"
|
||||
"github.com/PretendoNetwork/super-mario-maker/database"
|
||||
"github.com/PretendoNetwork/super-mario-maker/globals"
|
||||
)
|
||||
|
||||
func GetObjectSizeDataID(dataID uint64) (uint32, uint32) {
|
||||
func GetObjectSizeByDataID(dataID types.UInt64) (uint32, *nex.Error) {
|
||||
var size uint32
|
||||
|
||||
err := database.Postgres.QueryRow(`SELECT size FROM datastore.objects WHERE data_id=$1`, dataID).Scan(&size)
|
||||
if err != nil {
|
||||
if err == sql.ErrNoRows {
|
||||
return 0, nex.Errors.DataStore.NotFound
|
||||
return 0, nex.NewError(nex.ResultCodes.DataStore.NotFound, "Object not found")
|
||||
}
|
||||
|
||||
globals.Logger.Error(err.Error())
|
||||
// TODO - Send more specific errors?
|
||||
return 0, nex.Errors.DataStore.Unknown
|
||||
return 0, nex.NewError(nex.ResultCodes.DataStore.Unknown, err.Error())
|
||||
}
|
||||
|
||||
return size, 0
|
||||
return size, nil
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,18 +3,18 @@ package datastore_db
|
|||
import (
|
||||
"time"
|
||||
|
||||
"github.com/PretendoNetwork/nex-go"
|
||||
datastore_types "github.com/PretendoNetwork/nex-protocols-go/datastore/types"
|
||||
"github.com/PretendoNetwork/super-mario-maker-secure/database"
|
||||
"github.com/PretendoNetwork/super-mario-maker-secure/globals"
|
||||
"github.com/PretendoNetwork/nex-go/v2"
|
||||
"github.com/PretendoNetwork/nex-go/v2/types"
|
||||
datastore_types "github.com/PretendoNetwork/nex-protocols-go/v2/datastore/types"
|
||||
"github.com/PretendoNetwork/super-mario-maker/database"
|
||||
"github.com/PretendoNetwork/super-mario-maker/globals"
|
||||
"github.com/lib/pq"
|
||||
)
|
||||
|
||||
func InitializeObjectByPreparePostParam(ownerPID uint32, param *datastore_types.DataStorePreparePostParam) (uint64, uint32) {
|
||||
now := time.Now()
|
||||
|
||||
func InitializeObjectByPreparePostParam(ownerPID types.PID, param datastore_types.DataStorePreparePostParam) (uint64, *nex.Error) {
|
||||
var dataID uint64
|
||||
|
||||
now := time.Now()
|
||||
err := database.Postgres.QueryRow(`INSERT INTO datastore.objects (
|
||||
owner,
|
||||
size,
|
||||
|
|
@ -74,8 +74,8 @@ func InitializeObjectByPreparePostParam(ownerPID uint32, param *datastore_types.
|
|||
if err != nil {
|
||||
globals.Logger.Error(err.Error())
|
||||
// TODO - Send more specific errors?
|
||||
return 0, nex.Errors.DataStore.Unknown
|
||||
return 0, nex.NewError(nex.ResultCodes.DataStore.Unknown, err.Error())
|
||||
}
|
||||
|
||||
return dataID, 0
|
||||
return dataID, nil
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,13 +1,13 @@
|
|||
package datastore_db
|
||||
|
||||
import (
|
||||
"github.com/PretendoNetwork/nex-go"
|
||||
datastore_types "github.com/PretendoNetwork/nex-protocols-go/datastore/types"
|
||||
"github.com/PretendoNetwork/super-mario-maker-secure/database"
|
||||
"github.com/PretendoNetwork/super-mario-maker-secure/globals"
|
||||
"github.com/PretendoNetwork/nex-go/v2"
|
||||
datastore_types "github.com/PretendoNetwork/nex-protocols-go/v2/datastore/types"
|
||||
"github.com/PretendoNetwork/super-mario-maker/database"
|
||||
"github.com/PretendoNetwork/super-mario-maker/globals"
|
||||
)
|
||||
|
||||
func InitializeObjectRatingWithSlot(dataID uint64, param *datastore_types.DataStoreRatingInitParamWithSlot) uint32 {
|
||||
func InitializeObjectRatingWithSlot(dataID uint64, param datastore_types.DataStoreRatingInitParamWithSlot) *nex.Error {
|
||||
_, err := database.Postgres.Exec(`INSERT INTO datastore.object_ratings (
|
||||
data_id,
|
||||
slot,
|
||||
|
|
@ -49,8 +49,8 @@ func InitializeObjectRatingWithSlot(dataID uint64, param *datastore_types.DataSt
|
|||
if err != nil {
|
||||
globals.Logger.Error(err.Error())
|
||||
// TODO - Send more specific errors?
|
||||
return nex.Errors.DataStore.Unknown
|
||||
return nex.NewError(nex.ResultCodes.DataStore.Unknown, err.Error())
|
||||
}
|
||||
|
||||
return 0
|
||||
return nil
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,28 +3,29 @@ package datastore_db
|
|||
import (
|
||||
"database/sql"
|
||||
|
||||
"github.com/PretendoNetwork/nex-go"
|
||||
"github.com/PretendoNetwork/super-mario-maker-secure/database"
|
||||
"github.com/PretendoNetwork/super-mario-maker-secure/globals"
|
||||
"github.com/PretendoNetwork/nex-go/v2"
|
||||
"github.com/PretendoNetwork/nex-go/v2/types"
|
||||
"github.com/PretendoNetwork/super-mario-maker/database"
|
||||
"github.com/PretendoNetwork/super-mario-maker/globals"
|
||||
)
|
||||
|
||||
func IsObjectAvailable(dataID uint64) uint32 {
|
||||
func IsObjectAvailable(dataID types.UInt64) *nex.Error {
|
||||
var underReview bool
|
||||
|
||||
err := database.Postgres.QueryRow(`SELECT under_review FROM datastore.objects WHERE data_id=$1 AND upload_completed=TRUE AND deleted=FALSE`, dataID).Scan(&underReview)
|
||||
if err != nil {
|
||||
if err == sql.ErrNoRows {
|
||||
return nex.Errors.DataStore.NotFound
|
||||
return nex.NewError(nex.ResultCodes.DataStore.NotFound, "Object not found")
|
||||
}
|
||||
|
||||
globals.Logger.Error(err.Error())
|
||||
// TODO - Send more specific errors?
|
||||
return nex.Errors.DataStore.Unknown
|
||||
return nex.NewError(nex.ResultCodes.DataStore.Unknown, err.Error())
|
||||
}
|
||||
|
||||
if underReview {
|
||||
return nex.Errors.DataStore.UnderReviewing
|
||||
return nex.NewError(nex.ResultCodes.DataStore.UnderReviewing, "This object is currently under review")
|
||||
}
|
||||
|
||||
return 0
|
||||
return nil
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,14 +3,15 @@ package datastore_db
|
|||
import (
|
||||
"database/sql"
|
||||
|
||||
"github.com/PretendoNetwork/nex-go"
|
||||
"github.com/PretendoNetwork/super-mario-maker-secure/database"
|
||||
"github.com/PretendoNetwork/super-mario-maker-secure/globals"
|
||||
"github.com/PretendoNetwork/nex-go/v2"
|
||||
"github.com/PretendoNetwork/nex-go/v2/types"
|
||||
"github.com/PretendoNetwork/super-mario-maker/database"
|
||||
"github.com/PretendoNetwork/super-mario-maker/globals"
|
||||
)
|
||||
|
||||
func IsObjectAvailableWithPassword(dataID, password uint64) uint32 {
|
||||
func IsObjectAvailableWithPassword(dataID, password types.UInt64) *nex.Error {
|
||||
var underReview bool
|
||||
var accessPassword uint64
|
||||
var accessPassword types.UInt64
|
||||
|
||||
err := database.Postgres.QueryRow(`SELECT
|
||||
under_review,
|
||||
|
|
@ -22,21 +23,21 @@ func IsObjectAvailableWithPassword(dataID, password uint64) uint32 {
|
|||
|
||||
if err != nil {
|
||||
if err == sql.ErrNoRows {
|
||||
return nex.Errors.DataStore.NotFound
|
||||
return nex.NewError(nex.ResultCodes.DataStore.NotFound, "Object not found")
|
||||
}
|
||||
|
||||
globals.Logger.Error(err.Error())
|
||||
// TODO - Send more specific errors?
|
||||
return nex.Errors.DataStore.Unknown
|
||||
return nex.NewError(nex.ResultCodes.DataStore.Unknown, err.Error())
|
||||
}
|
||||
|
||||
if accessPassword != 0 && accessPassword != password {
|
||||
return nex.Errors.DataStore.InvalidPassword
|
||||
return nex.NewError(nex.ResultCodes.DataStore.InvalidPassword, "Invalid password")
|
||||
}
|
||||
|
||||
if underReview {
|
||||
return nex.Errors.DataStore.UnderReviewing
|
||||
return nex.NewError(nex.ResultCodes.DataStore.UnderReviewing, "This object is currently under review")
|
||||
}
|
||||
|
||||
return 0
|
||||
return nil
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,16 +3,17 @@ package datastore_db
|
|||
import (
|
||||
"database/sql"
|
||||
|
||||
"github.com/PretendoNetwork/nex-go"
|
||||
datastore_types "github.com/PretendoNetwork/nex-protocols-go/datastore/types"
|
||||
"github.com/PretendoNetwork/super-mario-maker-secure/database"
|
||||
"github.com/PretendoNetwork/super-mario-maker-secure/globals"
|
||||
"github.com/PretendoNetwork/nex-go/v2"
|
||||
"github.com/PretendoNetwork/nex-go/v2/types"
|
||||
datastore_types "github.com/PretendoNetwork/nex-protocols-go/v2/datastore/types"
|
||||
"github.com/PretendoNetwork/super-mario-maker/database"
|
||||
"github.com/PretendoNetwork/super-mario-maker/globals"
|
||||
)
|
||||
|
||||
func RateObjectWithPassword(dataID uint64, slot uint8, ratingValue int32, accessPassword uint64) (*datastore_types.DataStoreRatingInfo, uint32) {
|
||||
errCode := IsObjectAvailableWithPassword(dataID, accessPassword)
|
||||
if errCode != 0 {
|
||||
return nil, errCode
|
||||
func RateObjectWithPassword(dataID types.UInt64, slot types.UInt8, ratingValue types.Int32, accessPassword types.UInt64) (datastore_types.DataStoreRatingInfo, *nex.Error) {
|
||||
nexError := IsObjectAvailableWithPassword(dataID, accessPassword)
|
||||
if nexError != nil {
|
||||
return datastore_types.NewDataStoreRatingInfo(), nexError
|
||||
}
|
||||
|
||||
rating := datastore_types.NewDataStoreRatingInfo()
|
||||
|
|
@ -34,13 +35,13 @@ func RateObjectWithPassword(dataID uint64, slot uint8, ratingValue int32, access
|
|||
// * to the check at the start of the function.
|
||||
// * This is an invalid argument
|
||||
if err == sql.ErrNoRows {
|
||||
return nil, nex.Errors.DataStore.InvalidArgument
|
||||
return datastore_types.NewDataStoreRatingInfo(), nex.NewError(nex.ResultCodes.DataStore.InvalidArgument, "Invalid argument")
|
||||
}
|
||||
|
||||
globals.Logger.Error(err.Error())
|
||||
// TODO - Send more specific errors?
|
||||
return nil, nex.Errors.DataStore.Unknown
|
||||
return datastore_types.NewDataStoreRatingInfo(), nex.NewError(nex.ResultCodes.DataStore.Unknown, err.Error())
|
||||
}
|
||||
|
||||
return rating, 0
|
||||
return rating, nil
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,36 +3,37 @@ package datastore_smm_db
|
|||
import (
|
||||
"database/sql"
|
||||
|
||||
"github.com/PretendoNetwork/nex-go"
|
||||
"github.com/PretendoNetwork/super-mario-maker-secure/database"
|
||||
datastore_db "github.com/PretendoNetwork/super-mario-maker-secure/database/datastore"
|
||||
"github.com/PretendoNetwork/nex-go/v2"
|
||||
"github.com/PretendoNetwork/nex-go/v2/types"
|
||||
"github.com/PretendoNetwork/super-mario-maker/database"
|
||||
datastore_db "github.com/PretendoNetwork/super-mario-maker/database/datastore"
|
||||
)
|
||||
|
||||
func GetBufferQueuesByDataIDAndSlot(dataID uint64, slot uint32) ([][]byte, uint32) {
|
||||
errCode := datastore_db.IsObjectAvailable(dataID)
|
||||
if errCode != 0 {
|
||||
return nil, errCode
|
||||
func GetBufferQueuesByDataIDAndSlot(dataID types.UInt64, slot types.UInt32) (types.List[types.QBuffer], *nex.Error) {
|
||||
nexError := datastore_db.IsObjectAvailable(dataID)
|
||||
if nexError != nil {
|
||||
return nil, nexError
|
||||
}
|
||||
|
||||
bufferQueues := make([][]byte, 0)
|
||||
bufferQueues := types.NewList[types.QBuffer]()
|
||||
|
||||
rows, err := database.Postgres.Query(`SELECT buffer FROM datastore.buffer_queues WHERE data_id=$1 AND slot=$2 ORDER BY creation_date`, dataID, slot)
|
||||
|
||||
// * No rows is allowed
|
||||
if err != nil && err != sql.ErrNoRows {
|
||||
// TODO - Send more specific errors?
|
||||
return nil, nex.Errors.DataStore.Unknown
|
||||
return nil, nex.NewError(nex.ResultCodes.DataStore.Unknown, err.Error())
|
||||
}
|
||||
|
||||
defer rows.Close()
|
||||
|
||||
for rows.Next() {
|
||||
var buffer []byte
|
||||
var buffer types.QBuffer
|
||||
|
||||
err := rows.Scan(&buffer)
|
||||
if err != nil {
|
||||
// TODO - Send more specific errors?
|
||||
return nil, nex.Errors.DataStore.Unknown
|
||||
return nil, nex.NewError(nex.ResultCodes.DataStore.Unknown, err.Error())
|
||||
}
|
||||
|
||||
bufferQueues = append(bufferQueues, buffer)
|
||||
|
|
@ -40,8 +41,8 @@ func GetBufferQueuesByDataIDAndSlot(dataID uint64, slot uint32) ([][]byte, uint3
|
|||
|
||||
if err := rows.Err(); err != nil {
|
||||
// TODO - Send more specific errors?
|
||||
return nil, nex.Errors.DataStore.Unknown
|
||||
return nil, nex.NewError(nex.ResultCodes.DataStore.Unknown, err.Error())
|
||||
}
|
||||
|
||||
return bufferQueues, 0
|
||||
return bufferQueues, nil
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,25 +4,23 @@ import (
|
|||
"database/sql"
|
||||
"time"
|
||||
|
||||
"github.com/PretendoNetwork/nex-go"
|
||||
datastore_super_mario_maker_types "github.com/PretendoNetwork/nex-protocols-go/datastore/super-mario-maker/types"
|
||||
"github.com/PretendoNetwork/super-mario-maker-secure/database"
|
||||
datastore_db "github.com/PretendoNetwork/super-mario-maker-secure/database/datastore"
|
||||
"github.com/PretendoNetwork/super-mario-maker-secure/globals"
|
||||
"github.com/PretendoNetwork/nex-go/v2"
|
||||
"github.com/PretendoNetwork/nex-go/v2/types"
|
||||
datastore_super_mario_maker_types "github.com/PretendoNetwork/nex-protocols-go/v2/datastore/super-mario-maker/types"
|
||||
"github.com/PretendoNetwork/super-mario-maker/database"
|
||||
datastore_db "github.com/PretendoNetwork/super-mario-maker/database/datastore"
|
||||
"github.com/PretendoNetwork/super-mario-maker/globals"
|
||||
)
|
||||
|
||||
func GetCourseRecordByDataIDAndSlot(dataID uint64, slot uint8) (*datastore_super_mario_maker_types.DataStoreGetCourseRecordResult, uint32) {
|
||||
errCode := datastore_db.IsObjectAvailable(dataID)
|
||||
if errCode != 0 {
|
||||
return nil, errCode
|
||||
func GetCourseRecordByDataIDAndSlot(dataID types.UInt64, slot types.UInt8) (datastore_super_mario_maker_types.DataStoreGetCourseRecordResult, *nex.Error) {
|
||||
nexError := datastore_db.IsObjectAvailable(dataID)
|
||||
if nexError != nil {
|
||||
return datastore_super_mario_maker_types.NewDataStoreGetCourseRecordResult(), nexError
|
||||
}
|
||||
|
||||
courseRecord := datastore_super_mario_maker_types.NewDataStoreGetCourseRecordResult()
|
||||
courseRecord.DataID = dataID
|
||||
courseRecord.Slot = slot
|
||||
courseRecord.CreatedTime = nex.NewDateTime(0)
|
||||
courseRecord.UpdatedTime = nex.NewDateTime(0)
|
||||
|
||||
var createdDate time.Time
|
||||
var updatedDate time.Time
|
||||
|
||||
|
|
@ -45,16 +43,16 @@ func GetCourseRecordByDataIDAndSlot(dataID uint64, slot uint8) (*datastore_super
|
|||
|
||||
if err != nil {
|
||||
if err == sql.ErrNoRows {
|
||||
return nil, nex.Errors.DataStore.NotFound
|
||||
return datastore_super_mario_maker_types.NewDataStoreGetCourseRecordResult(), nex.NewError(nex.ResultCodes.DataStore.NotFound, "Object not found")
|
||||
}
|
||||
|
||||
globals.Logger.Error(err.Error())
|
||||
// TODO - Send more specific errors?
|
||||
return nil, nex.Errors.DataStore.Unknown
|
||||
return datastore_super_mario_maker_types.NewDataStoreGetCourseRecordResult(), nex.NewError(nex.ResultCodes.DataStore.Unknown, err.Error())
|
||||
}
|
||||
|
||||
courseRecord.CreatedTime.FromTimestamp(createdDate)
|
||||
courseRecord.UpdatedTime.FromTimestamp(updatedDate)
|
||||
|
||||
return courseRecord, 0
|
||||
return courseRecord, nil
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,21 +3,22 @@ package datastore_smm_db
|
|||
import (
|
||||
"database/sql"
|
||||
|
||||
datastore_super_mario_maker_types "github.com/PretendoNetwork/nex-protocols-go/datastore/super-mario-maker/types"
|
||||
"github.com/PretendoNetwork/super-mario-maker-secure/database"
|
||||
datastore_db "github.com/PretendoNetwork/super-mario-maker-secure/database/datastore"
|
||||
"github.com/PretendoNetwork/super-mario-maker-secure/globals"
|
||||
"github.com/PretendoNetwork/nex-go/v2/types"
|
||||
datastore_super_mario_maker_types "github.com/PretendoNetwork/nex-protocols-go/v2/datastore/super-mario-maker/types"
|
||||
"github.com/PretendoNetwork/super-mario-maker/database"
|
||||
datastore_db "github.com/PretendoNetwork/super-mario-maker/database/datastore"
|
||||
"github.com/PretendoNetwork/super-mario-maker/globals"
|
||||
"github.com/lib/pq"
|
||||
)
|
||||
|
||||
func GetCustomRankingsByDataIDs(applicationID uint32, dataIDs []uint64) []*datastore_super_mario_maker_types.DataStoreCustomRankingResult {
|
||||
func GetCustomRankingsByDataIDs(applicationID types.UInt32, dataIDs types.List[types.UInt64]) types.List[datastore_super_mario_maker_types.DataStoreCustomRankingResult] {
|
||||
// * Unlike other methods which query for multiple objects,
|
||||
// * DataStoreSMM::GetCustomRankingByDataID *OMITS* objects
|
||||
// * from it's response if they could not be found, rather
|
||||
// * than using a zero-ed object and DataStore::NotFound as
|
||||
// * the Result. Because of this, all errors are just thrown
|
||||
// * away here and not sent back to the client
|
||||
results := make([]*datastore_super_mario_maker_types.DataStoreCustomRankingResult, 0, len(dataIDs))
|
||||
results := make(types.List[datastore_super_mario_maker_types.DataStoreCustomRankingResult], 0, len(dataIDs))
|
||||
|
||||
// * Using UNNEST and WITH ORDINALITY because the input
|
||||
// * array may contain duplicate DataIDs. These duplicate
|
||||
|
|
@ -48,8 +49,8 @@ func GetCustomRankingsByDataIDs(applicationID uint32, dataIDs []uint64) []*datas
|
|||
defer rows.Close()
|
||||
|
||||
for rows.Next() {
|
||||
var dataID uint64
|
||||
var value uint32
|
||||
var dataID types.UInt64
|
||||
var value types.UInt32
|
||||
|
||||
err := rows.Scan(&dataID, &value)
|
||||
if err != nil {
|
||||
|
|
@ -57,9 +58,9 @@ func GetCustomRankingsByDataIDs(applicationID uint32, dataIDs []uint64) []*datas
|
|||
continue
|
||||
}
|
||||
|
||||
objectInfo, errCode := datastore_db.GetObjectInfoByDataID(dataID)
|
||||
if errCode != 0 {
|
||||
globals.Logger.Errorf("Got error code %d for object %d", errCode, dataID)
|
||||
objectInfo, nexError := datastore_db.GetObjectInfoByDataID(dataID)
|
||||
if nexError != nil {
|
||||
globals.Logger.Errorf("Got error code %d for object %d", nexError.ResultCode, dataID)
|
||||
continue
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -4,17 +4,18 @@ import (
|
|||
"database/sql"
|
||||
"time"
|
||||
|
||||
"github.com/PretendoNetwork/nex-go"
|
||||
datastore_super_mario_maker_types "github.com/PretendoNetwork/nex-protocols-go/datastore/super-mario-maker/types"
|
||||
datastore_types "github.com/PretendoNetwork/nex-protocols-go/datastore/types"
|
||||
"github.com/PretendoNetwork/super-mario-maker-secure/database"
|
||||
datastore_db "github.com/PretendoNetwork/super-mario-maker-secure/database/datastore"
|
||||
"github.com/PretendoNetwork/super-mario-maker-secure/globals"
|
||||
"github.com/PretendoNetwork/nex-go/v2"
|
||||
"github.com/PretendoNetwork/nex-go/v2/types"
|
||||
datastore_super_mario_maker_types "github.com/PretendoNetwork/nex-protocols-go/v2/datastore/super-mario-maker/types"
|
||||
datastore_types "github.com/PretendoNetwork/nex-protocols-go/v2/datastore/types"
|
||||
"github.com/PretendoNetwork/super-mario-maker/database"
|
||||
datastore_db "github.com/PretendoNetwork/super-mario-maker/database/datastore"
|
||||
"github.com/PretendoNetwork/super-mario-maker/globals"
|
||||
"github.com/lib/pq"
|
||||
)
|
||||
|
||||
func GetRandomCoursesWithLimit(limit int) ([]*datastore_super_mario_maker_types.DataStoreCustomRankingResult, uint32) {
|
||||
courses := make([]*datastore_super_mario_maker_types.DataStoreCustomRankingResult, 0)
|
||||
func GetRandomCoursesWithLimit(limit int) (types.List[datastore_super_mario_maker_types.DataStoreCustomRankingResult], *nex.Error) {
|
||||
courses := types.NewList[datastore_super_mario_maker_types.DataStoreCustomRankingResult]()
|
||||
|
||||
rows, err := database.Postgres.Query(`
|
||||
SELECT
|
||||
|
|
@ -49,12 +50,12 @@ func GetRandomCoursesWithLimit(limit int) ([]*datastore_super_mario_maker_types.
|
|||
|
||||
if err != nil {
|
||||
if err == sql.ErrNoRows {
|
||||
return nil, nex.Errors.DataStore.NotFound
|
||||
return nil, nex.NewError(nex.ResultCodes.DataStore.NotFound, "Object not found")
|
||||
}
|
||||
|
||||
globals.Logger.Error(err.Error())
|
||||
// TODO - Send more specific errors?
|
||||
return nil, nex.Errors.DataStore.Unknown
|
||||
return nil, nex.NewError(nex.ResultCodes.DataStore.Unknown, err.Error())
|
||||
}
|
||||
|
||||
defer rows.Close()
|
||||
|
|
@ -65,11 +66,8 @@ func GetRandomCoursesWithLimit(limit int) ([]*datastore_super_mario_maker_types.
|
|||
course.MetaInfo = datastore_types.NewDataStoreMetaInfo()
|
||||
course.MetaInfo.Permission = datastore_types.NewDataStorePermission()
|
||||
course.MetaInfo.DelPermission = datastore_types.NewDataStorePermission()
|
||||
course.MetaInfo.CreatedTime = nex.NewDateTime(0)
|
||||
course.MetaInfo.UpdatedTime = nex.NewDateTime(0)
|
||||
course.MetaInfo.ReferredTime = nex.NewDateTime(0)
|
||||
course.MetaInfo.ExpireTime = nex.NewDateTime(0x9C3f3E0000) // * 9999-12-31T00:00:00.000Z. This is what the real server sends
|
||||
course.MetaInfo.Ratings = make([]*datastore_types.DataStoreRatingInfoWithSlot, 0)
|
||||
course.MetaInfo.ExpireTime = types.NewDateTime(0x9C3F3E0000) // * 9999-12-31T00:00:00.000Z. This is what the real server sends
|
||||
course.MetaInfo.Ratings = types.NewList[datastore_types.DataStoreRatingInfoWithSlot]()
|
||||
|
||||
var createdDate time.Time
|
||||
var updatedDate time.Time
|
||||
|
|
@ -98,9 +96,9 @@ func GetRandomCoursesWithLimit(limit int) ([]*datastore_super_mario_maker_types.
|
|||
continue
|
||||
}
|
||||
|
||||
ratings, errCode := datastore_db.GetObjectRatingsWithSlotByDataID(course.MetaInfo.DataID)
|
||||
if errCode != 0 {
|
||||
return nil, errCode
|
||||
ratings, nexError := datastore_db.GetObjectRatingsWithSlotByDataID(course.MetaInfo.DataID)
|
||||
if nexError != nil {
|
||||
return nil, nexError
|
||||
}
|
||||
|
||||
course.MetaInfo.Ratings = ratings
|
||||
|
|
@ -112,5 +110,5 @@ func GetRandomCoursesWithLimit(limit int) ([]*datastore_super_mario_maker_types.
|
|||
courses = append(courses, course)
|
||||
}
|
||||
|
||||
return courses, 0
|
||||
return courses, nil
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,14 +3,15 @@ package datastore_smm_db
|
|||
import (
|
||||
"database/sql"
|
||||
|
||||
"github.com/PretendoNetwork/nex-go"
|
||||
"github.com/PretendoNetwork/super-mario-maker-secure/database"
|
||||
datastore_db "github.com/PretendoNetwork/super-mario-maker-secure/database/datastore"
|
||||
"github.com/PretendoNetwork/super-mario-maker-secure/globals"
|
||||
"github.com/PretendoNetwork/nex-go/v2"
|
||||
"github.com/PretendoNetwork/nex-go/v2/types"
|
||||
"github.com/PretendoNetwork/super-mario-maker/database"
|
||||
datastore_db "github.com/PretendoNetwork/super-mario-maker/database/datastore"
|
||||
"github.com/PretendoNetwork/super-mario-maker/globals"
|
||||
)
|
||||
|
||||
func GetUserCourseObjectIDs(ownerPID uint32) ([]uint64, uint32) {
|
||||
courseObjectIDs := make([]uint64, 0)
|
||||
func GetUserCourseObjectIDs(ownerPID types.PID) (types.List[types.UInt64], *nex.Error) {
|
||||
courseObjectIDs := types.NewList[types.UInt64]()
|
||||
|
||||
// * Course objects seem to have data types > 2 and < 50.
|
||||
// * Data type 1 seems to be reserved for "maker" objects.
|
||||
|
|
@ -23,13 +24,13 @@ func GetUserCourseObjectIDs(ownerPID uint32) ([]uint64, uint32) {
|
|||
// * No rows is allowed
|
||||
if err != nil && err != sql.ErrNoRows {
|
||||
globals.Logger.Error(err.Error())
|
||||
return nil, nex.Errors.DataStore.Unknown
|
||||
return nil, nex.NewError(nex.ResultCodes.DataStore.Unknown, err.Error())
|
||||
}
|
||||
|
||||
defer rows.Close()
|
||||
|
||||
for rows.Next() {
|
||||
var dataID uint64
|
||||
var dataID types.UInt64
|
||||
|
||||
err := rows.Scan(&dataID)
|
||||
if err != nil {
|
||||
|
|
@ -37,8 +38,8 @@ func GetUserCourseObjectIDs(ownerPID uint32) ([]uint64, uint32) {
|
|||
continue
|
||||
}
|
||||
|
||||
errCode := datastore_db.IsObjectAvailable(dataID)
|
||||
if errCode != 0 {
|
||||
nexError := datastore_db.IsObjectAvailable(dataID)
|
||||
if nexError != nil {
|
||||
continue
|
||||
}
|
||||
|
||||
|
|
@ -47,8 +48,8 @@ func GetUserCourseObjectIDs(ownerPID uint32) ([]uint64, uint32) {
|
|||
|
||||
if err := rows.Err(); err != nil {
|
||||
// TODO - Send more specific errors?
|
||||
return nil, nex.Errors.DataStore.Unknown
|
||||
return nil, nex.NewError(nex.ResultCodes.DataStore.Unknown, err.Error())
|
||||
}
|
||||
|
||||
return courseObjectIDs, 0
|
||||
return courseObjectIDs, nil
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,17 +3,18 @@ package datastore_smm_db
|
|||
import (
|
||||
"time"
|
||||
|
||||
"github.com/PretendoNetwork/nex-go"
|
||||
datastore_smm_types "github.com/PretendoNetwork/nex-protocols-go/datastore/super-mario-maker/types"
|
||||
"github.com/PretendoNetwork/super-mario-maker-secure/database"
|
||||
"github.com/PretendoNetwork/super-mario-maker-secure/globals"
|
||||
"github.com/PretendoNetwork/nex-go/v2"
|
||||
"github.com/PretendoNetwork/nex-go/v2/types"
|
||||
datastore_smm_types "github.com/PretendoNetwork/nex-protocols-go/v2/datastore/super-mario-maker/types"
|
||||
"github.com/PretendoNetwork/super-mario-maker/database"
|
||||
"github.com/PretendoNetwork/super-mario-maker/globals"
|
||||
"github.com/lib/pq"
|
||||
)
|
||||
|
||||
func InitializeObjectByAttachFileParam(ownerPID uint32, param *datastore_smm_types.DataStoreAttachFileParam) (uint64, uint32) {
|
||||
func InitializeObjectByAttachFileParam(ownerPID types.PID, param datastore_smm_types.DataStoreAttachFileParam) (types.UInt64, *nex.Error) {
|
||||
now := time.Now()
|
||||
|
||||
var dataID uint64
|
||||
var dataID types.UInt64
|
||||
|
||||
err := database.Postgres.QueryRow(`INSERT INTO datastore.objects (
|
||||
owner,
|
||||
|
|
@ -74,8 +75,8 @@ func InitializeObjectByAttachFileParam(ownerPID uint32, param *datastore_smm_typ
|
|||
if err != nil {
|
||||
globals.Logger.Error(err.Error())
|
||||
// TODO - Send more specific errors?
|
||||
return 0, nex.Errors.DataStore.Unknown
|
||||
return types.NewUInt64(0), nex.NewError(nex.ResultCodes.DataStore.Unknown, err.Error())
|
||||
}
|
||||
|
||||
return dataID, 0
|
||||
return dataID, nil
|
||||
}
|
||||
|
|
@ -4,14 +4,16 @@ import (
|
|||
"log"
|
||||
"time"
|
||||
|
||||
"github.com/PretendoNetwork/super-mario-maker-secure/database"
|
||||
datastore_db "github.com/PretendoNetwork/super-mario-maker-secure/database/datastore"
|
||||
"github.com/PretendoNetwork/nex-go/v2"
|
||||
"github.com/PretendoNetwork/nex-go/v2/types"
|
||||
"github.com/PretendoNetwork/super-mario-maker/database"
|
||||
datastore_db "github.com/PretendoNetwork/super-mario-maker/database/datastore"
|
||||
)
|
||||
|
||||
func InsertOrUpdateBufferQueueData(dataID uint64, slot uint32, buffer []byte) uint32 {
|
||||
errCode := datastore_db.IsObjectAvailable(dataID)
|
||||
if errCode != 0 {
|
||||
return errCode
|
||||
func InsertOrUpdateBufferQueueData(dataID types.UInt64, slot types.UInt32, buffer types.QBuffer) *nex.Error {
|
||||
nexError := datastore_db.IsObjectAvailable(dataID)
|
||||
if nexError != nil {
|
||||
return nexError
|
||||
}
|
||||
|
||||
now := time.Now()
|
||||
|
|
@ -38,5 +40,5 @@ func InsertOrUpdateBufferQueueData(dataID uint64, slot uint32, buffer []byte) ui
|
|||
log.Fatal(err)
|
||||
}
|
||||
|
||||
return 0
|
||||
return nil
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,17 +3,18 @@ package datastore_smm_db
|
|||
import (
|
||||
"time"
|
||||
|
||||
"github.com/PretendoNetwork/nex-go"
|
||||
"github.com/PretendoNetwork/super-mario-maker-secure/database"
|
||||
datastore_db "github.com/PretendoNetwork/super-mario-maker-secure/database/datastore"
|
||||
"github.com/PretendoNetwork/super-mario-maker-secure/globals"
|
||||
"github.com/PretendoNetwork/nex-go/v2"
|
||||
"github.com/PretendoNetwork/nex-go/v2/types"
|
||||
"github.com/PretendoNetwork/super-mario-maker/database"
|
||||
datastore_db "github.com/PretendoNetwork/super-mario-maker/database/datastore"
|
||||
"github.com/PretendoNetwork/super-mario-maker/globals"
|
||||
)
|
||||
|
||||
func InsertOrUpdateCourseRecord(dataID uint64, slot uint8, pid uint32, score int32) uint32 {
|
||||
errCode := datastore_db.IsObjectAvailable(dataID)
|
||||
if errCode != 0 {
|
||||
globals.Logger.Errorf("Error code %d", errCode)
|
||||
return errCode
|
||||
func InsertOrUpdateCourseRecord(dataID types.UInt64, slot types.UInt8, pid types.PID, score types.Int32) *nex.Error {
|
||||
nexError := datastore_db.IsObjectAvailable(dataID)
|
||||
if nexError != nil {
|
||||
globals.Logger.Errorf("Error code %d", nexError.ResultCode)
|
||||
return nexError
|
||||
}
|
||||
|
||||
now := time.Now()
|
||||
|
|
@ -50,8 +51,8 @@ func InsertOrUpdateCourseRecord(dataID uint64, slot uint8, pid uint32, score int
|
|||
if err != nil {
|
||||
globals.Logger.Error(err.Error())
|
||||
// TODO - Send more specific errors?
|
||||
return nex.Errors.DataStore.Unknown
|
||||
return nex.NewError(nex.ResultCodes.DataStore.Unknown, err.Error())
|
||||
}
|
||||
|
||||
return 0
|
||||
return nil
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,17 +1,18 @@
|
|||
package datastore_smm_db
|
||||
|
||||
import (
|
||||
"github.com/PretendoNetwork/nex-go"
|
||||
"github.com/PretendoNetwork/super-mario-maker-secure/database"
|
||||
datastore_db "github.com/PretendoNetwork/super-mario-maker-secure/database/datastore"
|
||||
"github.com/PretendoNetwork/super-mario-maker-secure/globals"
|
||||
"github.com/PretendoNetwork/nex-go/v2"
|
||||
"github.com/PretendoNetwork/nex-go/v2/types"
|
||||
"github.com/PretendoNetwork/super-mario-maker/database"
|
||||
datastore_db "github.com/PretendoNetwork/super-mario-maker/database/datastore"
|
||||
"github.com/PretendoNetwork/super-mario-maker/globals"
|
||||
)
|
||||
|
||||
func InsertOrUpdateCustomRanking(dataID uint64, applicationID, score uint32) uint32 {
|
||||
errCode := datastore_db.IsObjectAvailable(dataID)
|
||||
if errCode != 0 {
|
||||
globals.Logger.Errorf("Error code %d", errCode)
|
||||
return errCode
|
||||
func InsertOrUpdateCustomRanking(dataID types.UInt64, applicationID, score types.UInt32) *nex.Error {
|
||||
nexError := datastore_db.IsObjectAvailable(dataID)
|
||||
if nexError != nil {
|
||||
globals.Logger.Errorf("Error code %d", nexError.ResultCode)
|
||||
return nexError
|
||||
}
|
||||
|
||||
_, err := database.Postgres.Exec(`INSERT INTO datastore.object_custom_rankings (
|
||||
|
|
@ -31,8 +32,8 @@ func InsertOrUpdateCustomRanking(dataID uint64, applicationID, score uint32) uin
|
|||
if err != nil {
|
||||
globals.Logger.Error(err.Error())
|
||||
// TODO - Send more specific errors?
|
||||
return nex.Errors.DataStore.Unknown
|
||||
return nex.NewError(nex.ResultCodes.DataStore.Unknown, err.Error())
|
||||
}
|
||||
|
||||
return 0
|
||||
return nil
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,13 +3,14 @@ package datastore_db
|
|||
import (
|
||||
"database/sql"
|
||||
|
||||
"github.com/PretendoNetwork/nex-go"
|
||||
"github.com/PretendoNetwork/super-mario-maker-secure/database"
|
||||
"github.com/PretendoNetwork/super-mario-maker-secure/globals"
|
||||
"github.com/PretendoNetwork/nex-go/v2"
|
||||
"github.com/PretendoNetwork/nex-go/v2/types"
|
||||
"github.com/PretendoNetwork/super-mario-maker/database"
|
||||
"github.com/PretendoNetwork/super-mario-maker/globals"
|
||||
)
|
||||
|
||||
func UpdateObjectDataTypeByDataIDWithPassword(dataID uint64, dataType uint16, password uint64) uint32 {
|
||||
var updatePassword uint64
|
||||
func UpdateObjectDataTypeByDataIDWithPassword(dataID types.UInt64, dataType types.UInt16, password types.UInt64) *nex.Error {
|
||||
var updatePassword types.UInt64
|
||||
var underReview bool
|
||||
|
||||
err := database.Postgres.QueryRow(`SELECT update_password, under_review FROM datastore.objects WHERE data_id=$1 AND upload_completed=TRUE AND deleted=FALSE`, dataID).Scan(
|
||||
|
|
@ -19,29 +20,29 @@ func UpdateObjectDataTypeByDataIDWithPassword(dataID uint64, dataType uint16, pa
|
|||
|
||||
if err != nil {
|
||||
if err == sql.ErrNoRows {
|
||||
return nex.Errors.DataStore.NotFound
|
||||
return nex.NewError(nex.ResultCodes.DataStore.NotFound, "Object not found")
|
||||
}
|
||||
|
||||
globals.Logger.Error(err.Error())
|
||||
|
||||
// TODO - Send more specific errors?
|
||||
return nex.Errors.DataStore.Unknown
|
||||
return nex.NewError(nex.ResultCodes.DataStore.Unknown, err.Error())
|
||||
}
|
||||
|
||||
if updatePassword != 0 && updatePassword != password {
|
||||
return nex.Errors.DataStore.InvalidPassword
|
||||
return nex.NewError(nex.ResultCodes.DataStore.InvalidPassword, "Invalid password")
|
||||
}
|
||||
|
||||
if underReview {
|
||||
return nex.Errors.DataStore.UnderReviewing
|
||||
return nex.NewError(nex.ResultCodes.DataStore.UnderReviewing, "This object is under review")
|
||||
}
|
||||
|
||||
_, err = database.Postgres.Exec(`UPDATE datastore.objects SET data_type=$1 WHERE data_id=$2`, dataType, dataID)
|
||||
if err != nil {
|
||||
globals.Logger.Error(err.Error())
|
||||
// TODO - Send more specific errors?
|
||||
return nex.Errors.DataStore.Unknown
|
||||
return nex.NewError(nex.ResultCodes.DataStore.Unknown, err.Error())
|
||||
}
|
||||
|
||||
return 0
|
||||
return nil
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,13 +3,14 @@ package datastore_db
|
|||
import (
|
||||
"database/sql"
|
||||
|
||||
"github.com/PretendoNetwork/nex-go"
|
||||
"github.com/PretendoNetwork/super-mario-maker-secure/database"
|
||||
"github.com/PretendoNetwork/super-mario-maker-secure/globals"
|
||||
"github.com/PretendoNetwork/nex-go/v2"
|
||||
"github.com/PretendoNetwork/nex-go/v2/types"
|
||||
"github.com/PretendoNetwork/super-mario-maker/database"
|
||||
"github.com/PretendoNetwork/super-mario-maker/globals"
|
||||
)
|
||||
|
||||
func UpdateObjectMetaBinaryByDataIDWithPassword(dataID uint64, metaBinary []byte, password uint64) uint32 {
|
||||
var updatePassword uint64
|
||||
func UpdateObjectMetaBinaryByDataIDWithPassword(dataID types.UInt64, metaBinary types.QBuffer, password types.UInt64) *nex.Error {
|
||||
var updatePassword types.UInt64
|
||||
var underReview bool
|
||||
|
||||
err := database.Postgres.QueryRow(`SELECT update_password, under_review FROM datastore.objects WHERE data_id=$1 AND upload_completed=TRUE AND deleted=FALSE`, dataID).Scan(
|
||||
|
|
@ -19,29 +20,29 @@ func UpdateObjectMetaBinaryByDataIDWithPassword(dataID uint64, metaBinary []byte
|
|||
|
||||
if err != nil {
|
||||
if err == sql.ErrNoRows {
|
||||
return nex.Errors.DataStore.NotFound
|
||||
return nex.NewError(nex.ResultCodes.DataStore.NotFound, "Object not found")
|
||||
}
|
||||
|
||||
globals.Logger.Error(err.Error())
|
||||
|
||||
// TODO - Send more specific errors?
|
||||
return nex.Errors.DataStore.Unknown
|
||||
return nex.NewError(nex.ResultCodes.DataStore.Unknown, err.Error())
|
||||
}
|
||||
|
||||
if updatePassword != 0 && updatePassword != password {
|
||||
return nex.Errors.DataStore.InvalidPassword
|
||||
return nex.NewError(nex.ResultCodes.DataStore.InvalidPassword, "Invalid password")
|
||||
}
|
||||
|
||||
if underReview {
|
||||
return nex.Errors.DataStore.UnderReviewing
|
||||
return nex.NewError(nex.ResultCodes.DataStore.UnderReviewing, "This object is under review")
|
||||
}
|
||||
|
||||
_, err = database.Postgres.Exec(`UPDATE datastore.objects SET meta_binary=$1 WHERE data_id=$2`, metaBinary, dataID)
|
||||
if err != nil {
|
||||
globals.Logger.Error(err.Error())
|
||||
// TODO - Send more specific errors?
|
||||
return nex.Errors.DataStore.Unknown
|
||||
return nex.NewError(nex.ResultCodes.DataStore.Unknown, err.Error())
|
||||
}
|
||||
|
||||
return 0
|
||||
return nil
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,13 +3,14 @@ package datastore_db
|
|||
import (
|
||||
"database/sql"
|
||||
|
||||
"github.com/PretendoNetwork/nex-go"
|
||||
"github.com/PretendoNetwork/super-mario-maker-secure/database"
|
||||
"github.com/PretendoNetwork/super-mario-maker-secure/globals"
|
||||
"github.com/PretendoNetwork/nex-go/v2"
|
||||
"github.com/PretendoNetwork/nex-go/v2/types"
|
||||
"github.com/PretendoNetwork/super-mario-maker/database"
|
||||
"github.com/PretendoNetwork/super-mario-maker/globals"
|
||||
)
|
||||
|
||||
func UpdateObjectPeriodByDataIDWithPassword(dataID uint64, period uint16, password uint64) uint32 {
|
||||
var updatePassword uint64
|
||||
func UpdateObjectPeriodByDataIDWithPassword(dataID types.UInt64, period types.UInt16, password types.UInt64) *nex.Error {
|
||||
var updatePassword types.UInt64
|
||||
var underReview bool
|
||||
|
||||
err := database.Postgres.QueryRow(`SELECT update_password, under_review FROM datastore.objects WHERE data_id=$1 AND upload_completed=TRUE AND deleted=FALSE`, dataID).Scan(
|
||||
|
|
@ -19,29 +20,29 @@ func UpdateObjectPeriodByDataIDWithPassword(dataID uint64, period uint16, passwo
|
|||
|
||||
if err != nil {
|
||||
if err == sql.ErrNoRows {
|
||||
return nex.Errors.DataStore.NotFound
|
||||
return nex.NewError(nex.ResultCodes.DataStore.NotFound, "Object not found")
|
||||
}
|
||||
|
||||
globals.Logger.Error(err.Error())
|
||||
|
||||
// TODO - Send more specific errors?
|
||||
return nex.Errors.DataStore.Unknown
|
||||
return nex.NewError(nex.ResultCodes.DataStore.Unknown, err.Error())
|
||||
}
|
||||
|
||||
if updatePassword != 0 && updatePassword != password {
|
||||
return nex.Errors.DataStore.InvalidPassword
|
||||
return nex.NewError(nex.ResultCodes.DataStore.InvalidPassword, "Invalid password")
|
||||
}
|
||||
|
||||
if underReview {
|
||||
return nex.Errors.DataStore.UnderReviewing
|
||||
return nex.NewError(nex.ResultCodes.DataStore.UnderReviewing, "This object is under review")
|
||||
}
|
||||
|
||||
_, err = database.Postgres.Exec(`UPDATE datastore.objects SET period=$1 WHERE data_id=$2`, period, dataID)
|
||||
if err != nil {
|
||||
globals.Logger.Error(err.Error())
|
||||
// TODO - Send more specific errors?
|
||||
return nex.Errors.DataStore.Unknown
|
||||
return nex.NewError(nex.ResultCodes.DataStore.Unknown, err.Error())
|
||||
}
|
||||
|
||||
return 0
|
||||
return nil
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,36 +3,37 @@ package datastore_db
|
|||
import (
|
||||
"database/sql"
|
||||
|
||||
"github.com/PretendoNetwork/nex-go"
|
||||
"github.com/PretendoNetwork/super-mario-maker-secure/database"
|
||||
"github.com/PretendoNetwork/super-mario-maker-secure/globals"
|
||||
"github.com/PretendoNetwork/nex-go/v2"
|
||||
"github.com/PretendoNetwork/nex-go/v2/types"
|
||||
"github.com/PretendoNetwork/super-mario-maker/database"
|
||||
"github.com/PretendoNetwork/super-mario-maker/globals"
|
||||
)
|
||||
|
||||
func UpdateObjectUploadCompletedByDataID(dataID uint64, uploadCompleted bool) uint32 {
|
||||
func UpdateObjectUploadCompletedByDataID(dataID types.UInt64, uploadCompleted bool) *nex.Error {
|
||||
var underReview bool
|
||||
|
||||
err := database.Postgres.QueryRow(`SELECT update_password FROM datastore.objects WHERE data_id=$1 AND deleted=FALSE`, dataID).Scan(&underReview)
|
||||
if err != nil {
|
||||
if err == sql.ErrNoRows {
|
||||
return nex.Errors.DataStore.NotFound
|
||||
return nex.NewError(nex.ResultCodes.DataStore.NotFound, "Object not found")
|
||||
}
|
||||
|
||||
globals.Logger.Error(err.Error())
|
||||
|
||||
// TODO - Send more specific errors?
|
||||
return nex.Errors.DataStore.Unknown
|
||||
return nex.NewError(nex.ResultCodes.DataStore.Unknown, err.Error())
|
||||
}
|
||||
|
||||
if underReview {
|
||||
return nex.Errors.DataStore.UnderReviewing
|
||||
return nex.NewError(nex.ResultCodes.DataStore.UnderReviewing, "This object is under review")
|
||||
}
|
||||
|
||||
_, err = database.Postgres.Exec(`UPDATE datastore.objects SET upload_completed=$1 WHERE data_id=$2`, uploadCompleted, dataID)
|
||||
if err != nil {
|
||||
globals.Logger.Error(err.Error())
|
||||
// TODO - Send more specific errors?
|
||||
return nex.Errors.DataStore.Unknown
|
||||
return nex.NewError(nex.ResultCodes.DataStore.Unknown, err.Error())
|
||||
}
|
||||
|
||||
return 0
|
||||
return nil
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ import (
|
|||
"os"
|
||||
"time"
|
||||
|
||||
"github.com/PretendoNetwork/super-mario-maker-secure/globals"
|
||||
"github.com/PretendoNetwork/super-mario-maker/globals"
|
||||
"github.com/lib/pq"
|
||||
)
|
||||
|
||||
|
|
|
|||
56
globals/accounts.go
Normal file
56
globals/accounts.go
Normal file
|
|
@ -0,0 +1,56 @@
|
|||
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 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 {
|
||||
return nil, nex.NewError(nex.ResultCodes.RendezVous.InvalidUsername, "Invalid username")
|
||||
}
|
||||
|
||||
pid := types.NewPID(uint64(pidInt))
|
||||
|
||||
password, errorCode := PasswordFromPID(pid)
|
||||
if errorCode != 0 {
|
||||
return nil, nex.NewError(errorCode, "Failed to get password from PID")
|
||||
}
|
||||
|
||||
account := nex.NewAccount(pid, username, password)
|
||||
|
||||
return account, nil
|
||||
}
|
||||
|
|
@ -1,21 +1,24 @@
|
|||
package globals
|
||||
|
||||
import (
|
||||
"github.com/PretendoNetwork/nex-go"
|
||||
pb "github.com/PretendoNetwork/grpc/go/account"
|
||||
"github.com/PretendoNetwork/nex-go/v2"
|
||||
datastorecommon "github.com/PretendoNetwork/nex-protocols-common-go/v2/datastore"
|
||||
"github.com/PretendoNetwork/plogger-go"
|
||||
"github.com/minio/minio-go/v7"
|
||||
"google.golang.org/grpc"
|
||||
"google.golang.org/grpc/metadata"
|
||||
|
||||
pb "github.com/PretendoNetwork/grpc-go/account"
|
||||
)
|
||||
|
||||
var Logger = plogger.NewLogger()
|
||||
var Logger *plogger.Logger
|
||||
var KerberosPassword = "password" // * Default password
|
||||
var AuthenticationServer *nex.Server
|
||||
var SecureServer *nex.Server
|
||||
var MinIOClient *minio.Client
|
||||
var Presigner *S3Presigner
|
||||
var AuthenticationServer *nex.PRUDPServer
|
||||
var AuthenticationEndpoint *nex.PRUDPEndPoint
|
||||
var SecureServer *nex.PRUDPServer
|
||||
var SecureEndpoint *nex.PRUDPEndPoint
|
||||
var DatastoreCommon *datastorecommon.CommonProtocol
|
||||
var GRPCAccountClientConnection *grpc.ClientConn
|
||||
var GRPCAccountClient pb.AccountClient
|
||||
var GRPCAccountCommonMetadata metadata.MD
|
||||
var MinIOClient *minio.Client
|
||||
var Presigner *S3Presigner
|
||||
|
|
|
|||
|
|
@ -3,19 +3,20 @@ package globals
|
|||
import (
|
||||
"context"
|
||||
|
||||
pb "github.com/PretendoNetwork/grpc-go/account"
|
||||
"github.com/PretendoNetwork/nex-go"
|
||||
"github.com/PretendoNetwork/nex-protocols-go/globals"
|
||||
pb "github.com/PretendoNetwork/grpc/go/account"
|
||||
"github.com/PretendoNetwork/nex-go/v2"
|
||||
"github.com/PretendoNetwork/nex-go/v2/types"
|
||||
"github.com/PretendoNetwork/nex-protocols-go/v2/globals"
|
||||
"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
|
||||
return "", nex.ResultCodes.RendezVous.InvalidUsername
|
||||
}
|
||||
|
||||
return response.Password, 0
|
||||
|
|
|
|||
|
|
@ -1,40 +0,0 @@
|
|||
package globals
|
||||
|
||||
import (
|
||||
"github.com/PretendoNetwork/nex-go"
|
||||
datastore_types "github.com/PretendoNetwork/nex-protocols-go/datastore/types"
|
||||
"golang.org/x/exp/slices"
|
||||
)
|
||||
|
||||
func VerifyObjectPermission(ownerPID, accessorPID uint32, permission *datastore_types.DataStorePermission) uint32 {
|
||||
if permission.Permission > 3 {
|
||||
return nex.Errors.DataStore.InvalidArgument
|
||||
}
|
||||
|
||||
// * Allow anyone
|
||||
if permission.Permission == 0 {
|
||||
return 0
|
||||
}
|
||||
|
||||
// * Allow friends
|
||||
// TODO - Implement this
|
||||
if permission.Permission == 1 {
|
||||
return nex.Errors.DataStore.PermissionDenied
|
||||
}
|
||||
|
||||
// * Allow people in permission.RecipientIDs
|
||||
if permission.Permission == 2 {
|
||||
if !slices.Contains(permission.RecipientIDs, accessorPID) {
|
||||
return nex.Errors.DataStore.PermissionDenied
|
||||
}
|
||||
}
|
||||
|
||||
// * Allow only the owner
|
||||
if permission.Permission == 3 {
|
||||
if ownerPID != accessorPID {
|
||||
return nex.Errors.DataStore.PermissionDenied
|
||||
}
|
||||
}
|
||||
|
||||
return 0
|
||||
}
|
||||
28
go.mod
28
go.mod
|
|
@ -1,43 +1,40 @@
|
|||
module github.com/PretendoNetwork/super-mario-maker-secure
|
||||
module github.com/PretendoNetwork/super-mario-maker
|
||||
|
||||
go 1.22.0
|
||||
go 1.23.0
|
||||
|
||||
toolchain go1.23.5
|
||||
|
||||
require (
|
||||
github.com/PretendoNetwork/grpc-go v1.0.2
|
||||
github.com/PretendoNetwork/nex-go v1.0.41
|
||||
github.com/PretendoNetwork/nex-protocols-common-go v1.0.30
|
||||
github.com/PretendoNetwork/nex-protocols-go v1.0.58
|
||||
github.com/PretendoNetwork/plogger-go v1.0.4
|
||||
github.com/PretendoNetwork/grpc/go v0.0.0-20250123103241-5fb484bf544d
|
||||
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
|
||||
github.com/minio/minio-go/v7 v7.0.84
|
||||
golang.org/x/exp v0.0.0-20250128182459-e0ece0dbea4c
|
||||
google.golang.org/grpc v1.70.0
|
||||
)
|
||||
|
||||
require (
|
||||
github.com/dolthub/maphash v0.1.0 // indirect
|
||||
github.com/dustin/go-humanize v1.0.1 // indirect
|
||||
github.com/fatih/color v1.18.0 // indirect
|
||||
github.com/go-ini/ini v1.67.0 // indirect
|
||||
github.com/goccy/go-json v0.10.5 // indirect
|
||||
github.com/golang/protobuf v1.5.4 // indirect
|
||||
github.com/google/uuid v1.6.0 // indirect
|
||||
github.com/json-iterator/go v1.1.12 // indirect
|
||||
github.com/jwalton/go-supportscolor v1.2.0 // indirect
|
||||
github.com/klauspost/compress v1.17.11 // indirect
|
||||
github.com/klauspost/compress v1.18.0 // indirect
|
||||
github.com/klauspost/cpuid/v2 v2.2.9 // 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/minio/md5-simd v1.1.2 // indirect
|
||||
github.com/minio/sha256-simd v1.0.1 // indirect
|
||||
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
|
||||
github.com/modern-go/reflect2 v1.0.2 // indirect
|
||||
github.com/rasky/go-lzo v0.0.0-20200203143853-96a758eda86e // indirect
|
||||
github.com/rs/xid v1.6.0 // indirect
|
||||
github.com/sirupsen/logrus v1.9.3 // indirect
|
||||
github.com/superwhiskers/crunch/v3 v3.5.7 // indirect
|
||||
golang.org/x/crypto v0.32.0 // indirect
|
||||
golang.org/x/exp v0.0.0-20250218142911-aa4b98e5adaa // indirect
|
||||
golang.org/x/mod v0.23.0 // indirect
|
||||
golang.org/x/net v0.34.0 // indirect
|
||||
golang.org/x/sys v0.30.0 // indirect
|
||||
|
|
@ -45,5 +42,4 @@ require (
|
|||
golang.org/x/text v0.22.0 // indirect
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20250204164813-702378808489 // indirect
|
||||
google.golang.org/protobuf v1.36.4 // indirect
|
||||
gopkg.in/ini.v1 v1.67.0 // indirect
|
||||
)
|
||||
|
|
|
|||
123
go.sum
123
go.sum
|
|
@ -1,142 +1,99 @@
|
|||
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 v1.0.41 h1:TcBb1Bpe2KAB+AXaGX1K9NVQBRtZJIoy4yCvRde2xbI=
|
||||
github.com/PretendoNetwork/nex-go v1.0.41/go.mod h1:QwHEa165DeVd0xIuthrgc3j6NWXT8lyPSG6t5kC/Shk=
|
||||
github.com/PretendoNetwork/nex-protocols-common-go v1.0.30 h1:z2BvyG/3x1lW8sx6Ml83G0Lkj5J9hdb0bjdZuuDCYSE=
|
||||
github.com/PretendoNetwork/nex-protocols-common-go v1.0.30/go.mod h1:37jNRX6M/s0xA/gc4BccO8k2GLG1lpMZXAtIYRCZCTY=
|
||||
github.com/PretendoNetwork/nex-protocols-go v1.0.58 h1:W8pZ2LOlJm/mo/UOJjkLWNVHs0jQmkoa8qoI5A1WVyY=
|
||||
github.com/PretendoNetwork/nex-protocols-go v1.0.58/go.mod h1:136762CMIcAsTZDrt4W7gDE4ppiBuc9zN2QFOHESjS8=
|
||||
github.com/PretendoNetwork/plogger-go v1.0.4 h1:PF7xHw9eDRHH+RsAP9tmAE7fG0N0p6H4iPwHKnsoXwc=
|
||||
github.com/PretendoNetwork/plogger-go v1.0.4/go.mod h1:7kD6M4vPq1JL4LTuPg6kuB1OvUBOwQOtAvTaUwMbwvU=
|
||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
github.com/PretendoNetwork/grpc/go v0.0.0-20250123103241-5fb484bf544d h1:i/XyhbTm/j8UfCSnA0Cwrvc0mWOPIftOVrfSYqbh8Xo=
|
||||
github.com/PretendoNetwork/grpc/go v0.0.0-20250123103241-5fb484bf544d/go.mod h1:L6We4KkcQeiQVPrF7iu8Zax0B1Bm0v4nssR1JOAiRFQ=
|
||||
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/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY=
|
||||
github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto=
|
||||
github.com/fatih/color v1.15.0 h1:kOqh6YHBtK8aywxGerMG2Eq3H6Qgoqeo13Bk2Mv/nBs=
|
||||
github.com/fatih/color v1.15.0/go.mod h1:0h5ZqXfHYED7Bhv2ZJamyIOUej9KtShiJESRwBDUSsw=
|
||||
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-ini/ini v1.67.0 h1:z6ZrTEZqSWOTyH2FlglNbNgARyHG8oLW9gMELqKr06A=
|
||||
github.com/go-ini/ini v1.67.0/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8=
|
||||
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/goccy/go-json v0.10.5 h1:Fq85nIqj+gXn/S5ahsiTlK3TmC85qgirsdTP/+DeaC4=
|
||||
github.com/goccy/go-json v0.10.5/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PULtXL6M=
|
||||
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/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.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||
github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=
|
||||
github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
|
||||
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
|
||||
github.com/google/uuid v1.4.0 h1:MtMxsa51/r9yyhkyLsVeVt0B+BGQZzpQiTQ4eHZ8bc4=
|
||||
github.com/google/uuid v1.4.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||
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/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
|
||||
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
|
||||
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.2 h1:RlWWUY/Dr4fL8qk9YG7DTZ7PDgME2V4csBXA8L/ixi4=
|
||||
github.com/klauspost/compress v1.17.2/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE=
|
||||
github.com/klauspost/compress v1.17.11 h1:In6xLpyWOi1+C7tXUUWv2ot1QvBjxevKAaI6IXrJmUc=
|
||||
github.com/klauspost/compress v1.17.11/go.mod h1:pMDklpSncoRMuLFrf1W9Ss9KT+0rH90U12bZKk7uwG0=
|
||||
github.com/klauspost/compress v1.18.0 h1:c/Cqfb0r+Yi+JtIEq73FWXVkRonBlf0CRNYc8Zttxdo=
|
||||
github.com/klauspost/compress v1.18.0/go.mod h1:2Pp+KzxcywXVXMr50+X0Q/Lsb43OQHYWRCY2AiWywWQ=
|
||||
github.com/klauspost/cpuid/v2 v2.0.1/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=
|
||||
github.com/klauspost/cpuid/v2 v2.2.5 h1:0E5MSMDEoAulmXNFquVs//DdoomxaoTY1kUhbc/qbZg=
|
||||
github.com/klauspost/cpuid/v2 v2.2.5/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws=
|
||||
github.com/klauspost/cpuid/v2 v2.2.9 h1:66ze0taIn2H33fBvCkXuv9BmCwDfafmiIVpKV9kKGuY=
|
||||
github.com/klauspost/cpuid/v2 v2.2.9/go.mod h1:rqkxqrZ1EhYM9G+hXH7YdowN5R5RGN6NK4QwQ3WMXF8=
|
||||
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/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.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
|
||||
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/minio/md5-simd v1.1.2 h1:Gdi1DZK69+ZVMoNHRXJyNcxrMA4dSxoYHZSQbirFg34=
|
||||
github.com/minio/md5-simd v1.1.2/go.mod h1:MzdKDxYpY2BT9XQFocsiZf/NKVtR7nkE4RoEpN+20RM=
|
||||
github.com/minio/minio-go/v7 v7.0.63 h1:GbZ2oCvaUdgT5640WJOpyDhhDxvknAJU2/T3yurwcbQ=
|
||||
github.com/minio/minio-go/v7 v7.0.63/go.mod h1:Q6X7Qjb7WMhvG65qKf4gUgA5XaiSox74kR1uAEjxRS4=
|
||||
github.com/minio/minio-go/v7 v7.0.84 h1:D1HVmAF8JF8Bpi6IU4V9vIEj+8pc+xU88EWMs2yed0E=
|
||||
github.com/minio/minio-go/v7 v7.0.84/go.mod h1:57YXpvc5l3rjPdhqNrDsvVlY0qPI6UTk1bflAe+9doY=
|
||||
github.com/minio/sha256-simd v1.0.1 h1:6kaan5IFmwTNynnKKpDHe6FWHohJOHhCPchzK49dzMM=
|
||||
github.com/minio/sha256-simd v1.0.1/go.mod h1:Pz6AKMiUdngCLpeTL/RJY1M9rUuPMYujV5xJjtbRSN8=
|
||||
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
|
||||
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
|
||||
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
|
||||
github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
|
||||
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
|
||||
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/rs/xid v1.5.0 h1:mKX4bl4iPYJtEIxp6CYiUuLQ/8DYMoz0PUdtGgMFRVc=
|
||||
github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg=
|
||||
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/rs/xid v1.6.0 h1:fV591PaemRlL6JfRxGDEPl69wICngIQ3shQtzfy2gxU=
|
||||
github.com/rs/xid v1.6.0/go.mod h1:7XoLgs4eV+QndskICGsho+ADou8ySMSjJKDIan90Nz0=
|
||||
github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ=
|
||||
github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
|
||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
|
||||
github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=
|
||||
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||
github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
|
||||
github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
|
||||
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/crypto v0.14.0 h1:wBqGXzWJW6m1XrIKlAH0Hs1JJ7+9KBwnIO8v66Q9cHc=
|
||||
golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4=
|
||||
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/crypto v0.32.0 h1:euUpcYgM8WcP71gNpTqQCn6rC2t6ULUPiOzfWaXVVfc=
|
||||
golang.org/x/crypto v0.32.0/go.mod h1:ZnnJkOaASj8g0AjIduWNlq2NRxL0PlBrbKVyZ6V/Ugc=
|
||||
golang.org/x/exp v0.0.0-20231006140011-7918f672742d h1:jtJma62tbqLibJ5sFQz8bKtEM8rJBtfilJ2qTU199MI=
|
||||
golang.org/x/exp v0.0.0-20231006140011-7918f672742d/go.mod h1:ldy0pHrwJyGW56pPQzzkH36rKxoZW1tw7ZJpeKx+hdo=
|
||||
golang.org/x/exp v0.0.0-20250128182459-e0ece0dbea4c h1:KL/ZBHXgKGVmuZBZ01Lt57yE5ws8ZPSkkihmEyq7FXc=
|
||||
golang.org/x/exp v0.0.0-20250128182459-e0ece0dbea4c/go.mod h1:tujkw807nyEEAamNbDrEGzRav+ilXA7PCRAd6xsmwiU=
|
||||
golang.org/x/mod v0.13.0 h1:I/DsJXRlw/8l/0c24sM9yb0T4z9liZTduXvdAWYiysY=
|
||||
golang.org/x/mod v0.13.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
|
||||
golang.org/x/exp v0.0.0-20250218142911-aa4b98e5adaa h1:t2QcU6V556bFjYgu4L6C+6VrCPyJZ+eyRsABUPs1mz4=
|
||||
golang.org/x/exp v0.0.0-20250218142911-aa4b98e5adaa/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.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM=
|
||||
golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE=
|
||||
golang.org/x/net v0.34.0 h1:Mb7Mrk043xzHgnRM88suvJFwzVrRfHEHJEl5/71CKw0=
|
||||
golang.org/x/net v0.34.0/go.mod h1:di0qlW3YNM5oh6GqDGQr92MyTozJPmybPK4Ev/Gm31k=
|
||||
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-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE=
|
||||
golang.org/x/sys v0.13.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.13.0 h1:bb+I9cTfFazGW51MZqBVmZy7+JEJMouUHTUSKVQLBek=
|
||||
golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U=
|
||||
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.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k=
|
||||
golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
|
||||
golang.org/x/text v0.22.0 h1:bofq7m3/HAFvbF51jz3Q9wLg3jkvSPuiZu/pD1XwgtM=
|
||||
golang.org/x/text v0.22.0/go.mod h1:YRoo4H8PVmsu+E3Ou7cqLVH8oXWIHVoX0jqUWALQhfY=
|
||||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20231030173426-d783a09b4405 h1:AB/lmRny7e2pLhFEYIbl5qkDAUt2h0ZRO4wGPhZf+ik=
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20231030173426-d783a09b4405/go.mod h1:67X1fPuzjcrkymZzZV1vvkFeTn2Rvc6lYF9MYFGCcwE=
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20250204164813-702378808489 h1:5bKytslY8ViY0Cj/ewmRtrWHW64bNF03cAatUUFCdFI=
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20250204164813-702378808489/go.mod h1:8BS3B93F/U1juMFq9+EDk+qOT5CO1R9IzXxG3PTqiRk=
|
||||
google.golang.org/grpc v1.59.0 h1:Z5Iec2pjwb+LEOqzpB2MR12/eKFhDPhuqW91O+4bwUk=
|
||||
google.golang.org/grpc v1.59.0/go.mod h1:aUPDwccQo6OTjy7Hct4AfBPD1GptF4fyUjIkQ9YtF98=
|
||||
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.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=
|
||||
google.golang.org/protobuf v1.36.4 h1:6A3ZDJHn/eNqc1i+IdefRzy/9PokBTPvcqMySR7NNIM=
|
||||
google.golang.org/protobuf v1.36.4/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE=
|
||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA=
|
||||
gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
|
||||
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo=
|
||||
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
|
||||
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||
|
|
|
|||
19
init.go
19
init.go
|
|
@ -1,14 +1,15 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"crypto/rand"
|
||||
"fmt"
|
||||
"os"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
pb "github.com/PretendoNetwork/grpc-go/account"
|
||||
"github.com/PretendoNetwork/super-mario-maker-secure/database"
|
||||
"github.com/PretendoNetwork/super-mario-maker-secure/globals"
|
||||
pb "github.com/PretendoNetwork/grpc/go/account"
|
||||
"github.com/PretendoNetwork/super-mario-maker/database"
|
||||
"github.com/PretendoNetwork/super-mario-maker/globals"
|
||||
"github.com/joho/godotenv"
|
||||
"github.com/minio/minio-go/v7"
|
||||
"github.com/minio/minio-go/v7/pkg/credentials"
|
||||
|
|
@ -31,7 +32,6 @@ func init() {
|
|||
s3SecureEnv := os.Getenv("PN_SMM_CONFIG_S3_SECURE")
|
||||
|
||||
postgresURI := os.Getenv("PN_SMM_POSTGRES_URI")
|
||||
kerberosPassword := os.Getenv("PN_SMM_KERBEROS_PASSWORD")
|
||||
authenticationServerPort := os.Getenv("PN_SMM_AUTHENTICATION_SERVER_PORT")
|
||||
secureServerHost := os.Getenv("PN_SMM_SECURE_SERVER_HOST")
|
||||
secureServerPort := os.Getenv("PN_SMM_SECURE_SERVER_PORT")
|
||||
|
|
@ -44,12 +44,15 @@ func init() {
|
|||
os.Exit(0)
|
||||
}
|
||||
|
||||
if strings.TrimSpace(kerberosPassword) == "" {
|
||||
globals.Logger.Warningf("PN_SMM_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)
|
||||
|
||||
if strings.TrimSpace(authenticationServerPort) == "" {
|
||||
globals.Logger.Error("PN_SMM_AUTHENTICATION_SERVER_PORT environment variable not set")
|
||||
os.Exit(0)
|
||||
|
|
|
|||
2
main.go
2
main.go
|
|
@ -3,7 +3,7 @@ package main
|
|||
import (
|
||||
"sync"
|
||||
|
||||
"github.com/PretendoNetwork/super-mario-maker-secure/nex"
|
||||
"github.com/PretendoNetwork/super-mario-maker/nex"
|
||||
)
|
||||
|
||||
var wg sync.WaitGroup
|
||||
|
|
|
|||
|
|
@ -3,33 +3,41 @@ package nex
|
|||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"strconv"
|
||||
|
||||
nex "github.com/PretendoNetwork/nex-go"
|
||||
"github.com/PretendoNetwork/super-mario-maker-secure/globals"
|
||||
nex "github.com/PretendoNetwork/nex-go/v2"
|
||||
"github.com/PretendoNetwork/super-mario-maker/globals"
|
||||
)
|
||||
|
||||
var serverBuildString string
|
||||
|
||||
func StartAuthenticationServer() {
|
||||
globals.AuthenticationServer = nex.NewServer()
|
||||
globals.AuthenticationServer.SetPRUDPVersion(1)
|
||||
globals.AuthenticationServer.SetPRUDPProtocolMinorVersion(2)
|
||||
globals.AuthenticationServer.SetDefaultNEXVersion(nex.NewPatchedNEXVersion(3, 8, 3, "AMAJ"))
|
||||
globals.AuthenticationServer.SetKerberosPassword(globals.KerberosPassword)
|
||||
globals.AuthenticationServer.SetAccessKey("9f2b4678")
|
||||
serverBuildString = "branch:origin/project/nfs build:3_10_26_2006_0"
|
||||
|
||||
globals.AuthenticationServer.On("Data", func(packet *nex.PacketV1) {
|
||||
request := packet.RMCRequest()
|
||||
globals.AuthenticationServer = nex.NewPRUDPServer()
|
||||
|
||||
fmt.Println("==SMM1 - Auth==")
|
||||
fmt.Printf("Protocol ID: %d\n", request.ProtocolID())
|
||||
fmt.Printf("Method ID: %d\n", request.MethodID())
|
||||
fmt.Println("===============")
|
||||
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.ByteStreamSettings.UseStructureHeader = false
|
||||
|
||||
globals.AuthenticationServer.LibraryVersions.SetDefault(nex.NewLibraryVersion(3, 8, 3))
|
||||
globals.AuthenticationServer.AccessKey = "9f2b4678"
|
||||
|
||||
globals.AuthenticationEndpoint.OnData(func(packet nex.PacketInterface) {
|
||||
request := packet.RMCMessage()
|
||||
|
||||
fmt.Println("=== SMM1 - Auth ===")
|
||||
fmt.Printf("Protocol ID: %d\n", request.ProtocolID)
|
||||
fmt.Printf("Method ID: %d\n", request.MethodID)
|
||||
fmt.Println("==================")
|
||||
})
|
||||
|
||||
serverBuildString = "build:3_8_29_3022_0"
|
||||
|
||||
registerCommonAuthenticationServerProtocols()
|
||||
|
||||
globals.AuthenticationServer.Listen(fmt.Sprintf(":%s", os.Getenv("PN_SMM_AUTHENTICATION_SERVER_PORT")))
|
||||
port, _ := strconv.Atoi(os.Getenv("PN_SMM_AUTHENTICATION_SERVER_PORT"))
|
||||
|
||||
globals.AuthenticationServer.Listen(port)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,23 +1,24 @@
|
|||
package nex_datastore_super_mario_maker
|
||||
|
||||
import (
|
||||
nex "github.com/PretendoNetwork/nex-go"
|
||||
datastore_super_mario_maker "github.com/PretendoNetwork/nex-protocols-go/datastore/super-mario-maker"
|
||||
datastore_super_mario_maker_types "github.com/PretendoNetwork/nex-protocols-go/datastore/super-mario-maker/types"
|
||||
datastore_db "github.com/PretendoNetwork/super-mario-maker-secure/database/datastore"
|
||||
datastore_smm_db "github.com/PretendoNetwork/super-mario-maker-secure/database/datastore/super-mario-maker"
|
||||
"github.com/PretendoNetwork/super-mario-maker-secure/globals"
|
||||
"github.com/PretendoNetwork/nex-go/v2"
|
||||
"github.com/PretendoNetwork/nex-go/v2/types"
|
||||
datastore_super_mario_maker "github.com/PretendoNetwork/nex-protocols-go/v2/datastore/super-mario-maker"
|
||||
datastore_super_mario_maker_types "github.com/PretendoNetwork/nex-protocols-go/v2/datastore/super-mario-maker/types"
|
||||
datastore_db "github.com/PretendoNetwork/super-mario-maker/database/datastore"
|
||||
datastore_smm_db "github.com/PretendoNetwork/super-mario-maker/database/datastore/super-mario-maker"
|
||||
"github.com/PretendoNetwork/super-mario-maker/globals"
|
||||
)
|
||||
|
||||
func AddToBufferQueues(err error, packet nex.PacketInterface, callID uint32, params []*datastore_super_mario_maker_types.BufferQueueParam, buffers [][]byte) uint32 {
|
||||
func AddToBufferQueues(err error, packet nex.PacketInterface, callID uint32, params types.List[datastore_super_mario_maker_types.BufferQueueParam], buffers types.List[types.QBuffer]) (*nex.RMCMessage, *nex.Error) {
|
||||
if err != nil {
|
||||
globals.Logger.Error(err.Error())
|
||||
return nex.Errors.DataStore.Unknown
|
||||
return nil, nex.NewError(nex.ResultCodes.DataStore.Unknown, err.Error())
|
||||
}
|
||||
|
||||
client := packet.Sender()
|
||||
|
||||
pResults := make([]*nex.Result, 0)
|
||||
pResults := types.NewList[types.QResult]()
|
||||
|
||||
// * The number of params and buffers CAN be allowed
|
||||
// * to differ, though this doesn't appear to happen
|
||||
|
|
@ -31,9 +32,9 @@ func AddToBufferQueues(err error, packet nex.PacketInterface, callID uint32, par
|
|||
buffer := buffers[i]
|
||||
|
||||
if param.Slot == 0 {
|
||||
objectInfo, errCode := datastore_db.GetObjectInfoByDataID(param.DataID)
|
||||
if errCode != 0 {
|
||||
return errCode
|
||||
objectInfo, nexError := datastore_db.GetObjectInfoByDataID(param.DataID)
|
||||
if nexError != nil {
|
||||
return nil, nexError
|
||||
}
|
||||
|
||||
// * Objects with DataType 1 are "maker" objects. When adding
|
||||
|
|
@ -44,41 +45,26 @@ func AddToBufferQueues(err error, packet nex.PacketInterface, callID uint32, par
|
|||
// * "Starred Courses" lists, we have to verify the requesting
|
||||
// * client owns the maker object
|
||||
if objectInfo.DataType == 1 && objectInfo.OwnerID != client.PID() {
|
||||
return nex.Errors.DataStore.PermissionDenied
|
||||
return nil, nex.NewError(nex.ResultCodes.DataStore.PermissionDenied, "Permission denied")
|
||||
}
|
||||
}
|
||||
|
||||
errCode := datastore_smm_db.InsertOrUpdateBufferQueueData(param.DataID, param.Slot, buffer)
|
||||
if errCode != 0 {
|
||||
return errCode
|
||||
nexError := datastore_smm_db.InsertOrUpdateBufferQueueData(param.DataID, param.Slot, buffer)
|
||||
if nexError != nil {
|
||||
return nil, nexError
|
||||
}
|
||||
|
||||
pResults = append(pResults, nex.NewResultSuccess(nex.Errors.Core.Unknown)) // * Seems to ALWAYS be a success?
|
||||
pResults = append(pResults, types.NewQResultSuccess(nex.ResultCodes.Core.Unknown)) // * Seems to ALWAYS be a success?
|
||||
}
|
||||
|
||||
rmcResponseStream := nex.NewStreamOut(globals.SecureServer)
|
||||
rmcResponseStream := nex.NewByteStreamOut(globals.SecureServer.LibraryVersions, globals.SecureServer.ByteStreamSettings)
|
||||
|
||||
rmcResponseStream.WriteListResult(pResults)
|
||||
pResults.WriteTo(rmcResponseStream)
|
||||
|
||||
rmcResponseBody := rmcResponseStream.Bytes()
|
||||
rmcResponse := nex.NewRMCSuccess(globals.SecureEndpoint, rmcResponseStream.Bytes())
|
||||
rmcResponse.ProtocolID = datastore_super_mario_maker.ProtocolID
|
||||
rmcResponse.MethodID = datastore_super_mario_maker.MethodAddToBufferQueues
|
||||
rmcResponse.CallID = callID
|
||||
|
||||
rmcResponse := nex.NewRMCResponse(datastore_super_mario_maker.ProtocolID, callID)
|
||||
rmcResponse.SetSuccess(datastore_super_mario_maker.MethodAddToBufferQueues, 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)
|
||||
|
||||
return 0
|
||||
return rmcResponse, nil
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,22 +1,21 @@
|
|||
package nex_datastore_super_mario_maker
|
||||
|
||||
import (
|
||||
nex "github.com/PretendoNetwork/nex-go"
|
||||
datastore_super_mario_maker "github.com/PretendoNetwork/nex-protocols-go/datastore/super-mario-maker"
|
||||
"github.com/PretendoNetwork/super-mario-maker-secure/globals"
|
||||
"github.com/PretendoNetwork/nex-go/v2"
|
||||
"github.com/PretendoNetwork/nex-go/v2/types"
|
||||
datastore_super_mario_maker "github.com/PretendoNetwork/nex-protocols-go/v2/datastore/super-mario-maker"
|
||||
"github.com/PretendoNetwork/super-mario-maker/globals"
|
||||
)
|
||||
|
||||
func CheckRateCustomRankingCounter(err error, packet nex.PacketInterface, callID uint32, applicationID uint32) uint32 {
|
||||
func CheckRateCustomRankingCounter(err error, packet nex.PacketInterface, callID uint32, applicationID types.UInt32) (*nex.RMCMessage, *nex.Error) {
|
||||
if err != nil {
|
||||
globals.Logger.Error(err.Error())
|
||||
return nex.Errors.DataStore.Unknown
|
||||
return nil, nex.NewError(nex.ResultCodes.DataStore.Unknown, err.Error())
|
||||
}
|
||||
|
||||
client := packet.Sender()
|
||||
|
||||
// * No idea what this is. Only seen application ID 0
|
||||
// * used, and it's always true? Unsure what this checks
|
||||
isBelowThreshold := false
|
||||
isBelowThreshold := types.NewBool(false)
|
||||
|
||||
switch applicationID {
|
||||
case 0: // * Unknown
|
||||
|
|
@ -25,29 +24,14 @@ func CheckRateCustomRankingCounter(err error, packet nex.PacketInterface, callID
|
|||
globals.Logger.Warningf("Unsupported applicationID: %d", applicationID)
|
||||
}
|
||||
|
||||
rmcResponseStream := nex.NewStreamOut(globals.SecureServer)
|
||||
rmcResponseStream := nex.NewByteStreamOut(globals.SecureServer.LibraryVersions, globals.SecureServer.ByteStreamSettings)
|
||||
|
||||
rmcResponseStream.WriteBool(isBelowThreshold)
|
||||
isBelowThreshold.WriteTo(rmcResponseStream)
|
||||
|
||||
rmcResponseBody := rmcResponseStream.Bytes()
|
||||
rmcResponse := nex.NewRMCSuccess(globals.SecureEndpoint, rmcResponseStream.Bytes())
|
||||
rmcResponse.ProtocolID = datastore_super_mario_maker.ProtocolID
|
||||
rmcResponse.MethodID = datastore_super_mario_maker.MethodCheckRateCustomRankingCounter
|
||||
rmcResponse.CallID = callID
|
||||
|
||||
rmcResponse := nex.NewRMCResponse(datastore_super_mario_maker.ProtocolID, callID)
|
||||
rmcResponse.SetSuccess(datastore_super_mario_maker.MethodCheckRateCustomRankingCounter, 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)
|
||||
|
||||
return 0
|
||||
return rmcResponse, nil
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,24 +5,23 @@ import (
|
|||
"os"
|
||||
"time"
|
||||
|
||||
nex "github.com/PretendoNetwork/nex-go"
|
||||
datastore_super_mario_maker "github.com/PretendoNetwork/nex-protocols-go/datastore/super-mario-maker"
|
||||
datastore_types "github.com/PretendoNetwork/nex-protocols-go/datastore/types"
|
||||
datastore_db "github.com/PretendoNetwork/super-mario-maker-secure/database/datastore"
|
||||
"github.com/PretendoNetwork/super-mario-maker-secure/globals"
|
||||
"github.com/PretendoNetwork/nex-go/v2"
|
||||
"github.com/PretendoNetwork/nex-go/v2/types"
|
||||
datastore_super_mario_maker "github.com/PretendoNetwork/nex-protocols-go/v2/datastore/super-mario-maker"
|
||||
datastore_types "github.com/PretendoNetwork/nex-protocols-go/v2/datastore/types"
|
||||
datastore_db "github.com/PretendoNetwork/super-mario-maker/database/datastore"
|
||||
"github.com/PretendoNetwork/super-mario-maker/globals"
|
||||
)
|
||||
|
||||
func CompleteAttachFile(err error, packet nex.PacketInterface, callID uint32, param *datastore_types.DataStoreCompletePostParam) uint32 {
|
||||
func CompleteAttachFile(err error, packet nex.PacketInterface, callID uint32, param datastore_types.DataStoreCompletePostParam) (*nex.RMCMessage, *nex.Error) {
|
||||
if err != nil {
|
||||
globals.Logger.Error(err.Error())
|
||||
return nex.Errors.DataStore.Unknown
|
||||
return nil, nex.NewError(nex.ResultCodes.DataStore.Unknown, err.Error())
|
||||
}
|
||||
|
||||
client := packet.Sender()
|
||||
|
||||
// TODO - What is param.IsSuccess? Is this correct?
|
||||
if !param.IsSuccess {
|
||||
return nex.Errors.DataStore.InvalidArgument
|
||||
return nil, nex.NewError(nex.ResultCodes.DataStore.InvalidArgument, "Invalid argument")
|
||||
}
|
||||
|
||||
bucket := os.Getenv("PN_SMM_CONFIG_S3_BUCKET")
|
||||
|
|
@ -31,53 +30,38 @@ func CompleteAttachFile(err error, packet nex.PacketInterface, callID uint32, pa
|
|||
objectSizeS3, err := globals.S3ObjectSize(bucket, key)
|
||||
if err != nil {
|
||||
globals.Logger.Error(err.Error())
|
||||
return nex.Errors.DataStore.NotFound
|
||||
return nil, nex.NewError(nex.ResultCodes.DataStore.NotFound, "Object not found")
|
||||
}
|
||||
|
||||
objectSizeDB, errCode := datastore_db.GetObjectSizeDataID(param.DataID)
|
||||
if errCode != 0 {
|
||||
return errCode
|
||||
objectSizeDB, nexError := datastore_db.GetObjectSizeByDataID(param.DataID)
|
||||
if nexError != nil {
|
||||
return nil, nexError
|
||||
}
|
||||
|
||||
if objectSizeS3 != uint64(objectSizeDB) {
|
||||
// TODO - Is this a good error?
|
||||
return nex.Errors.DataStore.Unknown
|
||||
return nil, nex.NewError(nex.ResultCodes.DataStore.Unknown, "")
|
||||
}
|
||||
|
||||
errCode = datastore_db.UpdateObjectUploadCompletedByDataID(param.DataID, true)
|
||||
if errCode != 0 {
|
||||
return errCode
|
||||
nexError = datastore_db.UpdateObjectUploadCompletedByDataID(param.DataID, true)
|
||||
if nexError != nil {
|
||||
return nil, nexError
|
||||
}
|
||||
|
||||
pURL, err := globals.Presigner.GetObject(bucket, key, time.Minute*15)
|
||||
if err != nil {
|
||||
globals.Logger.Error(err.Error())
|
||||
return nex.Errors.DataStore.OperationNotAllowed
|
||||
return nil, nex.NewError(nex.ResultCodes.DataStore.OperationNotAllowed, "Operation not allowed")
|
||||
}
|
||||
|
||||
rmcResponseStream := nex.NewStreamOut(globals.SecureServer)
|
||||
rmcResponseStream := nex.NewByteStreamOut(globals.SecureServer.LibraryVersions, globals.SecureServer.ByteStreamSettings)
|
||||
|
||||
rmcResponseStream.WriteString(pURL.String())
|
||||
types.NewString(pURL.String()).WriteTo(rmcResponseStream)
|
||||
|
||||
rmcResponseBody := rmcResponseStream.Bytes()
|
||||
rmcResponse := nex.NewRMCSuccess(globals.SecureEndpoint, rmcResponseStream.Bytes())
|
||||
rmcResponse.ProtocolID = datastore_super_mario_maker.ProtocolID
|
||||
rmcResponse.MethodID = datastore_super_mario_maker.MethodCompleteAttachFile
|
||||
rmcResponse.CallID = callID
|
||||
|
||||
rmcResponse := nex.NewRMCResponse(datastore_super_mario_maker.ProtocolID, callID)
|
||||
rmcResponse.SetSuccess(datastore_super_mario_maker.MethodCompleteAttachFile, 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)
|
||||
|
||||
return 0
|
||||
return rmcResponse, nil
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,21 +1,20 @@
|
|||
package nex_datastore_super_mario_maker
|
||||
|
||||
import (
|
||||
nex "github.com/PretendoNetwork/nex-go"
|
||||
datastore_super_mario_maker "github.com/PretendoNetwork/nex-protocols-go/datastore/super-mario-maker"
|
||||
datastore_types "github.com/PretendoNetwork/nex-protocols-go/datastore/types"
|
||||
datastore_smm_db "github.com/PretendoNetwork/super-mario-maker-secure/database/datastore/super-mario-maker"
|
||||
"github.com/PretendoNetwork/super-mario-maker-secure/globals"
|
||||
"github.com/PretendoNetwork/nex-go/v2"
|
||||
"github.com/PretendoNetwork/nex-go/v2/types"
|
||||
datastore_super_mario_maker "github.com/PretendoNetwork/nex-protocols-go/v2/datastore/super-mario-maker"
|
||||
datastore_types "github.com/PretendoNetwork/nex-protocols-go/v2/datastore/types"
|
||||
datastore_smm_db "github.com/PretendoNetwork/super-mario-maker/database/datastore/super-mario-maker"
|
||||
"github.com/PretendoNetwork/super-mario-maker/globals"
|
||||
)
|
||||
|
||||
func CTRPickUpCourseSearchObject(err error, packet nex.PacketInterface, callID uint32, param *datastore_types.DataStoreSearchParam, extraData []string) uint32 {
|
||||
func CTRPickUpCourseSearchObject(err error, packet nex.PacketInterface, callID uint32, param datastore_types.DataStoreSearchParam, extraData types.List[types.String]) (*nex.RMCMessage, *nex.Error) {
|
||||
if err != nil {
|
||||
globals.Logger.Error(err.Error())
|
||||
return nex.Errors.DataStore.Unknown
|
||||
return nil, nex.NewError(nex.ResultCodes.DataStore.Unknown, err.Error())
|
||||
}
|
||||
|
||||
client := packet.Sender()
|
||||
|
||||
// * This method is only used by the 3DS version
|
||||
// * of Super Mario Maker and is functionally
|
||||
// * identical to the WiiU versions
|
||||
|
|
@ -31,34 +30,19 @@ func CTRPickUpCourseSearchObject(err error, packet nex.PacketInterface, callID u
|
|||
|
||||
// TODO - Research extraData
|
||||
// TODO - Use the offet? Real client never uses it, but might be nice for completeness sake?
|
||||
pRankingResults, errCode := datastore_smm_db.GetRandomCoursesWithLimit(int(param.ResultRange.Length))
|
||||
if errCode != 0 {
|
||||
return errCode
|
||||
pRankingResults, nexError := datastore_smm_db.GetRandomCoursesWithLimit(int(param.ResultRange.Length))
|
||||
if nexError != nil {
|
||||
return nil, nexError
|
||||
}
|
||||
|
||||
rmcResponseStream := nex.NewStreamOut(globals.SecureServer)
|
||||
rmcResponseStream := nex.NewByteStreamOut(globals.SecureServer.LibraryVersions, globals.SecureServer.ByteStreamSettings)
|
||||
|
||||
rmcResponseStream.WriteListStructure(pRankingResults)
|
||||
pRankingResults.WriteTo(rmcResponseStream)
|
||||
|
||||
rmcResponseBody := rmcResponseStream.Bytes()
|
||||
rmcResponse := nex.NewRMCSuccess(globals.SecureEndpoint, rmcResponseStream.Bytes())
|
||||
rmcResponse.ProtocolID = datastore_super_mario_maker.ProtocolID
|
||||
rmcResponse.MethodID = datastore_super_mario_maker.MethodCTRPickUpCourseSearchObject
|
||||
rmcResponse.CallID = callID
|
||||
|
||||
rmcResponse := nex.NewRMCResponse(datastore_super_mario_maker.ProtocolID, callID)
|
||||
rmcResponse.SetSuccess(datastore_super_mario_maker.MethodCTRPickUpCourseSearchObject, 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)
|
||||
|
||||
return 0
|
||||
return rmcResponse, nil
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,23 +1,22 @@
|
|||
package nex_datastore_super_mario_maker
|
||||
|
||||
import (
|
||||
nex "github.com/PretendoNetwork/nex-go"
|
||||
datastore_super_mario_maker "github.com/PretendoNetwork/nex-protocols-go/datastore/super-mario-maker"
|
||||
datastore_super_mario_maker_types "github.com/PretendoNetwork/nex-protocols-go/datastore/super-mario-maker/types"
|
||||
datastore_types "github.com/PretendoNetwork/nex-protocols-go/datastore/types"
|
||||
datastore_smm_db "github.com/PretendoNetwork/super-mario-maker-secure/database/datastore/super-mario-maker"
|
||||
"github.com/PretendoNetwork/super-mario-maker-secure/globals"
|
||||
"github.com/PretendoNetwork/nex-go/v2"
|
||||
"github.com/PretendoNetwork/nex-go/v2/types"
|
||||
datastore_super_mario_maker "github.com/PretendoNetwork/nex-protocols-go/v2/datastore/super-mario-maker"
|
||||
datastore_super_mario_maker_types "github.com/PretendoNetwork/nex-protocols-go/v2/datastore/super-mario-maker/types"
|
||||
datastore_types "github.com/PretendoNetwork/nex-protocols-go/v2/datastore/types"
|
||||
datastore_smm_db "github.com/PretendoNetwork/super-mario-maker/database/datastore/super-mario-maker"
|
||||
"github.com/PretendoNetwork/super-mario-maker/globals"
|
||||
)
|
||||
|
||||
func FollowingsLatestCourseSearchObject(err error, packet nex.PacketInterface, callID uint32, param *datastore_types.DataStoreSearchParam, extraData []string) uint32 {
|
||||
func FollowingsLatestCourseSearchObject(err error, packet nex.PacketInterface, callID uint32, param datastore_types.DataStoreSearchParam, extraData types.List[types.String]) (*nex.RMCMessage, *nex.Error) {
|
||||
if err != nil {
|
||||
globals.Logger.Error(err.Error())
|
||||
return nex.Errors.DataStore.Unknown
|
||||
return nil, nex.NewError(nex.ResultCodes.DataStore.Unknown, err.Error())
|
||||
}
|
||||
|
||||
client := packet.Sender()
|
||||
|
||||
pRankingResults := make([]*datastore_super_mario_maker_types.DataStoreCustomRankingResult, 0)
|
||||
pRankingResults := types.NewList[datastore_super_mario_maker_types.DataStoreCustomRankingResult]()
|
||||
|
||||
// * This seems to ONLY be used to get rankings for course objects
|
||||
// * uploaded by the users in param.OwnerIDs? If param.ResultOption
|
||||
|
|
@ -25,16 +24,16 @@ func FollowingsLatestCourseSearchObject(err error, packet nex.PacketInterface, c
|
|||
// * does some kind of check over extraData. It's unknown what this
|
||||
// * check is, so it's not done here. All other data in param seems
|
||||
// * to be unused here.
|
||||
for _, pid := range param.OwnerIDs {
|
||||
courseObjectIDs, errCode := datastore_smm_db.GetUserCourseObjectIDs(pid)
|
||||
if errCode != 0 {
|
||||
return errCode
|
||||
for i := range param.OwnerIDs {
|
||||
courseObjectIDs, nexError := datastore_smm_db.GetUserCourseObjectIDs(param.OwnerIDs[i])
|
||||
if nexError != nil {
|
||||
return nil, nexError
|
||||
}
|
||||
|
||||
// * This method seems to always use slot 0?
|
||||
results := datastore_smm_db.GetCustomRankingsByDataIDs(0, courseObjectIDs)
|
||||
results := datastore_smm_db.GetCustomRankingsByDataIDs(types.NewUInt32(0), courseObjectIDs)
|
||||
|
||||
for _, rankingResult := range results {
|
||||
for j := range results {
|
||||
// * This is kind of backwards.
|
||||
// * The database pulls this data
|
||||
// * by default, so it can be done
|
||||
|
|
@ -45,49 +44,34 @@ func FollowingsLatestCourseSearchObject(err error, packet nex.PacketInterface, c
|
|||
// * is *NOT* set and conditionally
|
||||
// * *REMOVE* the field
|
||||
if param.ResultOption&0x1 == 0 {
|
||||
rankingResult.MetaInfo.Tags = make([]string, 0)
|
||||
results[j].MetaInfo.Tags = types.NewList[types.String]()
|
||||
}
|
||||
|
||||
if param.ResultOption&0x2 == 0 {
|
||||
rankingResult.MetaInfo.Ratings = make([]*datastore_types.DataStoreRatingInfoWithSlot, 0)
|
||||
results[j].MetaInfo.Ratings = types.NewList[datastore_types.DataStoreRatingInfoWithSlot]()
|
||||
}
|
||||
|
||||
if param.ResultOption&0x4 == 0 {
|
||||
rankingResult.MetaInfo.MetaBinary = make([]byte, 0)
|
||||
results[j].MetaInfo.MetaBinary = types.NewQBuffer(nil)
|
||||
}
|
||||
|
||||
// TODO - If this flag is set, extraData is checked somehow
|
||||
if param.ResultOption&0x20 == 0 {
|
||||
rankingResult.Score = 0
|
||||
results[j].Score = 0
|
||||
}
|
||||
|
||||
pRankingResults = append(pRankingResults, rankingResult)
|
||||
pRankingResults = append(pRankingResults, results[j])
|
||||
}
|
||||
}
|
||||
|
||||
rmcResponseStream := nex.NewStreamOut(globals.SecureServer)
|
||||
rmcResponseStream := nex.NewByteStreamOut(globals.SecureServer.LibraryVersions, globals.SecureServer.ByteStreamSettings)
|
||||
|
||||
rmcResponseStream.WriteListStructure(pRankingResults)
|
||||
pRankingResults.WriteTo(rmcResponseStream)
|
||||
|
||||
rmcResponseBody := rmcResponseStream.Bytes()
|
||||
rmcResponse := nex.NewRMCSuccess(globals.SecureEndpoint, rmcResponseStream.Bytes())
|
||||
rmcResponse.ProtocolID = datastore_super_mario_maker.ProtocolID
|
||||
rmcResponse.MethodID = datastore_super_mario_maker.MethodFollowingsLatestCourseSearchObject
|
||||
rmcResponse.CallID = callID
|
||||
|
||||
rmcResponse := nex.NewRMCResponse(datastore_super_mario_maker.ProtocolID, callID)
|
||||
rmcResponse.SetSuccess(datastore_super_mario_maker.MethodFollowingsLatestCourseSearchObject, 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)
|
||||
|
||||
return 0
|
||||
return rmcResponse, nil
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,9 +3,10 @@ package nex_datastore_super_mario_maker
|
|||
import (
|
||||
"fmt"
|
||||
|
||||
nex "github.com/PretendoNetwork/nex-go"
|
||||
datastore_super_mario_maker "github.com/PretendoNetwork/nex-protocols-go/datastore/super-mario-maker"
|
||||
"github.com/PretendoNetwork/super-mario-maker-secure/globals"
|
||||
"github.com/PretendoNetwork/nex-go/v2"
|
||||
"github.com/PretendoNetwork/nex-go/v2/types"
|
||||
datastore_super_mario_maker "github.com/PretendoNetwork/nex-protocols-go/v2/datastore/super-mario-maker"
|
||||
"github.com/PretendoNetwork/super-mario-maker/globals"
|
||||
)
|
||||
|
||||
// * Nintendo sets this to 10 by default
|
||||
|
|
@ -16,15 +17,13 @@ import (
|
|||
// * more, but 100 is fine tbh
|
||||
var MAX_COURSE_UPLOADS uint32 = 100
|
||||
|
||||
func GetApplicationConfig(err error, packet nex.PacketInterface, callID uint32, applicationID uint32) uint32 {
|
||||
func GetApplicationConfig(err error, packet nex.PacketInterface, callID uint32, applicationID types.UInt32) (*nex.RMCMessage, *nex.Error) {
|
||||
if err != nil {
|
||||
globals.Logger.Error(err.Error())
|
||||
return nex.Errors.DataStore.Unknown
|
||||
return nil, nex.NewError(nex.ResultCodes.DataStore.Unknown, err.Error())
|
||||
}
|
||||
|
||||
client := packet.Sender()
|
||||
|
||||
config := make([]uint32, 0)
|
||||
var config []uint32
|
||||
|
||||
switch applicationID {
|
||||
case 0: // * Player config?
|
||||
|
|
@ -39,31 +38,21 @@ func GetApplicationConfig(err error, packet nex.PacketInterface, callID uint32,
|
|||
fmt.Printf("[Warning] DataStoreSMMProtocol::GetApplicationConfig Unsupported applicationID: %v\n", applicationID)
|
||||
}
|
||||
|
||||
rmcResponseStream := nex.NewStreamOut(globals.SecureServer)
|
||||
configNative := make(types.List[types.UInt32], 0, len(config))
|
||||
for i := range config {
|
||||
configNative = append(configNative, types.NewUInt32(config[i]))
|
||||
}
|
||||
|
||||
rmcResponseStream.WriteListUInt32LE(config)
|
||||
rmcResponseStream := nex.NewByteStreamOut(globals.SecureServer.LibraryVersions, globals.SecureServer.ByteStreamSettings)
|
||||
|
||||
rmcResponseBody := rmcResponseStream.Bytes()
|
||||
configNative.WriteTo(rmcResponseStream)
|
||||
|
||||
rmcResponse := nex.NewRMCResponse(datastore_super_mario_maker.ProtocolID, callID)
|
||||
rmcResponse.SetSuccess(datastore_super_mario_maker.MethodGetApplicationConfig, rmcResponseBody)
|
||||
rmcResponse := nex.NewRMCSuccess(globals.SecureEndpoint, rmcResponseStream.Bytes())
|
||||
rmcResponse.ProtocolID = datastore_super_mario_maker.ProtocolID
|
||||
rmcResponse.MethodID = datastore_super_mario_maker.MethodGetApplicationConfig
|
||||
rmcResponse.CallID = callID
|
||||
|
||||
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)
|
||||
|
||||
return 0
|
||||
return rmcResponse, nil
|
||||
}
|
||||
|
||||
func getApplicationConfig_PlayerConfig() []uint32 {
|
||||
|
|
@ -87,7 +76,7 @@ func getApplicationConfig_PlayerConfig() []uint32 {
|
|||
func getApplicationConfig_OfficialMakers() []uint32 {
|
||||
// * Used as the PIDs for the "Official" makers in the "MAKERS" section
|
||||
return []uint32{
|
||||
2, // * Not a real user PID, this translates to the internal Quazal Rendez-Vous user used by NEX
|
||||
2, // * Not a real user PID, this translates to the internal Quazal Rendez-Vous user used by NEX
|
||||
1770179696, // * "official_player0" on NN, need to make PN versions
|
||||
1770179664, // * "official_player1" on NN, need to make PN versions
|
||||
1770179640, // * "official_player2" on NN, need to make PN versions
|
||||
|
|
|
|||
|
|
@ -3,21 +3,20 @@ package nex_datastore_super_mario_maker
|
|||
import (
|
||||
"fmt"
|
||||
|
||||
nex "github.com/PretendoNetwork/nex-go"
|
||||
datastore_super_mario_maker "github.com/PretendoNetwork/nex-protocols-go/datastore/super-mario-maker"
|
||||
"github.com/PretendoNetwork/super-mario-maker-secure/globals"
|
||||
"github.com/PretendoNetwork/nex-go/v2"
|
||||
"github.com/PretendoNetwork/nex-go/v2/types"
|
||||
datastore_super_mario_maker "github.com/PretendoNetwork/nex-protocols-go/v2/datastore/super-mario-maker"
|
||||
"github.com/PretendoNetwork/super-mario-maker/globals"
|
||||
)
|
||||
|
||||
func GetApplicationConfigString(err error, packet nex.PacketInterface, callID uint32, applicationID uint32) uint32 {
|
||||
func GetApplicationConfigString(err error, packet nex.PacketInterface, callID uint32, applicationID types.UInt32) (*nex.RMCMessage, *nex.Error) {
|
||||
if err != nil {
|
||||
globals.Logger.Error(err.Error())
|
||||
return nex.Errors.DataStore.Unknown
|
||||
return nil, nex.NewError(nex.ResultCodes.DataStore.Unknown, err.Error())
|
||||
}
|
||||
|
||||
client := packet.Sender()
|
||||
|
||||
// * Word blacklists?
|
||||
config := make([]string, 0)
|
||||
var config []string
|
||||
|
||||
switch applicationID {
|
||||
case 128:
|
||||
|
|
@ -30,31 +29,21 @@ func GetApplicationConfigString(err error, packet nex.PacketInterface, callID ui
|
|||
fmt.Printf("[Warning] DataStoreSMMProtocol::GetApplicationConfigString Unsupported applicationID: %v\n", applicationID)
|
||||
}
|
||||
|
||||
rmcResponseStream := nex.NewStreamOut(globals.SecureServer)
|
||||
configNative := make(types.List[types.String], 0, len(config))
|
||||
for i := range config {
|
||||
configNative = append(configNative, types.NewString(config[i]))
|
||||
}
|
||||
|
||||
rmcResponseStream.WriteListString(config)
|
||||
rmcResponseStream := nex.NewByteStreamOut(globals.SecureServer.LibraryVersions, globals.SecureServer.ByteStreamSettings)
|
||||
|
||||
rmcResponseBody := rmcResponseStream.Bytes()
|
||||
configNative.WriteTo(rmcResponseStream)
|
||||
|
||||
rmcResponse := nex.NewRMCResponse(datastore_super_mario_maker.ProtocolID, callID)
|
||||
rmcResponse.SetSuccess(datastore_super_mario_maker.MethodGetApplicationConfigString, rmcResponseBody)
|
||||
rmcResponse := nex.NewRMCSuccess(globals.SecureEndpoint, rmcResponseStream.Bytes())
|
||||
rmcResponse.ProtocolID = datastore_super_mario_maker.ProtocolID
|
||||
rmcResponse.MethodID = datastore_super_mario_maker.MethodGetApplicationConfigString
|
||||
rmcResponse.CallID = callID
|
||||
|
||||
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)
|
||||
|
||||
return 0
|
||||
return rmcResponse, nil
|
||||
}
|
||||
|
||||
func getApplicationConfigString_WordBlacklist1() []string {
|
||||
|
|
|
|||
|
|
@ -1,49 +1,33 @@
|
|||
package nex_datastore_super_mario_maker
|
||||
|
||||
import (
|
||||
nex "github.com/PretendoNetwork/nex-go"
|
||||
datastore_super_mario_maker "github.com/PretendoNetwork/nex-protocols-go/datastore/super-mario-maker"
|
||||
datastore_super_mario_maker_types "github.com/PretendoNetwork/nex-protocols-go/datastore/super-mario-maker/types"
|
||||
datastore_smm_db "github.com/PretendoNetwork/super-mario-maker-secure/database/datastore/super-mario-maker"
|
||||
"github.com/PretendoNetwork/super-mario-maker-secure/globals"
|
||||
"github.com/PretendoNetwork/nex-go/v2"
|
||||
datastore_super_mario_maker "github.com/PretendoNetwork/nex-protocols-go/v2/datastore/super-mario-maker"
|
||||
datastore_super_mario_maker_types "github.com/PretendoNetwork/nex-protocols-go/v2/datastore/super-mario-maker/types"
|
||||
datastore_smm_db "github.com/PretendoNetwork/super-mario-maker/database/datastore/super-mario-maker"
|
||||
"github.com/PretendoNetwork/super-mario-maker/globals"
|
||||
)
|
||||
|
||||
func GetBufferQueue(err error, packet nex.PacketInterface, callID uint32, param *datastore_super_mario_maker_types.BufferQueueParam) uint32 {
|
||||
func GetBufferQueue(err error, packet nex.PacketInterface, callID uint32, param datastore_super_mario_maker_types.BufferQueueParam) (*nex.RMCMessage, *nex.Error) {
|
||||
if err != nil {
|
||||
globals.Logger.Error(err.Error())
|
||||
return nex.Errors.DataStore.Unknown
|
||||
return nil, nex.NewError(nex.ResultCodes.DataStore.Unknown, err.Error())
|
||||
}
|
||||
|
||||
client := packet.Sender()
|
||||
|
||||
pBufferQueue, errCode := datastore_smm_db.GetBufferQueuesByDataIDAndSlot(param.DataID, param.Slot)
|
||||
if errCode != 0 {
|
||||
globals.Logger.Errorf("Error code %d for object %d", errCode, param.DataID)
|
||||
return errCode
|
||||
pBufferQueue, nexError := datastore_smm_db.GetBufferQueuesByDataIDAndSlot(param.DataID, param.Slot)
|
||||
if nexError != nil {
|
||||
globals.Logger.Errorf("Error code %d for object %d", nexError.ResultCode, param.DataID)
|
||||
return nil, nexError
|
||||
}
|
||||
|
||||
rmcResponseStream := nex.NewStreamOut(globals.SecureServer)
|
||||
rmcResponseStream.WriteListQBuffer(pBufferQueue)
|
||||
rmcResponseStream := nex.NewByteStreamOut(globals.SecureServer.LibraryVersions, globals.SecureServer.ByteStreamSettings)
|
||||
|
||||
rmcResponseBody := rmcResponseStream.Bytes()
|
||||
pBufferQueue.WriteTo(rmcResponseStream)
|
||||
|
||||
rmcResponse := nex.NewRMCResponse(datastore_super_mario_maker.ProtocolID, callID)
|
||||
rmcResponse.SetSuccess(datastore_super_mario_maker.MethodGetBufferQueue, rmcResponseBody)
|
||||
rmcResponse := nex.NewRMCSuccess(globals.SecureEndpoint, rmcResponseStream.Bytes())
|
||||
rmcResponse.ProtocolID = datastore_super_mario_maker.ProtocolID
|
||||
rmcResponse.MethodID = datastore_super_mario_maker.MethodGetBufferQueue
|
||||
rmcResponse.CallID = callID
|
||||
|
||||
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)
|
||||
|
||||
return 0
|
||||
return rmcResponse, nil
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,49 +1,32 @@
|
|||
package nex_datastore_super_mario_maker
|
||||
|
||||
import (
|
||||
nex "github.com/PretendoNetwork/nex-go"
|
||||
datastore_super_mario_maker "github.com/PretendoNetwork/nex-protocols-go/datastore/super-mario-maker"
|
||||
datastore_super_mario_maker_types "github.com/PretendoNetwork/nex-protocols-go/datastore/super-mario-maker/types"
|
||||
datastore_smm_db "github.com/PretendoNetwork/super-mario-maker-secure/database/datastore/super-mario-maker"
|
||||
"github.com/PretendoNetwork/super-mario-maker-secure/globals"
|
||||
"github.com/PretendoNetwork/nex-go/v2"
|
||||
datastore_super_mario_maker "github.com/PretendoNetwork/nex-protocols-go/v2/datastore/super-mario-maker"
|
||||
datastore_super_mario_maker_types "github.com/PretendoNetwork/nex-protocols-go/v2/datastore/super-mario-maker/types"
|
||||
datastore_smm_db "github.com/PretendoNetwork/super-mario-maker/database/datastore/super-mario-maker"
|
||||
"github.com/PretendoNetwork/super-mario-maker/globals"
|
||||
)
|
||||
|
||||
func GetCourseRecord(err error, packet nex.PacketInterface, callID uint32, param *datastore_super_mario_maker_types.DataStoreGetCourseRecordParam) uint32 {
|
||||
func GetCourseRecord(err error, packet nex.PacketInterface, callID uint32, param datastore_super_mario_maker_types.DataStoreGetCourseRecordParam) (*nex.RMCMessage, *nex.Error) {
|
||||
if err != nil {
|
||||
globals.Logger.Error(err.Error())
|
||||
return nex.Errors.DataStore.Unknown
|
||||
return nil, nex.NewError(nex.ResultCodes.DataStore.Unknown, err.Error())
|
||||
}
|
||||
|
||||
client := packet.Sender()
|
||||
|
||||
result, errCode := datastore_smm_db.GetCourseRecordByDataIDAndSlot(param.DataID, param.Slot)
|
||||
if errCode != 0 {
|
||||
return errCode
|
||||
result, nexError := datastore_smm_db.GetCourseRecordByDataIDAndSlot(param.DataID, param.Slot)
|
||||
if nexError != nil {
|
||||
return nil, nexError
|
||||
}
|
||||
|
||||
rmcResponseStream := nex.NewStreamOut(globals.SecureServer)
|
||||
rmcResponseStream := nex.NewByteStreamOut(globals.SecureServer.LibraryVersions, globals.SecureServer.ByteStreamSettings)
|
||||
|
||||
rmcResponseStream.WriteStructure(result)
|
||||
result.WriteTo(rmcResponseStream)
|
||||
|
||||
rmcResponseBody := rmcResponseStream.Bytes()
|
||||
rmcResponse := nex.NewRMCSuccess(globals.SecureEndpoint, rmcResponseStream.Bytes())
|
||||
rmcResponse.ProtocolID = datastore_super_mario_maker.ProtocolID
|
||||
rmcResponse.MethodID = datastore_super_mario_maker.MethodGetCourseRecord
|
||||
rmcResponse.CallID = callID
|
||||
|
||||
rmcResponse := nex.NewRMCResponse(datastore_super_mario_maker.ProtocolID, callID)
|
||||
rmcResponse.SetSuccess(datastore_super_mario_maker.MethodGetCourseRecord, 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)
|
||||
|
||||
return 0
|
||||
return rmcResponse, nil
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,26 +1,25 @@
|
|||
package nex_datastore_super_mario_maker
|
||||
|
||||
import (
|
||||
nex "github.com/PretendoNetwork/nex-go"
|
||||
datastore_super_mario_maker "github.com/PretendoNetwork/nex-protocols-go/datastore/super-mario-maker"
|
||||
datastore_super_mario_maker_types "github.com/PretendoNetwork/nex-protocols-go/datastore/super-mario-maker/types"
|
||||
datastore_types "github.com/PretendoNetwork/nex-protocols-go/datastore/types"
|
||||
datastore_smm_db "github.com/PretendoNetwork/super-mario-maker-secure/database/datastore/super-mario-maker"
|
||||
"github.com/PretendoNetwork/super-mario-maker-secure/globals"
|
||||
"github.com/PretendoNetwork/nex-go/v2"
|
||||
"github.com/PretendoNetwork/nex-go/v2/types"
|
||||
datastore_super_mario_maker "github.com/PretendoNetwork/nex-protocols-go/v2/datastore/super-mario-maker"
|
||||
datastore_super_mario_maker_types "github.com/PretendoNetwork/nex-protocols-go/v2/datastore/super-mario-maker/types"
|
||||
datastore_types "github.com/PretendoNetwork/nex-protocols-go/v2/datastore/types"
|
||||
datastore_smm_db "github.com/PretendoNetwork/super-mario-maker/database/datastore/super-mario-maker"
|
||||
"github.com/PretendoNetwork/super-mario-maker/globals"
|
||||
)
|
||||
|
||||
func GetCustomRankingByDataID(err error, packet nex.PacketInterface, callID uint32, param *datastore_super_mario_maker_types.DataStoreGetCustomRankingByDataIDParam) uint32 {
|
||||
func GetCustomRankingByDataID(err error, packet nex.PacketInterface, callID uint32, param datastore_super_mario_maker_types.DataStoreGetCustomRankingByDataIDParam) (*nex.RMCMessage, *nex.Error) {
|
||||
if err != nil {
|
||||
globals.Logger.Error(err.Error())
|
||||
return nex.Errors.DataStore.Unknown
|
||||
return nil, nex.NewError(nex.ResultCodes.DataStore.Unknown, err.Error())
|
||||
}
|
||||
|
||||
client := packet.Sender()
|
||||
|
||||
pRankingResult := datastore_smm_db.GetCustomRankingsByDataIDs(param.ApplicationID, param.DataIDList)
|
||||
pResults := make([]*nex.Result, 0, len(param.DataIDList))
|
||||
pResults := make(types.List[types.QResult], 0, len(param.DataIDList))
|
||||
|
||||
for _, rankingResult := range pRankingResult {
|
||||
for i := range pRankingResult {
|
||||
// * This is kind of backwards.
|
||||
// * The database pulls this data
|
||||
// * by default, so it can be done
|
||||
|
|
@ -31,51 +30,36 @@ func GetCustomRankingByDataID(err error, packet nex.PacketInterface, callID uint
|
|||
// * is *NOT* set and conditionally
|
||||
// * *REMOVE* the field
|
||||
if param.ResultOption&0x1 == 0 {
|
||||
rankingResult.MetaInfo.Tags = make([]string, 0)
|
||||
pRankingResult[i].MetaInfo.Tags = types.NewList[types.String]()
|
||||
}
|
||||
|
||||
if param.ResultOption&0x2 == 0 {
|
||||
rankingResult.MetaInfo.Ratings = make([]*datastore_types.DataStoreRatingInfoWithSlot, 0)
|
||||
pRankingResult[i].MetaInfo.Ratings = types.NewList[datastore_types.DataStoreRatingInfoWithSlot]()
|
||||
}
|
||||
|
||||
if param.ResultOption&0x4 == 0 {
|
||||
rankingResult.MetaInfo.MetaBinary = make([]byte, 0)
|
||||
pRankingResult[i].MetaInfo.MetaBinary = types.NewQBuffer(nil)
|
||||
}
|
||||
|
||||
if param.ResultOption&0x20 == 0 {
|
||||
rankingResult.Score = 0
|
||||
pRankingResult[i].Score = 0
|
||||
}
|
||||
|
||||
// * Since all errors are thrown away in
|
||||
// * datastore_smm_db.GetCustomRankingsByDataIDs
|
||||
// * assume all objects returned were a success
|
||||
pResults = append(pResults, nex.NewResultSuccess(nex.Errors.Core.Unknown))
|
||||
pResults = append(pResults, types.NewQResultSuccess(nex.ResultCodes.Core.Unknown))
|
||||
}
|
||||
|
||||
rmcResponseStream := nex.NewStreamOut(globals.SecureServer)
|
||||
rmcResponseStream := nex.NewByteStreamOut(globals.SecureServer.LibraryVersions, globals.SecureServer.ByteStreamSettings)
|
||||
|
||||
rmcResponseStream.WriteListStructure(pRankingResult)
|
||||
rmcResponseStream.WriteListResult(pResults)
|
||||
pRankingResult.WriteTo(rmcResponseStream)
|
||||
pResults.WriteTo(rmcResponseStream)
|
||||
|
||||
rmcResponseBody := rmcResponseStream.Bytes()
|
||||
rmcResponse := nex.NewRMCSuccess(globals.SecureEndpoint, rmcResponseStream.Bytes())
|
||||
rmcResponse.ProtocolID = datastore_super_mario_maker.ProtocolID
|
||||
rmcResponse.MethodID = datastore_super_mario_maker.MethodGetCustomRankingByDataID
|
||||
rmcResponse.CallID = callID
|
||||
|
||||
rmcResponse := nex.NewRMCResponse(datastore_super_mario_maker.ProtocolID, callID)
|
||||
rmcResponse.SetSuccess(datastore_super_mario_maker.MethodGetCustomRankingByDataID, 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)
|
||||
|
||||
return 0
|
||||
return rmcResponse, nil
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,56 +1,40 @@
|
|||
package nex_datastore_super_mario_maker
|
||||
|
||||
import (
|
||||
nex "github.com/PretendoNetwork/nex-go"
|
||||
datastore_super_mario_maker "github.com/PretendoNetwork/nex-protocols-go/datastore/super-mario-maker"
|
||||
"github.com/PretendoNetwork/super-mario-maker-secure/globals"
|
||||
"github.com/PretendoNetwork/nex-go/v2"
|
||||
"github.com/PretendoNetwork/nex-go/v2/types"
|
||||
datastore_super_mario_maker "github.com/PretendoNetwork/nex-protocols-go/v2/datastore/super-mario-maker"
|
||||
"github.com/PretendoNetwork/super-mario-maker/globals"
|
||||
)
|
||||
|
||||
func GetDeletionReason(err error, packet nex.PacketInterface, callID uint32, dataIDLst []uint64) uint32 {
|
||||
func GetDeletionReason(err error, packet nex.PacketInterface, callID uint32, dataIDLst types.List[types.UInt64]) (*nex.RMCMessage, *nex.Error) {
|
||||
if err != nil {
|
||||
globals.Logger.Error(err.Error())
|
||||
return nex.Errors.DataStore.Unknown
|
||||
return nil, nex.NewError(nex.ResultCodes.DataStore.Unknown, err.Error())
|
||||
}
|
||||
|
||||
client := packet.Sender()
|
||||
|
||||
// TODO - Complete this
|
||||
// * It's not actually known what the
|
||||
// * real "deletion reason" values are.
|
||||
// * This is stubbed until we figure
|
||||
// * that out
|
||||
pDeletionReasons := make([]uint32, 0)
|
||||
pDeletionReasons := types.NewList[types.UInt32]()
|
||||
|
||||
for range dataIDLst {
|
||||
// * Every course I've checked has had this
|
||||
// * set to 0, even if the course is not
|
||||
// * deleted
|
||||
pDeletionReasons = append(pDeletionReasons, 0)
|
||||
pDeletionReasons = append(pDeletionReasons, types.NewUInt32(0))
|
||||
}
|
||||
|
||||
rmcResponseStream := nex.NewStreamOut(globals.SecureServer)
|
||||
rmcResponseStream := nex.NewByteStreamOut(globals.SecureServer.LibraryVersions, globals.SecureServer.ByteStreamSettings)
|
||||
|
||||
rmcResponseStream.WriteListUInt32LE(pDeletionReasons)
|
||||
pDeletionReasons.WriteTo(rmcResponseStream)
|
||||
|
||||
rmcResponseBody := rmcResponseStream.Bytes()
|
||||
rmcResponse := nex.NewRMCSuccess(globals.SecureEndpoint, rmcResponseStream.Bytes())
|
||||
rmcResponse.ProtocolID = datastore_super_mario_maker.ProtocolID
|
||||
rmcResponse.MethodID = datastore_super_mario_maker.MethodGetDeletionReason
|
||||
rmcResponse.CallID = callID
|
||||
|
||||
rmcResponse := nex.NewRMCResponse(datastore_super_mario_maker.ProtocolID, callID)
|
||||
rmcResponse.SetSuccess(datastore_super_mario_maker.MethodGetDeletionReason, 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)
|
||||
|
||||
return 0
|
||||
return rmcResponse, nil
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,23 +1,22 @@
|
|||
package nex_datastore_super_mario_maker
|
||||
|
||||
import (
|
||||
nex "github.com/PretendoNetwork/nex-go"
|
||||
datastore_super_mario_maker "github.com/PretendoNetwork/nex-protocols-go/datastore/super-mario-maker"
|
||||
datastore_super_mario_maker_types "github.com/PretendoNetwork/nex-protocols-go/datastore/super-mario-maker/types"
|
||||
datastore_types "github.com/PretendoNetwork/nex-protocols-go/datastore/types"
|
||||
datastore_db "github.com/PretendoNetwork/super-mario-maker-secure/database/datastore"
|
||||
datastore_smm_db "github.com/PretendoNetwork/super-mario-maker-secure/database/datastore/super-mario-maker"
|
||||
"github.com/PretendoNetwork/super-mario-maker-secure/globals"
|
||||
"github.com/PretendoNetwork/nex-go/v2"
|
||||
"github.com/PretendoNetwork/nex-go/v2/types"
|
||||
datastore_super_mario_maker "github.com/PretendoNetwork/nex-protocols-go/v2/datastore/super-mario-maker"
|
||||
datastore_super_mario_maker_types "github.com/PretendoNetwork/nex-protocols-go/v2/datastore/super-mario-maker/types"
|
||||
datastore_types "github.com/PretendoNetwork/nex-protocols-go/v2/datastore/types"
|
||||
datastore_db "github.com/PretendoNetwork/super-mario-maker/database/datastore"
|
||||
datastore_smm_db "github.com/PretendoNetwork/super-mario-maker/database/datastore/super-mario-maker"
|
||||
"github.com/PretendoNetwork/super-mario-maker/globals"
|
||||
)
|
||||
|
||||
func GetMetasWithCourseRecord(err error, packet nex.PacketInterface, callID uint32, params []*datastore_super_mario_maker_types.DataStoreGetCourseRecordParam, metaParam *datastore_types.DataStoreGetMetaParam) uint32 {
|
||||
func GetMetasWithCourseRecord(err error, packet nex.PacketInterface, callID uint32, params types.List[datastore_super_mario_maker_types.DataStoreGetCourseRecordParam], metaParam datastore_types.DataStoreGetMetaParam) (*nex.RMCMessage, *nex.Error) {
|
||||
if err != nil {
|
||||
globals.Logger.Error(err.Error())
|
||||
return nex.Errors.DataStore.Unknown
|
||||
return nil, nex.NewError(nex.ResultCodes.DataStore.Unknown, err.Error())
|
||||
}
|
||||
|
||||
client := packet.Sender()
|
||||
|
||||
// * The functionality here is largely a guess
|
||||
// * based on how GetCourseRecord works and
|
||||
// * based on testing with a custom client.
|
||||
|
|
@ -25,70 +24,23 @@ func GetMetasWithCourseRecord(err error, packet nex.PacketInterface, callID uint
|
|||
// * seems to send any parameters, though if a
|
||||
// * custom client is used it IS functional
|
||||
|
||||
pMetaInfo := make([]*datastore_types.DataStoreMetaInfo, 0, len(params))
|
||||
pCourseResults := make([]*datastore_super_mario_maker_types.DataStoreGetCourseRecordResult, 0, len(params))
|
||||
pResults := make([]*nex.Result, 0, len(params))
|
||||
pMetaInfo := make(types.List[datastore_types.DataStoreMetaInfo], 0, len(params))
|
||||
pCourseResults := make(types.List[datastore_super_mario_maker_types.DataStoreGetCourseRecordResult], 0, len(params))
|
||||
pResults := make(types.List[types.QResult], 0, len(params))
|
||||
|
||||
for _, param := range params {
|
||||
for i := range params {
|
||||
// * metaParam has a password, but it's always set to 0.
|
||||
// * It also wouldn't make much sense for the same password
|
||||
// * to be used for all objects being requested here. So
|
||||
// * just assume metaParam is ONLY used for the resultOption
|
||||
// * field?
|
||||
objectInfo, errCode := datastore_db.GetObjectInfoByDataID(param.DataID)
|
||||
if errCode != 0 {
|
||||
// TODO - Maybe this should be broken out into a util function in globals?
|
||||
objectInfo, nexError := datastore_db.GetObjectInfoByDataID(params[i].DataID)
|
||||
if nexError != nil {
|
||||
objectInfo = datastore_types.NewDataStoreMetaInfo()
|
||||
objectInfo.DataID = 0
|
||||
objectInfo.OwnerID = 0
|
||||
objectInfo.Size = 0
|
||||
objectInfo.Name = ""
|
||||
objectInfo.DataType = 0
|
||||
objectInfo.MetaBinary = []byte{}
|
||||
objectInfo.Permission = datastore_types.NewDataStorePermission()
|
||||
objectInfo.Permission.Permission = 0
|
||||
objectInfo.Permission.RecipientIDs = []uint32{}
|
||||
objectInfo.DelPermission = datastore_types.NewDataStorePermission()
|
||||
objectInfo.DelPermission.Permission = 0
|
||||
objectInfo.DelPermission.RecipientIDs = []uint32{}
|
||||
objectInfo.CreatedTime = nex.NewDateTime(0)
|
||||
objectInfo.UpdatedTime = nex.NewDateTime(0)
|
||||
objectInfo.Period = 0
|
||||
objectInfo.Status = 0
|
||||
objectInfo.ReferredCnt = 0
|
||||
objectInfo.ReferDataID = 0
|
||||
objectInfo.Flag = 0
|
||||
objectInfo.ReferredTime = nex.NewDateTime(0)
|
||||
objectInfo.ExpireTime = nex.NewDateTime(0)
|
||||
objectInfo.Tags = []string{}
|
||||
objectInfo.Ratings = []*datastore_types.DataStoreRatingInfoWithSlot{}
|
||||
} else {
|
||||
errCode = globals.VerifyObjectPermission(objectInfo.OwnerID, client.PID(), objectInfo.Permission)
|
||||
if errCode != 0 {
|
||||
nexError = globals.DatastoreCommon.VerifyObjectPermission(objectInfo.OwnerID, packet.Sender().PID(), objectInfo.Permission)
|
||||
if nexError != nil {
|
||||
objectInfo = datastore_types.NewDataStoreMetaInfo()
|
||||
objectInfo.DataID = 0
|
||||
objectInfo.OwnerID = 0
|
||||
objectInfo.Size = 0
|
||||
objectInfo.Name = ""
|
||||
objectInfo.DataType = 0
|
||||
objectInfo.MetaBinary = []byte{}
|
||||
objectInfo.Permission = datastore_types.NewDataStorePermission()
|
||||
objectInfo.Permission.Permission = 0
|
||||
objectInfo.Permission.RecipientIDs = []uint32{}
|
||||
objectInfo.DelPermission = datastore_types.NewDataStorePermission()
|
||||
objectInfo.DelPermission.Permission = 0
|
||||
objectInfo.DelPermission.RecipientIDs = []uint32{}
|
||||
objectInfo.CreatedTime = nex.NewDateTime(0)
|
||||
objectInfo.UpdatedTime = nex.NewDateTime(0)
|
||||
objectInfo.Period = 0
|
||||
objectInfo.Status = 0
|
||||
objectInfo.ReferredCnt = 0
|
||||
objectInfo.ReferDataID = 0
|
||||
objectInfo.Flag = 0
|
||||
objectInfo.ReferredTime = nex.NewDateTime(0)
|
||||
objectInfo.ExpireTime = nex.NewDateTime(0)
|
||||
objectInfo.Tags = []string{}
|
||||
objectInfo.Ratings = []*datastore_types.DataStoreRatingInfoWithSlot{}
|
||||
}
|
||||
|
||||
// * This is kind of backwards.
|
||||
|
|
@ -101,61 +53,39 @@ func GetMetasWithCourseRecord(err error, packet nex.PacketInterface, callID uint
|
|||
// * is *NOT* set and conditionally
|
||||
// * *REMOVE* the field
|
||||
if metaParam.ResultOption&0x1 == 0 {
|
||||
objectInfo.Tags = make([]string, 0)
|
||||
objectInfo.Tags = types.NewList[types.String]()
|
||||
}
|
||||
|
||||
if metaParam.ResultOption&0x2 == 0 {
|
||||
objectInfo.Ratings = make([]*datastore_types.DataStoreRatingInfoWithSlot, 0)
|
||||
objectInfo.Ratings = types.NewList[datastore_types.DataStoreRatingInfoWithSlot]()
|
||||
}
|
||||
|
||||
if metaParam.ResultOption&0x4 == 0 {
|
||||
objectInfo.MetaBinary = make([]byte, 0)
|
||||
objectInfo.MetaBinary = types.NewQBuffer(nil)
|
||||
}
|
||||
}
|
||||
|
||||
// * Ignore errors, real server sends empty struct if can't be found
|
||||
courseRecord, errCode := datastore_smm_db.GetCourseRecordByDataIDAndSlot(param.DataID, param.Slot)
|
||||
if errCode != 0 || objectInfo.DataID == 0 { // * DataID == 0 means could not be found or accessed
|
||||
courseRecord, nexError := datastore_smm_db.GetCourseRecordByDataIDAndSlot(params[i].DataID, params[i].Slot)
|
||||
if nexError != nil || objectInfo.DataID == 0 { // * DataID == 0 means could not be found or accessed
|
||||
courseRecord = datastore_super_mario_maker_types.NewDataStoreGetCourseRecordResult()
|
||||
courseRecord.DataID = 0
|
||||
courseRecord.Slot = 0
|
||||
courseRecord.FirstPID = 0
|
||||
courseRecord.BestPID = 0
|
||||
courseRecord.BestScore = 0
|
||||
courseRecord.CreatedTime = nex.NewDateTime(0)
|
||||
courseRecord.UpdatedTime = nex.NewDateTime(0)
|
||||
}
|
||||
|
||||
pMetaInfo = append(pMetaInfo, objectInfo)
|
||||
pCourseResults = append(pCourseResults, courseRecord)
|
||||
pResults = append(pResults, nex.NewResultSuccess(nex.Errors.Core.Unknown)) // * Real server ALWAYS returns a success
|
||||
pResults = append(pResults, types.NewQResultSuccess(nex.ResultCodes.Core.Unknown)) // * Real server ALWAYS returns a success
|
||||
}
|
||||
|
||||
rmcResponseStream := nex.NewStreamOut(globals.SecureServer)
|
||||
rmcResponseStream := nex.NewByteStreamOut(globals.SecureServer.LibraryVersions, globals.SecureServer.ByteStreamSettings)
|
||||
|
||||
rmcResponseStream.WriteListStructure(pMetaInfo)
|
||||
rmcResponseStream.WriteListStructure(pCourseResults)
|
||||
rmcResponseStream.WriteListResult(pResults)
|
||||
pMetaInfo.WriteTo(rmcResponseStream)
|
||||
pCourseResults.WriteTo(rmcResponseStream)
|
||||
pResults.WriteTo(rmcResponseStream)
|
||||
|
||||
rmcResponseBody := rmcResponseStream.Bytes()
|
||||
rmcResponse := nex.NewRMCSuccess(globals.SecureEndpoint, rmcResponseStream.Bytes())
|
||||
rmcResponse.ProtocolID = datastore_super_mario_maker.ProtocolID
|
||||
rmcResponse.MethodID = datastore_super_mario_maker.MethodGetMetasWithCourseRecord
|
||||
rmcResponse.CallID = callID
|
||||
|
||||
rmcResponse := nex.NewRMCResponse(datastore_super_mario_maker.ProtocolID, callID)
|
||||
rmcResponse.SetSuccess(datastore_super_mario_maker.MethodGetMetasWithCourseRecord, 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)
|
||||
|
||||
return 0
|
||||
return rmcResponse, nil
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,28 +5,26 @@ import (
|
|||
"os"
|
||||
"time"
|
||||
|
||||
nex "github.com/PretendoNetwork/nex-go"
|
||||
datastore_super_mario_maker "github.com/PretendoNetwork/nex-protocols-go/datastore/super-mario-maker"
|
||||
datastore_super_mario_maker_types "github.com/PretendoNetwork/nex-protocols-go/datastore/super-mario-maker/types"
|
||||
datastore_types "github.com/PretendoNetwork/nex-protocols-go/datastore/types"
|
||||
datastore_db "github.com/PretendoNetwork/super-mario-maker-secure/database/datastore"
|
||||
"github.com/PretendoNetwork/super-mario-maker-secure/globals"
|
||||
"github.com/PretendoNetwork/nex-go/v2"
|
||||
"github.com/PretendoNetwork/nex-go/v2/types"
|
||||
datastore_super_mario_maker "github.com/PretendoNetwork/nex-protocols-go/v2/datastore/super-mario-maker"
|
||||
datastore_super_mario_maker_types "github.com/PretendoNetwork/nex-protocols-go/v2/datastore/super-mario-maker/types"
|
||||
datastore_db "github.com/PretendoNetwork/super-mario-maker/database/datastore"
|
||||
"github.com/PretendoNetwork/super-mario-maker/globals"
|
||||
)
|
||||
|
||||
func GetObjectInfos(err error, packet nex.PacketInterface, callID uint32, dataIDs []uint64) uint32 {
|
||||
func GetObjectInfos(err error, packet nex.PacketInterface, callID uint32, dataIDs types.List[types.UInt64]) (*nex.RMCMessage, *nex.Error) {
|
||||
if err != nil {
|
||||
globals.Logger.Error(err.Error())
|
||||
return nex.Errors.DataStore.Unknown
|
||||
return nil, nex.NewError(nex.ResultCodes.DataStore.Unknown, err.Error())
|
||||
}
|
||||
|
||||
client := packet.Sender()
|
||||
pInfos := types.NewList[datastore_super_mario_maker_types.DataStoreFileServerObjectInfo]()
|
||||
|
||||
pInfos := make([]*datastore_super_mario_maker_types.DataStoreFileServerObjectInfo, 0)
|
||||
|
||||
for _, dataID := range dataIDs {
|
||||
objectInfo, errCode := datastore_db.GetObjectInfoByDataID(dataID)
|
||||
if errCode != 0 {
|
||||
return errCode
|
||||
for i := range dataIDs {
|
||||
objectInfo, nexError := datastore_db.GetObjectInfoByDataID(dataIDs[i])
|
||||
if nexError != nil {
|
||||
return nil, nexError
|
||||
}
|
||||
|
||||
bucket := os.Getenv("PN_SMM_CONFIG_S3_BUCKET")
|
||||
|
|
@ -35,44 +33,26 @@ func GetObjectInfos(err error, packet nex.PacketInterface, callID uint32, dataID
|
|||
URL, err := globals.Presigner.GetObject(bucket, key, time.Minute*15)
|
||||
if err != nil {
|
||||
globals.Logger.Error(err.Error())
|
||||
return nex.Errors.DataStore.OperationNotAllowed
|
||||
return nil, nex.NewError(nex.ResultCodes.DataStore.OperationNotAllowed, "Operation not allowed")
|
||||
}
|
||||
|
||||
info := datastore_super_mario_maker_types.NewDataStoreFileServerObjectInfo()
|
||||
info.DataID = objectInfo.DataID
|
||||
info.GetInfo = datastore_types.NewDataStoreReqGetInfo()
|
||||
info.GetInfo.URL = URL.String()
|
||||
info.GetInfo.RequestHeaders = []*datastore_types.DataStoreKeyValue{}
|
||||
info.GetInfo.URL = types.NewString(URL.String())
|
||||
info.GetInfo.Size = objectInfo.Size
|
||||
info.GetInfo.RootCACert = []byte{}
|
||||
info.GetInfo.DataID = objectInfo.DataID
|
||||
|
||||
pInfos = append(pInfos, info)
|
||||
}
|
||||
|
||||
rmcResponseStream := nex.NewStreamOut(globals.SecureServer)
|
||||
rmcResponseStream := nex.NewByteStreamOut(globals.SecureServer.LibraryVersions, globals.SecureServer.ByteStreamSettings)
|
||||
|
||||
rmcResponseStream.WriteListStructure(pInfos)
|
||||
pInfos.WriteTo(rmcResponseStream)
|
||||
|
||||
rmcResponseBody := rmcResponseStream.Bytes()
|
||||
rmcResponse := nex.NewRMCSuccess(globals.SecureEndpoint, rmcResponseStream.Bytes())
|
||||
rmcResponse.ProtocolID = datastore_super_mario_maker.ProtocolID
|
||||
rmcResponse.MethodID = datastore_super_mario_maker.MethodGetObjectInfos
|
||||
rmcResponse.CallID = callID
|
||||
|
||||
rmcResponse := nex.NewRMCResponse(datastore_super_mario_maker.ProtocolID, callID)
|
||||
rmcResponse.SetSuccess(datastore_super_mario_maker.MethodGetObjectInfos, 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)
|
||||
|
||||
return 0
|
||||
return rmcResponse, nil
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,43 +5,42 @@ import (
|
|||
"os"
|
||||
"time"
|
||||
|
||||
nex "github.com/PretendoNetwork/nex-go"
|
||||
datastore_super_mario_maker "github.com/PretendoNetwork/nex-protocols-go/datastore/super-mario-maker"
|
||||
datastore_super_mario_maker_types "github.com/PretendoNetwork/nex-protocols-go/datastore/super-mario-maker/types"
|
||||
datastore_types "github.com/PretendoNetwork/nex-protocols-go/datastore/types"
|
||||
datastore_db "github.com/PretendoNetwork/super-mario-maker-secure/database/datastore"
|
||||
datastore_smm_db "github.com/PretendoNetwork/super-mario-maker-secure/database/datastore/super-mario-maker"
|
||||
"github.com/PretendoNetwork/super-mario-maker-secure/globals"
|
||||
"github.com/PretendoNetwork/nex-go/v2"
|
||||
"github.com/PretendoNetwork/nex-go/v2/types"
|
||||
datastore_super_mario_maker "github.com/PretendoNetwork/nex-protocols-go/v2/datastore/super-mario-maker"
|
||||
datastore_super_mario_maker_types "github.com/PretendoNetwork/nex-protocols-go/v2/datastore/super-mario-maker/types"
|
||||
datastore_types "github.com/PretendoNetwork/nex-protocols-go/v2/datastore/types"
|
||||
datastore_db "github.com/PretendoNetwork/super-mario-maker/database/datastore"
|
||||
datastore_smm_db "github.com/PretendoNetwork/super-mario-maker/database/datastore/super-mario-maker"
|
||||
"github.com/PretendoNetwork/super-mario-maker/globals"
|
||||
)
|
||||
|
||||
func PrepareAttachFile(err error, packet nex.PacketInterface, callID uint32, param *datastore_super_mario_maker_types.DataStoreAttachFileParam) uint32 {
|
||||
func PrepareAttachFile(err error, packet nex.PacketInterface, callID uint32, param datastore_super_mario_maker_types.DataStoreAttachFileParam) (*nex.RMCMessage, *nex.Error) {
|
||||
if err != nil {
|
||||
globals.Logger.Error(err.Error())
|
||||
return nex.Errors.DataStore.Unknown
|
||||
return nil, nex.NewError(nex.ResultCodes.DataStore.Unknown, err.Error())
|
||||
}
|
||||
|
||||
client := packet.Sender()
|
||||
|
||||
// * This method seems to be only used at "attach"
|
||||
// * a file to an existing object. In practice,
|
||||
// * SMM will use this to upload a courses preview
|
||||
// * image after uploading the course.
|
||||
// * param.ReferDataID is the courses object DataID
|
||||
|
||||
dataID, errCode := datastore_smm_db.InitializeObjectByAttachFileParam(client.PID(), param)
|
||||
if errCode != 0 {
|
||||
globals.Logger.Errorf("Error code %d on object init", errCode)
|
||||
return errCode
|
||||
dataID, nexError := datastore_smm_db.InitializeObjectByAttachFileParam(packet.Sender().PID(), param)
|
||||
if nexError != nil {
|
||||
globals.Logger.Errorf("Error code %d on object init", nexError.ResultCode)
|
||||
return nil, nexError
|
||||
}
|
||||
|
||||
// TODO - Should this be moved to InitializeObjectByAttachFileParam?
|
||||
// * This never seems to have any values during normal gameplay,
|
||||
// * but just in case
|
||||
for _, ratingInitParamWithSlot := range param.PostParam.RatingInitParams {
|
||||
errCode = datastore_db.InitializeObjectRatingWithSlot(dataID, ratingInitParamWithSlot)
|
||||
if errCode != 0 {
|
||||
globals.Logger.Errorf("Error code %d on rating init", errCode)
|
||||
return errCode
|
||||
for i := range param.PostParam.RatingInitParams {
|
||||
nexError = datastore_db.InitializeObjectRatingWithSlot(uint64(dataID), param.PostParam.RatingInitParams[i])
|
||||
if nexError != nil {
|
||||
globals.Logger.Errorf("Error code %d on rating init", nexError.ResultCode)
|
||||
return nil, nexError
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -55,42 +54,25 @@ func PrepareAttachFile(err error, packet nex.PacketInterface, callID uint32, par
|
|||
pReqPostInfo := datastore_types.NewDataStoreReqPostInfo()
|
||||
|
||||
pReqPostInfo.DataID = dataID
|
||||
pReqPostInfo.URL = URL.String()
|
||||
pReqPostInfo.RequestHeaders = []*datastore_types.DataStoreKeyValue{}
|
||||
pReqPostInfo.FormFields = make([]*datastore_types.DataStoreKeyValue, 0, len(formData))
|
||||
pReqPostInfo.RootCACert = []byte{}
|
||||
pReqPostInfo.URL = types.NewString(URL.String())
|
||||
pReqPostInfo.FormFields = make(types.List[datastore_types.DataStoreKeyValue], 0, len(formData))
|
||||
|
||||
for key, value := range formData {
|
||||
field := datastore_types.NewDataStoreKeyValue()
|
||||
field.Key = key
|
||||
field.Value = value
|
||||
field.Key = types.NewString(key)
|
||||
field.Value = types.NewString(value)
|
||||
|
||||
pReqPostInfo.FormFields = append(pReqPostInfo.FormFields, field)
|
||||
}
|
||||
|
||||
rmcResponseStream := nex.NewStreamOut(globals.SecureServer)
|
||||
rmcResponseStream := nex.NewByteStreamOut(globals.SecureServer.LibraryVersions, globals.SecureServer.ByteStreamSettings)
|
||||
|
||||
rmcResponseStream.WriteStructure(pReqPostInfo)
|
||||
pReqPostInfo.WriteTo(rmcResponseStream)
|
||||
|
||||
rmcResponseBody := rmcResponseStream.Bytes()
|
||||
rmcResponse := nex.NewRMCSuccess(globals.SecureEndpoint, rmcResponseStream.Bytes())
|
||||
rmcResponse.ProtocolID = datastore_super_mario_maker.ProtocolID
|
||||
rmcResponse.MethodID = datastore_super_mario_maker.MethodPrepareAttachFile
|
||||
rmcResponse.CallID = callID
|
||||
|
||||
rmcResponse := nex.NewRMCResponse(datastore_super_mario_maker.ProtocolID, callID)
|
||||
rmcResponse.SetSuccess(datastore_super_mario_maker.MethodPrepareAttachFile, 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)
|
||||
|
||||
return 0
|
||||
return rmcResponse, nil
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,43 +1,29 @@
|
|||
package nex_datastore_super_mario_maker
|
||||
|
||||
import (
|
||||
nex "github.com/PretendoNetwork/nex-go"
|
||||
datastore_super_mario_maker "github.com/PretendoNetwork/nex-protocols-go/datastore/super-mario-maker"
|
||||
datastore_super_mario_maker_types "github.com/PretendoNetwork/nex-protocols-go/datastore/super-mario-maker/types"
|
||||
datastore_smm_db "github.com/PretendoNetwork/super-mario-maker-secure/database/datastore/super-mario-maker"
|
||||
"github.com/PretendoNetwork/super-mario-maker-secure/globals"
|
||||
"github.com/PretendoNetwork/nex-go/v2"
|
||||
"github.com/PretendoNetwork/nex-go/v2/types"
|
||||
datastore_super_mario_maker "github.com/PretendoNetwork/nex-protocols-go/v2/datastore/super-mario-maker"
|
||||
datastore_super_mario_maker_types "github.com/PretendoNetwork/nex-protocols-go/v2/datastore/super-mario-maker/types"
|
||||
datastore_smm_db "github.com/PretendoNetwork/super-mario-maker/database/datastore/super-mario-maker"
|
||||
"github.com/PretendoNetwork/super-mario-maker/globals"
|
||||
)
|
||||
|
||||
func RateCustomRanking(err error, packet nex.PacketInterface, callID uint32, params []*datastore_super_mario_maker_types.DataStoreRateCustomRankingParam) uint32 {
|
||||
func RateCustomRanking(err error, packet nex.PacketInterface, callID uint32, params types.List[datastore_super_mario_maker_types.DataStoreRateCustomRankingParam]) (*nex.RMCMessage, *nex.Error) {
|
||||
if err != nil {
|
||||
globals.Logger.Error(err.Error())
|
||||
return nex.Errors.DataStore.Unknown
|
||||
return nil, nex.NewError(nex.ResultCodes.DataStore.Unknown, err.Error())
|
||||
}
|
||||
|
||||
client := packet.Sender()
|
||||
|
||||
// TODO - Check the period. The real server does check this, just unsure what it means or what the check is
|
||||
for _, param := range params {
|
||||
datastore_smm_db.InsertOrUpdateCustomRanking(param.DataID, param.ApplicationID, param.Score)
|
||||
for i := range params {
|
||||
datastore_smm_db.InsertOrUpdateCustomRanking(params[i].DataID, params[i].ApplicationID, params[i].Score)
|
||||
}
|
||||
|
||||
rmcResponse := nex.NewRMCResponse(datastore_super_mario_maker.ProtocolID, callID)
|
||||
rmcResponse.SetSuccess(datastore_super_mario_maker.MethodRateCustomRanking, nil)
|
||||
rmcResponse := nex.NewRMCSuccess(globals.SecureEndpoint, nil)
|
||||
rmcResponse.ProtocolID = datastore_super_mario_maker.ProtocolID
|
||||
rmcResponse.MethodID = datastore_super_mario_maker.MethodRateCustomRanking
|
||||
rmcResponse.CallID = callID
|
||||
|
||||
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)
|
||||
|
||||
return 0
|
||||
return rmcResponse, nil
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,21 +1,20 @@
|
|||
package nex_datastore_super_mario_maker
|
||||
|
||||
import (
|
||||
nex "github.com/PretendoNetwork/nex-go"
|
||||
datastore_super_mario_maker "github.com/PretendoNetwork/nex-protocols-go/datastore/super-mario-maker"
|
||||
datastore_types "github.com/PretendoNetwork/nex-protocols-go/datastore/types"
|
||||
datastore_smm_db "github.com/PretendoNetwork/super-mario-maker-secure/database/datastore/super-mario-maker"
|
||||
"github.com/PretendoNetwork/super-mario-maker-secure/globals"
|
||||
"github.com/PretendoNetwork/nex-go/v2"
|
||||
"github.com/PretendoNetwork/nex-go/v2/types"
|
||||
datastore_super_mario_maker "github.com/PretendoNetwork/nex-protocols-go/v2/datastore/super-mario-maker"
|
||||
datastore_types "github.com/PretendoNetwork/nex-protocols-go/v2/datastore/types"
|
||||
datastore_smm_db "github.com/PretendoNetwork/super-mario-maker/database/datastore/super-mario-maker"
|
||||
"github.com/PretendoNetwork/super-mario-maker/globals"
|
||||
)
|
||||
|
||||
func RecommendedCourseSearchObject(err error, packet nex.PacketInterface, callID uint32, param *datastore_types.DataStoreSearchParam, extraData []string) uint32 {
|
||||
func RecommendedCourseSearchObject(err error, packet nex.PacketInterface, callID uint32, param datastore_types.DataStoreSearchParam, extraData types.List[types.String]) (*nex.RMCMessage, *nex.Error) {
|
||||
if err != nil {
|
||||
globals.Logger.Error(err.Error())
|
||||
return nex.Errors.DataStore.Unknown
|
||||
return nil, nex.NewError(nex.ResultCodes.DataStore.Unknown, err.Error())
|
||||
}
|
||||
|
||||
client := packet.Sender()
|
||||
|
||||
// * This method is used in 100 Mario and Course World
|
||||
// *
|
||||
// * extraData seems to be a set of filters defining a
|
||||
|
|
@ -45,34 +44,19 @@ func RecommendedCourseSearchObject(err error, packet nex.PacketInterface, callID
|
|||
}
|
||||
|
||||
// TODO - Use the offet? Real client never uses it, but might be nice for completeness sake?
|
||||
pRankingResults, errCode := datastore_smm_db.GetRandomCoursesWithLimit(length)
|
||||
if errCode != 0 {
|
||||
return errCode
|
||||
pRankingResults, nexError := datastore_smm_db.GetRandomCoursesWithLimit(length)
|
||||
if nexError != nil {
|
||||
return nil, nexError
|
||||
}
|
||||
|
||||
rmcResponseStream := nex.NewStreamOut(globals.SecureServer)
|
||||
rmcResponseStream := nex.NewByteStreamOut(globals.SecureServer.LibraryVersions, globals.SecureServer.ByteStreamSettings)
|
||||
|
||||
rmcResponseStream.WriteListStructure(pRankingResults)
|
||||
pRankingResults.WriteTo(rmcResponseStream)
|
||||
|
||||
rmcResponseBody := rmcResponseStream.Bytes()
|
||||
rmcResponse := nex.NewRMCSuccess(globals.SecureEndpoint, rmcResponseStream.Bytes())
|
||||
rmcResponse.ProtocolID = datastore_super_mario_maker.ProtocolID
|
||||
rmcResponse.MethodID = datastore_super_mario_maker.MethodRecommendedCourseSearchObject
|
||||
rmcResponse.CallID = callID
|
||||
|
||||
rmcResponse := nex.NewRMCResponse(datastore_super_mario_maker.ProtocolID, callID)
|
||||
rmcResponse.SetSuccess(datastore_super_mario_maker.MethodRecommendedCourseSearchObject, 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)
|
||||
|
||||
return 0
|
||||
return rmcResponse, nil
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,21 +3,20 @@ package nex_datastore_super_mario_maker
|
|||
import (
|
||||
"strconv"
|
||||
|
||||
nex "github.com/PretendoNetwork/nex-go"
|
||||
datastore_super_mario_maker "github.com/PretendoNetwork/nex-protocols-go/datastore/super-mario-maker"
|
||||
datastore_types "github.com/PretendoNetwork/nex-protocols-go/datastore/types"
|
||||
datastore_smm_db "github.com/PretendoNetwork/super-mario-maker-secure/database/datastore/super-mario-maker"
|
||||
"github.com/PretendoNetwork/super-mario-maker-secure/globals"
|
||||
"github.com/PretendoNetwork/nex-go/v2"
|
||||
"github.com/PretendoNetwork/nex-go/v2/types"
|
||||
datastore_super_mario_maker "github.com/PretendoNetwork/nex-protocols-go/v2/datastore/super-mario-maker"
|
||||
datastore_types "github.com/PretendoNetwork/nex-protocols-go/v2/datastore/types"
|
||||
datastore_smm_db "github.com/PretendoNetwork/super-mario-maker/database/datastore/super-mario-maker"
|
||||
"github.com/PretendoNetwork/super-mario-maker/globals"
|
||||
)
|
||||
|
||||
func SuggestedCourseSearchObject(err error, packet nex.PacketInterface, callID uint32, param *datastore_types.DataStoreSearchParam, extraData []string) uint32 {
|
||||
func SuggestedCourseSearchObject(err error, packet nex.PacketInterface, callID uint32, param datastore_types.DataStoreSearchParam, extraData types.List[types.String]) (*nex.RMCMessage, *nex.Error) {
|
||||
if err != nil {
|
||||
globals.Logger.Error(err.Error())
|
||||
return nex.Errors.DataStore.Unknown
|
||||
return nil, nex.NewError(nex.ResultCodes.DataStore.Unknown, err.Error())
|
||||
}
|
||||
|
||||
client := packet.Sender()
|
||||
|
||||
// * This method is called when a course is completed
|
||||
// * to show the scrolling courses at the bottom of the
|
||||
// * screen. extraData[0] is the DataID of the current
|
||||
|
|
@ -28,41 +27,26 @@ func SuggestedCourseSearchObject(err error, packet nex.PacketInterface, callID u
|
|||
// * does act as a filter of some kind? Maybe it has to
|
||||
// * do with difficulty? Or ratings?
|
||||
|
||||
_, err = strconv.ParseUint(extraData[0], 0, 64)
|
||||
_, err = strconv.ParseUint(string(extraData[0]), 0, 64)
|
||||
if err != nil {
|
||||
globals.Logger.Error(err.Error())
|
||||
return nex.Errors.DataStore.InvalidArgument
|
||||
return nil, nex.NewError(nex.ResultCodes.DataStore.InvalidArgument, "Invalid argument")
|
||||
}
|
||||
|
||||
// TODO - Use extraData for filtering
|
||||
pRankingResults, errCode := datastore_smm_db.GetRandomCoursesWithLimit(int(param.ResultRange.Length))
|
||||
if errCode != 0 {
|
||||
return errCode
|
||||
pRankingResults, nexError := datastore_smm_db.GetRandomCoursesWithLimit(int(param.ResultRange.Length))
|
||||
if nexError != nil {
|
||||
return nil, nexError
|
||||
}
|
||||
|
||||
rmcResponseStream := nex.NewStreamOut(globals.SecureServer)
|
||||
rmcResponseStream := nex.NewByteStreamOut(globals.SecureServer.LibraryVersions, globals.SecureServer.ByteStreamSettings)
|
||||
|
||||
rmcResponseStream.WriteListStructure(pRankingResults)
|
||||
pRankingResults.WriteTo(rmcResponseStream)
|
||||
|
||||
rmcResponseBody := rmcResponseStream.Bytes()
|
||||
rmcResponse := nex.NewRMCSuccess(globals.SecureEndpoint, rmcResponseStream.Bytes())
|
||||
rmcResponse.ProtocolID = datastore_super_mario_maker.ProtocolID
|
||||
rmcResponse.MethodID = datastore_super_mario_maker.MethodSuggestedCourseSearchObject
|
||||
rmcResponse.CallID = callID
|
||||
|
||||
rmcResponse := nex.NewRMCResponse(datastore_super_mario_maker.ProtocolID, callID)
|
||||
rmcResponse.SetSuccess(datastore_super_mario_maker.MethodSuggestedCourseSearchObject, 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)
|
||||
|
||||
return 0
|
||||
return rmcResponse, nil
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,43 +1,30 @@
|
|||
package nex_datastore_super_mario_maker
|
||||
|
||||
import (
|
||||
nex "github.com/PretendoNetwork/nex-go"
|
||||
datastore_super_mario_maker "github.com/PretendoNetwork/nex-protocols-go/datastore/super-mario-maker"
|
||||
datastore_super_mario_maker_types "github.com/PretendoNetwork/nex-protocols-go/datastore/super-mario-maker/types"
|
||||
datastore_smm_db "github.com/PretendoNetwork/super-mario-maker-secure/database/datastore/super-mario-maker"
|
||||
"github.com/PretendoNetwork/super-mario-maker-secure/globals"
|
||||
"github.com/PretendoNetwork/nex-go/v2"
|
||||
datastore_super_mario_maker "github.com/PretendoNetwork/nex-protocols-go/v2/datastore/super-mario-maker"
|
||||
datastore_super_mario_maker_types "github.com/PretendoNetwork/nex-protocols-go/v2/datastore/super-mario-maker/types"
|
||||
datastore_smm_db "github.com/PretendoNetwork/super-mario-maker/database/datastore/super-mario-maker"
|
||||
"github.com/PretendoNetwork/super-mario-maker/globals"
|
||||
)
|
||||
|
||||
func UploadCourseRecord(err error, packet nex.PacketInterface, callID uint32, param *datastore_super_mario_maker_types.DataStoreUploadCourseRecordParam) uint32 {
|
||||
func UploadCourseRecord(err error, packet nex.PacketInterface, callID uint32, param datastore_super_mario_maker_types.DataStoreUploadCourseRecordParam) (*nex.RMCMessage, *nex.Error) {
|
||||
if err != nil {
|
||||
globals.Logger.Error(err.Error())
|
||||
return nex.Errors.DataStore.Unknown
|
||||
return nil, nex.NewError(nex.ResultCodes.DataStore.Unknown, err.Error())
|
||||
}
|
||||
|
||||
client := packet.Sender()
|
||||
|
||||
errCode := datastore_smm_db.InsertOrUpdateCourseRecord(param.DataID, param.Slot, client.PID(), param.Score)
|
||||
if errCode != 0 {
|
||||
return errCode
|
||||
nexError := datastore_smm_db.InsertOrUpdateCourseRecord(param.DataID, param.Slot, client.PID(), param.Score)
|
||||
if nexError != nil {
|
||||
return nil, nexError
|
||||
}
|
||||
|
||||
rmcResponse := nex.NewRMCResponse(datastore_super_mario_maker.ProtocolID, callID)
|
||||
rmcResponse.SetSuccess(datastore_super_mario_maker.MethodUploadCourseRecord, nil)
|
||||
rmcResponse := nex.NewRMCSuccess(globals.SecureEndpoint, nil)
|
||||
rmcResponse.ProtocolID = datastore_super_mario_maker.ProtocolID
|
||||
rmcResponse.MethodID = datastore_super_mario_maker.MethodUploadCourseRecord
|
||||
rmcResponse.CallID = callID
|
||||
|
||||
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)
|
||||
|
||||
return 0
|
||||
return rmcResponse, nil
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,38 +1,24 @@
|
|||
package nex_message_delivery
|
||||
|
||||
import (
|
||||
nex "github.com/PretendoNetwork/nex-go"
|
||||
message_delivery "github.com/PretendoNetwork/nex-protocols-go/message-delivery"
|
||||
"github.com/PretendoNetwork/super-mario-maker-secure/globals"
|
||||
nex "github.com/PretendoNetwork/nex-go/v2"
|
||||
"github.com/PretendoNetwork/nex-go/v2/types"
|
||||
message_delivery "github.com/PretendoNetwork/nex-protocols-go/v2/message-delivery"
|
||||
"github.com/PretendoNetwork/super-mario-maker/globals"
|
||||
)
|
||||
|
||||
func DeliverMessage(err error, packet nex.PacketInterface, callID uint32, oUserMessage *nex.DataHolder) uint32 {
|
||||
func DeliverMessage(err error, packet nex.PacketInterface, callID uint32, oUserMessage types.DataHolder) (*nex.RMCMessage, *nex.Error) {
|
||||
if err != nil {
|
||||
globals.Logger.Error(err.Error())
|
||||
return nex.Errors.DataStore.Unknown
|
||||
return nil, nex.NewError(nex.ResultCodes.DataStore.Unknown, err.Error())
|
||||
}
|
||||
|
||||
client := packet.Sender()
|
||||
|
||||
// TODO - See what this does
|
||||
|
||||
rmcResponse := nex.NewRMCResponse(message_delivery.ProtocolID, callID)
|
||||
rmcResponse.SetSuccess(message_delivery.MethodDeliverMessage, nil)
|
||||
rmcResponse := nex.NewRMCSuccess(globals.SecureEndpoint, nil)
|
||||
rmcResponse.ProtocolID = message_delivery.ProtocolID
|
||||
rmcResponse.MethodID = message_delivery.MethodDeliverMessage
|
||||
rmcResponse.CallID = callID
|
||||
|
||||
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)
|
||||
|
||||
return 0
|
||||
return rmcResponse, nil
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,27 +4,31 @@ import (
|
|||
"os"
|
||||
"strconv"
|
||||
|
||||
nex "github.com/PretendoNetwork/nex-go"
|
||||
ticket_granting "github.com/PretendoNetwork/nex-protocols-common-go/ticket-granting"
|
||||
"github.com/PretendoNetwork/super-mario-maker-secure/globals"
|
||||
"github.com/PretendoNetwork/nex-go/v2/constants"
|
||||
"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/super-mario-maker/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_SMM_SECURE_SERVER_PORT"))
|
||||
|
||||
secureStationURL := types.NewStationURL("")
|
||||
secureStationURL.SetURLType(constants.StationURLPRUDPS)
|
||||
secureStationURL.SetAddress(os.Getenv("PN_SMM_SECURE_SERVER_HOST"))
|
||||
port, _ := strconv.ParseUint(os.Getenv("PN_SMM_SECURE_SERVER_PORT"), 10, 32)
|
||||
secureStationURL.SetPort(uint32(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(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 = types.NewString(serverBuildString)
|
||||
commonTicketGrantingProtocol.SecureServerAccount = globals.SecureServerAccount
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,50 +3,67 @@ package nex
|
|||
import (
|
||||
"os"
|
||||
|
||||
datastore "github.com/PretendoNetwork/nex-protocols-common-go/datastore"
|
||||
secureconnection "github.com/PretendoNetwork/nex-protocols-common-go/secure-connection"
|
||||
datastore_db "github.com/PretendoNetwork/super-mario-maker-secure/database/datastore"
|
||||
"github.com/PretendoNetwork/super-mario-maker-secure/globals"
|
||||
nex_datastore_super_mario_maker "github.com/PretendoNetwork/super-mario-maker-secure/nex/datastore/super-mario-maker"
|
||||
"github.com/PretendoNetwork/nex-go/v2/types"
|
||||
datastorecommon "github.com/PretendoNetwork/nex-protocols-common-go/v2/datastore"
|
||||
securecommon "github.com/PretendoNetwork/nex-protocols-common-go/v2/secure-connection"
|
||||
datastore "github.com/PretendoNetwork/nex-protocols-go/v2/datastore"
|
||||
datastoresmm "github.com/PretendoNetwork/nex-protocols-go/v2/datastore/super-mario-maker"
|
||||
secure "github.com/PretendoNetwork/nex-protocols-go/v2/secure-connection"
|
||||
datastore_db "github.com/PretendoNetwork/super-mario-maker/database/datastore"
|
||||
"github.com/PretendoNetwork/super-mario-maker/globals"
|
||||
nex_datastore_super_mario_maker "github.com/PretendoNetwork/super-mario-maker/nex/datastore/super-mario-maker"
|
||||
)
|
||||
|
||||
func registerCommonSecureProtocols() {
|
||||
secureconnection.NewCommonSecureConnectionProtocol(globals.SecureServer)
|
||||
secureProtocol := secure.NewProtocol()
|
||||
globals.SecureEndpoint.RegisterServiceProtocol(secureProtocol)
|
||||
commonSecureProtocol := securecommon.NewCommonProtocol(secureProtocol)
|
||||
commonSecureProtocol.CreateReportDBRecord = func(pid types.PID, reportID types.UInt32, reportData types.QBuffer) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
commonDataStoreProtocol := datastore.NewCommonDataStoreProtocol(globals.SecureServer)
|
||||
datastoreProtocol := datastore.NewProtocol()
|
||||
commonDataStoreProtocol := datastorecommon.NewCommonProtocol(datastoreProtocol)
|
||||
|
||||
commonDataStoreProtocol.SetS3Bucket(os.Getenv("PN_SMM_CONFIG_S3_BUCKET"))
|
||||
commonDataStoreProtocol.SetMinIOClient(globals.MinIOClient)
|
||||
commonDataStoreProtocol.GetObjectInfoByDataID(datastore_db.GetObjectInfoByDataID)
|
||||
commonDataStoreProtocol.UpdateObjectPeriodByDataIDWithPassword(datastore_db.UpdateObjectPeriodByDataIDWithPassword)
|
||||
commonDataStoreProtocol.UpdateObjectMetaBinaryByDataIDWithPassword(datastore_db.UpdateObjectMetaBinaryByDataIDWithPassword)
|
||||
commonDataStoreProtocol.UpdateObjectDataTypeByDataIDWithPassword(datastore_db.UpdateObjectDataTypeByDataIDWithPassword)
|
||||
commonDataStoreProtocol.GetObjectSizeDataID(datastore_db.GetObjectSizeDataID)
|
||||
commonDataStoreProtocol.UpdateObjectUploadCompletedByDataID(datastore_db.UpdateObjectUploadCompletedByDataID)
|
||||
commonDataStoreProtocol.GetObjectInfoByPersistenceTargetWithPassword(datastore_db.GetObjectInfoByPersistenceTargetWithPassword)
|
||||
commonDataStoreProtocol.GetObjectInfoByDataIDWithPassword(datastore_db.GetObjectInfoByDataIDWithPassword)
|
||||
commonDataStoreProtocol.InitializeObjectByPreparePostParam(datastore_db.InitializeObjectByPreparePostParam)
|
||||
commonDataStoreProtocol.InitializeObjectRatingWithSlot(datastore_db.InitializeObjectRatingWithSlot)
|
||||
commonDataStoreProtocol.RateObjectWithPassword(datastore_db.RateObjectWithPassword)
|
||||
commonDataStoreProtocol.DeleteObjectByDataID(datastore_db.DeleteObjectByDataID)
|
||||
commonDataStoreProtocol.GetObjectOwnerByDataID(datastore_db.GetObjectOwnerByDataID)
|
||||
commonDataStoreProtocol.S3Bucket = os.Getenv("PN_SMM_CONFIG_S3_BUCKET")
|
||||
|
||||
commonDataStoreProtocol.SuperMarioMakerProtocol.GetObjectInfos(nex_datastore_super_mario_maker.GetObjectInfos)
|
||||
commonDataStoreProtocol.SuperMarioMakerProtocol.RateCustomRanking(nex_datastore_super_mario_maker.RateCustomRanking)
|
||||
commonDataStoreProtocol.SuperMarioMakerProtocol.GetCustomRankingByDataID(nex_datastore_super_mario_maker.GetCustomRankingByDataID)
|
||||
commonDataStoreProtocol.SuperMarioMakerProtocol.AddToBufferQueues(nex_datastore_super_mario_maker.AddToBufferQueues)
|
||||
commonDataStoreProtocol.SuperMarioMakerProtocol.GetBufferQueue(nex_datastore_super_mario_maker.GetBufferQueue)
|
||||
commonDataStoreProtocol.SuperMarioMakerProtocol.CompleteAttachFile(nex_datastore_super_mario_maker.CompleteAttachFile)
|
||||
commonDataStoreProtocol.SuperMarioMakerProtocol.PrepareAttachFile(nex_datastore_super_mario_maker.PrepareAttachFile)
|
||||
commonDataStoreProtocol.SuperMarioMakerProtocol.GetApplicationConfig(nex_datastore_super_mario_maker.GetApplicationConfig)
|
||||
commonDataStoreProtocol.SuperMarioMakerProtocol.FollowingsLatestCourseSearchObject(nex_datastore_super_mario_maker.FollowingsLatestCourseSearchObject)
|
||||
commonDataStoreProtocol.SuperMarioMakerProtocol.RecommendedCourseSearchObject(nex_datastore_super_mario_maker.RecommendedCourseSearchObject)
|
||||
commonDataStoreProtocol.SuperMarioMakerProtocol.SuggestedCourseSearchObject(nex_datastore_super_mario_maker.SuggestedCourseSearchObject)
|
||||
commonDataStoreProtocol.SuperMarioMakerProtocol.UploadCourseRecord(nex_datastore_super_mario_maker.UploadCourseRecord)
|
||||
commonDataStoreProtocol.SuperMarioMakerProtocol.GetCourseRecord(nex_datastore_super_mario_maker.GetCourseRecord)
|
||||
commonDataStoreProtocol.SuperMarioMakerProtocol.GetApplicationConfigString(nex_datastore_super_mario_maker.GetApplicationConfigString)
|
||||
commonDataStoreProtocol.SuperMarioMakerProtocol.GetDeletionReason(nex_datastore_super_mario_maker.GetDeletionReason)
|
||||
commonDataStoreProtocol.SuperMarioMakerProtocol.GetMetasWithCourseRecord(nex_datastore_super_mario_maker.GetMetasWithCourseRecord)
|
||||
commonDataStoreProtocol.SuperMarioMakerProtocol.CheckRateCustomRankingCounter(nex_datastore_super_mario_maker.CheckRateCustomRankingCounter)
|
||||
commonDataStoreProtocol.SuperMarioMakerProtocol.CTRPickUpCourseSearchObject(nex_datastore_super_mario_maker.CTRPickUpCourseSearchObject)
|
||||
commonDataStoreProtocol.GetObjectInfoByDataID = datastore_db.GetObjectInfoByDataID
|
||||
commonDataStoreProtocol.GetObjectInfoByPersistenceTargetWithPassword = datastore_db.GetObjectInfoByPersistenceTargetWithPassword
|
||||
commonDataStoreProtocol.GetObjectInfoByDataIDWithPassword = datastore_db.GetObjectInfoByDataIDWithPassword
|
||||
commonDataStoreProtocol.GetObjectOwnerByDataID = datastore_db.GetObjectOwnerByDataID
|
||||
commonDataStoreProtocol.GetObjectSizeByDataID = datastore_db.GetObjectSizeByDataID
|
||||
|
||||
commonDataStoreProtocol.UpdateObjectPeriodByDataIDWithPassword = datastore_db.UpdateObjectPeriodByDataIDWithPassword
|
||||
commonDataStoreProtocol.UpdateObjectMetaBinaryByDataIDWithPassword = datastore_db.UpdateObjectMetaBinaryByDataIDWithPassword
|
||||
commonDataStoreProtocol.UpdateObjectDataTypeByDataIDWithPassword = datastore_db.UpdateObjectDataTypeByDataIDWithPassword
|
||||
commonDataStoreProtocol.UpdateObjectUploadCompletedByDataID = datastore_db.UpdateObjectUploadCompletedByDataID
|
||||
|
||||
commonDataStoreProtocol.InitializeObjectByPreparePostParam = datastore_db.InitializeObjectByPreparePostParam
|
||||
commonDataStoreProtocol.InitializeObjectRatingWithSlot = datastore_db.InitializeObjectRatingWithSlot
|
||||
commonDataStoreProtocol.RateObjectWithPassword = datastore_db.RateObjectWithPassword
|
||||
commonDataStoreProtocol.DeleteObjectByDataID = datastore_db.DeleteObjectByDataID
|
||||
|
||||
globals.DatastoreCommon = commonDataStoreProtocol
|
||||
|
||||
smmDatastore := datastoresmm.NewProtocol(globals.SecureEndpoint)
|
||||
|
||||
smmDatastore.GetObjectInfos = nex_datastore_super_mario_maker.GetObjectInfos
|
||||
smmDatastore.RateCustomRanking = nex_datastore_super_mario_maker.RateCustomRanking
|
||||
smmDatastore.GetCustomRankingByDataID = nex_datastore_super_mario_maker.GetCustomRankingByDataID
|
||||
smmDatastore.AddToBufferQueues = nex_datastore_super_mario_maker.AddToBufferQueues
|
||||
smmDatastore.GetBufferQueue = nex_datastore_super_mario_maker.GetBufferQueue
|
||||
smmDatastore.CompleteAttachFile = nex_datastore_super_mario_maker.CompleteAttachFile
|
||||
smmDatastore.PrepareAttachFile = nex_datastore_super_mario_maker.PrepareAttachFile
|
||||
smmDatastore.GetApplicationConfig = nex_datastore_super_mario_maker.GetApplicationConfig
|
||||
smmDatastore.FollowingsLatestCourseSearchObject = nex_datastore_super_mario_maker.FollowingsLatestCourseSearchObject
|
||||
smmDatastore.RecommendedCourseSearchObject = nex_datastore_super_mario_maker.RecommendedCourseSearchObject
|
||||
smmDatastore.SuggestedCourseSearchObject = nex_datastore_super_mario_maker.SuggestedCourseSearchObject
|
||||
smmDatastore.UploadCourseRecord = nex_datastore_super_mario_maker.UploadCourseRecord
|
||||
smmDatastore.GetCourseRecord = nex_datastore_super_mario_maker.GetCourseRecord
|
||||
smmDatastore.GetApplicationConfigString = nex_datastore_super_mario_maker.GetApplicationConfigString
|
||||
smmDatastore.GetDeletionReason = nex_datastore_super_mario_maker.GetDeletionReason
|
||||
smmDatastore.GetMetasWithCourseRecord = nex_datastore_super_mario_maker.GetMetasWithCourseRecord
|
||||
smmDatastore.CheckRateCustomRankingCounter = nex_datastore_super_mario_maker.CheckRateCustomRankingCounter
|
||||
smmDatastore.CTRPickUpCourseSearchObject = nex_datastore_super_mario_maker.CTRPickUpCourseSearchObject
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,13 +1,13 @@
|
|||
package nex
|
||||
|
||||
import (
|
||||
message_delivery "github.com/PretendoNetwork/nex-protocols-go/message-delivery"
|
||||
"github.com/PretendoNetwork/super-mario-maker-secure/globals"
|
||||
nex_message_delivery "github.com/PretendoNetwork/super-mario-maker-secure/nex/message-delivery"
|
||||
message_delivery "github.com/PretendoNetwork/nex-protocols-go/v2/message-delivery"
|
||||
"github.com/PretendoNetwork/super-mario-maker/globals"
|
||||
nex_message_delivery "github.com/PretendoNetwork/super-mario-maker/nex/message-delivery"
|
||||
)
|
||||
|
||||
func registerNEXProtocols() {
|
||||
messageDeliveryProtocol := message_delivery.NewProtocol(globals.SecureServer)
|
||||
|
||||
messageDeliveryProtocol.DeliverMessage(nex_message_delivery.DeliverMessage)
|
||||
messageDeliveryProtocol := message_delivery.NewProtocol()
|
||||
messageDeliveryProtocol.DeliverMessage = nex_message_delivery.DeliverMessage
|
||||
globals.SecureEndpoint.RegisterServiceProtocol(messageDeliveryProtocol)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,31 +3,41 @@ package nex
|
|||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"strconv"
|
||||
|
||||
"github.com/PretendoNetwork/nex-go"
|
||||
"github.com/PretendoNetwork/super-mario-maker-secure/globals"
|
||||
"github.com/PretendoNetwork/nex-go/v2"
|
||||
"github.com/PretendoNetwork/super-mario-maker/globals"
|
||||
)
|
||||
|
||||
func StartSecureServer() {
|
||||
globals.SecureServer = nex.NewServer()
|
||||
globals.SecureServer.SetPRUDPVersion(1)
|
||||
globals.SecureServer.SetPRUDPProtocolMinorVersion(2)
|
||||
globals.SecureServer.SetDefaultNEXVersion(nex.NewPatchedNEXVersion(3, 8, 3, "AMAJ"))
|
||||
globals.SecureServer.SetKerberosPassword(globals.KerberosPassword)
|
||||
globals.SecureServer.SetAccessKey("9f2b4678")
|
||||
serverBuildString = "branch:origin/project/nfs build:3_10_26_2006_0"
|
||||
|
||||
globals.SecureServer.On("Data", func(packet *nex.PacketV1) {
|
||||
request := packet.RMCRequest()
|
||||
globals.SecureServer = nex.NewPRUDPServer()
|
||||
|
||||
fmt.Println("==SMM1 - Secure==")
|
||||
fmt.Printf("Protocol ID: %d\n", request.ProtocolID())
|
||||
fmt.Printf("Method ID: %d\n", request.MethodID())
|
||||
fmt.Println("===============")
|
||||
globals.SecureEndpoint = nex.NewPRUDPEndPoint(1)
|
||||
globals.SecureEndpoint.ServerAccount = globals.SecureServerAccount
|
||||
globals.SecureEndpoint.AccountDetailsByPID = globals.AccountDetailsByPID
|
||||
globals.SecureEndpoint.AccountDetailsByUsername = globals.AccountDetailsByUsername
|
||||
globals.SecureServer.BindPRUDPEndPoint(globals.SecureEndpoint)
|
||||
globals.SecureServer.ByteStreamSettings.UseStructureHeader = false
|
||||
|
||||
globals.SecureServer.LibraryVersions.SetDefault(nex.NewLibraryVersion(3, 8, 3))
|
||||
globals.SecureServer.AccessKey = "9f2b4678"
|
||||
|
||||
globals.SecureEndpoint.OnData(func(packet nex.PacketInterface) {
|
||||
request := packet.RMCMessage()
|
||||
|
||||
fmt.Println("=== SMM1 - Secure ===")
|
||||
fmt.Printf("Protocol ID: %d\n", request.ProtocolID)
|
||||
fmt.Printf("Method ID: %d\n", request.MethodID)
|
||||
fmt.Println("==================")
|
||||
})
|
||||
|
||||
// * Register the common handlers first so that they can be overridden if needed
|
||||
registerCommonSecureProtocols()
|
||||
registerNEXProtocols()
|
||||
|
||||
globals.SecureServer.Listen(fmt.Sprintf(":%s", os.Getenv("PN_SMM_SECURE_SERVER_PORT")))
|
||||
port, _ := strconv.Atoi(os.Getenv("PN_SMM_SECURE_SERVER_PORT"))
|
||||
|
||||
globals.SecureServer.Listen(port)
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user