UNPKG

apploud-cli

Version:

CLI tool for Apploud container hosting management

105 lines (83 loc) 4.07 kB
#!/usr/bin/env node const axios = require('axios'); const chalk = require('chalk'); const open = require('open'); const inquirer = require('inquirer'); // Configuration const APP_URL = process.env.APP_URL || 'http://localhost:8000'; const API_URL = `${APP_URL}/api`; const CLI_API_URL = `${API_URL}/cli`; console.log(chalk.blue('GitHub Auth Debug Utility')); console.log('========================\n'); async function testGithubAuth() { try { console.log(chalk.yellow('Testing GitHub CLI authentication flow...')); // Step 1: Call login endpoint to get redirect URL console.log('\n1. Calling login endpoint...'); const loginResponse = await axios.post(`${CLI_API_URL}/login`, {}, { headers: { 'Accept': 'application/json', 'Content-Type': 'application/json' }, validateStatus: () => true }); console.log(`Status: ${loginResponse.status}`); console.log('Response:', loginResponse.data); if (loginResponse.status !== 200 || !loginResponse.data.redirect_url || !loginResponse.data.temp_token) { console.error(chalk.red('❌ Login endpoint failed to return valid redirect URL or token')); return; } const redirectUrl = loginResponse.data.redirect_url; const tempToken = loginResponse.data.temp_token; console.log(chalk.green('✓ Login endpoint returned valid redirect URL and temp token')); // Step 2: Ask user if they want to open browser const { openBrowser } = await inquirer.prompt([{ type: 'confirm', name: 'openBrowser', message: 'Would you like to open your browser to test GitHub authentication?', default: true }]); if (openBrowser) { console.log('\n2. Opening browser for GitHub authentication...'); console.log(` Redirect URL: ${redirectUrl}`); await open(redirectUrl); // Step 3: Start polling for token console.log('\n3. Polling for authentication status...'); for (let i = 0; i < 30; i++) { const statusResponse = await axios.get(`${CLI_API_URL}/status?temp_token=${tempToken}`, { validateStatus: () => true }); console.log(` Poll ${i+1}: Status = ${statusResponse.data.status}`); if (statusResponse.data.status === 'authenticated') { console.log(chalk.green('\n✓ Authentication successful!')); // Get token const tokenResponse = await axios.get(`${CLI_API_URL}/check-token?temp_token=${tempToken}`, { validateStatus: () => true }); if (tokenResponse.data.token) { console.log(chalk.green('✓ Token retrieved successfully')); console.log(chalk.yellow('Token value:'), tokenResponse.data.token.substring(0, 20) + '...[truncated]'); } else { console.log(chalk.red('❌ Failed to retrieve token')); } break; } else if (statusResponse.data.status === 'error') { console.log(chalk.red(`\n❌ Authentication failed: ${statusResponse.data.message || 'Unknown error'}`)); break; } // Wait 2 seconds between polls await new Promise(resolve => setTimeout(resolve, 2000)); } } else { console.log(chalk.yellow('\nSkipping browser authentication test.')); } console.log('\n' + chalk.green('Debug complete!')); } catch (error) { console.error(chalk.red('Error during debug:'), error.message); if (error.response) { console.error('Response status:', error.response.status); console.error('Response data:', error.response.data); } } } testGithubAuth();