Compare commits

...

2 commits

Author SHA1 Message Date
Jamie Shiell
0aa38428f6 Correctly set content type when specified in pollin headers
Some checks are pending
tests / ci (push) Waiting to run
2026-02-09 12:53:56 +01:00
Gabriele Lauricella
344286a5d3 chore: remove mac_address param web mirror trmnl client 2026-02-09 12:51:06 +01:00
4 changed files with 28 additions and 19 deletions

View file

@ -192,8 +192,12 @@ class Plugin extends Model
$httpRequest = Http::withHeaders($headers); $httpRequest = Http::withHeaders($headers);
if ($this->polling_verb === 'post' && $this->polling_body) { if ($this->polling_verb === 'post' && $this->polling_body) {
$contentType = (array_key_exists('Content-Type', $headers))
? $headers['Content-Type']
: 'application/json';
$resolvedBody = $this->resolveLiquidVariables($this->polling_body); $resolvedBody = $this->resolveLiquidVariables($this->polling_body);
$httpRequest = $httpRequest->withBody($resolvedBody); $httpRequest = $httpRequest->withBody($resolvedBody, $contentType);
} }
try { try {

View file

@ -39,7 +39,6 @@
var data = trmnl.getSettings(); var data = trmnl.getSettings();
trmnl.ui.apiKeyInput.value = data.api_key || ""; trmnl.ui.apiKeyInput.value = data.api_key || "";
trmnl.ui.baseURLInput.value = data.base_url || ""; trmnl.ui.baseURLInput.value = data.base_url || "";
trmnl.ui.macAddressInput.value = data.mac_address || "";
trmnl.ui.displayModeSelect.value = data.display_mode || ""; trmnl.ui.displayModeSelect.value = data.display_mode || "";
trmnl.ui.setup.style.display = "flex"; trmnl.ui.setup.style.display = "flex";
@ -50,7 +49,6 @@
var apiKey = trmnl.ui.apiKeyInput.value; var apiKey = trmnl.ui.apiKeyInput.value;
var baseURL = trmnl.ui.baseURLInput.value; var baseURL = trmnl.ui.baseURLInput.value;
var macAddress = trmnl.ui.macAddressInput.value;
var displayMode = trmnl.ui.displayModeSelect.value; var displayMode = trmnl.ui.displayModeSelect.value;
if (!apiKey) { if (!apiKey) {
@ -60,7 +58,6 @@
trmnl.saveSettings({ trmnl.saveSettings({
api_key: apiKey, api_key: apiKey,
base_url: baseURL, base_url: baseURL,
mac_address: macAddress,
display_mode: displayMode display_mode: displayMode
}); });
@ -84,7 +81,6 @@
var apiKey = setup.api_key; var apiKey = setup.api_key;
var displayMode = setup.display_mode; var displayMode = setup.display_mode;
var baseURL = setup.base_url || "https://your-byos-trmnl.com"; var baseURL = setup.base_url || "https://your-byos-trmnl.com";
var macAddress = setup.mac_address || "00:00:00:00:00:01";
document.body.classList.remove("dark", "night") document.body.classList.remove("dark", "night")
if (displayMode) { if (displayMode) {
@ -92,8 +88,7 @@
} }
var headers = { var headers = {
"Access-Token": apiKey, "Access-Token": apiKey
"id": macAddress
}; };
var url = baseURL + "/api/display"; var url = baseURL + "/api/display";
@ -210,10 +205,6 @@
hasOverrides = true; hasOverrides = true;
} }
if (key === "mac_address" && value) {
newSettings.mac_address = value;
hasOverrides = true;
}
} }
if (hasOverrides) { if (hasOverrides) {
@ -274,7 +265,6 @@
// settings // settings
trmnl.ui.apiKeyInput = document.getElementById("api_key"); trmnl.ui.apiKeyInput = document.getElementById("api_key");
trmnl.ui.baseURLInput = document.getElementById("base_url"); trmnl.ui.baseURLInput = document.getElementById("base_url");
trmnl.ui.macAddressInput = document.getElementById("mac_address");
trmnl.ui.displayModeSelect = document.getElementById("display_mode"); trmnl.ui.displayModeSelect = document.getElementById("display_mode");
trmnl.ui.setup = document.getElementById("setup"); trmnl.ui.setup = document.getElementById("setup");
@ -469,12 +459,6 @@
<img src="/mirror/assets/logo--brand.svg" alt="TRMNL Logo" /> <img src="/mirror/assets/logo--brand.svg" alt="TRMNL Logo" />
<form onsubmit="return trmnl.saveSetup(event)"> <form onsubmit="return trmnl.saveSetup(event)">
<fieldset>
<label for="mac_address">Device MAC Address</label>
<input name="mac_address" id="mac_address" type="text" placeholder="00:00:00:00:00:01" class="form-control"
required />
</fieldset>
<fieldset> <fieldset>
<label for="api_key">Device API Key</label> <label for="api_key">Device API Key</label>
<input name="api_key" id="api_key" type="text" placeholder="API Key" class="form-control" required /> <input name="api_key" id="api_key" type="text" placeholder="API Key" class="form-control" required />

View file

@ -559,7 +559,7 @@ new class extends Component
<flux:modal name="mirror-url" class="md:w-96"> <flux:modal name="mirror-url" class="md:w-96">
@php @php
$mirrorUrl = url('/mirror/index.html') . '?mac_address=' . urlencode($device->mac_address) . '&api_key=' . urlencode($device->api_key); $mirrorUrl = url('/mirror/index.html') . '?api_key=' . urlencode($device->api_key);
@endphp @endphp
<div class="space-y-6"> <div class="space-y-6">

View file

@ -72,6 +72,27 @@ test('updateDataPayload sends POST request with body when polling_verb is post',
$request->body() === '{"query": "query { user { id name } }"}'); $request->body() === '{"query": "query { user { id name } }"}');
}); });
test('updateDataPayload sends POST request with body with correct content type when not JSON content', function (): void {
Http::fake([
'https://example.com/api' => Http::response(['success' => true], 200),
]);
$plugin = Plugin::factory()->create([
'data_strategy' => 'polling',
'polling_url' => 'https://example.com/api',
'polling_verb' => 'post',
'polling_body' => '<query><user id="123" name="John Doe"/></query>',
'polling_header' => 'Content-Type: text/xml'
]);
$plugin->updateDataPayload();
Http::assertSent(fn ($request): bool => $request->url() === 'https://example.com/api' &&
$request->method() === 'POST' &&
$request->hasHeader('Content-Type', 'text/xml') &&
$request->body() === '<query><user id="123" name="John Doe"/></query>');
});
test('updateDataPayload handles multiple URLs with IDX_ prefixes', function (): void { test('updateDataPayload handles multiple URLs with IDX_ prefixes', function (): void {
$plugin = Plugin::factory()->create([ $plugin = Plugin::factory()->create([
'data_strategy' => 'polling', 'data_strategy' => 'polling',