{"id":51070837,"url":"https://github.com/vinulays/securehub-backend","last_synced_at":"2026-06-23T10:32:51.278Z","repository":{"id":357440581,"uuid":"1235781617","full_name":"vinulays/securehub-backend","owner":"vinulays","description":"Enterprise-grade multi-tenant SaaS backend built with Spring Boot microservices for a project management system.","archived":false,"fork":false,"pushed_at":"2026-06-13T05:42:10.000Z","size":150,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-13T07:21:29.228Z","etag":null,"topics":["java","kafka","keycloak","microservices","spring"],"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/vinulays.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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-11T16:43:22.000Z","updated_at":"2026-06-13T05:42:14.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/vinulays/securehub-backend","commit_stats":null,"previous_names":["vinulays/securehub-backend"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/vinulays/securehub-backend","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vinulays%2Fsecurehub-backend","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vinulays%2Fsecurehub-backend/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vinulays%2Fsecurehub-backend/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vinulays%2Fsecurehub-backend/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/vinulays","download_url":"https://codeload.github.com/vinulays/securehub-backend/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vinulays%2Fsecurehub-backend/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34686725,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-23T02:00:07.161Z","response_time":65,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["java","kafka","keycloak","microservices","spring"],"created_at":"2026-06-23T10:32:50.450Z","updated_at":"2026-06-23T10:32:51.274Z","avatar_url":"https://github.com/vinulays.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# SecureHub Backend\r\n\r\nSecureHub is a multi-tenant SaaS platform built using a microservices architecture. It is designed to support enterprise-grade authentication, scalable service separation, and event-driven communication.\r\n\r\nThis repository contains the backend services responsible for authentication, user management, project management, and platform-level infrastructure integration.\r\n\r\n---\r\n\r\n## Architecture Overview\r\n\r\nSecureHub follows a distributed microservices architecture with clear domain boundaries and independent services.\r\n\r\nCore components include:\r\n\r\n- API Gateway for request routing and security enforcement\r\n- Identity management using Keycloak (OAuth2 / OpenID Connect)\r\n- Event-driven communication using Apache Kafka\r\n- PostgreSQL for persistent storage\r\n- Docker-based local development environment\r\n\r\n---\r\n\r\n## Technology Stack\r\n\r\n- Java 25\r\n- Spring Boot 4.0.6\r\n- Spring Security + OAuth2 Resource Server\r\n- Spring Cloud Gateway\r\n- Spring Kafka\r\n- Keycloak (Identity Provider)\r\n- PostgreSQL\r\n- Docker \u0026 Docker Compose\r\n- MailHog (for local email testing)\r\n- Maven\r\n\r\n---\r\n\r\n## Services\r\n\r\nThe backend is composed of the following services:\r\n\r\n- api-gateway: Entry point for all client requests, handles routing and authentication\r\n- eureka-server: Act as the service to discover microservices\r\n- auth-service: Manages authentication-related integrations\r\n- user-service: Handles users, organizations, and multi-tenant data\r\n- project-service: Manages projects and tasks\r\n- notification-service: Handles async notifications\r\n- file-service: Manages file uploads via AWS S3\r\n\r\n---\r\n\r\n## Local Development Setup\r\n\r\n### Prerequisites\r\n\r\n- Java 26\r\n- Docker \u0026 Docker Compose\r\n- Maven (optional, wrapper included)\r\n\r\n### Start Infrastructure\r\n\r\nFrom the root directory:\r\n\r\n```\r\ndocker compose up -d\r\n```\r\nThis will start:\r\n\r\n- PostgreSQL (application database)\r\n- Keycloak (authentication server)\r\n- Kafka (event streaming)\r\n- MailHog (email testing tool)\r\n\r\n### Kafka Setup (KRaft Mode)\r\n\r\nSecureHub uses Apache Kafka in KRaft mode (without ZooKeeper) for event-driven communication.\r\n\r\n#### Step 1: Generate Cluster ID\r\n\r\nKafka requires a unique cluster ID to initialize storage metadata.\r\n\r\nRun the following command:\r\n\r\n```dockerfile\r\ndocker run --rm confluentinc/cp-kafka:latest kafka-storage.sh random-uuid\r\n```\r\nThis will output a value similar to:\r\n\r\n```\r\nJ_5BbHaKSY-w1lYbb4KSVQ\r\n```\r\n\r\n#### Step 2: Configure Cluster ID in Kafka Service\r\n\r\nCopy the generated value and set it in your Kafka service configuration.\r\n\r\nIn `docker-compose.yml`:\r\n\r\n```dockerfile\r\nkafka:\r\n  image: confluentinc/cp-kafka:latest\r\n  container_name: securehub-kafka\r\n\r\n  environment:\r\n    CLUSTER_ID: \"J_5BbHaKSY-w1lYbb4KSVQ\"\r\n```\r\n\r\n### Kafka Topics\r\n\r\n- `user.created` - Event sent when a new user is created or invitation is resent.\r\n\r\n### Running a Service\r\n\r\nExample (API Gateway):\r\n\r\n```\r\ncd api-gateway\r\n./mvnw spring-boot:run\r\n```\r\nExample (User Service):\r\n\r\n```\r\ncd user-service\r\n./mvnw spring-boot:run\r\n```\r\n\r\n### Email Testing\r\n\r\nMailHog is used for local email testing\r\n\r\n- SMTP server - `localhost:1025`\r\n- Web UI - `http://localhost:8025`","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvinulays%2Fsecurehub-backend","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvinulays%2Fsecurehub-backend","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvinulays%2Fsecurehub-backend/lists"}