MCPcopy Index your code
hub / github.com/bugy/script-server / UserFileStorage

Class UserFileStorage

src/files/user_file_storage.py:15–75  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

13
14
15class UserFileStorage:
16 def __init__(self, secret) -> None:
17 self.secret = secret
18 self._autoclean_stopped = False
19
20 def _get_user_download_folder(self, audit_name):
21 user_hashed = _hash_user(audit_name, self.secret)
22 if len(user_hashed) > 12:
23 user_hashed = user_hashed[:12]
24 return user_hashed
25
26 def allowed_to_access(self, relative_file_path, user_id):
27 user_folder = self._get_user_download_folder(user_id)
28
29 path_chunks = file_utils.split_all(relative_file_path)
30
31 return path_chunks[0] == user_folder
32
33 def prepare_new_folder(self, audit_name, parent_path):
34 millis = get_current_millis()
35 user_folder_name = self._get_user_download_folder(audit_name)
36
37 temp_path = os.path.join(parent_path, user_folder_name, str(millis))
38
39 file_utils.prepare_folder(temp_path)
40
41 return temp_path
42
43 def start_autoclean(self, parent_folder, lifetime_ms):
44 period_sec = lifetime_ms / 1000 / 25
45
46 def clean_results():
47 if self._autoclean_stopped:
48 return
49
50 if os.path.exists(parent_folder):
51 for user_folder in os.listdir(parent_folder):
52 for timed_folder in os.listdir(os.path.join(parent_folder, user_folder)):
53 if not re.match('\d+', timed_folder):
54 continue
55
56 millis = int(timed_folder)
57 folder_date = ms_to_datetime(millis)
58 now = date_utils.now()
59
60 if (now - folder_date) > datetime.timedelta(milliseconds=lifetime_ms):
61 folder_path = os.path.join(parent_folder, user_folder, timed_folder)
62
63 LOGGER.info('Cleaning old folder: ' + folder_path)
64 shutil.rmtree(folder_path)
65
66 timer = threading.Timer(period_sec, clean_results)
67 timer.setDaemon(True)
68 timer.start()
69
70 timer = threading.Timer(period_sec, clean_results)
71 timer.setDaemon(True)
72 timer.start()

Callers 6

mainFunction · 0.90
setUpMethod · 0.90
setUpMethod · 0.90
setUpMethod · 0.90
setUpMethod · 0.90
start_serverMethod · 0.90

Calls

no outgoing calls

Tested by 5

setUpMethod · 0.72
setUpMethod · 0.72
setUpMethod · 0.72
setUpMethod · 0.72
start_serverMethod · 0.72