forked from platformio/platformio-core
Generate user agent based on PIO Core environment
This commit is contained in:
@@ -15,6 +15,7 @@
|
|||||||
import codecs
|
import codecs
|
||||||
import hashlib
|
import hashlib
|
||||||
import os
|
import os
|
||||||
|
import platform
|
||||||
import uuid
|
import uuid
|
||||||
from os import environ, getenv, listdir, remove
|
from os import environ, getenv, listdir, remove
|
||||||
from os.path import dirname, isdir, isfile, join, realpath
|
from os.path import dirname, isdir, isfile, join, realpath
|
||||||
@@ -22,7 +23,7 @@ from time import time
|
|||||||
|
|
||||||
import requests
|
import requests
|
||||||
|
|
||||||
from platformio import exception, fs, lockfile
|
from platformio import __version__, exception, fs, lockfile
|
||||||
from platformio.compat import WINDOWS, dump_json_to_unicode, hashlib_encode_data
|
from platformio.compat import WINDOWS, dump_json_to_unicode, hashlib_encode_data
|
||||||
from platformio.proc import is_ci
|
from platformio.proc import is_ci
|
||||||
from platformio.project.helpers import (
|
from platformio.project.helpers import (
|
||||||
@@ -414,3 +415,14 @@ def get_cid():
|
|||||||
if WINDOWS or os.getuid() > 0: # pylint: disable=no-member
|
if WINDOWS or os.getuid() > 0: # pylint: disable=no-member
|
||||||
set_state_item("cid", cid)
|
set_state_item("cid", cid)
|
||||||
return cid
|
return cid
|
||||||
|
|
||||||
|
|
||||||
|
def get_user_agent():
|
||||||
|
data = ["PlatformIO/%s" % __version__, "CI/%d" % int(is_ci())]
|
||||||
|
if get_session_var("caller_id"):
|
||||||
|
data.append("Caller/%s" % get_session_var("caller_id"))
|
||||||
|
if os.getenv("PLATFORMIO_IDE"):
|
||||||
|
data.append("IDE/%s" % os.getenv("PLATFORMIO_IDE"))
|
||||||
|
data.append("Python/%s" % platform.python_version())
|
||||||
|
data.append("Platform/%s" % platform.platform())
|
||||||
|
return " ".join(data)
|
||||||
|
@@ -19,7 +19,7 @@ from zipfile import ZipFile
|
|||||||
import click
|
import click
|
||||||
import requests
|
import requests
|
||||||
|
|
||||||
from platformio import VERSION, __version__, app, exception, util
|
from platformio import VERSION, __version__, app, exception
|
||||||
from platformio.compat import WINDOWS
|
from platformio.compat import WINDOWS
|
||||||
from platformio.proc import exec_command, get_pythonexe_path
|
from platformio.proc import exec_command, get_pythonexe_path
|
||||||
from platformio.project.helpers import get_project_cache_dir
|
from platformio.project.helpers import get_project_cache_dir
|
||||||
@@ -133,7 +133,7 @@ def get_develop_latest_version():
|
|||||||
r = requests.get(
|
r = requests.get(
|
||||||
"https://raw.githubusercontent.com/platformio/platformio"
|
"https://raw.githubusercontent.com/platformio/platformio"
|
||||||
"/develop/platformio/__init__.py",
|
"/develop/platformio/__init__.py",
|
||||||
headers=util.get_request_defheaders(),
|
headers={"User-Agent": app.get_user_agent()},
|
||||||
)
|
)
|
||||||
r.raise_for_status()
|
r.raise_for_status()
|
||||||
for line in r.text.split("\n"):
|
for line in r.text.split("\n"):
|
||||||
@@ -153,7 +153,8 @@ def get_develop_latest_version():
|
|||||||
|
|
||||||
def get_pypi_latest_version():
|
def get_pypi_latest_version():
|
||||||
r = requests.get(
|
r = requests.get(
|
||||||
"https://pypi.org/pypi/platformio/json", headers=util.get_request_defheaders()
|
"https://pypi.org/pypi/platformio/json",
|
||||||
|
headers={"User-Agent": app.get_user_agent()},
|
||||||
)
|
)
|
||||||
r.raise_for_status()
|
r.raise_for_status()
|
||||||
return r.json()["info"]["version"]
|
return r.json()["info"]["version"]
|
||||||
|
@@ -23,7 +23,7 @@ from time import mktime
|
|||||||
import click
|
import click
|
||||||
import requests
|
import requests
|
||||||
|
|
||||||
from platformio import util
|
from platformio import app, util
|
||||||
from platformio.exception import (
|
from platformio.exception import (
|
||||||
FDSHASumMismatch,
|
FDSHASumMismatch,
|
||||||
FDSizeMismatch,
|
FDSizeMismatch,
|
||||||
@@ -38,7 +38,7 @@ class FileDownloader(object):
|
|||||||
self._request = requests.get(
|
self._request = requests.get(
|
||||||
url,
|
url,
|
||||||
stream=True,
|
stream=True,
|
||||||
headers=util.get_request_defheaders(),
|
headers={"User-Agent": app.get_user_agent()},
|
||||||
verify=sys.version_info >= (2, 7, 9),
|
verify=sys.version_info >= (2, 7, 9),
|
||||||
)
|
)
|
||||||
if self._request.status_code != 200:
|
if self._request.status_code != 200:
|
||||||
|
@@ -53,7 +53,7 @@ class PackageRepoIterator(object):
|
|||||||
def load_manifest(url):
|
def load_manifest(url):
|
||||||
r = None
|
r = None
|
||||||
try:
|
try:
|
||||||
r = requests.get(url, headers=util.get_request_defheaders())
|
r = requests.get(url, headers={"User-Agent": app.get_user_agent()})
|
||||||
r.raise_for_status()
|
r.raise_for_status()
|
||||||
return r.json()
|
return r.json()
|
||||||
except: # pylint: disable=bare-except
|
except: # pylint: disable=bare-except
|
||||||
|
@@ -13,8 +13,8 @@
|
|||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
|
|
||||||
import atexit
|
import atexit
|
||||||
|
import hashlib
|
||||||
import os
|
import os
|
||||||
import platform
|
|
||||||
import re
|
import re
|
||||||
import sys
|
import sys
|
||||||
import threading
|
import threading
|
||||||
@@ -27,8 +27,9 @@ import requests
|
|||||||
|
|
||||||
from platformio import __version__, app, exception, util
|
from platformio import __version__, app, exception, util
|
||||||
from platformio.commands import PlatformioCLI
|
from platformio.commands import PlatformioCLI
|
||||||
from platformio.compat import string_types
|
from platformio.compat import hashlib_encode_data, string_types
|
||||||
from platformio.proc import is_ci, is_container
|
from platformio.proc import is_ci, is_container
|
||||||
|
from platformio.project.helpers import is_platformio_project
|
||||||
|
|
||||||
try:
|
try:
|
||||||
import queue
|
import queue
|
||||||
@@ -93,15 +94,7 @@ class MeasurementProtocol(TelemetryBase):
|
|||||||
|
|
||||||
def _prefill_appinfo(self):
|
def _prefill_appinfo(self):
|
||||||
self["av"] = __version__
|
self["av"] = __version__
|
||||||
|
self["an"] = app.get_user_agent()
|
||||||
# gather dependent packages
|
|
||||||
dpdata = []
|
|
||||||
dpdata.append("PlatformIO/%s" % __version__)
|
|
||||||
if app.get_session_var("caller_id"):
|
|
||||||
dpdata.append("Caller/%s" % app.get_session_var("caller_id"))
|
|
||||||
if os.getenv("PLATFORMIO_IDE"):
|
|
||||||
dpdata.append("IDE/%s" % os.getenv("PLATFORMIO_IDE"))
|
|
||||||
self["an"] = " ".join(dpdata)
|
|
||||||
|
|
||||||
def _prefill_sysargs(self):
|
def _prefill_sysargs(self):
|
||||||
args = []
|
args = []
|
||||||
@@ -127,7 +120,6 @@ class MeasurementProtocol(TelemetryBase):
|
|||||||
|
|
||||||
caller_id = str(app.get_session_var("caller_id"))
|
caller_id = str(app.get_session_var("caller_id"))
|
||||||
self["cd1"] = util.get_systype()
|
self["cd1"] = util.get_systype()
|
||||||
self["cd2"] = "Python/%s %s" % (platform.python_version(), platform.platform())
|
|
||||||
self["cd4"] = (
|
self["cd4"] = (
|
||||||
1 if (not util.is_ci() and (caller_id or not is_container())) else 0
|
1 if (not util.is_ci() and (caller_id or not is_container())) else 0
|
||||||
)
|
)
|
||||||
@@ -269,7 +261,7 @@ class MPDataPusher(object):
|
|||||||
r = self._http_session.post(
|
r = self._http_session.post(
|
||||||
"https://ssl.google-analytics.com/collect",
|
"https://ssl.google-analytics.com/collect",
|
||||||
data=data,
|
data=data,
|
||||||
headers=util.get_request_defheaders(),
|
headers={"User-Agent": app.get_user_agent()},
|
||||||
timeout=1,
|
timeout=1,
|
||||||
)
|
)
|
||||||
r.raise_for_status()
|
r.raise_for_status()
|
||||||
@@ -331,15 +323,20 @@ def measure_ci():
|
|||||||
def encode_run_environment(options):
|
def encode_run_environment(options):
|
||||||
non_sensative_keys = [
|
non_sensative_keys = [
|
||||||
"platform",
|
"platform",
|
||||||
|
"platform_packages",
|
||||||
"framework",
|
"framework",
|
||||||
"board",
|
"board",
|
||||||
"upload_protocol",
|
"upload_protocol",
|
||||||
"check_tool",
|
"check_tool",
|
||||||
"debug_tool",
|
"debug_tool",
|
||||||
|
"monitor_filters",
|
||||||
]
|
]
|
||||||
safe_options = [
|
safe_options = [
|
||||||
"%s=%s" % (k, v) for k, v in sorted(options.items()) if k in non_sensative_keys
|
"%s=%s" % (k, v) for k, v in sorted(options.items()) if k in non_sensative_keys
|
||||||
]
|
]
|
||||||
|
if is_platformio_project(os.getcwd()):
|
||||||
|
phash = hashlib.sha1(hashlib_encode_data(app.get_cid()))
|
||||||
|
safe_options.append("pid=%s" % phash.hexdigest())
|
||||||
return "&".join(safe_options)
|
return "&".join(safe_options)
|
||||||
|
|
||||||
|
|
||||||
|
@@ -270,11 +270,6 @@ def get_mdns_services():
|
|||||||
return items
|
return items
|
||||||
|
|
||||||
|
|
||||||
def get_request_defheaders():
|
|
||||||
data = (__version__, int(is_ci()), requests.utils.default_user_agent())
|
|
||||||
return {"User-Agent": "PlatformIO/%s CI/%d %s" % data}
|
|
||||||
|
|
||||||
|
|
||||||
@memoized(expire="60s")
|
@memoized(expire="60s")
|
||||||
def _api_request_session():
|
def _api_request_session():
|
||||||
return requests.Session()
|
return requests.Session()
|
||||||
@@ -284,18 +279,19 @@ def _api_request_session():
|
|||||||
def _get_api_result(
|
def _get_api_result(
|
||||||
url, params=None, data=None, auth=None # pylint: disable=too-many-branches
|
url, params=None, data=None, auth=None # pylint: disable=too-many-branches
|
||||||
):
|
):
|
||||||
from platformio.app import get_setting # pylint: disable=import-outside-toplevel
|
# pylint: disable=import-outside-toplevel
|
||||||
|
from platformio.app import get_user_agent, get_setting
|
||||||
|
|
||||||
result = {}
|
result = {}
|
||||||
r = None
|
r = None
|
||||||
verify_ssl = sys.version_info >= (2, 7, 9)
|
verify_ssl = sys.version_info >= (2, 7, 9)
|
||||||
|
|
||||||
headers = get_request_defheaders()
|
|
||||||
if not url.startswith("http"):
|
if not url.startswith("http"):
|
||||||
url = __apiurl__ + url
|
url = __apiurl__ + url
|
||||||
if not get_setting("strict_ssl"):
|
if not get_setting("strict_ssl"):
|
||||||
url = url.replace("https://", "http://")
|
url = url.replace("https://", "http://")
|
||||||
|
|
||||||
|
headers = {"User-Agent": get_user_agent()}
|
||||||
try:
|
try:
|
||||||
if data:
|
if data:
|
||||||
r = _api_request_session().post(
|
r = _api_request_session().post(
|
||||||
|
Reference in New Issue
Block a user