id: Hotline-OIDC-Documentation title: Hotline-OIDC-Documentation
Hotline and OIDC Modules Documentation
Overview
This document provides comprehensive documentation for two specialized modules in the ecommerce backend system:
- Hotline Module - A product search and comparison service
- OIDC Module - OpenID Connect authentication server for mobile applications
1. Hotline Module
Purpose and Functionality
The Hotline Module is a specialized product search and comparison service that provides:
- Product Search Interface: A web-based search interface for browsing and comparing products
- Elasticsearch Integration: Advanced product search using Elasticsearch for fast and accurate results
- IP-Based Access Control: Restricted access to specific IP addresses (Hotline partners)
- Product Comparison: Tools for comparing products across different shops
- Multi-language Support: Support for Estonian language with internationalization
Key Components
Directory Structure
hotline/
├── assets/ # Static assets (CSS, JS, images)
├── bootstrap/ # Application bootstrap files
├── config/ # Configuration files
├── controllers/ # Controller classes
├── models/ # Model classes
├── views/ # View templates
└── web/ # Web entry point
Main Controllers
- SearchController (
hotline/controllers/SearchController.php)- Handles product search functionality
- IP-based access control for Hotline partners
- Provides product listing and search results
Key Models
-
ProductElasticSearch (
hotline/models/ProductElasticSearch.php)- Manages Elasticsearch queries for product search
- Handles filtering, sorting, and pagination
- Supports multiple search criteria (availability, language, product type)
-
ProductViewDecorator (
hotline/models/ProductViewDecorator.php)- Decorates product data for display
- Formats product information for the search interface
Configuration
Main Configuration (hotline/config/main.php)
- Application ID:
app-hotline - Base URL:
/hotline - Language: Estonian (
et) - Session configuration for hotline-specific cookies
- Asset management for CSS/JS optimization
Access Control
- IP-based access control using
WebStoreIp::getHotlineIps() - Only allows access from predefined Hotline partner IP addresses
How to Work with Hotline Module
1. Setup and Installation
# Ensure Elasticsearch is running and configured
# Configure IP addresses for Hotline partners in WebStoreIp model
# Set up proper routing in main application
2. Accessing the Module
- URL:
https://yourdomain.com/hotline - Default Route:
search/index - Access: Restricted to Hotline partner IP addresses
3. Search Functionality
The search interface provides:
- Product Search: Search by product name, description, or keywords
- Filtering Options:
- Availability status (Available, Out of Stock, Coming Soon)
- Product types (Books, E-books, Games, Office Equipment, etc.)
- Language selection
- Shop selection
- Sorting Options: Price, relevance, popularity
- Pagination: Load more products with AJAX
4. Product Display
Products are displayed with:
- Product images and basic information
- Price comparison across shops
- Availability status
- Shop information
- Product type categorization
5. Integration Points
- Elasticsearch: For fast product search
- Common Models: Uses
common/models/Productand related models - API Module: Leverages API models for data consistency
2. OIDC (OpenID Connect) Module
Purpose and Functionality
The OIDC Module is an OpenID Connect authentication server that provides:
- OAuth 2.0 Authorization Server: Complete OAuth 2.0 implementation
- OpenID Connect Provider: Identity provider for mobile applications
- Social Login Integration: Support for Google, Facebook, Apple OAuth
- JWT Token Management: Secure token generation and validation
- User Authentication: Login/logout functionality for external applications
Key Components
Directory Structure
oidc/
├── assets/ # Static assets
├── bootstrap/ # Application bootstrap
├── components/ # Custom components
├── config/ # Configuration files
├── controllers/ # Controller classes
├── models/ # Model classes
├── views/ # View templates
├── web/ # Web entry point
└── README.md # Setup instructions
Main Controllers
-
AuthController (
oidc/controllers/AuthController.php)- Handles user authentication
- Manages OAuth 2.0 authorization flow
- Processes social login callbacks
-
DefaultController (
oidc/controllers/DefaultController.php)- Handles default routes and error pages
Key Models
-
User (
oidc/models/User.php)- User identity model for OIDC
- Implements OAuth 2.0 user interface
-
LoginForm (
oidc/models/LoginForm.php)- Form model for user login
- Validates user credentials
-
ExternalOauth2LoginHandler (
oidc/models/ExternalOauth2LoginHandler.php)- Handles social login integration
- Processes external OAuth providers
Configuration
Main Configuration (oidc/config/main.php)
- Application ID:
app-oidc - Base URL:
/oidc - Language: Estonian (
et) - OAuth 2.0 module integration
OIDC Module Configuration (oidc/config/oidc-module.php)
return [
'class' => Oauth2Module::class,
'identityClass' => User::class,
'privateKey' => 'file://' . Yii::getAlias('@keys/openid-connect-private.key'),
'publicKey' => 'file://' . Yii::getAlias('@keys/openid-connect-public.key'),
'enableOpenIdConnect' => true,
'grantTypes' => [
Oauth2BaseModule::GRANT_TYPE_AUTH_CODE,
Oauth2BaseModule::GRANT_TYPE_REFRESH_TOKEN,
],
// ... other configurations
];
How to Work with OIDC Module
1. Setup and Installation
Follow the setup instructions in oidc/README.md:
# 1. Install dependencies
composer install
# 2. Configure PHP extensions
# Enable pcntl PHP extension
# 3. Configure Apache
# Add OIDC application apache config in root .htaccess
cp oidc/web/.htaccess.example oidc/web/.htaccess
# 4. Configure application
cp oidc/config/main-local.php.dist oidc/config/main-local.php
cp oidc/config/params-local.php.dist oidc/config/params-local.php
# 5. Generate cryptographic keys
cd common/config/keys
openssl genrsa -out openid-connect-private.key 2048
openssl rsa -in openid-connect-private.key -pubout -out openid-connect-public.key
chmod 660 openid-connect-*.key
# 6. Generate encryption keys
vendor/bin/generate-defuse-key # Run twice for different keys
# 7. Configure environment variables
# Add keys to preinit.environment.php
# 8. Run migrations
php yii migrate
# 9. Create OAuth client
php yii oauth2/client/create --type=1 --grantTypes=1
# 10. Configure client
php yii oidc/configure-client {client_identifier}
# 11. Validate installation
php yii oauth2/debug/config
2. OAuth 2.0 Flow
The OIDC module supports standard OAuth 2.0 flows:
-
Authorization Code Flow:
Client → OIDC Server → User Login → Authorization Code → Access Token -
Refresh Token Flow:
Client → Refresh Token → New Access Token
3. OpenID Connect Features
- Discovery Endpoint:
/.well-known/openid_configuration - User Info Endpoint:
/openid-connect/userinfo - End Session Endpoint:
/openid-connect/end-session - JWKS Endpoint:
/oauth2/jwks
4. Social Login Integration
The module supports external OAuth providers:
- Google OAuth 2.0
- Facebook OAuth 2.0
- Apple OAuth 2.0
Configuration in AuthController.php:
public function actions(): array
{
return [
'external' => [
'class' => AuthAction::class,
'successCallback' => [$this, 'onAuthSuccess'],
],
];
}
5. Token Management
- Access Tokens: JWT-based with configurable TTL
- Refresh Tokens: For long-term access
- ID Tokens: OpenID Connect identity tokens
- Token Encryption: AES encryption for sensitive data
6. Security Features
- Private/Public Key Pair: RSA key pair for token signing
- Encryption Keys: AES keys for data encryption
- HTTPS Enforcement: TLS required in production
- Session Management: Secure session handling
API Endpoints
OAuth 2.0 Endpoints
POST /oauth2/token- Token endpointGET /oauth2/authorize- Authorization endpointPOST /oauth2/revoke- Token revocation
OpenID Connect Endpoints
GET /.well-known/openid_configuration- DiscoveryGET /openid-connect/userinfo- User infoGET /openid-connect/end-session- Logout
Integration with Mobile Applications
- Client Registration: Register mobile app as OAuth client
- Redirect URIs: Configure allowed redirect URIs
- Scopes: Define required scopes (openid, profile, email, etc.)
- Token Handling: Implement token storage and refresh logic
Monitoring and Debugging
# Check OAuth 2.0 configuration
php yii oauth2/debug/config
# List registered clients
php yii oauth2/client/list
# View client details
php yii oauth2/client/view {client_id}
Common Integration Points
Database Integration
Both modules share the same database schema and use common models:
- User management
- Product data
- Shop information
- Configuration settings
Shared Components
- Common Models: Both modules use models from
common/models/ - Configuration: Shared configuration in
common/config/ - Authentication: Common user authentication system
Security Considerations
Hotline Module
- IP-based access control
- Session management
- CSRF protection
OIDC Module
- Cryptographic key management
- Token security
- HTTPS enforcement
- Rate limiting
Troubleshooting
Hotline Module Issues
- Access Denied: Check IP whitelist configuration
- Search Not Working: Verify Elasticsearch connection
- Products Not Loading: Check database connectivity
OIDC Module Issues
- Token Generation Failed: Verify cryptographic keys
- Client Authentication Failed: Check client credentials
- Social Login Issues: Verify OAuth provider configuration
Common Issues
- Configuration Errors: Check all required configuration files
- Database Connection: Verify database connectivity
- File Permissions: Ensure proper file permissions for keys
Best Practices
Development
- Use environment-specific configurations
- Implement proper error handling
- Follow security guidelines
- Test thoroughly before deployment
Production
- Use HTTPS for all communications
- Implement proper logging
- Monitor system performance
- Regular security updates
Maintenance
- Regular key rotation
- Database backups
- Log monitoring
- Performance optimization
This documentation provides a comprehensive overview of both the Hotline and OIDC modules, their functionality, setup procedures, and integration guidelines. For specific implementation details, refer to the individual module files and the existing README files.