Correctifs CORS : std::move + Cache-Control no-store
This commit is contained in:
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user