105 lines
2.8 KiB
Python
105 lines
2.8 KiB
Python
from src.args import args
|
|
import src.api as api
|
|
import src.pki as pki
|
|
import src.utils as utils
|
|
import os
|
|
import time
|
|
|
|
# TODO : turn off all relays
|
|
# TODO : intialize GPIO
|
|
|
|
print("Check storage")
|
|
if not os.path.isdir(args.storage):
|
|
print("Create storage")
|
|
os.makedirs(args.storage, exist_ok=True)
|
|
|
|
|
|
print("Check secure origin...")
|
|
if not os.path.isfile(args.secure_origin_path):
|
|
origin = api.get_secure_origin()
|
|
with open(args.secure_origin_path, "w") as f:
|
|
f.write(origin)
|
|
|
|
with open(args.secure_origin_path, "r") as f:
|
|
args.secure_origin = f.read()
|
|
print(f"Secure origin = {args.secure_origin}")
|
|
|
|
|
|
print("Check system root CA")
|
|
if not os.path.isfile(args.root_ca_path):
|
|
origin = api.get_root_ca()
|
|
with open(args.root_ca_path, "w") as f:
|
|
f.write(origin)
|
|
|
|
print("Check device ID")
|
|
if not os.path.isfile(args.dev_id_path):
|
|
print("Generate device id...")
|
|
with open(args.dev_id_path, "w") as f:
|
|
f.write(f"PyDev {utils.rand_str(10)}")
|
|
|
|
with open(args.dev_id_path, "r") as f:
|
|
args.dev_id = f.read()
|
|
|
|
print("Check private key")
|
|
if not os.path.isfile(args.dev_priv_key_path):
|
|
print("Generate private key...")
|
|
key = pki.gen_priv_key()
|
|
with open(args.dev_priv_key_path, "w") as f:
|
|
f.write(key)
|
|
|
|
with open(args.dev_priv_key_path, "r") as f:
|
|
args.priv_key = f.read()
|
|
|
|
|
|
print("Check CSR")
|
|
if not os.path.isfile(args.dev_csr_path):
|
|
print("Generate CSR...")
|
|
with open(args.dev_priv_key_path, "r") as f:
|
|
priv_key = "".join(f.readlines())
|
|
csr = pki.gen_csr(priv_key=priv_key, cn=args.dev_id)
|
|
with open(args.dev_csr_path, "w") as f:
|
|
f.write(csr)
|
|
|
|
print("Check device enrollment...")
|
|
status = api.device_enrollment_status()
|
|
|
|
if status != "Validated":
|
|
if os.path.isfile(args.dev_crt_path):
|
|
print("Delete invalid certificate")
|
|
os.unlink(args.dev_crt_path)
|
|
|
|
if status == "Unknown":
|
|
print("Device is unknown on the system, need to submit a CSR...")
|
|
with open(args.dev_csr_path, "r") as f:
|
|
csr = "".join(f.read())
|
|
print("Enrolling device...")
|
|
api.enroll_device(csr)
|
|
print("Done. Please accept the device on central system web UI")
|
|
exit(0)
|
|
|
|
if status == "Pending":
|
|
print(
|
|
"Device is enrolled, but not validated yet. Please accept the device on central system web UI"
|
|
)
|
|
exit(0)
|
|
|
|
print("Device is successfully enrolled!")
|
|
|
|
print("Check device certificate")
|
|
if not os.path.isfile(args.dev_crt_path):
|
|
print("Retrieve certificate...")
|
|
cert = api.device_certificate()
|
|
with open(args.dev_crt_path, "w") as f:
|
|
f.write(cert)
|
|
|
|
api.report_log("Info", "Starting program main loop...", args.dev_id, args.priv_key)
|
|
|
|
print("Ready to operate!.")
|
|
while True:
|
|
|
|
# TODO : implement this loop more properly
|
|
res = api.sync_device(args.dev_id, args.priv_key)
|
|
print(res)
|
|
|
|
time.sleep(5)
|