Implemented timezone API HTTP proxy

This commit is contained in:
Mark van Renswoude 2018-01-19 16:12:23 +01:00
parent d9d9b45956
commit bc90234f73
7 changed files with 2338 additions and 2290 deletions

3
hosted/timezone.php Normal file
View File

@ -0,0 +1,3 @@
<?php
echo file_get_contents('https://maps.googleapis.com/maps/api/timezone/json?' . $_SERVER['QUERY_STRING']);
?>

View File

@ -1,5 +1,7 @@
@Echo Off
echo -DASYNC_TCP_SSL_ENABLED=1
REM Enable this line if you're not using MapsAPIViaProxyScript
REM echo -DASYNC_TCP_SSL_ENABLED=1
if exist src\secret.h (
echo -DSecretsPresent=1

File diff suppressed because it is too large Load Diff

View File

@ -4,10 +4,10 @@
const uint8_t VersionMajor = 2;
const uint8_t VersionMinor = 0;
const uint8_t VersionPatch = 0;
const uint8_t VersionMetadata = 23;
const uint8_t VersionMetadata = 25;
const char VersionBranch[] = "release/2.0";
const char VersionSemVer[] = "2.0.0-beta.1";
const char VersionFullSemVer[] = "2.0.0-beta.1+23";
const char VersionCommitDate[] = "2018-01-18";
const char VersionFullSemVer[] = "2.0.0-beta.1+25";
const char VersionCommitDate[] = "2018-01-19";
#endif

View File

@ -34,4 +34,27 @@ static const uint16_t APButtonHoldTime = 5000;
// the configurable NTP interval is used
static const uint32_t TimezoneRetryInterval = 60000;
// SSL takes quite a bit of memory (and I haven't been optimizing much),
// which seems to cause memory-related exceptions when getting the timezone
// information from Google's HTTPS API. Google requires HTTPS. The workaround
// is hosting a small proxy script on HTTP, which is included in the "hosted" folder
// of this project. Note that this completely defeats any security, and may
// cause your Google API key and location data to leak. My advice is simply to not
// specify your location too precisely :-)
//
// If you want to host your own version of the script because you don't trust
// that mine will not log anything, or want to disable the proxy script
// completely, change these definitions below. Also update platformio-buildflags.bat
// to enable SSL support in ESPAsyncTCP.
//
// If you can fix my sloppy code and get a direct SSL connection working,
// I'd be interested in the changes as well!
#define MapsAPIViaProxyScript
#ifdef MapsAPIViaProxyScript
static const char* TimezoneProxyScriptHost = "api.x2software.net";
static const char* TimezoneProxyScriptPath = "/timezone.php";
#endif
#endif

View File

@ -125,17 +125,21 @@ void updateTimezone()
uint32_t timestamp = ntpClient->getEpochTime();
#ifdef MapsAPIViaProxyScript
String request = String("GET ") + TimezoneProxyScriptPath + "?location=" +
#else
String request = "GET /maps/api/timezone/json?location=" +
#endif
String(systemSettings->latitude(), 7) + "," + String(systemSettings->longitude(), 7) +
"8&timestamp=" +
String(timestamp);
_d("Timezone :: request: ");
_dln(request);
if (systemSettings->mapsAPIKey() != nullptr)
request = request + "&key=" + systemSettings->mapsAPIKey();
_d("Timezone :: request: ");
_dln(request);
request = request + " HTTP/1.0\r\nHost: maps.googleapis.com\r\n\r\n";
client->write(request.c_str());
}, nullptr);
@ -143,7 +147,11 @@ void updateTimezone()
_d("Timezone :: available heap: ");
_dln(ESP.getFreeHeap());
#ifdef MapsAPIViaProxyScript
if(!timezoneClient->connect(TimezoneProxyScriptHost, 80))
#else
if(!timezoneClient->connect("maps.googleapis.com", 443, true))
#endif
{
_dln("Timezone :: failed to connect to host");

2
web/dist/bundle.js vendored

File diff suppressed because one or more lines are too long