11 Commits

Author SHA1 Message Date
733dcd7a68 validator: fix ScriptPolicyCreate 2025-07-17 21:06:59 -07:00
659394ed32 validator: script policy enum 2025-07-17 21:06:42 -07:00
55bf0f1f15 validator: fix numbers 2025-07-17 21:02:57 -07:00
5d4a213591 validator: type unsafety 2025-07-17 21:01:51 -07:00
cea8134c26 validator: scripts & script policies 2025-07-17 20:30:47 -07:00
f174d921e7 validator: move operations 2025-07-17 20:30:36 -07:00
c9709874ab validator: type safety 2025-07-17 20:12:50 -07:00
dde4825420 validator: operations 2025-07-17 20:12:50 -07:00
cadfb1579d validator: submissions 2025-07-17 20:12:46 -07:00
60845ba8e1 dedicated validator endpoints 2025-07-17 20:11:43 -07:00
a2e45b5e9a outline 2025-07-17 19:16:41 -07:00
11 changed files with 73 additions and 346 deletions

View File

@@ -6,7 +6,7 @@ name: generate-go-grpc
steps:
- name: clone-external
image: alpine/git
commands:
commands:
- git clone https://${GIT_USER}:${GIT_PASS}@git.itzana.me/StrafesNET/go-grpc.git
environment:
GIT_USER:
@@ -46,7 +46,7 @@ name: generate-rust-grpc
steps:
- name: clone-external
image: alpine/git
commands:
commands:
- git clone https://${GIT_USER}:${GIT_PASS}@git.itzana.me/StrafesNET/rust-grpc.git
environment:
GIT_USER:
@@ -78,3 +78,43 @@ trigger:
image_pull_secrets:
- dockerconfigjson
---
kind: pipeline
type: docker
name: generate-python-grpc
steps:
- name: clone-external
image: alpine/git
commands:
- git clone https://$GIT_USER:$GIT_PASS@git.itzana.me/StrafesNET/python-grpc.git
environment:
GIT_USER:
from_secret: GIT_USER
GIT_PASS:
from_secret: GIT_PASS
- name: generate
image: registry.itzana.me/strafesnet/tools/python-grpc:latest
commands:
- scripts/python-gen.sh
- name: commit
image: alpine/git
commands:
- cd python-grpc
- git add *
- 'git commit -m "Autogenerated update for ${DRONE_COMMIT_LINK}" || true'
- git push https://$GIT_USER:$GIT_PASS@git.itzana.me/StrafesNET/python-grpc.git --all
environment:
GIT_USER:
from_secret: GIT_USER
GIT_PASS:
from_secret: GIT_PASS
trigger:
ref:
- refs/heads/master
image_pull_secrets:
- dockerconfigjson

View File

