#!/usr/bin/env python3 import re from os import listdir from os.path import isdir from audit.system.plugins.localaccount import profile, password_quality class LocalAccount: def __init__(self, arguments): self._profile = profile() self._passwd_quality = password_quality() self._reports = dict() # Create the report self._constructReports() def runAudit(self): print("Running test for Local account") self._analyzingProfile() self._analyzingPasswordQuality() def getReports(self) -> dict: return self._reports def _analyzingProfile(self): # Check if the file exist path = self._profile['filename'] try: with open(path, 'rb') as fdata: self._parseFile(fdata) except FileNotFoundError: self._reports['localaccount']['profile']['error'] = \ f'File {path} not found' def _parseFile(self, fdata): data = fdata.read() lines = data.splitlines() lineFound = None found = False for line in lines: line = line.decode('utf-8') grFlag = re.search(f"^{self._profile['flag']}", line) if grFlag: found = True lineFound = line if found: self._reports['profile']['vulnerabilities'] = dict() self._reports['profile']['vulnerabilities'][self._profile['flag']] = dict() self._reports['profile']['vulnerabilities'][self._profile['flag']]["result"] = "success" self._reports['profile']['vulnerabilities'][self._profile['flag']]['level'] = self._profile['level'] self._reports['profile']['vulnerabilities'][self._profile['flag']]["description"] = self._profile['description'] self._reports['profile']['vulnerabilities'][self._profile['flag']]["flagFound"] = lineFound else: self._reports['profile']['vulnerabilities'] = dict() self._reports['profile']['vulnerabilities'][self._profile['flag']] = dict() self._reports['profile']['vulnerabilities'][self._profile['flag']]["result"] = "failed" self._reports['profile']['vulnerabilities'][self._profile['flag']]['level'] = self._profile['level'] self._reports['profile']['vulnerabilities'][self._profile["flag"]]["recommand_value"] = self._profile["value"] self._reports['profile']['vulnerabilities'][self._profile['flag']]["description"] = self._profile['description'] self._reports['profile']['vulnerabilities'][self._profile['flag']]["flag"] = self._profile['flag'] def _analyzingPasswordQuality(self): pass def _constructReports(self): """ Construct dictionary for result of the tests Each entry contains: Key: - filename: filename of the test - line: line of the test - parse: Display the line where the vulnerabilites has been found - description: description of the vulnerability - level: high, medium or low """ self._reports['profile'] = dict() self._reports['profile']['filename'] = self._profile['filename'] self._reports['pwd_quality'] = dict()