diff --git a/.github/workflows/ci-pipeline.yml b/.github/workflows/ci-pipeline.yml
index 39bd74ee1a..26ba8af3fe 100644
--- a/.github/workflows/ci-pipeline.yml
+++ b/.github/workflows/ci-pipeline.yml
@@ -526,7 +526,7 @@ jobs:
uses: actions/upload-artifact@v3
with:
name: openapi-spec
- path: C:/swagger.json
+ path: C:/tgs_api.json
- name: Package Server Service
if: ${{ matrix.configuration == 'Release' && matrix.watchdog-type == 'Basic' }}
@@ -755,7 +755,7 @@ jobs:
path: ./swagger
- name: Lint OpenAPI Spec
- run: npx lint-openapi -v -p -c build/OpenApiValidationSettings.json ./swagger/swagger.json
+ run: npx lint-openapi -v -p -c build/OpenApiValidationSettings.json ./swagger/tgs_api.json
upload-code-coverage:
name: Upload Code Coverage
@@ -1363,7 +1363,7 @@ jobs:
GITHUB_TOKEN: ${{ secrets.DEV_PUSH_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
- asset_path: ./swagger/swagger.json
+ asset_path: ./swagger/tgs_api.json
asset_name: swagger.json
asset_content_type: application/json
@@ -1671,7 +1671,7 @@ jobs:
GITHUB_TOKEN: ${{ secrets.DEV_PUSH_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
- asset_path: ./swagger/swagger.json
+ asset_path: ./swagger/tgs_api.json
asset_name: swagger.json
asset_content_type: application/json
diff --git a/build/package/deb/debian/postinst b/build/package/deb/debian/postinst
index 9a1cb1b13c..2b98bd204c 100755
--- a/build/package/deb/debian/postinst
+++ b/build/package/deb/debian/postinst
@@ -1,14 +1,16 @@
#!/bin/sh -e
-adduser --system tgstation-server
-mkdir -m 754 -p /var/log/tgstation-server
-chown -R tgstation-server /etc/tgstation-server
-chown -R tgstation-server /opt/tgstation-server
-chown -R tgstation-server /var/log/tgstation-server
+if [ -z "$2" ]; then
+ adduser --system tgstation-server
+ mkdir -m 754 -p /var/log/tgstation-server
+ chown -R tgstation-server /etc/tgstation-server
+ chown -R tgstation-server /opt/tgstation-server/lib
+ chown -R tgstation-server /var/log/tgstation-server
+fi
#DEBHELPER#
-if [ "$1" = "configure" ]; then
+if [ -z "$2" ]; then
deb-systemd-helper stop 'tgstation-server.service' >/dev/null || true
echo " _ _ _ _ "
diff --git a/src/DMAPI/tgs/core/core.dm b/src/DMAPI/tgs/core/core.dm
index f9791fe3f6..8be96f2740 100644
--- a/src/DMAPI/tgs/core/core.dm
+++ b/src/DMAPI/tgs/core/core.dm
@@ -42,11 +42,11 @@
var/datum/tgs_version/max_api_version = TgsMaximumApiVersion();
if(version.suite != null && version.minor != null && version.patch != null && version.deprecated_patch != null && version.deprefixed_parameter > max_api_version.deprefixed_parameter)
- TGS_ERROR_LOG("Detected unknown API version! Defaulting to latest. Update the DMAPI to fix this problem.")
+ TGS_ERROR_LOG("Detected unknown Interop API version! Defaulting to latest. Update the DMAPI to fix this problem.")
api_datum = /datum/tgs_api/latest
if(!api_datum)
- TGS_ERROR_LOG("Found unsupported API version: [raw_parameter]. If this is a valid version please report this, backporting is done on demand.")
+ TGS_ERROR_LOG("Found unsupported Interop API version: [raw_parameter]. If this is a valid version please report this, backporting is done on demand.")
return
TGS_INFO_LOG("Activating API for version [version.deprefixed_parameter]")
diff --git a/src/DMAPI/tgs/v5/api.dm b/src/DMAPI/tgs/v5/api.dm
index f7afbd5280..25d49b3e3b 100644
--- a/src/DMAPI/tgs/v5/api.dm
+++ b/src/DMAPI/tgs/v5/api.dm
@@ -17,6 +17,8 @@
var/list/chat_channels
var/initialized = FALSE
+ var/initial_bridge_request_received = FALSE
+ var/datum/tgs_version/interop_version
var/chunked_requests = 0
var/list/chunked_topics = list()
@@ -25,7 +27,8 @@
/datum/tgs_api/v5/New()
. = ..()
- TGS_DEBUG_LOG("V5 API created")
+ interop_version = version
+ TGS_DEBUG_LOG("V5 API created: [json_encode(args)]")
/datum/tgs_api/v5/ApiVersion()
return new /datum/tgs_version(
@@ -38,7 +41,7 @@
access_identifier = world.params[DMAPI5_PARAM_ACCESS_IDENTIFIER]
var/datum/tgs_version/api_version = ApiVersion()
- version = null
+ version = null // we want this to be the TGS version, not the interop version
var/list/bridge_response = Bridge(DMAPI5_BRIDGE_COMMAND_STARTUP, list(DMAPI5_BRIDGE_PARAMETER_MINIMUM_SECURITY_LEVEL = minimum_required_security_level, DMAPI5_BRIDGE_PARAMETER_VERSION = api_version.raw_parameter, DMAPI5_PARAMETER_CUSTOM_COMMANDS = ListCustomCommands(), DMAPI5_PARAMETER_TOPIC_PORT = GetTopicPort()))
if(!istype(bridge_response))
TGS_ERROR_LOG("Failed initial bridge request!")
@@ -53,7 +56,8 @@
TGS_INFO_LOG("DMAPI validation, exiting...")
TerminateWorld()
- version = new /datum/tgs_version(runtime_information[DMAPI5_RUNTIME_INFORMATION_SERVER_VERSION])
+ initial_bridge_request_received = TRUE
+ version = new /datum/tgs_version(runtime_information[DMAPI5_RUNTIME_INFORMATION_SERVER_VERSION]) // reassigning this because it can change if TGS updates
security_level = runtime_information[DMAPI5_RUNTIME_INFORMATION_SECURITY_LEVEL]
visibility = runtime_information[DMAPI5_RUNTIME_INFORMATION_VISIBILITY]
instance_name = runtime_information[DMAPI5_RUNTIME_INFORMATION_INSTANCE_NAME]
@@ -112,7 +116,7 @@
/datum/tgs_api/v5/proc/RequireInitialBridgeResponse()
TGS_DEBUG_LOG("RequireInitialBridgeResponse()")
var/logged = FALSE
- while(!version)
+ while(!initial_bridge_request_received)
if(!logged)
TGS_DEBUG_LOG("RequireInitialBridgeResponse: Starting sleep")
logged = TRUE
diff --git a/src/DMAPI/tgs/v5/bridge.dm b/src/DMAPI/tgs/v5/bridge.dm
index cc12c1ddc8..60cbcbfb7d 100644
--- a/src/DMAPI/tgs/v5/bridge.dm
+++ b/src/DMAPI/tgs/v5/bridge.dm
@@ -48,7 +48,9 @@
var/json = CreateBridgeData(command, data, TRUE)
var/encoded_json = url_encode(json)
- var/url = "http://127.0.0.1:[server_port]/Bridge?[DMAPI5_BRIDGE_DATA]=[encoded_json]"
+ var/api_prefix = interop_version.minor >= 7 ? "api/" : ""
+
+ var/url = "http://127.0.0.1:[server_port]/[api_prefix]Bridge?[DMAPI5_BRIDGE_DATA]=[encoded_json]"
return url
/datum/tgs_api/v5/proc/CreateBridgeData(command, list/data, needs_auth)
diff --git a/src/Tgstation.Server.Api/Routes.cs b/src/Tgstation.Server.Api/Routes.cs
index e4a5f75a0a..4372929ed7 100644
--- a/src/Tgstation.Server.Api/Routes.cs
+++ b/src/Tgstation.Server.Api/Routes.cs
@@ -8,19 +8,19 @@ namespace Tgstation.Server.Api
public static class Routes
{
///
- /// The root controller.
+ /// The root of API methods.
///
- public const string Root = "/";
+ public const string ApiRoot = "/api/";
///
/// The root route of all hubs.
///
- public const string HubsRoot = Root + "hubs";
+ public const string HubsRoot = ApiRoot + "hubs";
///
/// The server administration controller.
///
- public const string Administration = Root + "Administration";
+ public const string Administration = ApiRoot + "Administration";
///
/// The endpoint to download server logs.
@@ -30,32 +30,32 @@ namespace Tgstation.Server.Api
///
/// The user controller.
///
- public const string User = Root + "User";
+ public const string User = ApiRoot + "User";
///
/// The user group controller.
///
- public const string UserGroup = Root + "UserGroup";
+ public const string UserGroup = ApiRoot + "UserGroup";
///
/// The controller.
///
- public const string InstanceManager = Root + "Instance";
+ public const string InstanceManager = ApiRoot + "Instance";
///
/// The engine controller.
///
- public const string Engine = Root + "Engine";
+ public const string Engine = ApiRoot + "Engine";
///
/// The git repository controller.
///
- public const string Repository = Root + "Repository";
+ public const string Repository = ApiRoot + "Repository";
///
/// The DreamDaemon controller.
///
- public const string DreamDaemon = Root + "DreamDaemon";
+ public const string DreamDaemon = ApiRoot + "DreamDaemon";
///
/// For accessing DD diagnostics.
@@ -65,7 +65,7 @@ namespace Tgstation.Server.Api
///
/// The configuration controller.
///
- public const string Configuration = Root + "Config";
+ public const string Configuration = ApiRoot + "Config";
///
/// To be paired with for accessing s.
@@ -80,27 +80,27 @@ namespace Tgstation.Server.Api
///
/// The instance permission set controller.
///
- public const string InstancePermissionSet = Root + "InstancePermissionSet";
+ public const string InstancePermissionSet = ApiRoot + "InstancePermissionSet";
///
/// The chat bot controller.
///
- public const string Chat = Root + "Chat";
+ public const string Chat = ApiRoot + "Chat";
///
/// The deployment controller.
///
- public const string DreamMaker = Root + "DreamMaker";
+ public const string DreamMaker = ApiRoot + "DreamMaker";
///
/// The jobs controller.
///
- public const string Jobs = Root + "Job";
+ public const string Jobs = ApiRoot + "Job";
///
/// The transfer controller.
///
- public const string Transfer = Root + "Transfer";
+ public const string Transfer = ApiRoot + "Transfer";
///
/// The postfix for list operations.
diff --git a/src/Tgstation.Server.Client/ApiClient.cs b/src/Tgstation.Server.Client/ApiClient.cs
index d759ccbbdd..f691dd0e90 100644
--- a/src/Tgstation.Server.Client/ApiClient.cs
+++ b/src/Tgstation.Server.Client/ApiClient.cs
@@ -349,7 +349,7 @@ namespace Tgstation.Server.Client
if (startingToken != headers.Token)
return true;
- var token = await RunRequest