mirror of
https://github.com/azaion/annotations.git
synced 2026-04-22 22:26:31 +00:00
switch from hardware object to string
and replace mac address to disk serial number for more predictable hash key
This commit is contained in:
@@ -8,7 +8,7 @@ cimport constants
|
|||||||
import yaml
|
import yaml
|
||||||
|
|
||||||
from cdn_manager cimport CDNManager, CDNCredentials
|
from cdn_manager cimport CDNManager, CDNCredentials
|
||||||
from hardware_service cimport HardwareService, HardwareInfo
|
from hardware_service cimport HardwareService
|
||||||
from security cimport Security
|
from security cimport Security
|
||||||
from user cimport User, RoleEnum
|
from user cimport User, RoleEnum
|
||||||
|
|
||||||
@@ -85,7 +85,7 @@ cdef class ApiClient:
|
|||||||
|
|
||||||
cdef load_bytes(self, str filename, str folder):
|
cdef load_bytes(self, str filename, str folder):
|
||||||
hardware_service = HardwareService()
|
hardware_service = HardwareService()
|
||||||
cdef HardwareInfo hardware = hardware_service.get_hardware_info()
|
cdef str hardware = hardware_service.get_hardware_info()
|
||||||
|
|
||||||
if self.token is None:
|
if self.token is None:
|
||||||
self.login()
|
self.login()
|
||||||
@@ -98,7 +98,7 @@ cdef class ApiClient:
|
|||||||
payload = json.dumps(
|
payload = json.dumps(
|
||||||
{
|
{
|
||||||
"password": self.credentials.password,
|
"password": self.credentials.password,
|
||||||
"hardware": hardware.to_json_object(),
|
"hardware": hardware,
|
||||||
"fileName": filename
|
"fileName": filename
|
||||||
}, indent=4)
|
}, indent=4)
|
||||||
response = requests.post(url, data=payload, headers=headers, stream=True)
|
response = requests.post(url, data=payload, headers=headers, stream=True)
|
||||||
|
|||||||
@@ -30,7 +30,6 @@ venv\Scripts\pyinstaller --name=azaion-inference ^
|
|||||||
--collect-all pycuda ^
|
--collect-all pycuda ^
|
||||||
--collect-all pynvml ^
|
--collect-all pynvml ^
|
||||||
--collect-all boto3 ^
|
--collect-all boto3 ^
|
||||||
--collect-all re ^
|
|
||||||
--collect-all jwt ^
|
--collect-all jwt ^
|
||||||
--hidden-import constants ^
|
--hidden-import constants ^
|
||||||
--hidden-import annotation ^
|
--hidden-import annotation ^
|
||||||
|
|||||||
@@ -1,11 +1,6 @@
|
|||||||
cdef class HardwareInfo:
|
|
||||||
cdef str cpu, gpu, memory, mac_address
|
|
||||||
cdef to_json_object(self)
|
|
||||||
|
|
||||||
cdef class HardwareService:
|
cdef class HardwareService:
|
||||||
cdef bint is_windows
|
cdef bint is_windows
|
||||||
cdef get_mac_address(self, interface=*)
|
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
cdef has_nvidia_gpu()
|
cdef has_nvidia_gpu()
|
||||||
cdef HardwareInfo get_hardware_info(self)
|
cdef str get_hardware_info(self)
|
||||||
@@ -1,25 +1,6 @@
|
|||||||
import re
|
|
||||||
import subprocess
|
import subprocess
|
||||||
import psutil
|
|
||||||
import pynvml
|
import pynvml
|
||||||
|
|
||||||
cdef class HardwareInfo:
|
|
||||||
def __init__(self, str cpu, str gpu, str memory, str mac_address):
|
|
||||||
self.cpu = cpu
|
|
||||||
self.gpu = gpu
|
|
||||||
self.memory = memory
|
|
||||||
self.mac_address = mac_address
|
|
||||||
|
|
||||||
cdef to_json_object(self):
|
|
||||||
return {
|
|
||||||
"CPU": self.cpu,
|
|
||||||
"GPU": self.gpu,
|
|
||||||
"MacAddress": self.mac_address,
|
|
||||||
"Memory": self.memory
|
|
||||||
}
|
|
||||||
|
|
||||||
def __str__(self):
|
|
||||||
return f'CPU: {self.cpu}. GPU: {self.gpu}. Memory: {self.memory}. MAC Address: {self.mac_address}'
|
|
||||||
|
|
||||||
cdef class HardwareService:
|
cdef class HardwareService:
|
||||||
"""Handles hardware information retrieval and hash generation."""
|
"""Handles hardware information retrieval and hash generation."""
|
||||||
@@ -35,15 +16,6 @@ cdef class HardwareService:
|
|||||||
print('Error during os type checking')
|
print('Error during os type checking')
|
||||||
self.is_windows = False
|
self.is_windows = False
|
||||||
|
|
||||||
cdef get_mac_address(self, interface="Ethernet"):
|
|
||||||
addresses = psutil.net_if_addrs()
|
|
||||||
for interface_name, interface_info in addresses.items():
|
|
||||||
if interface_name == interface:
|
|
||||||
for addr in interface_info:
|
|
||||||
if addr.family == psutil.AF_LINK:
|
|
||||||
return addr.address.replace('-', '')
|
|
||||||
return None
|
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
cdef has_nvidia_gpu():
|
cdef has_nvidia_gpu():
|
||||||
try:
|
try:
|
||||||
@@ -67,13 +39,14 @@ cdef class HardwareService:
|
|||||||
print('Failed to shutdown pynvml cause probably no NVidia GPU')
|
print('Failed to shutdown pynvml cause probably no NVidia GPU')
|
||||||
pass
|
pass
|
||||||
|
|
||||||
cdef HardwareInfo get_hardware_info(self):
|
cdef str get_hardware_info(self):
|
||||||
if self.is_windows:
|
if self.is_windows:
|
||||||
os_command = (
|
os_command = (
|
||||||
"powershell -Command \""
|
"powershell -Command \""
|
||||||
"Get-CimInstance -ClassName Win32_Processor | Select-Object -ExpandProperty Name | Write-Output; "
|
"Get-CimInstance -ClassName Win32_Processor | Select-Object -ExpandProperty Name | Write-Output; "
|
||||||
"Get-CimInstance -ClassName Win32_VideoController | Select-Object -ExpandProperty Name | Write-Output; "
|
"Get-CimInstance -ClassName Win32_VideoController | Select-Object -ExpandProperty Name | Write-Output; "
|
||||||
"Get-CimInstance -ClassName Win32_OperatingSystem | Select-Object -ExpandProperty TotalVisibleMemorySize | Write-Output"
|
"Get-CimInstance -ClassName Win32_OperatingSystem | Select-Object -ExpandProperty TotalVisibleMemorySize | Write-Output; "
|
||||||
|
"(Get-Disk | Where-Object {$_.IsSystem -eq $true}).SerialNumber"
|
||||||
"\""
|
"\""
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
@@ -81,6 +54,7 @@ cdef class HardwareService:
|
|||||||
"/bin/bash -c \" lscpu | grep 'Model name:' | cut -d':' -f2 && "
|
"/bin/bash -c \" lscpu | grep 'Model name:' | cut -d':' -f2 && "
|
||||||
"lspci | grep VGA | cut -d':' -f3 && "
|
"lspci | grep VGA | cut -d':' -f3 && "
|
||||||
"free -g | grep Mem: | awk '{print $2}' && \""
|
"free -g | grep Mem: | awk '{print $2}' && \""
|
||||||
|
"udevadm info --query=property --name=\"/dev/$(lsblk -no pkname \"$(findmnt -n -o SOURCE --target /)\")\" | grep -E 'ID_SERIAL=|ID_SERIAL_SHORT=' | cut -d'=' -f2- | head -n1 && "
|
||||||
)
|
)
|
||||||
# in case of subprocess error do:
|
# in case of subprocess error do:
|
||||||
# cdef bytes os_command_bytes = os_command.encode('utf-8')
|
# cdef bytes os_command_bytes = os_command.encode('utf-8')
|
||||||
@@ -90,7 +64,8 @@ cdef class HardwareService:
|
|||||||
|
|
||||||
cdef str cpu = lines[0].replace("Name=", "").replace(" ", " ")
|
cdef str cpu = lines[0].replace("Name=", "").replace(" ", " ")
|
||||||
cdef str gpu = lines[1].replace("Name=", "").replace(" ", " ")
|
cdef str gpu = lines[1].replace("Name=", "").replace(" ", " ")
|
||||||
cdef str memory = lines[2].replace("TotalVisibleMemorySize=", "").replace(" ", " ")
|
# could be multiple gpus
|
||||||
cdef str mac_address = self.get_mac_address()
|
cdef str memory = lines[-2].replace("TotalVisibleMemorySize=", "").replace(" ", " ")
|
||||||
|
cdef str drive_serial = lines[-1]
|
||||||
|
|
||||||
return HardwareInfo(cpu, gpu, memory, mac_address)
|
return f'CPU: {cpu}. GPU: {gpu}. Memory: {memory}. Drive Serial: {drive_serial}'
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
from credentials cimport Credentials
|
from credentials cimport Credentials
|
||||||
from hardware_service cimport HardwareInfo
|
|
||||||
|
|
||||||
cdef class Security:
|
cdef class Security:
|
||||||
@staticmethod
|
@staticmethod
|
||||||
@@ -9,7 +8,7 @@ cdef class Security:
|
|||||||
cdef decrypt_to(input_bytes, key)
|
cdef decrypt_to(input_bytes, key)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
cdef get_hw_hash(HardwareInfo hardware)
|
cdef get_hw_hash(str hardware)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
cdef get_api_encryption_key(Credentials credentials, str hardware_hash)
|
cdef get_api_encryption_key(Credentials credentials, str hardware_hash)
|
||||||
|
|||||||
@@ -3,8 +3,6 @@ import hashlib
|
|||||||
import os
|
import os
|
||||||
from hashlib import sha384
|
from hashlib import sha384
|
||||||
from credentials cimport Credentials
|
from credentials cimport Credentials
|
||||||
from hardware_service cimport HardwareInfo
|
|
||||||
|
|
||||||
from cryptography.hazmat.backends import default_backend
|
from cryptography.hazmat.backends import default_backend
|
||||||
from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
|
from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
|
||||||
from cryptography.hazmat.primitives import padding
|
from cryptography.hazmat.primitives import padding
|
||||||
@@ -48,8 +46,8 @@ cdef class Security:
|
|||||||
return bytes(plaintext_bytes)
|
return bytes(plaintext_bytes)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
cdef get_hw_hash(HardwareInfo hardware):
|
cdef get_hw_hash(str hardware):
|
||||||
cdef str key = f'Azaion_{hardware.mac_address}_{hardware.cpu}_{hardware.gpu}'
|
cdef str key = f'Azaion_{hardware}_%$$$)0_'
|
||||||
return Security.calc_hash(key)
|
return Security.calc_hash(key)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
|
|||||||
@@ -202,7 +202,7 @@ class Api:
|
|||||||
payload = json.dumps(
|
payload = json.dumps(
|
||||||
{
|
{
|
||||||
"password": self.credentials.password,
|
"password": self.credentials.password,
|
||||||
"hardware": hardware.to_json_object(),
|
"hardware": hardware,
|
||||||
"fileName": filename
|
"fileName": filename
|
||||||
}, indent=4)
|
}, indent=4)
|
||||||
response = requests.post(url, data=payload, headers=headers, stream=True, timeout=20)
|
response = requests.post(url, data=payload, headers=headers, stream=True, timeout=20)
|
||||||
|
|||||||
Reference in New Issue
Block a user