# Baron SSO

**Baron SSO** is a white-labeled User Authentication Hub and Unified Launcher.
It leverages **Descope** for secure, passwordless authentication (Enchanted Link / Magic Link) and provides a custom Flutter UI for a seamless user experience. A Go (Fiber) backend manages Audit Logs via ClickHouse.

## 🏗 Architecture

### 1. Frontend (Flutter Web)
- **Framework**: Flutter 3.38.0+
- **Organization**: `kr.co.baroncs`
- **Key Packages**: `descope`, `flutter_riverpod`, `go_router`
- **Features**:
  - Login UI with Tabs (Email / SMS)
  - Descope SDK Integration (Enchanted Link, Magic Link)

### 2. Backend (Go Fiber)
- **Language**: Go 1.26.2+
- **Framework**: Fiber v2.25+
- **Database**:
  - **ClickHouse**: Audit Logs (High performance ingestion)
  - **PostgreSQL**: Metadata storage (Primary)
- **Features**:
  - `POST /api/v1/audit`: Endpoint to ingest audit logs.

### 3. Infrastructure (Docker)
- **Services**: `postgres`, `clickhouse` (defined in `compose.infra.yaml`)
- **App**: `userfront`, `backend` (defined in `docker-compose.yaml`)

---

## 🚀 Getting Started

### Prerequisites
- Docker & Docker Compose
- Flutter SDK (for local development, 3.38.0+)
- Go (for local backend development)

### Environment Setup
1. Copy the sample environment file.
   ```bash
   cp .env.sample .env
   ```

2. Set the **IDP priority and Ory admin endpoints**. The default is Ory first with Descope as fallback.
   ```env
   IDP_PROVIDER=ory,descope
   KRATOS_ADMIN_URL=http://kratos:4434
   HYDRA_ADMIN_URL=http://hydra:4445
   ```

### Running the Stack

#### 1. Start Infrastructure (Databases)
Start the persistent data layer first.
```bash
docker compose -f compose.infra.yaml up -d
```

#### 2. Start Applications
Start the userfront and backend services.
```bash
docker compose up
```

- **userfront**: Accessible at http://localhost:5000
- **backend**: API active at http://localhost:3000
- **ClickHouse**: http://localhost:8123

### Local Development (Manual)
If you prefer running without Docker for code editing:

**Backend:**
```bash
cd backend
go mod tidy
go run cmd/server/main.go
```

**userfront:**
```bash
cd userfront
flutter pub get
flutter run -d chrome
```

---

## 📂 Project Structure

```
baron_sso/
├── backend/            # Go Fiber Application
│   ├── cmd/server/     # Entry point
│   ├── internal/       # Domain, Handlers, Repository
│   └── Dockerfile
├── userfront/         # Flutter Application
│   ├── lib/            # UI & Logic
│   └── pubspec.yaml
├── compose.infra.yaml  # DB Services (Postgres, ClickHouse)
├── docker-compose.yaml # App Services
├── .env.sample         # Env Config Template
└── README.md           # This file
```

## 📝 Status & Roadmap
- [x] **Phase 1**: Initial Setup & Architecture (Done)
- [x] **Phase 2**: Backend Audit API (Done)
- [x] **Phase 3**: Frontend Login UI & Descope Auth Logic (Done)
- [ ] **Phase 4**: Connect Frontend to Audit API (Todo)
- [ ] **Phase 5**: Dashboard & Unified Launcher (Todo)
