feat: add UE4SS DLL runtime extension
This commit is contained in:
@@ -1480,6 +1480,34 @@ func TestRuntimeBindingAPIIsAuthorizedValidatedAndRedacted(t *testing.T) {
|
||||
assertErrorResponse(t, missingServer, http.StatusNotFound, errorCodeNotFound)
|
||||
}
|
||||
|
||||
func TestGamePluginManifestAPISafelyProjectsDLLReleaseDeclaration(t *testing.T) {
|
||||
router := newTestRouter()
|
||||
registration := validGamePluginManifestRegistrationRequest()
|
||||
registration.Manifest.RuntimeProfiles = dto.GamePluginRuntimeProfilesBody{DLLExtensions: []dto.RuntimeDLLExtensionProfileBody{{
|
||||
Key: "scum-simple-rcon", DisplayName: "SCUM Simple RCON", Kind: "ue4ss-dll", Activation: "server-start", Version: "0.1.0", ReleaseState: "ready",
|
||||
ReleaseURL: "https://cdn.npc0.com/scum_simple_rcon_ue4s.dll", Checksum: "sha256:" + strings.Repeat("a", 64), SizeBytes: 1024,
|
||||
TargetKey: "ue4ss/scum-simple-rcon", ModKey: "scum_simple_rcon", DLLRef: "ue4ss/Mods/scum_simple_rcon/dlls/main.dll",
|
||||
SCUMExecutableChecksum: "sha256:" + strings.Repeat("b", 64), UE4SSABI: "ue4ss-3.0", SupportedTargets: []dto.RuntimeTargetBody{{OS: "windows", Arch: "amd64"}}, UpdateOnStart: true, RCONPort: 27015,
|
||||
}}}
|
||||
|
||||
recorder := performJSON(t, router, http.MethodPost, "/api/v1/game-plugins/register-manifest", registration)
|
||||
assertStatus(t, recorder, http.StatusCreated)
|
||||
body := recorder.Body.String()
|
||||
response := decodeBody[dto.GamePluginResponse](t, recorder)
|
||||
if len(response.RuntimeProfiles.DLLExtensions) != 1 {
|
||||
t.Fatalf("expected DLL declaration projection, got %+v", response.RuntimeProfiles)
|
||||
}
|
||||
projected := response.RuntimeProfiles.DLLExtensions[0]
|
||||
if projected.ReleaseHost != "cdn.npc0.com" || projected.ReleaseFilename != "scum_simple_rcon_ue4s.dll" {
|
||||
t.Fatalf("expected safe DLL release projection, got %+v", projected)
|
||||
}
|
||||
for _, unsafe := range []string{"https://cdn.npc0.com/scum_simple_rcon_ue4s.dll", "ue4ss/Mods/", "targetKey", "modKey", "rconPort"} {
|
||||
if strings.Contains(body, unsafe) {
|
||||
t.Fatalf("browser projection exposed DLL deployment internals %q: %s", unsafe, body)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestGamePluginRegistryResponseDoesNotExposeRawInternals(t *testing.T) {
|
||||
router := newTestRouter()
|
||||
recorder := performJSON(t, router, http.MethodPost, "/api/v1/game-plugins/register-manifest", validGamePluginManifestRegistrationRequest())
|
||||
|
||||
Reference in New Issue
Block a user