111 lines
2.9 KiB
Python
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)
|