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 hashlib
|
||||
import os
|
||||
import platform
|
||||
import uuid
|
||||
from os import environ, getenv, listdir, remove
|
||||
from os.path import dirname, isdir, isfile, join, realpath
|
||||
@ -22,7 +23,7 @@ from time import time
|
||||
|
||||
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.proc import is_ci
|
||||
from platformio.project.helpers import (
|
||||
@ -414,3 +415,14 @@ def get_cid():
|
||||
if WINDOWS or os.getuid() > 0: # pylint: disable=no-member
|
||||
set_state_item("cid", 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 requests
|
||||
|
||||
from platformio import VERSION, __version__, app, exception, util
|
||||
from platformio import VERSION, __version__, app, exception
|
||||
from platformio.compat import WINDOWS
|
||||
from platformio.proc import exec_command, get_pythonexe_path
|
||||
from platformio.project.helpers import get_project_cache_dir
|
||||
@ -133,7 +133,7 @@ def get_develop_latest_version():
|
||||
r = requests.get(
|
||||
"https://raw.githubusercontent.com/platformio/platformio"
|
||||
"/develop/platformio/__init__.py",
|
||||
headers=util.get_request_defheaders(),
|
||||
headers={"User-Agent": app.get_user_agent()},
|
||||
)
|
||||
r.raise_for_status()
|
||||
for line in r.text.split("\n"):
|
||||
@ -153,7 +153,8 @@ def get_develop_latest_version():
|
||||
|
||||
def get_pypi_latest_version():
|
||||
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()
|
||||
return r.json()["info"]["version"]
|
||||
|
@ -23,7 +23,7 @@ from time import mktime
|
||||
import click
|
||||
import requests
|
||||
|
||||
from platformio import util
|
||||
from platformio import app, util
|
||||
from platformio.exception import (
|
||||
FDSHASumMismatch,
|
||||
FDSizeMismatch,
|
||||
@ -38,7 +38,7 @@ class FileDownloader(object):
|
||||
self._request = requests.get(
|
||||
url,
|
||||
stream=True,
|
||||
headers=util.get_request_defheaders(),
|
||||
headers={"User-Agent": app.get_user_agent()},
|
||||
verify=sys.version_info >= (2, 7, 9),
|
||||
)
|
||||
if self._request.status_code != 200:
|
||||
|
@ -53,7 +53,7 @@ class PackageRepoIterator(object):
|
||||
def load_manifest(url):
|
||||
r = None
|
||||
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()
|
||||
return r.json()
|
||||
except: # pylint: disable=bare-except
|
||||
|
@ -13,8 +13,8 @@
|
||||
# limitations under the License.
|
||||
|
||||
import atexit
|
||||
import hashlib
|
||||
import os
|
||||
import platform
|
||||
import re
|
||||
import sys
|
||||
import threading
|
||||
@ -27,8 +27,9 @@ import requests
|
||||
|
||||
from platformio import __version__, app, exception, util
|
||||
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.project.helpers import is_platformio_project
|
||||
|
||||
try:
|
||||
import queue
|
||||
@ -93,15 +94,7 @@ class MeasurementProtocol(TelemetryBase):
|
||||
|
||||
def _prefill_appinfo(self):
|
||||
self["av"] = __version__
|
||||
|
||||
# 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)
|
||||
self["an"] = app.get_user_agent()
|
||||
|
||||
def _prefill_sysargs(self):
|
||||
args = []
|
||||
@ -127,7 +120,6 @@ class MeasurementProtocol(TelemetryBase):
|
||||
|
||||
caller_id = str(app.get_session_var("caller_id"))
|
||||
self["cd1"] = util.get_systype()
|
||||
self["cd2"] = "Python/%s %s" % (platform.python_version(), platform.platform())
|
||||
self["cd4"] = (
|
||||
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(
|
||||
"https://ssl.google-analytics.com/collect",
|
||||
data=data,
|
||||
headers=util.get_request_defheaders(),
|
||||
headers={"User-Agent": app.get_user_agent()},
|
||||
timeout=1,
|
||||
)
|
||||
r.raise_for_status()
|
||||
@ -331,15 +323,20 @@ def measure_ci():
|
||||
def encode_run_environment(options):
|
||||
non_sensative_keys = [
|
||||
"platform",
|
||||
"platform_packages",
|
||||
"framework",
|
||||
"board",
|
||||
"upload_protocol",
|
||||
"check_tool",
|
||||
"debug_tool",
|
||||
"monitor_filters",
|
||||
]
|
||||
safe_options = [
|
||||
"%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)
|
||||
|
||||
|
||||
|
@ -270,11 +270,6 @@ def get_mdns_services():
|
||||
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")
|
||||
def _api_request_session():
|
||||
return requests.Session()
|
||||
@ -284,18 +279,19 @@ def _api_request_session():
|
||||
def _get_api_result(
|
||||
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 = {}
|
||||
r = None
|
||||
verify_ssl = sys.version_info >= (2, 7, 9)
|
||||
|
||||
headers = get_request_defheaders()
|
||||
if not url.startswith("http"):
|
||||
url = __apiurl__ + url
|
||||
if not get_setting("strict_ssl"):
|
||||
url = url.replace("https://", "http://")
|
||||
|
||||
headers = {"User-Agent": get_user_agent()}
|
||||
try:
|
||||
if data:
|
||||
r = _api_request_session().post(
|
||||
|
Reference in New Issue
Block a user