//****************************************************************************** // 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=true&ugc=true&layer=0&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.