handle unregistered devices (#20728)

* handle unregistered devices

* cleanup

* no uploader or athena

* clean up
old-commit-hash: 1786d04239
commatwo_master
Adeeb Shihadeh 4 years ago committed by GitHub
parent 59fb5c6a72
commit 3e4eb2e343
  1. 2
      selfdrive/hardware/eon/hardware.py
  2. 5
      selfdrive/loggerd/logger.cc
  3. 5
      selfdrive/loggerd/tests/test_loggerd.py
  4. 27
      selfdrive/manager/manager.py
  5. 31
      selfdrive/registration.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

@ -91,10 +91,6 @@ kj::Array<capnp::word> 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<capnp::word> 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<std::string, std::string> params_map;
params.read_db_all(&params_map);

@ -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"):

@ -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'])

@ -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")

Loading…
Cancel
Save