dhis2_setup_authentication_patterns
Create and configure authentication patterns for DHIS2 apps, supporting basic, OAuth2, cookie, and token-based methods. Manage session settings, security features, and redirect URLs for secure user access.
Instructions
Generate authentication patterns and examples for DHIS2 app
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| authType | Yes | Type of authentication to implement | |
| providers | No | Authentication providers to support | |
| redirectUrls | No | ||
| securityFeatures | No | ||
| sessionManagement | No |
Implementation Reference
- src/index.ts:1045-1055 (handler)Handler dispatch in main tool switch statement that calls the generator function with tool arguments and returns the generated content.case 'dhis2_setup_authentication_patterns': const authArgs = args as any; const authPatterns = generateAuthenticationPatterns(authArgs); return { content: [ { type: 'text', text: authPatterns, }, ], };
- src/webapp-generators.ts:543-587 (handler)Core implementation: generates markdown documentation with authentication code patterns (basic, OAuth2, cookie, token) based on input parameters like authType, providers, etc.export function generateAuthenticationPatterns(args: any): string { const { authType, providers = [], sessionManagement = {}, securityFeatures = {}, redirectUrls = {} } = args; return `# DHIS2 Authentication Patterns ## ${authType.toUpperCase()} Authentication Setup ${generateAuthTypeImplementation(authType)} ${providers.length > 0 ? generateProviderIntegration(providers) : ''} ## Session Management \`\`\`javascript const sessionConfig = { timeout: ${sessionManagement.timeout || 30}, // minutes refreshTokens: ${sessionManagement.refreshTokens || false}, rememberUser: ${sessionManagement.rememberUser || false} }; \`\`\` ${Object.keys(securityFeatures).length > 0 ? generateSecurityConfiguration(securityFeatures) : ''} ## Redirect Configuration \`\`\`javascript const redirectConfig = { success: '${redirectUrls.success || '/dashboard'}', failure: '${redirectUrls.failure || '/login'}', logout: '${redirectUrls.logout || '/login'}' }; \`\`\` ## Testing Authentication \`\`\`bash # Test login endpoint curl -X POST \\ -H "Content-Type: application/json" \\ -d '{"username":"admin","password":"district"}' \\ https://your-dhis2-instance.com/api/auth/login # Test current user endpoint curl -H "Cookie: JSESSIONID=your-session-id" \\ https://your-dhis2-instance.com/api/me \`\`\` `; }
- src/permission-system.ts:133-178 (registration)Registers the tool name with required permission 'canConfigureApps' in the TOOL_PERMISSIONS map used for access control.['dhis2_init_webapp', 'canConfigureApps'], ['dhis2_configure_app_manifest', 'canConfigureApps'], ['dhis2_configure_build_system', 'canConfigureApps'], ['dhis2_setup_dev_environment', 'canConfigureApps'], ['dhis2_generate_app_runtime_config', 'canConfigureApps'], ['dhis2_create_datastore_namespace', 'canConfigureApps'], ['dhis2_manage_datastore_key', 'canConfigureApps'], ['dhis2_setup_authentication_patterns', 'canConfigureApps'], ['dhis2_create_ui_components', 'canUseUITools'], ['dhis2_generate_test_setup', 'canConfigureApps'], // Debugging Tools ['dhis2_diagnose_cors_issues', 'canDebugApplications'], ['dhis2_configure_cors_allowlist', 'canDebugApplications'], ['dhis2_debug_authentication', 'canDebugApplications'], ['dhis2_fix_proxy_configuration', 'canDebugApplications'], ['dhis2_resolve_build_issues', 'canDebugApplications'], ['dhis2_optimize_performance', 'canDebugApplications'], ['dhis2_validate_environment', 'canDebugApplications'], ['dhis2_migration_assistant', 'canDebugApplications'], // Android SDK Tools ['dhis2_android_init_project', 'canUseMobileFeatures'], ['dhis2_android_configure_gradle', 'canUseMobileFeatures'], ['dhis2_android_setup_sync', 'canConfigureMobile'], ['dhis2_android_configure_storage', 'canConfigureMobile'], ['dhis2_android_setup_location_services', 'canUseMobileFeatures'], ['dhis2_android_configure_camera', 'canUseMobileFeatures'], ['dhis2_android_setup_authentication', 'canConfigureMobile'], ['dhis2_android_generate_data_models', 'canUseMobileFeatures'], ['dhis2_android_setup_testing', 'canUseMobileFeatures'], ['dhis2_android_configure_ui_patterns', 'canUseMobileFeatures'], ['dhis2_android_setup_offline_analytics', 'canUseMobileFeatures'], ['dhis2_android_configure_notifications', 'canUseMobileFeatures'], ['dhis2_android_performance_optimization', 'canUseMobileFeatures'], // UI Library Tools ['dhis2_generate_ui_form_patterns', 'canUseUITools'], ['dhis2_generate_ui_data_display', 'canUseUITools'], ['dhis2_generate_ui_navigation_layout', 'canUseUITools'], ['dhis2_generate_design_system', 'canUseUITools'], ['android_generate_material_form', 'canUseMobileFeatures'], ['android_generate_list_adapter', 'canUseMobileFeatures'], ['android_generate_navigation_drawer', 'canUseMobileFeatures'], ['android_generate_bottom_sheet', 'canUseMobileFeatures'], ]);
- src/webapp-generators.ts:589-697 (helper)Helper function that generates specific authentication implementation code based on authType.function generateAuthTypeImplementation(authType: string): string { switch (authType) { case 'basic': return `### Basic Authentication \`\`\`jsx import { useConfig } from '@dhis2/app-runtime'; const LoginForm = () => { const { baseUrl } = useConfig(); const handleLogin = async (username, password) => { const response = await fetch(\`\${baseUrl}/api/me\`, { headers: { 'Authorization': \`Basic \${btoa(\`\${username}:\${password}\`)}\` } }); if (response.ok) { // Store credentials securely localStorage.setItem('dhis2.username', username); // Navigate to app } }; return ( <form onSubmit={handleLogin}> <input name="username" type="text" required /> <input name="password" type="password" required /> <button type="submit">Login</button> </form> ); }; \`\`\``; case 'oauth2': return `### OAuth2 Authentication \`\`\`jsx import { useConfig } from '@dhis2/app-runtime'; const OAuth2Login = () => { const { baseUrl } = useConfig(); const handleOAuth2Login = () => { const clientId = process.env.REACT_APP_OAUTH2_CLIENT_ID; const redirectUri = window.location.origin + '/oauth/callback'; const oauthUrl = \`\${baseUrl}/uaa/oauth/authorize?response_type=code&client_id=\${clientId}&redirect_uri=\${redirectUri}\`; window.location.href = oauthUrl; }; return <button onClick={handleOAuth2Login}>Login with DHIS2</button>; }; \`\`\``; case 'cookie': return `### Cookie-based Authentication \`\`\`jsx const CookieAuth = () => { const handleLogin = async (username, password) => { const response = await fetch(\`\${baseUrl}/dhis-web-commons-security/login.action\`, { method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, body: \`j_username=\${username}&j_password=\${password}\`, credentials: 'include' }); if (response.ok) { // Cookie is automatically handled by browser window.location.href = '/'; } }; return ( // Login form implementation ); }; \`\`\``; case 'token': return `### Token-based Authentication \`\`\`jsx const TokenAuth = () => { const handleLogin = async (username, password) => { const response = await fetch(\`\${baseUrl}/api/auth/token\`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ username, password }) }); const { token } = await response.json(); // Store token securely localStorage.setItem('dhis2.token', token); // Set default header for future requests axios.defaults.headers.common['Authorization'] = \`Bearer \${token}\`; }; return ( // Login form implementation ); }; \`\`\``; default: return '### Custom Authentication Implementation'; } }