Files
wehub-resource-sync 7a0da7932b
OSV-Scanner (Scheduled) / scan-scheduled (push) Failing after 0s
Create Release / test-gate (push) Has been cancelled
Create Release / release-gate (push) Has been cancelled
Create Release / ci-gate (push) Has been cancelled
Create Release / version-check (push) Has been cancelled
Create Release / e2e-test-gate (push) Has been cancelled
Create Release / responsive-test-gate (push) Has been cancelled
Create Release / compat-test-gate (push) Has been cancelled
Create Release / compose-integration-gate (push) Has been cancelled
Create Release / vulture-gate (push) Has been cancelled
Create Release / build (push) Has been cancelled
Create Release / provenance (push) Has been cancelled
Create Release / prerelease-docker (push) Has been cancelled
Create Release / publish-docker (push) Has been cancelled
Create Release / create-release (push) Has been cancelled
Create Release / cleanup-changelog (push) Has been cancelled
Create Release / trigger-pypi (push) Has been cancelled
Create Release / monitor-pypi (push) Has been cancelled
Create Release / Clean up orphan prerelease tags and signatures (push) Has been cancelled
Docker Tests (Consolidated) / UI Tests (Puppeteer) [research-form] (push) Has been cancelled
Docker Tests (Consolidated) / UI Tests (Puppeteer) [research-metrics] (push) Has been cancelled
Docker Tests (Consolidated) / UI Tests (Puppeteer) [research-workflow] (push) Has been cancelled
Docker Tests (Consolidated) / UI Tests (Puppeteer) [settings-core] (push) Has been cancelled
CodeQL Advanced / Analyze (javascript-typescript) (push) Has been cancelled
Docker Tests (Consolidated) / UI Tests (Puppeteer) [history-news] (push) Has been cancelled
Docker Tests (Consolidated) / UI Tests (Puppeteer) [library] (push) Has been cancelled
Docker Tests (Consolidated) / UI Tests (Puppeteer) [link-analytics] (push) Has been cancelled
Docker Tests (Consolidated) / UI Tests (Puppeteer) [chat-core] (push) Has been cancelled
Docker Tests (Consolidated) / UI Tests (Puppeteer) [chat-lifecycle] (push) Has been cancelled
Docker Tests (Consolidated) / UI Tests (Puppeteer) [error-benchmark] (push) Has been cancelled
Docker Tests (Consolidated) / UI Tests (Puppeteer) [settings-pages] (push) Has been cancelled
Docker Tests (Consolidated) / UI Tests (Puppeteer) (push) Has been cancelled
Docker Tests (Consolidated) / Accessibility Tests (push) Has been cancelled
Docker Tests (Consolidated) / LLM Unit Tests (push) Has been cancelled
Docker Tests (Consolidated) / LLM Example Tests (push) Has been cancelled
Docker Tests (Consolidated) / Production Image Smoke Test (push) Has been cancelled
Docker Tests (Consolidated) / Infrastructure Tests (push) Has been cancelled
OSSF Scorecard / OSSF Security Scorecard Analysis (push) Has been cancelled
Docker Tests (Consolidated) / UI Tests (Puppeteer) [mobile] (push) Has been cancelled
Backwards Compatibility / Verify Encryption Constants (push) Has been cancelled
Backwards Compatibility / PyPI Version Compatibility (push) Has been cancelled
Backwards Compatibility / Database Migration Tests (push) Has been cancelled
CodeQL Advanced / Analyze (python) (push) Has been cancelled
Docker Tests (Consolidated) / detect-changes (push) Has been cancelled
Docker Tests (Consolidated) / Build Test Image (push) Has been cancelled
Docker Tests (Consolidated) / All Pytest Tests + Coverage (push) Has been cancelled
Docker Tests (Consolidated) / UI Tests (Puppeteer) [accessibility] (push) Has been cancelled
Docker Tests (Consolidated) / UI Tests (Puppeteer) [api-crud] (push) Has been cancelled
Docker Tests (Consolidated) / UI Tests (Puppeteer) [auth-login] (push) Has been cancelled
Docker Tests (Consolidated) / UI Tests (Puppeteer) [auth-pages] (push) Has been cancelled
Docker Tests (Consolidated) / UI Tests (Puppeteer) [auth-register] (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 13:08:55 +08:00

161 lines
6.2 KiB
JavaScript

const puppeteer = require('puppeteer');
const AuthHelper = require('./auth_helper');
const { getPuppeteerLaunchOptions } = require('./puppeteer_config');
// Explore the settings page to find input fields
(async () => {
let browser;
try {
console.log('=== Exploring Settings Page ===');
browser = await puppeteer.launch(getPuppeteerLaunchOptions());
const page = await browser.newPage();
await page.setViewport({ width: 1920, height: 1080 });
const authHelper = new AuthHelper(page);
// Create and login user
const timestamp = Date.now();
const testUsername = `explore_test_${timestamp}`;
await authHelper.register(testUsername, 'testpass123');
console.log('User registered and logged in');
// Navigate to settings
await page.goto('http://localhost:5000/settings', { waitUntil: 'domcontentloaded' });
await new Promise(resolve => setTimeout(resolve, 2000));
// Get page title
const title = await page.title();
console.log(`\nPage title: ${title}`);
// Find all forms
const forms = await page.evaluate(() => {
const formElements = document.querySelectorAll('form');
return Array.from(formElements).map((form, index) => ({
index,
id: form.id,
action: form.action,
method: form.method,
inputCount: form.querySelectorAll('input').length
}));
});
console.log(`\nFound ${forms.length} forms:`);
forms.forEach(form => {
console.log(` Form ${form.index}: id="${form.id}", action="${form.action}", method="${form.method}", inputs=${form.inputCount}`);
});
// Find all input fields
const inputs = await page.evaluate(() => {
const inputElements = document.querySelectorAll('input');
return Array.from(inputElements).map(input => ({
type: input.type,
name: input.name,
id: input.id,
placeholder: input.placeholder,
value: input.value ? (input.type === 'password' ? '***' : input.value.substring(0, 20)) : '',
dataAttributes: Object.keys(input.dataset),
visible: input.offsetParent !== null
}));
});
console.log(`\nFound ${inputs.length} input fields:`);
// Filter for API key related fields
const apiKeyFields = inputs.filter(input =>
input.name.includes('api_key') ||
input.id.includes('api_key') ||
input.placeholder?.toLowerCase().includes('api') ||
input.name.includes('openai') ||
input.id.includes('openai')
);
console.log(`\nAPI key related fields (${apiKeyFields.length}):`);
apiKeyFields.forEach(field => {
console.log(` ${field.type} - name: "${field.name}", id: "${field.id}", visible: ${field.visible}`);
if (field.dataAttributes.length > 0) {
console.log(` Data attributes: ${field.dataAttributes.join(', ')}`);
}
});
// Look for password type inputs
const passwordFields = inputs.filter(input => input.type === 'password');
console.log(`\nPassword fields (${passwordFields.length}):`);
passwordFields.forEach(field => {
console.log(` name: "${field.name}", id: "${field.id}", visible: ${field.visible}`);
});
// Check for navigation or tabs
const navLinks = await page.evaluate(() => {
const links = document.querySelectorAll('a[href*="settings"], .nav-link, .tab-link, [role="tab"]');
return Array.from(links).map(link => ({
text: link.textContent.trim(),
href: link.href,
classes: link.className
}));
});
console.log(`\nNavigation/Tab links (${navLinks.length}):`);
navLinks.forEach(link => {
if (link.text.toLowerCase().includes('llm') || link.text.toLowerCase().includes('api') || link.text.toLowerCase().includes('openai')) {
console.log(` "${link.text}" - ${link.href}`);
}
});
// Check if we need to expand any sections
const expandables = await page.evaluate(() => {
const elements = document.querySelectorAll('[data-toggle="collapse"], .collapse, .accordion-button, details');
return Array.from(elements).map(el => ({
tag: el.tagName,
text: el.textContent.substring(0, 50),
classes: el.className
}));
});
if (expandables.length > 0) {
console.log(`\nFound ${expandables.length} expandable sections`);
}
// Take screenshot
await page.screenshot({
path: `/tmp/settings_exploration_${timestamp}.png`,
fullPage: true
});
console.log(`\nScreenshot saved: /tmp/settings_exploration_${timestamp}.png`);
// Try to find LLM section and click it
const llmSection = await page.$('a[href*="llm"], [data-section="llm"], a.nav-link[href*="llm"]');
if (llmSection) {
console.log('\nFound LLM section, clicking...');
await llmSection.click();
await new Promise(resolve => setTimeout(resolve, 1000));
// Re-scan for inputs after clicking
const newInputs = await page.evaluate(() => {
const inputElements = document.querySelectorAll('input[name*="openai"], input[id*="openai"]');
return Array.from(inputElements).map(input => ({
type: input.type,
name: input.name,
id: input.id,
visible: input.offsetParent !== null
}));
});
console.log(`\nOpenAI-related inputs after clicking LLM section (${newInputs.length}):`);
newInputs.forEach(field => {
console.log(` ${field.type} - name: "${field.name}", id: "${field.id}", visible: ${field.visible}`);
});
}
} catch (error) {
console.error('Error:', error.message);
} finally {
if (browser) {
await browser.close();
}
}
})();