Correctifs CORS : std::move + Cache-Control no-store
This commit is contained in:
@@ -1,5 +1,6 @@
|
|||||||
#include <QCoreApplication>
|
#include <QCoreApplication>
|
||||||
#include <QHttpServer>
|
#include <QHttpServer>
|
||||||
|
#include <QHttpHeaders>
|
||||||
#include <QTcpServer>
|
#include <QTcpServer>
|
||||||
#include <QSqlDatabase>
|
#include <QSqlDatabase>
|
||||||
#include <QSqlQuery>
|
#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_CIRCUIT_ABSENCE_MASSE = 9;
|
||||||
static const int ETAT_COMMANDE_CARTE_OK = 0;
|
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[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
QCoreApplication app(argc, argv);
|
QCoreApplication app(argc, argv);
|
||||||
@@ -57,7 +76,7 @@ int main(int argc, char *argv[])
|
|||||||
server.route("/ping", []() {
|
server.route("/ping", []() {
|
||||||
QJsonObject obj;
|
QJsonObject obj;
|
||||||
obj["status"] = "ok";
|
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;
|
QJsonObject err;
|
||||||
err["status"] = "erreur";
|
err["status"] = "erreur";
|
||||||
err["message"] = "type non supporté (seul 'circuit' est implémenté à ce stade)";
|
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;
|
QJsonArray familles;
|
||||||
@@ -126,7 +145,7 @@ int main(int argc, char *argv[])
|
|||||||
QJsonObject reponse;
|
QJsonObject reponse;
|
||||||
reponse["status"] = "ok";
|
reponse["status"] = "ok";
|
||||||
reponse["familles"] = familles;
|
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;
|
QJsonObject err;
|
||||||
err["status"] = "erreur";
|
err["status"] = "erreur";
|
||||||
err["message"] = "type non supporté (seul 'circuit' est implémenté à ce stade)";
|
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;
|
bool ok = false;
|
||||||
@@ -154,7 +173,7 @@ int main(int argc, char *argv[])
|
|||||||
QJsonObject err;
|
QJsonObject err;
|
||||||
err["status"] = "erreur";
|
err["status"] = "erreur";
|
||||||
err["message"] = "paramètre 'famille' manquant ou invalide";
|
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;
|
QJsonArray elements;
|
||||||
@@ -200,7 +219,7 @@ int main(int argc, char *argv[])
|
|||||||
QJsonObject reponse;
|
QJsonObject reponse;
|
||||||
reponse["status"] = "ok";
|
reponse["status"] = "ok";
|
||||||
reponse["elements"] = elements;
|
reponse["elements"] = elements;
|
||||||
return QHttpServerResponse(QJsonDocument(reponse).toJson());
|
return withCors(QHttpServerResponse(QJsonDocument(reponse).toJson()));
|
||||||
});
|
});
|
||||||
|
|
||||||
auto tcpServer = new QTcpServer();
|
auto tcpServer = new QTcpServer();
|
||||||
|
|||||||
Reference in New Issue
Block a user