Add place ID blacklist config (#1021)

This commit is contained in:
Parritz
2025-04-03 11:37:40 -04:00
committed by GitHub
parent 4c4b2dbe17
commit 7dee898400
23 changed files with 56 additions and 39 deletions

View File

@@ -1,6 +1,7 @@
# Rojo Changelog # Rojo Changelog
## Unreleased Changes ## Unreleased Changes
* Add `blockedPlaceIds` project config field to allow blocking place ids from being live synced ([#1021])
* Adds support for `.plugin.lua(u)` files - this applies the `Plugin` RunContext. ([#1008]) * Adds support for `.plugin.lua(u)` files - this applies the `Plugin` RunContext. ([#1008])
* Added support for Roblox's `Content` type. This replaces the old `Content` type with `ContentId` to reflect Roblox's change. * Added support for Roblox's `Content` type. This replaces the old `Content` type with `ContentId` to reflect Roblox's change.
If you were previously using the fully-qualified syntax for `Content` you will need to switch it to `ContentId`. If you were previously using the fully-qualified syntax for `Content` you will need to switch it to `ContentId`.
@@ -108,6 +109,7 @@
[#987]: https://github.com/rojo-rbx/rojo/pull/987 [#987]: https://github.com/rojo-rbx/rojo/pull/987
[#988]: https://github.com/rojo-rbx/rojo/pull/988 [#988]: https://github.com/rojo-rbx/rojo/pull/988
[#1008]: https://github.com/rojo-rbx/rojo/pull/1008 [#1008]: https://github.com/rojo-rbx/rojo/pull/1008
[#1021]: https://github.com/rojo-rbx/rojo/pull/1021
## [7.4.3] - August 6th, 2024 ## [7.4.3] - August 6th, 2024
* Fixed issue with building binary files introduced in 7.4.2 * Fixed issue with building binary files introduced in 7.4.2

View File

@@ -45,14 +45,7 @@ end
local function rejectWrongPlaceId(infoResponseBody) local function rejectWrongPlaceId(infoResponseBody)
if infoResponseBody.expectedPlaceIds ~= nil then if infoResponseBody.expectedPlaceIds ~= nil then
local foundId = false local foundId = table.find(infoResponseBody.expectedPlaceIds, game.PlaceId)
for _, id in ipairs(infoResponseBody.expectedPlaceIds) do
if id == game.PlaceId then
foundId = true
break
end
end
if not foundId then if not foundId then
local idList = {} local idList = {}
@@ -62,10 +55,30 @@ local function rejectWrongPlaceId(infoResponseBody)
local message = ( local message = (
"Found a Rojo server, but its project is set to only be used with a specific list of places." "Found a Rojo server, but its project is set to only be used with a specific list of places."
.. "\nYour place ID is %s, but needs to be one of these:" .. "\nYour place ID is %u, but needs to be one of these:"
.. "\n%s" .. "\n%s"
.. "\n\nTo change this list, edit 'servePlaceIds' in your .project.json file." .. "\n\nTo change this list, edit 'servePlaceIds' in your .project.json file."
):format(tostring(game.PlaceId), table.concat(idList, "\n")) ):format(game.PlaceId, table.concat(idList, "\n"))
return Promise.reject(message)
end
end
if infoResponseBody.unexpectedPlaceIds ~= nil then
local foundId = table.find(infoResponseBody.unexpectedPlaceIds, game.PlaceId)
if foundId then
local idList = {}
for _, id in ipairs(infoResponseBody.unexpectedPlaceIds) do
table.insert(idList, "- " .. tostring(id))
end
local message = (
"Found a Rojo server, but its project is set to not be used with a specific list of places."
.. "\nYour place ID is %u, but needs to not be one of these:"
.. "\n%s"
.. "\n\nTo change this list, edit 'blockedPlaceIds' in your .project.json file."
):format(game.PlaceId, table.concat(idList, "\n"))
return Promise.reject(message) return Promise.reject(message)
end end

View File

@@ -1,7 +1,6 @@
--- ---
source: tests/tests/serve.rs source: tests/tests/serve.rs
expression: redactions.redacted_yaml(info) expression: redactions.redacted_yaml(info)
--- ---
expectedPlaceIds: ~ expectedPlaceIds: ~
gameId: ~ gameId: ~
@@ -11,4 +10,4 @@ protocolVersion: 4
rootInstanceId: id-2 rootInstanceId: id-2
serverVersion: "[server-version]" serverVersion: "[server-version]"
sessionId: id-1 sessionId: id-1
unexpectedPlaceIds: ~

View File

@@ -1,7 +1,6 @@
--- ---
source: tests/tests/serve.rs source: tests/tests/serve.rs
expression: redactions.redacted_yaml(info) expression: redactions.redacted_yaml(info)
--- ---
expectedPlaceIds: ~ expectedPlaceIds: ~
gameId: ~ gameId: ~
@@ -11,4 +10,4 @@ protocolVersion: 4
rootInstanceId: id-2 rootInstanceId: id-2
serverVersion: "[server-version]" serverVersion: "[server-version]"
sessionId: id-1 sessionId: id-1
unexpectedPlaceIds: ~

View File

@@ -1,7 +1,6 @@
--- ---
source: tests/tests/serve.rs source: tests/tests/serve.rs
expression: redactions.redacted_yaml(info) expression: redactions.redacted_yaml(info)
--- ---
expectedPlaceIds: ~ expectedPlaceIds: ~
gameId: ~ gameId: ~
@@ -11,4 +10,4 @@ protocolVersion: 4
rootInstanceId: id-2 rootInstanceId: id-2
serverVersion: "[server-version]" serverVersion: "[server-version]"
sessionId: id-1 sessionId: id-1
unexpectedPlaceIds: ~

View File

@@ -1,7 +1,6 @@
--- ---
source: tests/tests/serve.rs source: tests/tests/serve.rs
expression: redactions.redacted_yaml(info) expression: redactions.redacted_yaml(info)
--- ---
expectedPlaceIds: ~ expectedPlaceIds: ~
gameId: ~ gameId: ~
@@ -11,4 +10,4 @@ protocolVersion: 4
rootInstanceId: id-2 rootInstanceId: id-2
serverVersion: "[server-version]" serverVersion: "[server-version]"
sessionId: id-1 sessionId: id-1
unexpectedPlaceIds: ~

View File

@@ -1,7 +1,6 @@
--- ---
source: tests/tests/serve.rs source: tests/tests/serve.rs
expression: redactions.redacted_yaml(info) expression: redactions.redacted_yaml(info)
--- ---
expectedPlaceIds: ~ expectedPlaceIds: ~
gameId: ~ gameId: ~
@@ -11,4 +10,4 @@ protocolVersion: 4
rootInstanceId: id-2 rootInstanceId: id-2
serverVersion: "[server-version]" serverVersion: "[server-version]"
sessionId: id-1 sessionId: id-1
unexpectedPlaceIds: ~

View File

@@ -1,6 +1,5 @@
--- ---
source: tests/tests/serve.rs source: tests/tests/serve.rs
assertion_line: 316
expression: redactions.redacted_yaml(info) expression: redactions.redacted_yaml(info)
--- ---
expectedPlaceIds: ~ expectedPlaceIds: ~
@@ -11,4 +10,4 @@ protocolVersion: 4
rootInstanceId: id-2 rootInstanceId: id-2
serverVersion: "[server-version]" serverVersion: "[server-version]"
sessionId: id-1 sessionId: id-1
unexpectedPlaceIds: ~

View File

@@ -1,6 +1,5 @@
--- ---
source: tests/tests/serve.rs source: tests/tests/serve.rs
assertion_line: 335
expression: redactions.redacted_yaml(info) expression: redactions.redacted_yaml(info)
--- ---
expectedPlaceIds: ~ expectedPlaceIds: ~
@@ -11,4 +10,4 @@ protocolVersion: 4
rootInstanceId: id-2 rootInstanceId: id-2
serverVersion: "[server-version]" serverVersion: "[server-version]"
sessionId: id-1 sessionId: id-1
unexpectedPlaceIds: ~

View File

@@ -1,6 +1,5 @@
--- ---
source: tests/tests/serve.rs source: tests/tests/serve.rs
assertion_line: 351
expression: redactions.redacted_yaml(info) expression: redactions.redacted_yaml(info)
--- ---
expectedPlaceIds: ~ expectedPlaceIds: ~
@@ -11,4 +10,4 @@ protocolVersion: 4
rootInstanceId: id-2 rootInstanceId: id-2
serverVersion: "[server-version]" serverVersion: "[server-version]"
sessionId: id-1 sessionId: id-1
unexpectedPlaceIds: ~

View File

@@ -10,4 +10,4 @@ protocolVersion: 4
rootInstanceId: id-2 rootInstanceId: id-2
serverVersion: "[server-version]" serverVersion: "[server-version]"
sessionId: id-1 sessionId: id-1
unexpectedPlaceIds: ~

View File

@@ -10,3 +10,4 @@ protocolVersion: 4
rootInstanceId: id-2 rootInstanceId: id-2
serverVersion: "[server-version]" serverVersion: "[server-version]"
sessionId: id-1 sessionId: id-1
unexpectedPlaceIds: ~

View File

@@ -10,4 +10,4 @@ protocolVersion: 4
rootInstanceId: id-2 rootInstanceId: id-2
serverVersion: "[server-version]" serverVersion: "[server-version]"
sessionId: id-1 sessionId: id-1
unexpectedPlaceIds: ~

View File

@@ -1,7 +1,6 @@
--- ---
source: tests/tests/serve.rs source: tests/tests/serve.rs
expression: redactions.redacted_yaml(info) expression: redactions.redacted_yaml(info)
--- ---
expectedPlaceIds: ~ expectedPlaceIds: ~
gameId: ~ gameId: ~
@@ -11,4 +10,4 @@ protocolVersion: 4
rootInstanceId: id-2 rootInstanceId: id-2
serverVersion: "[server-version]" serverVersion: "[server-version]"
sessionId: id-1 sessionId: id-1
unexpectedPlaceIds: ~

View File

@@ -1,7 +1,6 @@
--- ---
source: tests/tests/serve.rs source: tests/tests/serve.rs
expression: redactions.redacted_yaml(info) expression: redactions.redacted_yaml(info)
--- ---
expectedPlaceIds: ~ expectedPlaceIds: ~
gameId: ~ gameId: ~
@@ -11,4 +10,4 @@ protocolVersion: 4
rootInstanceId: id-2 rootInstanceId: id-2
serverVersion: "[server-version]" serverVersion: "[server-version]"
sessionId: id-1 sessionId: id-1
unexpectedPlaceIds: ~

View File

@@ -1,6 +1,5 @@
--- ---
source: tests/tests/serve.rs source: tests/tests/serve.rs
assertion_line: 265
expression: redactions.redacted_yaml(info) expression: redactions.redacted_yaml(info)
--- ---
expectedPlaceIds: ~ expectedPlaceIds: ~
@@ -11,4 +10,4 @@ protocolVersion: 4
rootInstanceId: id-2 rootInstanceId: id-2
serverVersion: "[server-version]" serverVersion: "[server-version]"
sessionId: id-1 sessionId: id-1
unexpectedPlaceIds: ~

View File

@@ -1,6 +1,5 @@
--- ---
source: tests/tests/serve.rs source: tests/tests/serve.rs
assertion_line: 281
expression: redactions.redacted_yaml(info) expression: redactions.redacted_yaml(info)
--- ---
expectedPlaceIds: ~ expectedPlaceIds: ~
@@ -11,4 +10,4 @@ protocolVersion: 4
rootInstanceId: id-2 rootInstanceId: id-2
serverVersion: "[server-version]" serverVersion: "[server-version]"
sessionId: id-1 sessionId: id-1
unexpectedPlaceIds: ~

View File

@@ -1,6 +1,5 @@
--- ---
source: tests/tests/serve.rs source: tests/tests/serve.rs
assertion_line: 297
expression: redactions.redacted_yaml(info) expression: redactions.redacted_yaml(info)
--- ---
expectedPlaceIds: ~ expectedPlaceIds: ~
@@ -11,4 +10,4 @@ protocolVersion: 4
rootInstanceId: id-2 rootInstanceId: id-2
serverVersion: "[server-version]" serverVersion: "[server-version]"
sessionId: id-1 sessionId: id-1
unexpectedPlaceIds: ~

View File

@@ -1,6 +1,5 @@
--- ---
source: tests/tests/serve.rs source: tests/tests/serve.rs
assertion_line: 383
expression: redactions.redacted_yaml(info) expression: redactions.redacted_yaml(info)
--- ---
expectedPlaceIds: ~ expectedPlaceIds: ~
@@ -11,3 +10,4 @@ protocolVersion: 4
rootInstanceId: id-2 rootInstanceId: id-2
serverVersion: "[server-version]" serverVersion: "[server-version]"
sessionId: id-1 sessionId: id-1
unexpectedPlaceIds: ~

View File

@@ -79,6 +79,14 @@ pub struct Project {
#[serde(skip_serializing_if = "Option::is_none")] #[serde(skip_serializing_if = "Option::is_none")]
pub serve_place_ids: Option<HashSet<u64>>, pub serve_place_ids: Option<HashSet<u64>>,
/// If specified, contains a set of place IDs that this project is
/// not compatible with when doing live sync.
///
/// This setting is intended to help prevent syncing a Rojo project into the
/// wrong Roblox place.
#[serde(skip_serializing_if = "Option::is_none")]
pub blocked_place_ids: Option<HashSet<u64>>,
/// If specified, sets the current place's place ID when connecting to the /// If specified, sets the current place's place ID when connecting to the
/// Rojo server from Roblox Studio. /// Rojo server from Roblox Studio.
#[serde(skip_serializing_if = "Option::is_none")] #[serde(skip_serializing_if = "Option::is_none")]

View File

@@ -208,6 +208,10 @@ impl ServeSession {
self.root_project.serve_place_ids.as_ref() self.root_project.serve_place_ids.as_ref()
} }
pub fn blocked_place_ids(&self) -> Option<&HashSet<u64>> {
self.root_project.blocked_place_ids.as_ref()
}
pub fn serve_address(&self) -> Option<IpAddr> { pub fn serve_address(&self) -> Option<IpAddr> {
self.root_project.serve_address self.root_project.serve_address
} }

View File

@@ -64,6 +64,7 @@ impl ApiService {
session_id: self.serve_session.session_id(), session_id: self.serve_session.session_id(),
project_name: self.serve_session.project_name().to_owned(), project_name: self.serve_session.project_name().to_owned(),
expected_place_ids: self.serve_session.serve_place_ids().cloned(), expected_place_ids: self.serve_session.serve_place_ids().cloned(),
unexpected_place_ids: self.serve_session.blocked_place_ids().cloned(),
place_id: self.serve_session.place_id(), place_id: self.serve_session.place_id(),
game_id: self.serve_session.game_id(), game_id: self.serve_session.game_id(),
root_instance_id, root_instance_id,

View File

@@ -160,6 +160,7 @@ pub struct ServerInfoResponse {
pub protocol_version: u64, pub protocol_version: u64,
pub project_name: String, pub project_name: String,
pub expected_place_ids: Option<HashSet<u64>>, pub expected_place_ids: Option<HashSet<u64>>,
pub unexpected_place_ids: Option<HashSet<u64>>,
pub game_id: Option<u64>, pub game_id: Option<u64>,
pub place_id: Option<u64>, pub place_id: Option<u64>,
pub root_instance_id: Ref, pub root_instance_id: Ref,