|
- //******************************************************************************
- // transparent true/false
- // ugc - garmin active captain
- // layer - 0 Seachart, 1 Sonarchart
- // du - unit 1 for depth in meters, 2 for depth in feet, 3 for fathoms
- // sd - safe depth
- // sa ?
- //******************************************************************************
-
- const
- cReqParams = 'transparent=false&ugc=true&layer=1&du=1&sd=2&sa=false';
-
- //******************************************************************************
-
- const
- cTTL = 10*60; // 10 Minutes
-
- function CheckTTL(const ATimeStamp: Integer): Boolean;
- begin
- Result := (cTTL div 2) > GetUnixTime - ATimeStamp;
- end;
-
- function GetNavToken: AnsiString;
- var
- VNavTokensJson: AnsiString;
- VTimeStamp: Integer;
- VResponseCode: Cardinal;
- VResponseHeader, VResponseData: AnsiString;
- VRequestUrl, VRequestHeader: AnsiString;
- begin
- Result := '';
-
- Global.Lock;
- try
- if Global.Exists(0) and Global.Exists(1) then begin
- VNavTokensJson := Global.GetVar(0);
- VTimeStamp := Global.GetVar(1);
- if (VNavTokensJson <> '') and (VTimeStamp <> 0) and CheckTTL(VTimeStamp) then begin
- Result := VNavTokensJson;
- end;
- end;
-
- if (Result = '') and Assigned(Downloader) then begin
- VRequestUrl := 'https://maps.garmin.com/marine/api/getNavionicsTokens';
- VRequestHeader := 'Origin: https://maps.garmin.com' + #13#10 + 'Referer: https://maps.garmin.com/';
- VResponseHeader := '';
- VResponseData := '';
- VResponseCode := Downloader.DoHttpRequest(VRequestUrl, VRequestHeader, '', VResponseHeader, VResponseData);
-
- if VResponseCode = 200 then begin
- Result := VResponseData;
- Global.SetVar(0, Result);
- Global.SetVar(1, GetUnixTime);
- end;
- end;
- finally
- Global.Unlock;
- end;
- end;
-
- //******************************************************************************
-
- var
- VBuf : AnsiString;
- VNavToken: AnsiString;
- VNavBearer: AnsiString;
- begin
- VBuf := GetNavToken;
- VNavToken := RegExprGetMatchSubStr(VBuf, '"configuration_token":"(.*)"', 1);
- VNavBearer := RegExprGetMatchSubStr(VBuf, '"access_token":"(.*)",', 1);
- if VNavToken <> '' then begin
- ResultURL := TemplateToUrl(GetURLBase) + '?' + 'config=' + VNavToken + '&' + cReqParams;
- RequestHead:= 'Referer: https://maps.garmin.com/' + #13#10 +
- 'Origin: https://maps.garmin.com' + #13#10 +
- 'Authorization: Bearer '+ VNavBearer;
- end else begin
- ResultURL := '';
- end;
- end.
|