From 1786d042396bcc079be5de33ed900f48effcec17 Mon Sep 17 00:00:00 2001 From: Adeeb Shihadeh Date: Thu, 22 Apr 2021 21:03:57 -0700 Subject: [PATCH] handle unregistered devices (#20728) * handle unregistered devices * cleanup * no uploader or athena * clean up --- selfdrive/hardware/eon/hardware.py | 2 +- selfdrive/loggerd/logger.cc | 5 +--- selfdrive/loggerd/tests/test_loggerd.py | 5 ++-- selfdrive/manager/manager.py | 27 ++++++++++++++------- selfdrive/registration.py | 31 ++++++++----------------- 5 files changed, 33 insertions(+), 37 deletions(-) diff --git a/selfdrive/hardware/eon/hardware.py b/selfdrive/hardware/eon/hardware.py index 95fdd7cd7a..4f9a260cd2 100644 --- a/selfdrive/hardware/eon/hardware.py +++ b/selfdrive/hardware/eon/hardware.py @@ -81,7 +81,7 @@ class Android(HardwareBase): def get_serial(self): ret = getprop("ro.serialno") - if ret == "": + if len(ret) == 0: ret = "cccccccc" return ret diff --git a/selfdrive/loggerd/logger.cc b/selfdrive/loggerd/logger.cc index d227446944..f49213bbe7 100644 --- a/selfdrive/loggerd/logger.cc +++ b/selfdrive/loggerd/logger.cc @@ -91,10 +91,6 @@ kj::Array logger_build_init_data() { } #endif - const char* dongle_id = getenv("DONGLE_ID"); - if (dongle_id) { - init.setDongleId(std::string(dongle_id)); - } init.setDirty(!getenv("CLEAN")); // log params @@ -103,6 +99,7 @@ kj::Array logger_build_init_data() { init.setGitBranch(params.get("GitBranch")); init.setGitRemote(params.get("GitRemote")); init.setPassive(params.getBool("Passive")); + init.setDongleId(params.get("DongleId")); { std::map params_map; params.read_db_all(¶ms_map); diff --git a/selfdrive/loggerd/tests/test_loggerd.py b/selfdrive/loggerd/tests/test_loggerd.py index 36d6a937ce..6bc6fa9dd1 100755 --- a/selfdrive/loggerd/tests/test_loggerd.py +++ b/selfdrive/loggerd/tests/test_loggerd.py @@ -76,9 +76,11 @@ class TestLoggerd(unittest.TestCase): def test_init_data_values(self): os.environ["CLEAN"] = random.choice(["0", "1"]) - os.environ["DONGLE_ID"] = ''.join(random.choice(string.printable) for n in range(random.randint(1, 100))) + dongle = ''.join(random.choice(string.printable) for n in range(random.randint(1, 100))) fake_params = [ + # param, initData field, value + ("DongleId", "dongleId", dongle), ("GitCommit", "gitCommit", "commit"), ("GitBranch", "gitBranch", "branch"), ("GitRemote", "gitRemote", "remote"), @@ -91,7 +93,6 @@ class TestLoggerd(unittest.TestCase): initData = lr[0].initData self.assertTrue(initData.dirty != bool(os.environ["CLEAN"])) - self.assertEqual(initData.dongleId, os.environ["DONGLE_ID"]) self.assertEqual(initData.version, VERSION) if os.path.isfile("/proc/cmdline"): diff --git a/selfdrive/manager/manager.py b/selfdrive/manager/manager.py index 9c4ff207d6..097bedab3b 100755 --- a/selfdrive/manager/manager.py +++ b/selfdrive/manager/manager.py @@ -18,8 +18,9 @@ from selfdrive.manager.process import ensure_running from selfdrive.manager.process_config import managed_processes from selfdrive.registration import register from selfdrive.swaglog import cloudlog, add_file_handler -from selfdrive.version import dirty, version, origin, branch, commit - +from selfdrive.version import dirty, version, origin, branch, commit, \ + terms_version, training_version, \ + get_git_branch, get_git_remote def manager_init(): @@ -64,13 +65,18 @@ def manager_init(): except PermissionError: print("WARNING: failed to make /dev/shm") + # set version params + params.put("Version", version) + params.put("TermsVersion", terms_version) + params.put("TrainingVersion", training_version) + params.put("GitCommit", commit) + params.put("GitBranch", get_git_branch(default="")) + params.put("GitRemote", get_git_remote(default="")) + # set dongle id - reg_res = register(show_spinner=True) - if reg_res: - dongle_id = reg_res - else: - raise Exception("server registration failed") - os.environ['DONGLE_ID'] = dongle_id # Needed for swaglog and loggerd + dongle_id = register(show_spinner=True) + if dongle_id is not None: + os.environ['DONGLE_ID'] = dongle_id # Needed for swaglog if not dirty: os.environ['CLEAN'] = '1' @@ -101,7 +107,11 @@ def manager_thread(): # save boot log subprocess.call("./bootlog", cwd=os.path.join(BASEDIR, "selfdrive/loggerd")) + params = Params() + ignore = [] + if params.get("DongleId") is None: + ignore += ["uploader", "manage_athenad"] if os.getenv("NOBOARD") is not None: ignore.append("pandad") if os.getenv("BLOCK") is not None: @@ -110,7 +120,6 @@ def manager_thread(): ensure_running(managed_processes.values(), started=False, not_run=ignore) started_prev = False - params = Params() sm = messaging.SubMaster(['deviceState']) pm = messaging.PubMaster(['managerState']) diff --git a/selfdrive/registration.py b/selfdrive/registration.py index b38853a9f1..4c30772c39 100644 --- a/selfdrive/registration.py +++ b/selfdrive/registration.py @@ -12,25 +12,16 @@ from common.file_helpers import mkdirs_exists_ok from common.basedir import PERSIST from selfdrive.hardware import HARDWARE from selfdrive.swaglog import cloudlog -from selfdrive.version import version, terms_version, training_version, get_git_commit, \ - get_git_branch, get_git_remote def register(show_spinner=False): params = Params() - params.put("Version", version) - params.put("TermsVersion", terms_version) - params.put("TrainingVersion", training_version) - - params.put("GitCommit", get_git_commit(default="")) - params.put("GitBranch", get_git_branch(default="")) - params.put("GitRemote", get_git_remote(default="")) params.put("SubscriberInfo", HARDWARE.get_subscriber_info()) IMEI = params.get("IMEI", encoding='utf8') HardwareSerial = params.get("HardwareSerial", encoding='utf8') - - needs_registration = (None in [IMEI, HardwareSerial]) + dongle_id = params.get("DongleId", encoding='utf8') + needs_registration = None in (IMEI, HardwareSerial, dongle_id) # create a key for auth # your private key is kept on your device persist partition and never sent to our servers @@ -44,13 +35,6 @@ def register(show_spinner=False): os.rename(PERSIST+"/comma/id_rsa.tmp", PERSIST+"/comma/id_rsa") os.rename(PERSIST+"/comma/id_rsa.tmp.pub", PERSIST+"/comma/id_rsa.pub") - # make key readable by app users (ai.comma.plus.offroad) - os.chmod(PERSIST+'/comma/', 0o755) - os.chmod(PERSIST+'/comma/id_rsa', 0o744) - - dongle_id = params.get("DongleId", encoding='utf8') - needs_registration = needs_registration or dongle_id is None - if needs_registration: if show_spinner: spinner = Spinner() @@ -79,9 +63,14 @@ def register(show_spinner=False): cloudlog.info("getting pilotauth") resp = api_get("v2/pilotauth/", method='POST', timeout=15, imei=imei1, imei2=imei2, serial=serial, public_key=public_key, register_token=register_token) - dongleauth = json.loads(resp.text) - dongle_id = dongleauth["dongle_id"] - params.put("DongleId", dongle_id) + + if resp.status_code == 402: + cloudlog.info("Uknown serial number while trying to register device") + dongle_id = None + else: + dongleauth = json.loads(resp.text) + dongle_id = dongleauth["dongle_id"] + params.put("DongleId", dongle_id) break except Exception: cloudlog.exception("failed to authenticate")