barycenter/users.json.example
Till Wegmueller a1056bb237
feat: add admin GraphQL API, background jobs, and user sync CLI
Major Features:
- Admin GraphQL API with dual endpoints (Seaography + custom)
- Background job scheduler with execution tracking
- Idempotent user sync CLI for Kubernetes deployments
- Secure PUT /properties endpoint with Bearer token auth

Admin GraphQL API:
- Entity CRUD via Seaography at /admin/graphql
- Custom job management API at /admin/jobs
- Mutations: triggerJob
- Queries: jobLogs, availableJobs
- GraphiQL playgrounds for both endpoints

Background Jobs:
- tokio-cron-scheduler integration
- Automated cleanup of expired sessions (hourly)
- Automated cleanup of expired refresh tokens (hourly)
- Job execution tracking in database
- Manual job triggering via GraphQL

User Sync CLI:
- Command: barycenter sync-users --file users.json
- Idempotent user synchronization from JSON
- Creates new users with hashed passwords
- Updates existing users (enabled, email_verified, email)
- Syncs custom properties per user
- Perfect for Kubernetes init containers

Security Enhancements:
- PUT /properties endpoint requires Bearer token
- Users can only modify their own properties
- Public registration disabled by default
- Admin API on separate port for network isolation

Database:
- New job_executions table for job tracking
- User update functions (update_user, update_user_email)
- PostgreSQL + SQLite support maintained

Configuration:
- allow_public_registration setting (default: false)
- admin_port setting (default: main port + 1)

Documentation:
- Comprehensive Kubernetes deployment guide
- User sync JSON schema and examples
- Init container and CronJob examples
- Production deployment patterns

Files Added:
- src/admin_graphql.rs - GraphQL schema builders
- src/admin_mutations.rs - Custom mutations and queries
- src/jobs.rs - Job scheduler and tracking
- src/user_sync.rs - User sync logic
- src/entities/ - SeaORM entities (8 entities)
- docs/kubernetes-deployment.md - K8s deployment guide
- users.json.example - User sync example

Dependencies:
- tokio-cron-scheduler 0.13
- seaography 1.1.4
- async-graphql 7.0
- async-graphql-axum 7.0

🤖 Generated with Claude Code (https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-30 18:06:50 +01:00

55 lines
1.3 KiB
Text

{
"users": [
{
"username": "admin",
"email": "admin@example.com",
"password": "change-me-in-production",
"enabled": true,
"email_verified": true,
"properties": {
"department": "IT",
"role": "administrator",
"display_name": "System Administrator"
}
},
{
"username": "alice",
"email": "alice@example.com",
"password": "alice-secure-password",
"enabled": true,
"email_verified": false,
"properties": {
"department": "Engineering",
"role": "developer",
"display_name": "Alice Johnson",
"team": "Platform"
}
},
{
"username": "bob",
"email": "bob@example.com",
"password": "bob-secure-password",
"enabled": true,
"email_verified": true,
"properties": {
"department": "Product",
"role": "product_manager",
"display_name": "Bob Smith"
}
},
{
"username": "charlie",
"email": "charlie@example.com",
"password": "charlie-secure-password",
"enabled": false,
"email_verified": false,
"properties": {
"department": "Engineering",
"role": "developer",
"display_name": "Charlie Brown",
"team": "Backend",
"note": "Account disabled - pending onboarding"
}
}
]
}