π― OrchestrateUI HAS BEEN MOVED FOR FORGJO: https://git.sluberskihomelab.com/Public/orchestrateui
A powerful, Docker-runnable API automation tool with a clean, modern UI and fast backend. Schedule API calls, trigger them manually, and get notifications through webhooks.
- Clean Modern UI: Intuitive React-based interface for managing API automation tasks
- Fast Backend: Built with Node.js and Express for high-performance API execution
- Scheduled Tasks: Use cron expressions to schedule recurring API calls
- Manual Execution: Trigger any task on-demand with a single click
- Webhook Notifications: Get notified about task execution results via webhooks
- RESTful API Support: Full support for GET, POST, PUT, PATCH, and DELETE methods
- Execution History: Track all task executions with detailed logs
- Docker Support: Easy deployment with Docker and Docker Compose
- Clone the repository:
git clone https://github.com/SluberskiHomeLab/orchestrateui.git
cd orchestrateui- Start the application:
docker-compose up -d- Open your browser and navigate to:
http://localhost
The backend API will be available at http://localhost:3001/api
cd backend
npm install
npm startBackend runs on port 3001 by default.
cd frontend
npm install
npm startFrontend development server runs on port 3000 by default.
- Click the "+ New Task" button
- Fill in the task details:
- Name: A descriptive name for your task
- Description: Optional description
- Method: HTTP method (GET, POST, PUT, PATCH, DELETE)
- URL: The API endpoint to call
- Headers: JSON object with request headers
- Body: Request body (for POST, PUT, PATCH)
- Schedule: Cron expression for automated execution
- Webhook URL: URL to receive execution notifications
- Click "Create Task"
*/5 * * * *- Every 5 minutes0 * * * *- Every hour0 9 * * *- Every day at 9:00 AM0 0 * * 0- Every Sunday at midnight*/30 * * * *- Every 30 minutes
Click the "βΆ Execute Now" button on any task card to run it immediately.
Tasks can send execution results to a webhook URL. The webhook receives:
{
"taskId": "uuid",
"taskName": "Task Name",
"execution": {
"id": "uuid",
"status": "success",
"statusCode": 200,
"duration": 150,
"startTime": "2024-01-01T00:00:00.000Z",
"endTime": "2024-01-01T00:00:00.150Z"
},
"timestamp": "2024-01-01T00:00:00.000Z"
}GET /api/tasks- Get all tasksGET /api/tasks/:id- Get specific taskPOST /api/tasks- Create new taskPUT /api/tasks/:id- Update taskDELETE /api/tasks/:id- Delete taskPOST /api/tasks/:id/execute- Execute task manually
GET /api/history- Get execution history (limit: 50)GET /api/tasks/:id/history- Get history for specific task
GET /api/health- Health check endpoint
orchestrateui/
βββ backend/
β βββ server.js # Express server with task management
β βββ package.json
β βββ Dockerfile
βββ frontend/
β βββ src/
β β βββ App.js # Main React component
β β βββ App.css # Styles
β β βββ index.js
β βββ public/
β βββ package.json
β βββ Dockerfile
β βββ nginx.conf # Nginx configuration
βββ docker-compose.yml # Docker Compose configuration
- Node.js - Runtime environment
- Express - Web framework
- node-cron - Task scheduling
- Axios - HTTP client for API calls
- CORS - Cross-origin resource sharing
- React - UI framework
- Axios - API communication
- CSS3 - Modern styling
- Docker - Containerization
- Docker Compose - Multi-container orchestration
- Nginx - Web server and reverse proxy
OrchestrateUI now supports optional authentication with multiple authentication methods:
-
Username/Password (Local Authentication)
- Traditional username and password authentication
- Passwords are securely hashed using bcrypt
- First registered user becomes an administrator
-
OIDC/OAuth2 (Auth0, Okta, etc.)
- Single Sign-On (SSO) with your organization's identity provider
- Supports Auth0, Okta, Azure AD, and other OIDC-compliant providers
-
LDAP Authentication
- Integration with Active Directory or LDAP servers
- Users can authenticate with their corporate credentials
-
API Keys
- Generate API keys for programmatic access
- Perfect for CI/CD pipelines and automation
- Keys can have optional expiration dates
Authentication is disabled by default for backwards compatibility. To enable it:
-
Copy
.env.exampleto.env:cp .env.example .env
-
Set
AUTH_ENABLED=truein your.envfile -
IMPORTANT: Set a strong, random
JWT_SECRETin your.envfile:JWT_SECRET=$(openssl rand -hex 32)Never use the default secret in production!
-
Configure your preferred authentication methods
-
Start the application:
docker-compose up -d
-
Register the first user (will automatically become an admin)
Administrators have access to an Admin panel with the following capabilities:
- User Management: Create, edit, and delete user accounts
- Role Assignment: Assign admin or user roles
- API Key Management: Generate and manage API keys for users
- Access Control: Tasks are automatically scoped to their creators
See .env.example for all available authentication configuration options:
- JWT Settings: Secret key and token expiration
- OIDC/OAuth2: Provider URLs and credentials
- LDAP: Server connection and search parameters
Important Security Considerations:
- This is designed as a development/home lab tool for trusted environments
- The application makes HTTP requests to user-provided URLs - this is intentional core functionality
- Request Forgery Risk: Users can configure tasks to call any URL. In production environments, consider:
- Adding URL allowlisting/denylisting
- Network-level restrictions (firewall rules, network policies)
- Running in an isolated network segment
- Enabling authentication/authorization (now available!)
For production use, we recommend:
- β Authentication/Authorization - Now available with multiple methods!
- HTTPS/TLS - Encrypt traffic between client and server
- Rate Limiting - Add rate limiting to prevent brute force attacks on login endpoints
- CORS Configuration - Restrict CORS to specific domains (set
CORS_ORIGINin.env) - Input Validation - Additional validation for URLs, headers, and body content
- Database Persistence - Replace in-memory storage with a database
- URL Filtering - Allowlist/blocklist for target URLs
- Network Isolation - Run in a restricted network environment
- Audit Logging - Track all task executions and modifications
Known Security Considerations:
- JWT tokens are used for authentication (not session cookies), reducing CSRF risk
- Rate limiting is not implemented - consider adding a reverse proxy with rate limiting (e.g., nginx)
- CORS is permissive by default - restrict in production via
CORS_ORIGINenvironment variable
Recommended Deployment:
- Use in private/internal networks only
- Enable authentication for production environments
- Use strong JWT secrets (change default in
.env) - Configure CORS to allow only your frontend domain
- Add rate limiting via reverse proxy (nginx, Cloudflare, etc.)
- Regular security audits
- Keep dependencies updated
See .env.example for all available configuration options including:
AUTH_ENABLED- Enable/disable authentication (default: false)JWT_SECRET- Secret key for JWT tokensJWT_EXPIRY- Token expiration time (default: 24h)OIDC_*- OIDC/OAuth2 provider settingsLDAP_*- LDAP server configuration
PORT- Server port (default: 3001)- See
backend/.env.examplefor authentication settings
REACT_APP_API_URL- Backend API URL (default: http://localhost:3001/api)
Contributions are welcome! Please feel free to submit a Pull Request.
MIT License - feel free to use this project for personal or commercial purposes.
If containers fail to start:
docker-compose down
docker-compose up --buildIf port 80 or 3001 is already in use, modify the docker-compose.yml:
ports:
- "8080:80" # Frontend
- "3002:3001" # BackendMake sure the backend is running and accessible. Check Docker logs:
docker-compose logs backend
docker-compose logs frontendFor issues, questions, or suggestions, please open an issue on GitHub.