Skip to content

Commit 3291184

Browse files
feat: Admin-panel strategy and logrotate (#2)
1 parent 29d11a7 commit 3291184

13 files changed

Lines changed: 145 additions & 32 deletions

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
.config.json
12
__pycache__/
23
.pytest_cache/
34
.tox/

core/observers/observer/hss_observer.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
"""
22
The observer for Home Security System.
33
"""
4-
import logging
4+
from core.utils.logger import get_logger
55
from core.observers.observer.base_observer import BaseObserver
66
from core.observers.subject.base_subject import BaseSubject
77
from core.observers.subject.wifi_subject import WiFiSubject
@@ -11,7 +11,7 @@
1111
from core.strategies.notifier.base_notifier_strategy import BaseNotifierStrategy
1212

1313
# Add logging support.
14-
logger = logging.getLogger(__name__)
14+
logger = get_logger(__name__)
1515

1616

1717
class HomeSecuritySystemObserver(BaseObserver):

core/observers/subject/eye_subject.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,14 @@
1111

1212
import cv2
1313

14+
from core.utils.logger import get_logger
1415
from core.utils.datatypes import EyeStates, EyeStrategyResult
1516
from core.utils.fileio_adaptor import upload_to_fileio
1617
from core.observers.subject.base_subject import BaseSubject
1718
from core.strategies.eye.base_eye_strategy import BaseEyeStrategy
1819

1920
# Add logging support.
20-
logger = logging.getLogger(__name__)
21+
logger = get_logger(__name__)
2122

2223

2324
class EyeSubject(BaseSubject):
@@ -26,7 +27,7 @@ class EyeSubject(BaseSubject):
2627
Concretes a subject for Eye/Camera features.
2728
"""
2829
DEFAULT_IMAGE_LOCATIONS: str = "~/.home-security-system/images"
29-
DEFAULT_SLEEP_INTERVAL = 10
30+
DEFAULT_SLEEP_INTERVAL = 30
3031
SLEEP_INTERVAL_DETECTED = 5
3132

3233
def __init__(self, image_path: str = DEFAULT_IMAGE_LOCATIONS):

core/observers/subject/wifi_subject.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
This class inherits from IBaseSubject.
33
Concretes a subject WiFi features.
44
"""
5-
import logging
5+
from core.utils.logger import get_logger
66
from threading import Thread, Lock
77
from time import sleep
88
from typing import Optional
@@ -12,7 +12,7 @@
1212
from core.strategies.wifi.base_wifi_strategy import BaseWiFiStrategy
1313

1414
# Add logging support.
15-
logger = logging.getLogger(__name__)
15+
logger = get_logger(__name__)
1616

1717

1818
class WiFiSubject(BaseSubject):

core/strategies/eye/picamera_strategy.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,16 @@
11
"""
22
The Camera strategy for eye strategies.
33
"""
4-
import logging
4+
from core.utils.logger import get_logger
55

6-
import cv2
76
import numpy
87
from picamera2 import Picamera2
98

109
from core.strategies.detectors.base_detector_strategy import BaseDetectorStrategy
1110
from core.strategies.eye.base_eye_strategy import BaseEyeStrategy
1211

1312
# Add logging support.
14-
logger = logging.getLogger(__name__)
13+
logger = get_logger(__name__)
1514

1615

1716
class PiCameraStrategy(BaseEyeStrategy):

core/strategies/eye/usbcamera_strategy.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
"""
22
The Camera strategy for eye strategies.
33
"""
4-
import logging
4+
from core.utils.logger import get_logger
55

66
import cv2
77
import numpy
@@ -10,7 +10,7 @@
1010
from core.strategies.eye.base_eye_strategy import BaseEyeStrategy
1111

1212
# Add logging support.
13-
logger = logging.getLogger(__name__)
13+
logger = get_logger(__name__)
1414

1515

1616
class UsbCameraStrategy(BaseEyeStrategy):

core/strategies/notifier/whatsapp_strategy.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
"""
22
This module contains the Whatsapp notifier strategy.
33
"""
4-
import logging
4+
from core.utils.logger import get_logger
55

66
import requests
77

88
from core.utils.datatypes import WhatsappReciever
99
from core.strategies.notifier.base_notifier_strategy import BaseNotifierStrategy
1010

1111
# Get the logger instance.
12-
logger = logging.getLogger(__name__)
12+
logger = get_logger(__name__)
1313

1414

1515
class WhatsappStrategy(BaseNotifierStrategy):
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
"""
2+
The strategy which searches for MAC addresses using Admin Panel.
3+
"""
4+
from core.utils.logger import get_logger
5+
from bs4 import BeautifulSoup
6+
import requests
7+
from typing import Any
8+
from core.strategies.wifi.base_wifi_strategy import BaseWiFiStrategy
9+
from core.utils.datatypes import WiFiStrategyResult, ConnectedDeviceResult
10+
11+
# Add logging support.
12+
logger = get_logger(__name__)
13+
14+
15+
class AdminPanelStrategy(BaseWiFiStrategy):
16+
"""
17+
The strategy which searches for MAC addresses using Admin Panel.
18+
"""
19+
20+
def __init__(self, login_data: dict[str, Any]) -> None:
21+
"""Constructor for AdminPanelStrategy."""
22+
super().__init__()
23+
self._login_data: dict[str, Any] = login_data
24+
25+
def check_protectors(self) -> WiFiStrategyResult:
26+
"""This method checks if there are any protectors around."""
27+
for protector in self.protectors:
28+
# Check if the protector is connected to the network.
29+
if protector.address in [device.address for device in self._get_all_connected()]:
30+
logger.debug("Protector found: " + protector.name)
31+
return WiFiStrategyResult(protector, True)
32+
logger.debug("No protectors found.")
33+
return WiFiStrategyResult(None, False)
34+
35+
# Internal methods
36+
def _get_all_connected(self) -> list[ConnectedDeviceResult]:
37+
"""This method returns a list of addresses of the clients connected to the network."""
38+
# Create a session to store cookies.
39+
session = requests.Session()
40+
session.get("http://192.168.1.95/login_security.html")
41+
session.post(
42+
"http://192.168.1.95/Forms/login_security_1",
43+
headers={
44+
"Content-Type": "application/x-www-form-urlencoded",
45+
"Referer": "http://192.168.1.95/login_security.html",
46+
},
47+
data=self._login_data
48+
)
49+
50+
# Get the response for the page with MAC address list.
51+
response = session.get("http://192.168.1.95/status/status_deviceinfo.htm")
52+
53+
# Parse the response.
54+
soup = BeautifulSoup(response.text, "html.parser")
55+
tabdata = soup.find_all("td", class_="tabdata")
56+
57+
# Get the MAC addresses.
58+
mac_addrs: list[str] = [
59+
element.text
60+
for element in tabdata
61+
if len(element.text) == 17
62+
]
63+
session.close()
64+
65+
logger.debug("Connected devices: " + str(mac_addrs))
66+
return [ConnectedDeviceResult(mac_addr.upper()) for mac_addr in mac_addrs]

core/strategies/wifi/ipaddress_strategy.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
"""
22
The strategy which searches for IP addresses.
33
"""
4-
import logging
4+
from core.utils.logger import get_logger
55
from core.utils.program_launcher import run_program, PingCommands
66
from core.strategies.wifi.base_wifi_strategy import BaseWiFiStrategy
77
from core.utils.datatypes import WiFiStrategyResult
88

99
# Add logging support.
10-
logger = logging.getLogger(__name__)
10+
logger = get_logger(__name__)
1111

1212

1313
class IpAddressStrategy(BaseWiFiStrategy):

core/strategies/wifi/macaddress_strategy.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
"""
22
The strategy which searches for MAC addresses.
33
"""
4-
import logging
4+
from core.utils.logger import get_logger
55

66
from core.utils.program_launcher import run_program, ArpScanCommands
77
from core.strategies.wifi.base_wifi_strategy import BaseWiFiStrategy
88
from core.utils.datatypes import WiFiStrategyResult, ConnectedDeviceResult
99

1010
# Add logging support.
11-
logger = logging.getLogger(__name__)
11+
logger = get_logger(__name__)
1212

1313

1414
class MacAddressStrategy(BaseWiFiStrategy):

0 commit comments

Comments
 (0)