예제 #1
0
파일: webserver.cpp 프로젝트: andig/vzero
/**
 * Initialize web server and add requests
 */
void webserver_start()
{
  // not found
  g_server.onNotFound(handleNotFound);

#ifdef CAPTIVE_PORTAL
  // handle captive requests
  g_server.addHandler(new CaptiveRequestHandler()).setFilter(ON_AP_FILTER);
#endif

  // CDN
  g_server.on("/js/jquery-2.1.4.min.js", HTTP_GET, [](AsyncWebServerRequest *request) {
    request->redirect(F("http://code.jquery.com/jquery-2.1.4.min.js"));
  }).setFilter(ON_STA_FILTER);
  g_server.on("/css/foundation.min.css", HTTP_GET, [](AsyncWebServerRequest *request) {
    request->redirect(F("http://cdnjs.cloudflare.com/ajax/libs/foundation/6.2.3/foundation.min.css"));
  }).setFilter(ON_STA_FILTER);

  // GET
  g_server.on("/api/status", HTTP_GET, handleGetStatus);
  g_server.on("/api/plugins", HTTP_GET, handleGetPlugins);
  g_server.on("/api/scan", HTTP_GET, handleWifiScan);

  // POST
  g_server.on("/settings", HTTP_POST, handleSettings);
  g_server.on("/restart", HTTP_POST, [](AsyncWebServerRequest *request) {
    // AsyncWebServerResponse *response = request->beginResponse(302);
    // response->addHeader("Location", net_hostname + ".local");
    // request->send(response);

    request->send(200, F(CONTENT_TYPE_HTML), F("<!DOCTYPE html><html><head><meta http-equiv=\"refresh\" content=\"5; url=/\"></head><body>Restarting...<br/><img src=\"/img/loading.gif\"></body></html>"));
    requestRestart();
  });

  // make sure config.json is not served!
  g_server.on("/config.json", HTTP_GET, [](AsyncWebServerRequest *request) {
    request->send(400);
  });

  // catch-all
  g_server.serveStatic("/", SPIFFS, "/", CACHE_HEADER).setDefaultFile("index.html");

  // sensor api
  registerPlugins();

#ifdef SPIFFS_EDITOR
  g_server.addHandler(new SPIFFSEditor());
#endif

#ifdef BROWSER_EVENTS
  g_server.addHandler(&g_events);
#endif

  // start server
  g_server.begin();
}
예제 #2
0
void PassiveUpdateNotifier::backgroundCheckForUpdate()
{
    if( Utility::isLinux() ) {
        // on linux, check if the installed binary is still the same version
        // as the one that is running. If not, restart if possible.
        const QByteArray fsVersion = Utility::versionOfInstalledBinary();
        qDebug() << Q_FUNC_INFO;
        if( !(fsVersion.isEmpty() || _runningAppVersion.isEmpty()) && fsVersion != _runningAppVersion ) {
            emit requestRestart();
        }
    }
}
예제 #3
0
UpdaterScheduler::UpdaterScheduler(QObject *parent) :
    QObject(parent)
{
    connect( &_updateCheckTimer, SIGNAL(timeout()),
             this, SLOT(slotTimerFired()) );

    // Note: the sparkle-updater is not an OCUpdater and thus the dynamic_cast
    // returns NULL. Clever detail.
    if (OCUpdater *updater = dynamic_cast<OCUpdater*>(Updater::instance())) {
        connect(updater,  SIGNAL(newUpdateAvailable(QString,QString)),
                this,     SIGNAL(updaterAnnouncement(QString,QString)) );
        connect(updater, SIGNAL(requestRestart()), SIGNAL(requestRestart()));
    }

    // at startup, do a check in any case.
    QTimer::singleShot(3000, this, SLOT(slotTimerFired()));

    ConfigFile cfg;
    auto checkInterval = cfg.updateCheckInterval();
    _updateCheckTimer.start(checkInterval);
}
예제 #4
0
파일: webserver.cpp 프로젝트: andig/vzero
/**
 * Handle set request from http server.
 */
void handleSettings(AsyncWebServerRequest *request)
{
  DEBUG_MSG(SERVER, "%s (%d args)\n", request->url().c_str(), request->params());

  String resp = F("<!DOCTYPE html><html><head><meta http-equiv=\"refresh\" content=\"5; url=/\"></head><body>");
  String ssid = "";
  String pass = "";
  int result = 400;

  // read ssid and psk
  if (request->hasParam("ssid", true) && request->hasParam("pass", true)) {
    ssid = request->getParam("ssid", true)->value();
    pass = request->getParam("pass", true)->value();
    if (ssid != "") {
      g_ssid = ssid;
      g_pass = pass;
      result = 200;
    }
  }
  if (request->hasParam("middleware", true)) {
    g_middleware = request->getParam("middleware", true)->value();
    result = 200;
  }
  if (result == 400) {
    request->send(result, F(CONTENT_TYPE_PLAIN), F("Bad request\n\n"));
    return;
  }

  if (saveConfig()) {
    resp += F("<h1>Settings saved.</h1>");
  }
  else {
    resp += F("<h1>Failed to save config file.</h1>");
    result = 400;
  }
  resp += F("</body></html>");
  if (result == 200) {
    requestRestart();
  }
  request->send(result, F(CONTENT_TYPE_HTML), resp);
}