Files
Final/storage.py

111 lines
2.9 KiB
Python

import json
import os
import hashlib
class UserProfile:
def __init__(self, login, password_hash="", repositories=None):
self.login = login
self.password_hash = password_hash
self.repositories = repositories or []
def to_dict(self):
return {
"password": self.password_hash,
"repositories": self.repositories,
}
class StorageManager:
def __init__(self, data_file="users_data.json"):
self.data_file = data_file
def _load(self):
if not os.path.exists(self.data_file):
return {"users": {}}
try:
with open(self.data_file, "r", encoding="utf-8") as f:
return json.load(f)
except Exception:
return {"users": {}}
def _save(self, data):
with open(self.data_file, "w", encoding="utf-8") as f:
json.dump(data, f, ensure_ascii=False, indent=2)
def _hash_password(self, password):
return hashlib.sha256(password.encode("utf-8")).hexdigest()
def register_user(self, login, password):
data = self._load()
if login in data["users"]:
return False, "Такой пользователь уже существует"
user = UserProfile(
login=login,
password_hash=self._hash_password(password),
repositories=[],
)
data["users"][login] = user.to_dict()
self._save(data)
return True, "Профиль создан"
def check_user(self, login, password):
data = self._load()
user = data["users"].get(login)
if not user:
return False
return user.get("password") == self._hash_password(password)
def get_repositories(self, login):
data = self._load()
return data["users"].get(login, {}).get("repositories", [])
def add_repository(self, login, link):
data = self._load()
repos = data["users"].setdefault(
login,
{"password": "", "repositories": []},
).setdefault("repositories", [])
if link in repos:
return False
repos.append(link)
self._save(data)
return True
def delete_repository(self, login, link):
data = self._load()
repos = data["users"].get(login, {}).get("repositories", [])
if link in repos:
repos.remove(link)
self._save(data)
return True
return False
_default_storage = StorageManager()
def register_user(login, password):
return _default_storage.register_user(login, password)
def check_user(login, password):
return _default_storage.check_user(login, password)
def get_repositories(login):
return _default_storage.get_repositories(login)
def add_repository(login, link):
return _default_storage.add_repository(login, link)
def delete_repository(login, link):
return _default_storage.delete_repository(login, link)