{"id":27920310,"url":"https://github.com/vnikolaenko-dev/privatefilesharing","last_synced_at":"2026-04-24T20:36:09.265Z","repository":{"id":291616844,"uuid":"978200073","full_name":"vnikolaenko-dev/PrivateFileSharing","owner":"vnikolaenko-dev","description":"Private File Sharing — это мощное и безопасное веб-приложение для управления файлами с авторизацией и гибким контролем доступа.","archived":false,"fork":false,"pushed_at":"2025-05-05T16:39:19.000Z","size":85,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-05-06T20:58:22.957Z","etag":null,"topics":["spring-boot","spring-data","spring-security"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/vnikolaenko-dev.png","metadata":{"files":{"readme":"README.MD","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-05-05T16:10:41.000Z","updated_at":"2025-05-05T16:39:22.000Z","dependencies_parsed_at":"2025-05-05T17:46:25.897Z","dependency_job_id":"c5d24172-4e5c-4b55-845f-9eec9ca392b5","html_url":"https://github.com/vnikolaenko-dev/PrivateFileSharing","commit_stats":null,"previous_names":["vnikolaenko-dev/privatefilesharing"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/vnikolaenko-dev/PrivateFileSharing","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vnikolaenko-dev%2FPrivateFileSharing","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vnikolaenko-dev%2FPrivateFileSharing/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vnikolaenko-dev%2FPrivateFileSharing/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vnikolaenko-dev%2FPrivateFileSharing/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/vnikolaenko-dev","download_url":"https://codeload.github.com/vnikolaenko-dev/PrivateFileSharing/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vnikolaenko-dev%2FPrivateFileSharing/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":259582943,"owners_count":22880116,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["spring-boot","spring-data","spring-security"],"created_at":"2025-05-06T20:58:22.129Z","updated_at":"2026-04-24T20:36:09.259Z","avatar_url":"https://github.com/vnikolaenko-dev.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Private File Sharing\n\n\n![Private File Sharing](https://github.com/vnikolaenko-dev/PrivateFileSharing/blob/main/screenshots/files.png)\n\nНадежная, безопасная и масштабируемая платформа для приватного обмена файлами, разработанная для организаций, которым требуется детализированный контроль доступа, управление пользователями и бесшовные уведомления. Построена на основе микросервисной архитектуры для обеспечения высокой доступности, легкого масштабирования и удобной поддержки кода. Будь то работа с конфиденциальными документами или совместными файлами, приложение предоставляет ролевой доступ, аутентификацию через JWT и событийно-ориентированные уведомления.\n\n## Основные возможности\n\n- **Управление пользователями**: Регистрация, аутентификация и управление пользователями с ролями (admin, pro, default). Администраторы могут создавать, обновлять или удалять пользователей.\n- **Управление файлами**: Загрузка, получение, изменение уровня доступа и удаление файлов (поддержка PDF, Word и т.д.). Доступ регулируется уровнями (default, pro, admin).\n- **Безопасная аутентификация**: Логин на основе JWT с хешированием паролей и ролевым управлением доступом (RBAC).\n- **Уведомления**: Уведомления пользователей в реальном времени через Kafka для событий, таких как передача файлов или обновления.\n- **API-шлюз**: Централизованная точка входа для всех запросов, обеспечивающая маршрутизацию, CORS и балансировку нагрузки.\n- **Масштабируемость**: Микросервисная архитектура позволяет независимо масштабировать сервисы для пользователей и файлов.\n\n## Технологический стек\n\nПроект использует современные технологии промышленного уровня для обеспечения производительности, безопасности и удобства для разработчиков. Основной акцент сделан на экосистему Java для надежности бэкенда и асинхронный обмен сообщениями для слабосвязанных сервисов.\n\n### Бэкенд\n\u003ca href=\"https://www.java.com\" target=\"_blank\"\u003e\u003cimg src=\"https://img.shields.io/badge/Java-17%2B-ED8B00?logo=java\" alt=\"Java\"\u003e\u003c/a\u003e\n\u003ca href=\"https://spring.io/projects/spring-boot\" target=\"_blank\"\u003e\u003cimg src=\"https://img.shields.io/badge/Spring%20Boot-3.x-6DB33F?logo=spring-boot\" alt=\"Spring Boot\"\u003e\u003c/a\u003e\n\u003ca href=\"https://spring.io/projects/spring-security\" target=\"_blank\"\u003e\u003cimg src=\"https://img.shields.io/badge/Spring%20Security-Latest-6DB33F?logo=spring\" alt=\"Spring Security\"\u003e\u003c/a\u003e\n\u003ca href=\"https://spring.io/projects/spring-data-jpa\" target=\"_blank\"\u003e\u003cimg src=\"https://img.shields.io/badge/Spring%20Data%20JPA-Latest-6DB33F?logo=spring\" alt=\"Spring Data JPA\"\u003e\u003c/a\u003e\n\u003ca href=\"https://spring.io/projects/spring-cloud-gateway\" target=\"_blank\"\u003e\u003cimg src=\"https://img.shields.io/badge/Spring%20Cloud%20Gateway-Latest-6DB33F?logo=spring\" alt=\"Spring Cloud Gateway\"\u003e\u003c/a\u003e\n\u003ca href=\"https://spring.io/projects/spring-kafka\" target=\"_blank\"\u003e\u003cimg src=\"https://img.shields.io/badge/Spring%20Kafka-Latest-6DB33F?logo=spring\" alt=\"Spring Kafka\"\u003e\u003c/a\u003e\n\u003ca href=\"https://kafka.apache.org\" target=\"_blank\"\u003e\u003cimg src=\"https://img.shields.io/badge/Apache%20Kafka-Latest-231F20?logo=apache-kafka\" alt=\"Apache Kafka\"\u003e\u003c/a\u003e\n\u003ca href=\"https://restfulapi.net\" target=\"_blank\"\u003e\u003cimg src=\"https://img.shields.io/badge/RESTful%20API-Latest-005571?logo=rest\" alt=\"RESTful API\"\u003e\u003c/a\u003e\n\n### База данных\n\u003ca href=\"https://www.postgresql.org\" target=\"_blank\"\u003e\u003cimg src=\"https://img.shields.io/badge/PostgreSQL-Latest-336791?logo=postgresql\" alt=\"PostgreSQL\"\u003e\u003c/a\u003e\n\n### Фронтенд\n\u003ca href=\"https://html.spec.whatwg.org\" target=\"_blank\"\u003e\u003cimg src=\"https://img.shields.io/badge/HTML5-Latest-E34F26?logo=html5\" alt=\"HTML5\"\u003e\u003c/a\u003e\n\u003ca href=\"https://www.w3.org/Style/CSS\" target=\"_blank\"\u003e\u003cimg src=\"https://img.shields.io/badge/CSS3-Latest-1572B6?logo=css3\" alt=\"CSS3\"\u003e\u003c/a\u003e\n\u003ca href=\"https://tailwindcss.com\" target=\"_blank\"\u003e\u003cimg src=\"https://img.shields.io/badge/Tailwind%20CSS-Latest-38B2AC?logo=tailwind-css\" alt=\"Tailwind CSS\"\u003e\u003c/a\u003e\n\u003ca href=\"https://developer.mozilla.org/docs/Web/JavaScript\" target=\"_blank\"\u003e\u003cimg src=\"https://img.shields.io/badge/JavaScript-Vanilla-F7DF1E?logo=javascript\" alt=\"JavaScript\"\u003e\u003c/a\u003e\n\n### Сборка и деплой\n\u003ca href=\"https://maven.apache.org\" target=\"_blank\"\u003e\u003cimg src=\"https://img.shields.io/badge/Maven-Latest-C71A36?logo=apache-maven\" alt=\"Maven\"\u003e\u003c/a\u003e\n\u003ca href=\"https://www.docker.com\" target=\"_blank\"\u003e\u003cimg src=\"https://img.shields.io/badge/Docker-Latest-2496ED?logo=docker\" alt=\"Docker\"\u003e\u003c/a\u003e\n\u003ca href=\"https://projectlombok.org\" target=\"_blank\"\u003e\u003cimg src=\"https://img.shields.io/badge/Lombok-Latest-FF6F61?logo=lombok\" alt=\"Lombok\"\u003e\u003c/a\u003e\n\n## Архитектура проекта\n\nПроект построен на микросервисной архитектуре для модульности и изоляции ошибок. Фронтенд взаимодействует только с API-шлюзом, который маршрутизирует запросы к специализированным сервисам. Операции, связанные с пользователями, могут инициировать уведомления через Kafka для разделения ответственности.\n\n### Схема архитектуры\n\n```mermaid\ngraph TD\n    A[Фронтенд] --\u003e|HTTP-запросы| B[API-шлюз]\n    B --\u003e|Маршруты /users/*| C[Микросервис пользователей]\n    B --\u003e|Маршруты /files/*| D[Микросервис файлов]\n    C --\u003e|Отправляет события| E[Kafka-брокер]\n    E --\u003e|Потребляет топики| F[Сервис уведомлений]\n    C \u003c--\u003e|Запросы к БД| G[База данных]\n    D \u003c--\u003e|Запросы к БД| G\n```\n\nЭта схема показывает поток запросов и событийно-ориентированное взаимодействие. API-шлюз выступает единой точкой входа, повышая безопасность и упрощая интеграцию с клиентом.\n\n\n### Поток обработки запросов\n1. Фронтенд отправляет HTTP-запросы (например, логин, загрузка файла) на API-шлюз.\n2. API-шлюз аутентифицирует (через JWT) и перенаправляет запрос к соответствующему микросервису.\n3. Микросервис пользователей обрабатывает аутентификацию, CRUD-операции и отправляет события в Kafka для уведомлений.\n4. Микросервис файлов управляет операциями с файлами и их хранением.\n5. Сервис уведомлений потребляет Kafka-топики для отправки email или уведомлений в приложении.\n\n## Структура проекта\n\nРепозиторий организован как мультимодульный Maven-проект для удобного управления микросервисами:\n\n- **api-gateway/**: Содержит конфигурацию Spring Cloud Gateway, правила маршрутизации и фильтры безопасности.\n  - `src/main/java`: Контроллеры/фильтры для обработки запросов.\n  - `application.yml`: Конфигурация маршрутов (например, к сервисам пользователей и файлов).\n\n## Установка и запуск\n\n1. **Клонируйте репозиторий**:\n   ```\n   git clone https://github.com/vnikolaenko-dev/PrivateFileSharing.git\n   cd PrivateFileSharing\n   git checkout api-gateway\n   ```\n\n2. **Установите зависимости**:\n   ```\n   mvn clean install\n   ```\n\n3. **Настройте окружение**:\n   - Обновите файлы `application.properties` или `.yml` в каждом модуле (например, URL базы данных, серверы Kafka).\n   - Пример для микросервиса пользователей:\n     ```\n     spring.datasource.url=jdbc:postgresql://localhost:5432/privatefiles\n     spring.kafka.bootstrap-servers=localhost:9092\n     ```\n\n4. **Запустите сервисы**:\n   - Запустите Kafka/Zookeeper (например, через Docker: `docker run -p 9092:9092 apache/kafka`).\n   - Запустите каждый микросервис: `mvn spring-boot:run` в соответствующих директориях.\n   - Или используйте Docker Compose для всех сервисов.\n\n5. **Доступ к приложению**:\n   - Фронтенд: Откройте `index.html` или запустите локальный сервер.\n   - API: Тестируйте конечные точки через Postman (например, POST /auth/login).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvnikolaenko-dev%2Fprivatefilesharing","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvnikolaenko-dev%2Fprivatefilesharing","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvnikolaenko-dev%2Fprivatefilesharing/lists"}