Skip to main content
Glama
test-umbrella-auth-direct.cjs7.67 kB
#!/usr/bin/env node /** * Direct test of Umbrella API authentication * Tests both Keycloak and Cognito endpoints */ const axios = require('axios'); const UMBRELLA_BASE_URL = 'https://api.umbrellacost.io'; const USERNAME = 'david+saola@umbrellacost.com'; const PASSWORD = 'Dsamsung1!'; // Create axios instance with defaults const api = axios.create({ baseURL: UMBRELLA_BASE_URL, headers: { 'Content-Type': 'application/json', 'Accept': 'application/json', 'User-Agent': 'UmbrellaMCP/2.0.0' }, timeout: 30000 }); // Add request/response interceptor for debugging api.interceptors.request.use(request => { console.log('\n📤 REQUEST:', request.method.toUpperCase(), request.url); console.log('Headers:', JSON.stringify(request.headers, null, 2)); if (request.data) { console.log('Body:', JSON.stringify(request.data, null, 2)); } return request; }); api.interceptors.response.use( response => { console.log('✅ RESPONSE:', response.status, response.statusText); console.log('Headers:', JSON.stringify(response.headers, null, 2)); if (response.data) { console.log('Data:', JSON.stringify(response.data, null, 2)); } return response; }, error => { if (error.response) { console.error('❌ ERROR RESPONSE:', error.response.status, error.response.statusText); console.error('Headers:', JSON.stringify(error.response.headers, null, 2)); if (error.response.data) { console.error('Error Data:', JSON.stringify(error.response.data, null, 2)); } } else if (error.request) { console.error('❌ NO RESPONSE:', error.message); } else { console.error('❌ REQUEST ERROR:', error.message); } return Promise.reject(error); } ); async function testUserRealm() { console.log('\n' + '='.repeat(60)); console.log('1️⃣ Testing User Realm Detection'); console.log('='.repeat(60)); try { const response = await api.get('/user-management/users/user-realm', { params: { email: USERNAME } }); console.log('\n✅ User Realm Detection Successful!'); console.log('Realm ID:', response.data.realmId); console.log('User is on:', response.data.realmId ? 'Keycloak' : 'Cognito'); return response.data; } catch (error) { console.error('\n❌ User Realm Detection Failed'); return null; } } async function testKeycloakAuth() { console.log('\n' + '='.repeat(60)); console.log('2️⃣ Testing Keycloak Authentication'); console.log('='.repeat(60)); try { // Try different variations of the Keycloak endpoint const endpoints = [ '/authentication/token/generate', '/auth/token/generate', '/token/generate' ]; for (const endpoint of endpoints) { console.log(`\nTrying endpoint: ${endpoint}`); try { const response = await api.post(endpoint, { username: USERNAME, password: PASSWORD }); console.log('\n✅ Keycloak Authentication Successful!'); console.log('Token:', response.data.access_token ? 'Present' : 'Missing'); console.log('Expires In:', response.data.expires_in); return response.data; } catch (error) { console.log(`Failed with ${error.response?.status || error.message}`); } } // Also try with different request formats console.log('\nTrying form-urlencoded format...'); const params = new URLSearchParams(); params.append('username', USERNAME); params.append('password', PASSWORD); params.append('grant_type', 'password'); try { const response = await api.post('/authentication/token/generate', params, { headers: { 'Content-Type': 'application/x-www-form-urlencoded' } }); console.log('\n✅ Keycloak Authentication Successful (form-urlencoded)!'); return response.data; } catch (error) { console.log(`Failed with ${error.response?.status || error.message}`); } } catch (error) { console.error('\n❌ All Keycloak Authentication Attempts Failed'); return null; } } async function testCognitoAuth() { console.log('\n' + '='.repeat(60)); console.log('3️⃣ Testing Cognito Authentication'); console.log('='.repeat(60)); try { // Try different Cognito endpoint variations const endpoints = [ '/users/signin', '/user/signin', '/auth/signin' ]; for (const endpoint of endpoints) { console.log(`\nTrying endpoint: ${endpoint}`); try { const response = await api.post(endpoint, { username: USERNAME, password: PASSWORD }); console.log('\n✅ Cognito Authentication Successful!'); console.log('Token:', response.data.AuthenticationResult?.AccessToken ? 'Present' : 'Missing'); return response.data; } catch (error) { console.log(`Failed with ${error.response?.status || error.message}`); } } // Try with email instead of username console.log('\nTrying with email field...'); try { const response = await api.post('/users/signin', { email: USERNAME, password: PASSWORD }); console.log('\n✅ Cognito Authentication Successful (email field)!'); return response.data; } catch (error) { console.log(`Failed with ${error.response?.status || error.message}`); } } catch (error) { console.error('\n❌ All Cognito Authentication Attempts Failed'); return null; } } async function testDirectAuth() { console.log('\n' + '='.repeat(60)); console.log('4️⃣ Testing Direct Authentication (no realm check)'); console.log('='.repeat(60)); try { // Try a generic auth endpoint const endpoints = [ '/auth/login', '/authenticate', '/login', '/auth' ]; for (const endpoint of endpoints) { console.log(`\nTrying endpoint: ${endpoint}`); try { const response = await api.post(endpoint, { username: USERNAME, password: PASSWORD }); console.log('\n✅ Direct Authentication Successful!'); return response.data; } catch (error) { console.log(`Failed with ${error.response?.status || error.message}`); } } } catch (error) { console.error('\n❌ All Direct Authentication Attempts Failed'); return null; } } async function main() { console.log('🔐 Testing Umbrella API Authentication'); console.log('Base URL:', UMBRELLA_BASE_URL); console.log('Username:', USERNAME); console.log('Password:', '*'.repeat(PASSWORD.length)); // Test 1: User realm detection const realmInfo = await testUserRealm(); // Test 2: Keycloak auth (if user is on Keycloak) if (realmInfo?.realmId) { await testKeycloakAuth(); } // Test 3: Cognito auth (fallback) await testCognitoAuth(); // Test 4: Try direct auth endpoints await testDirectAuth(); console.log('\n' + '='.repeat(60)); console.log('📊 Test Summary'); console.log('='.repeat(60)); console.log('User realm detection: ', realmInfo ? '✅ Working' : '❌ Failed'); console.log('User system: ', realmInfo?.realmId ? 'Keycloak' : 'Cognito'); console.log('\nAuthentication is failing - need to investigate further'); console.log('Possible issues:'); console.log('- Missing required headers (e.g., API key, client ID)'); console.log('- Incorrect request format or parameters'); console.log('- Account permissions or configuration issues'); console.log('- API endpoint changes or maintenance'); } main().catch(error => { console.error('Fatal error:', error); process.exit(1); });

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/daviddraiumbrella/invoice-monitoring'

If you have feedback or need assistance with the MCP directory API, please join our Discord server