@@ -11,7 +11,6 @@ service AuthService {
rpc GetGroupRole(IdMessage) returns (RoleReponse);
rpc ValidateSession(IdMessage) returns (ValidateResponse);
rpc GetAuthMetadata(google.protobuf.Empty) returns (AuthMetadataResponse);
rpc GetAvatars(AvatarListRequest) returns (AvatarListResponse);
}
message IdMessage {
@@ -44,16 +43,3 @@ message AuthMetadataResponse {
string AccountURL = 3;
}
message AvatarListRequest {
repeated uint64 UserIDs = 1;
}
message AvatarItem {
uint64 UserID = 1;
string AvatarURL = 2;
}
message AvatarListResponse {
repeated AvatarItem Avatars = 1;
}

View File

@@ -1,11 +0,0 @@
syntax = "proto3";
option go_package = "git.itzana.me/strafesnet/go-grpc/bot_analyzer";
package bot_analyzer;
service BotAnalyzer { rpc Analyze(DownloadUrl) returns (AnalysisResponse); }
message DownloadUrl { string Url = 1; }
message AnalysisResponse { string Analysis = 1; }

View File

@@ -1,81 +0,0 @@
syntax = "proto3";
package mapfixes;
option go_package = "git.itzana.me/strafesnet/go-grpc/mapfixes";
service MapfixesService {
rpc Get(MapfixId) returns (MapfixResponse);
rpc GetList(MapfixIdList) returns (MapfixList);
rpc List(ListRequest) returns (MapfixList);
}
message MapfixIdList {
repeated int64 ID = 1;
}
message MapfixId {
int64 ID = 1;
}
enum MapfixStatus {
// Phase: Creation
MapfixStatusUnderConstruction = 0;
MapfixStatusChangesRequested = 1;
// Phase: Review
MapfixStatusSubmitting = 2;
MapfixStatusSubmitted = 3;
// Phase: Testing
MapfixStatusAcceptedUnvalidated = 4; // pending script review, can re-trigger validation
MapfixStatusValidating = 5;
MapfixStatusValidated = 6;
MapfixStatusUploading = 7;
MapfixStatusUploaded = 8; // uploaded to the group, but pending release
MapfixStatusReleasing = 11;
// Phase: Final MapfixStatus
MapfixStatusRejected = 9;
MapfixStatusReleased = 10;
}
message MapfixResponse {
int64 ID = 1;
string DisplayName = 2;
string Creator = 3;
uint32 GameID = 4;
int64 CreatedAt = 5;
int64 UpdatedAt = 6;
uint64 Submitter = 7;
uint64 AssetID = 8;
uint64 AssetVersion = 9;
optional uint64 ValidatedAssetID = 10;
optional uint64 ValidatedAssetVersion = 11;
uint64 TargetAssetID = 12;
MapfixStatus StatusID = 13;
}
message MapfixFilter {
optional MapfixStatus StatusID = 1;
optional string DisplayName = 2;
optional string Creator = 3;
optional uint32 GameID = 4;
optional uint64 Submitter = 5;
}
message MapfixList {
repeated MapfixResponse Mapfixes = 1;
}
message ListRequest {
MapfixFilter Filter = 1;
Pagination Page = 2;
}
message Pagination {
uint32 Size = 1;
uint32 Number = 2;
}
message NullResponse {}

View File

@@ -24,21 +24,23 @@ message IdMessage {
message MapResponse {
int64 ID = 1;
string DisplayName = 2;
string Creator = 3;
int32 GameID = 4;
uint64 Thumbnail = 6;
int64 Date = 5;
}
message MapRequest {
int64 ID = 1;
optional string DisplayName = 2;
optional string Creator = 3;
optional int32 GameID = 4;
optional uint64 Thumbnail = 6;
optional int64 Date = 5;
}
message MapFilter {
optional string DisplayName = 2;
optional string Creator = 3;
optional int32 GameID = 4;
optional string DisplayNameSubstring = 5;
}
message MapList {
@@ -56,4 +58,5 @@ message Pagination {
}
message NullResponse {
}
}

View File

@@ -1,85 +0,0 @@
syntax = "proto3";
option go_package = "git.itzana.me/strafesnet/go-grpc/maps_extended";
package maps_extended;
service MapsService {
rpc Get(MapId) returns (MapResponse);
rpc GetList(MapIdList) returns (MapList);
rpc Update(MapUpdate) returns (NullResponse);
rpc Create(MapCreate) returns (MapId);
rpc Delete(MapId) returns (NullResponse);
rpc List(ListRequest) returns (MapList);
rpc IncrementLoadCount(MapId) returns (NullResponse);
rpc GetSnfmDownloadUrl(MapId) returns (SnfmDownloadUrl);
}
message SnfmDownloadUrl { string Url = 1; }
message MapIdList { repeated int64 ID = 1; }
message MapId { int64 ID = 1; }
message MapResponse {
int64 ID = 1;
string DisplayName = 2;
string Creator = 3;
uint32 GameID = 4;
int64 Date = 5;
int64 CreatedAt = 6;
int64 UpdatedAt = 7;
uint64 Submitter = 8;
uint64 Thumbnail = 9;
uint64 AssetVersion = 10;
uint32 LoadCount = 11;
uint32 Modes = 12;
}
message MapCreate {
int64 ID = 1;
string DisplayName = 2;
string Creator = 3;
uint32 GameID = 4;
int64 Date = 5;
// int64 CreatedAt = 6;
// int64 UpdatedAt = 7;
uint64 Submitter = 6;
uint64 Thumbnail = 7;
uint64 AssetVersion = 8;
// uint32 LoadCount = 11;
uint32 Modes = 9;
}
message MapUpdate {
int64 ID = 1;
optional string DisplayName = 2;
optional string Creator = 3;
optional uint32 GameID = 4;
optional int64 Date = 5;
optional uint64 Submitter = 6;
optional uint64 Thumbnail = 7;
optional uint64 AssetVersion = 8;
optional uint32 Modes = 9;
}
message MapFilter {
optional string DisplayName = 2;
optional string Creator = 3;
optional uint32 GameID = 4;
optional uint64 Submitter = 5;
}
message MapList { repeated MapResponse Maps = 1; }
message ListRequest {
MapFilter Filter = 1;
Pagination Page = 2;
}
message Pagination {
uint32 Size = 1;
uint32 Number = 2;
}
message NullResponse {}

6
scripts/python-gen.sh Executable file
View File

@@ -0,0 +1,6 @@
#!/bin/bash
mkdir -p strafesnet
cp *.proto strafesnet/
python3 -m grpc_tools.protoc -I./strafesnet --python_out=./python-grpc/strafesnet --grpc_python_out=./python-grpc/strafesnet *.proto
sed -i 's/^\(import.*pb2\)/from . \1/g' ./python-grpc/strafesnet/*.py

View File

@@ -11,12 +11,8 @@ do
--prost_out=$module \
--tonic_out=$module \
$f
# prost codegen is wrong!
sed -i "s/tonic::codec::ProstCodec/tonic_prost::ProstCodec/g" "$module/$name.tonic.rs"
#I couldn't figure out how to configure protoc to do this
sed -i "s/#\[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)\]/#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)]\n#\[derive(serde::Serialize, serde::Deserialize)\]\n#\[serde(rename_all = \"PascalCase\")\]/g" "$module/$name.rs"
sed -i "s/#\[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)\]/#\[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)\]\n#\[derive(serde::Serialize, serde::Deserialize)\]\n#\[serde(rename_all = \"PascalCase\")\]/g" "$module/$name.rs"
sed -i "s/#\[derive(Clone, PartialEq, ::prost::Message)\]/#\[derive(Clone, PartialEq, ::prost::Message)\]\n#\[derive(serde::Serialize, serde::Deserialize)\]\n#\[serde(rename_all = \"PascalCase\")\]/g" "$module/$name.rs"
sed -i "s/, PartialEq, ::prost::Message)\]/, PartialEq, ::prost::Message, serde::Serialize, serde::Deserialize)\]\n#\[serde(rename_all = \"PascalCase\")\]/g" "$module/$name.rs"
sed -i "s/ pub id:/ #\[serde(rename = \"ID\")\]\n pub id:/g" "$module/$name.rs"
sed -i "s/ pub map_id:/ #\[serde(rename = \"MapID\")\]\n pub map_id:/g" "$module/$name.rs"
sed -i "s/ pub time_id:/ #\[serde(rename = \"TimeID\")\]\n pub time_id:/g" "$module/$name.rs"

View File

@@ -1,80 +0,0 @@
syntax = "proto3";
package submissions;
option go_package = "git.itzana.me/strafesnet/go-grpc/submissions";
service SubmissionsService {
rpc Get(SubmissionId) returns (SubmissionResponse);
rpc GetList(SubmissionIdList) returns (SubmissionList);
rpc List(ListRequest) returns (SubmissionList);
}
message SubmissionIdList {
repeated int64 ID = 1;
}
message SubmissionId {
int64 ID = 1;
}
enum SubmissionStatus {
// Phase: Creation
SubmissionStatusUnderConstruction = 0;
SubmissionStatusChangesRequested = 1;
// Phase: Review
SubmissionStatusSubmitting = 2;
SubmissionStatusSubmitted = 3;
// Phase: Testing
SubmissionStatusAcceptedUnvalidated = 4; // pending script review, can re-trigger validation
SubmissionStatusValidating = 5;
SubmissionStatusValidated = 6;
SubmissionStatusUploading = 7;
SubmissionStatusUploaded = 8; // uploaded to the group, but pending release
// Phase: Final SubmissionStatus
SubmissionStatusRejected = 9;
SubmissionStatusReleased = 10;
}
message SubmissionResponse {
int64 ID = 1;
string DisplayName = 2;
string Creator = 3;
uint32 GameID = 4;
int64 CreatedAt = 7;
int64 UpdatedAt = 8;
uint64 Submitter = 9;
uint64 AssetID = 10;
uint64 AssetVersion = 11;
optional uint64 ValidatedAssetID = 12;
optional uint64 ValidatedAssetVersion = 13;
optional uint64 UploadedAssetID = 14;
SubmissionStatus StatusID = 15;
}
message SubmissionFilter {
optional SubmissionStatus StatusID = 1;
optional string DisplayName = 2;
optional string Creator = 3;
optional uint32 GameID = 4;
optional uint64 Submitter = 5;
}
message SubmissionList {
repeated SubmissionResponse Submissions = 1;
}
message ListRequest {
SubmissionFilter Filter = 1;
Pagination Page = 2;
}
message Pagination {
uint32 Size = 1;
uint32 Number = 2;
}
message NullResponse {}

View File

@@ -11,7 +11,6 @@ service UsersService {
rpc Create(UserRequest) returns (IdMessage);
rpc Delete(IdMessage) returns (NullResponse);
rpc List(ListRequest) returns (UserList);
rpc SearchByUsername(SearchByUsernameRequest) returns (UserList);
}
message IdList {
@@ -56,11 +55,6 @@ message Pagination {
int32 Number = 2;
}
message SearchByUsernameRequest {
string Query = 1;
Pagination Page = 2;
}
message NullResponse {
}

View File

@@ -2,40 +2,33 @@ syntax = "proto3";
option go_package = "git.itzana.me/strafesnet/go-grpc/validator";
import "maps_extended.proto";
package validator;
service ValidatorMapfixService {
rpc Create(MapfixCreate) returns (MapfixID);
rpc Create(MapfixCreate) returns (NullResponse);
rpc CreateAuditError(AuditErrorRequest) returns (NullResponse);
rpc CreateAuditChecklist(AuditChecklistRequest) returns (NullResponse);
rpc SetValidatedModel(ValidatedModelRequest) returns (NullResponse);
rpc SetStatusSubmitted(SubmittedRequest) returns (NullResponse);
rpc SetStatusRequestChanges(MapfixID) returns (NullResponse);
rpc SetStatusValidated(MapfixID) returns (NullResponse);
rpc SetStatusNotValidated(MapfixID) returns (NullResponse);
rpc SetStatusUploaded(MapfixID) returns (NullResponse);
rpc SetStatusNotUploaded(MapfixID) returns (NullResponse);
rpc SetStatusReleased(MapfixReleaseRequest) returns (NullResponse);
rpc SetStatusNotReleased(MapfixID) returns (NullResponse);
rpc SetStatusRequestChanges(MapFixID) returns (NullResponse);
rpc SetStatusValidated(MapFixID) returns (NullResponse);
rpc SetStatusFailed(MapFixID) returns (NullResponse);
rpc SetStatusUploaded(MapFixID) returns (NullResponse);
}
service ValidatorSubmissionService {
rpc Create(SubmissionCreate) returns (SubmissionID);
rpc Create(SubmissionCreate) returns (NullResponse);
rpc CreateAuditError(AuditErrorRequest) returns (NullResponse);
rpc CreateAuditChecklist(AuditChecklistRequest) returns (NullResponse);
rpc SetValidatedModel(ValidatedModelRequest) returns (NullResponse);
rpc SetStatusSubmitted(SubmittedRequest) returns (NullResponse);
rpc SetStatusRequestChanges(SubmissionID) returns (NullResponse);
rpc SetStatusValidated(SubmissionID) returns (NullResponse);
rpc SetStatusNotValidated(SubmissionID) returns (NullResponse);
rpc SetStatusUploaded(StatusUploadedRequest) returns (NullResponse);
rpc SetStatusNotUploaded(SubmissionID) returns (NullResponse);
rpc SetStatusReleased(SubmissionReleaseRequest) returns (NullResponse);
rpc SetStatusFailed(SubmissionID) returns (NullResponse);
rpc SetStatusUploaded(SubmissionID) returns (NullResponse);
}
message MapfixID { uint64 ID = 1; }
message MapFixID { uint64 ID = 1; }
message MapfixCreate {
uint32 OperationID = 1;
@@ -91,36 +84,13 @@ message SubmittedRequest {
uint32 GameID = 5;
}
message StatusUploadedRequest {
uint64 ID = 1;
uint64 UploadedAssetID = 2;
}
message MapfixReleaseRequest {
uint64 MapfixID = 1;
uint64 TargetAssetID = 2;
uint64 AssetVersion = 3;
uint32 Modes = 4;
}
message SubmissionReleaseRequest {
uint64 SubmissionID = 1;
maps_extended.MapCreate MapCreate = 2;
}
message NullResponse {}
// Operations
service ValidatorOperationService {
rpc Success(OperationSuccessRequest) returns (NullResponse);
rpc Fail(OperationFailRequest) returns (NullResponse);
}
message OperationSuccessRequest {
uint32 OperationID = 1;
string Path = 2;
}
message OperationFailRequest {
uint32 OperationID = 1;
string StatusMessage = 2;
@@ -138,25 +108,18 @@ service ValidatorScriptService {
rpc List(ScriptListRequest) returns (ScriptListResponse);
}
enum ResourceType {
ResourceTypeNone = 0;
ResourceTypeMapfix = 1;
ResourceTypeSubmission = 2;
}
message ScriptCreate {
string Name = 1;
string Source = 2;
ResourceType ResourceType = 3;
uint32 ResourceType = 3;
optional uint64 ResourceID = 4;
}
message ScriptFilter {
optional string Name = 1;
optional string Source = 2;
optional ResourceType ResourceType = 3;
optional uint32 ResourceType = 3;
optional uint64 ResourceID = 4;
optional uint64 Hash = 5;
}
message ScriptListRequest {
@@ -164,14 +127,12 @@ message ScriptListRequest {
Pagination Page = 2;
}
message ScriptID { uint64 ID = 1; }
message Script {
uint64 ID = 1;
uint64 Hash = 2;
string Name = 3;
string Source = 4;
ResourceType ResourceType = 5;
uint32 ResourceType = 5;
optional uint64 ResourceID = 6;
}
@@ -184,11 +145,11 @@ service ValidatorScriptPolicyService {
}
enum Policy {
PolicyNone = 0;
PolicyAllowed = 1;
PolicyBlocked = 2;
PolicyDelete = 3;
PolicyReplace = 4;
None = 0;
Allowed = 1;
Blocked = 2;
Delete = 3;
Replace = 4;
}
message ScriptPolicyCreate {
@@ -208,8 +169,6 @@ message ScriptPolicyListRequest {
Pagination Page = 2;
}
message ScriptPolicyID { uint64 ID = 1; }
message ScriptPolicy {
uint64 ID = 1;
uint64 FromScriptHash = 2;