agmission/Development/server/tests/test_satloc_errors_simple.js

131 lines
4.5 KiB
JavaScript

#!/usr/bin/env node
'use strict';
/**
* Test script to discover actual SatLoc API error responses
* Tests with dummy credentials to see what errors look like
*/
const axios = require('axios');
const BASE_URL = 'https://www.satloccloudfc.com/api/Satloc';
async function testErrorScenarios() {
console.log('='.repeat(80));
console.log('Testing SatLoc API Error Responses');
console.log('='.repeat(80));
console.log('This will test various error scenarios to see actual API responses\n');
// Test scenarios with intentionally wrong credentials
const scenarios = [
{
name: 'Wrong Username and Password',
username: 'fake@example.com',
password: 'FakePassword123'
},
{
name: 'Empty Password',
username: 'test@example.com',
password: ''
},
{
name: 'Empty Username',
username: '',
password: 'somePassword'
},
{
name: 'SQL Injection Attempt',
username: "admin' OR '1'='1",
password: "anything"
},
{
name: 'Special Characters',
username: 'test@example.com',
password: 'Pass"\'<>&123'
}
];
for (const scenario of scenarios) {
console.log('-'.repeat(80));
console.log(`Scenario: ${scenario.name}`);
console.log('-'.repeat(80));
console.log(`Username: ${scenario.username}`);
console.log(`Password: ${scenario.password ? scenario.password.substring(0, 3) + '***' : '(empty)'}\n`);
try {
// Test with axios like the actual code does
const response = await axios.get(`${BASE_URL}/AuthenticateAPIUser`, {
params: {
userLogin: scenario.username,
password: scenario.password
},
timeout: 30000,
validateStatus: (status) => status < 500 // Accept all responses except server errors
});
console.log('✓ Request succeeded (no exception thrown)');
console.log(` HTTP Status: ${response.status}`);
console.log(` Status Text: ${response.statusText}`);
console.log(` Content-Type: ${response.headers['content-type']}`);
// Show response data structure
console.log(`\n Response Data Type: ${typeof response.data}`);
console.log(` Response Data:`, JSON.stringify(response.data, null, 2));
// Check specific fields that authenticate() looks for
if (response.data && typeof response.data === 'object') {
console.log(`\n Analysis:`);
console.log(` - Has ErrorMessage? ${!!response.data.ErrorMessage}`);
console.log(` - ErrorMessage: "${response.data.ErrorMessage || '(none)'}"`);
console.log(` - Has userId? ${!!response.data.userId}`);
console.log(` - Has companyId? ${!!response.data.companyId}`);
console.log(` - Has email? ${!!response.data.email}`);
// Show what authenticate() would do
if (!response.data || response.data.ErrorMessage) {
console.log(`\n ⚠ authenticate() would REJECT this (has ErrorMessage or no data)`);
} else if (response.data.userId && response.data.companyId) {
console.log(`\n ✓ authenticate() would ACCEPT this (has userId and companyId)`);
}
}
} catch (error) {
console.log('✗ Request threw exception');
console.log(` Error Name: ${error.name}`);
console.log(` Error Message: ${error.message}`);
console.log(` Error Code: ${error.code || '(none)'}`);
if (error.response) {
console.log(`\n Response received:`);
console.log(` Status: ${error.response.status}`);
console.log(` Status Text: ${error.response.statusText}`);
console.log(` Content-Type: ${error.response.headers['content-type']}`);
console.log(` Data Type: ${typeof error.response.data}`);
console.log(` Data:`, JSON.stringify(error.response.data, null, 2));
} else if (error.request) {
console.log(`\n No response received (network/timeout error)`);
}
}
console.log('\n');
// Small delay between requests to be nice to their server
await new Promise(resolve => setTimeout(resolve, 1000));
}
console.log('='.repeat(80));
console.log('Test Complete!');
console.log('='.repeat(80));
console.log('\nSummary:');
console.log('- Check which scenarios returned ErrorMessage field');
console.log('- Check HTTP status codes for auth failures');
console.log('- Check response structure for errors vs success');
}
testErrorScenarios()
.then(() => process.exit(0))
.catch(error => {
console.error('Test failed:', error);
process.exit(1);
});