Correctifs CORS : std::move + Cache-Control no-store

This commit is contained in:
2026-08-14 08:09:29 +02:00
parent 40bc211201
commit 930a8c300a
+25 -6
View File
@@ -1,5 +1,6 @@
#include <QCoreApplication>
#include <QHttpServer>
#include <QHttpHeaders>
#include <QTcpServer>
#include <QSqlDatabase>
#include <QSqlQuery>
@@ -34,6 +35,24 @@ static const int ETAT_CIRCUIT_ABSENCE_TERRE = 8;
static const int ETAT_CIRCUIT_ABSENCE_MASSE = 9;
static const int ETAT_COMMANDE_CARTE_OK = 0;
// ----------------------------------------------------------------------------
// Ajoute l'en-tête CORS à une réponse - indispensable puisque le client WASM
// (servi par nginx sur un port distinct) et cette API (port 8080) constituent
// deux origines différentes du point de vue du navigateur. Sans cet en-tête,
// les requêtes aboutissent bien côté serveur (visibles dans les logs) mais
// leur réponse est bloquée silencieusement côté client.
// TODO : restreindre à l'origine réelle du client en production plutôt que
// '*', une fois l'authentification (cf "Architecture cible") en place.
// ----------------------------------------------------------------------------
static QHttpServerResponse withCors(QHttpServerResponse &&resp)
{
QHttpHeaders headers = resp.headers();
headers.append(QHttpHeaders::WellKnownHeader::AccessControlAllowOrigin, "*");
headers.append(QHttpHeaders::WellKnownHeader::CacheControl, "no-store");
resp.setHeaders(std::move(headers));
return std::move(resp);
}
int main(int argc, char *argv[])
{
QCoreApplication app(argc, argv);
@@ -57,7 +76,7 @@ int main(int argc, char *argv[])
server.route("/ping", []() {
QJsonObject obj;
obj["status"] = "ok";
return QHttpServerResponse(QJsonDocument(obj).toJson());
return withCors(QHttpServerResponse(QJsonDocument(obj).toJson()));
});
// ------------------------------------------------------------------
@@ -73,7 +92,7 @@ int main(int argc, char *argv[])
QJsonObject err;
err["status"] = "erreur";
err["message"] = "type non supporté (seul 'circuit' est implémenté à ce stade)";
return QHttpServerResponse(QJsonDocument(err).toJson(), QHttpServerResponder::StatusCode::NotImplemented);
return withCors(QHttpServerResponse(QJsonDocument(err).toJson(), QHttpServerResponder::StatusCode::NotImplemented));
}
QJsonArray familles;
@@ -126,7 +145,7 @@ int main(int argc, char *argv[])
QJsonObject reponse;
reponse["status"] = "ok";
reponse["familles"] = familles;
return QHttpServerResponse(QJsonDocument(reponse).toJson());
return withCors(QHttpServerResponse(QJsonDocument(reponse).toJson()));
});
// ------------------------------------------------------------------
@@ -145,7 +164,7 @@ int main(int argc, char *argv[])
QJsonObject err;
err["status"] = "erreur";
err["message"] = "type non supporté (seul 'circuit' est implémenté à ce stade)";
return QHttpServerResponse(QJsonDocument(err).toJson(), QHttpServerResponder::StatusCode::NotImplemented);
return withCors(QHttpServerResponse(QJsonDocument(err).toJson(), QHttpServerResponder::StatusCode::NotImplemented));
}
bool ok = false;
@@ -154,7 +173,7 @@ int main(int argc, char *argv[])
QJsonObject err;
err["status"] = "erreur";
err["message"] = "paramètre 'famille' manquant ou invalide";
return QHttpServerResponse(QJsonDocument(err).toJson(), QHttpServerResponder::StatusCode::BadRequest);
return withCors(QHttpServerResponse(QJsonDocument(err).toJson(), QHttpServerResponder::StatusCode::BadRequest));
}
QJsonArray elements;
@@ -200,7 +219,7 @@ int main(int argc, char *argv[])
QJsonObject reponse;
reponse["status"] = "ok";
reponse["elements"] = elements;
return QHttpServerResponse(QJsonDocument(reponse).toJson());
return withCors(QHttpServerResponse(QJsonDocument(reponse).toJson()));
});
auto tcpServer = new QTcpServer();