Refactor WordPress integration service to use API key for connection testing
- Updated the `IntegrationService` to perform connection tests using only the API key, removing reliance on username and app password. - Simplified health check logic and improved error messaging for better clarity. - Added functionality to revoke API keys in the `WordPressIntegrationForm` component. - Enhanced site settings page with a site selector and improved integration status display. - Cleaned up unused code and improved overall structure for better maintainability.
This commit is contained in:
131
CONNECTION_STATUS_FIX.md
Normal file
131
CONNECTION_STATUS_FIX.md
Normal file
@@ -0,0 +1,131 @@
|
||||
# Connection Status Indicator Fix
|
||||
|
||||
## Date: 2025-11-22
|
||||
|
||||
## Problem
|
||||
|
||||
The "Connected" indicator on the Site Settings page was incorrectly showing "Connected" status just because the **Hosting Type was set to "WordPress"**, without actually verifying:
|
||||
1. Whether a WordPress integration was configured
|
||||
2. Whether the API credentials were valid
|
||||
3. Whether the connection was authenticated
|
||||
|
||||
This gave a false sense of connection when no actual integration existed.
|
||||
|
||||
---
|
||||
|
||||
## Root Cause
|
||||
|
||||
There were **two places** in the code that incorrectly assumed a site was "connected" based only on hosting type:
|
||||
|
||||
### Issue 1: In `loadSite()` function (Line 152-155)
|
||||
```typescript
|
||||
// WRONG ❌
|
||||
if (!wordPressIntegration && (data.wp_api_key || data.hosting_type === 'wordpress')) {
|
||||
setIntegrationTestStatus('connected');
|
||||
setIntegrationLastChecked(new Date().toISOString());
|
||||
}
|
||||
```
|
||||
|
||||
**Problem:** Marked as "connected" if hosting type was WordPress, regardless of actual integration status.
|
||||
|
||||
### Issue 2: In `runIntegrationTest()` function (Line 235-239)
|
||||
```typescript
|
||||
// WRONG ❌
|
||||
if (site?.wp_api_key || site?.wp_url || site?.hosting_type === 'wordpress') {
|
||||
setIntegrationTestStatus('connected');
|
||||
setIntegrationLastChecked(new Date().toISOString());
|
||||
return;
|
||||
}
|
||||
```
|
||||
|
||||
**Problem:** Assumed "connected" if hosting type was WordPress without testing the actual connection.
|
||||
|
||||
---
|
||||
|
||||
## Solution
|
||||
|
||||
### Fix 1: Removed automatic "connected" status in `loadSite()`
|
||||
```typescript
|
||||
// FIXED ✅
|
||||
});
|
||||
// Don't automatically mark as connected - wait for actual connection test
|
||||
```
|
||||
|
||||
**Result:** Site loading no longer assumes connection status. It waits for the actual integration test.
|
||||
|
||||
### Fix 2: Changed `runIntegrationTest()` to require actual integration
|
||||
```typescript
|
||||
// FIXED ✅
|
||||
if (wordPressIntegration && wordPressIntegration.id) {
|
||||
resp = await fetchAPI(`/v1/integration/integrations/${wordPressIntegration.id}/test_connection/`, { method: 'POST', body: {} });
|
||||
} else {
|
||||
// No integration configured - mark as not configured
|
||||
setIntegrationTestStatus('not_configured');
|
||||
return;
|
||||
}
|
||||
```
|
||||
|
||||
**Result:** Connection test only runs if there's an actual integration record with credentials. Otherwise, shows "Not configured".
|
||||
|
||||
---
|
||||
|
||||
## New Behavior
|
||||
|
||||
### ✅ "Connected" Status - Only When:
|
||||
1. **Integration exists** - There's a SiteIntegration record with credentials
|
||||
2. **Connection tested** - The `/test_connection/` API call succeeds
|
||||
3. **Authentication valid** - The API credentials are verified by the backend
|
||||
|
||||
### ⚠️ "Not configured" Status - When:
|
||||
1. No SiteIntegration record exists
|
||||
2. No WordPress integration is set up
|
||||
3. Even if hosting type is "WordPress"
|
||||
|
||||
### 🔴 "Error" Status - When:
|
||||
1. Integration exists but connection test fails
|
||||
2. API credentials are invalid
|
||||
3. WordPress site is unreachable
|
||||
|
||||
### ⏳ "Pending" Status - When:
|
||||
1. Connection test is currently running
|
||||
|
||||
---
|
||||
|
||||
## Files Modified
|
||||
|
||||
**File:** `/data/app/igny8/frontend/src/pages/Sites/Settings.tsx`
|
||||
|
||||
**Changes:**
|
||||
1. ✅ Removed lines 152-155 that set "connected" based on hosting type
|
||||
2. ✅ Removed lines 235-239 that assumed connection without testing
|
||||
3. ✅ Now requires actual integration record to show "connected"
|
||||
4. ✅ Only shows "connected" after successful test_connection API call
|
||||
|
||||
---
|
||||
|
||||
## Testing Scenarios
|
||||
|
||||
### Scenario 1: Site with WordPress hosting but NO integration
|
||||
- **Before Fix:** ❌ Shows "Connected" (WRONG)
|
||||
- **After Fix:** ✅ Shows "Not configured" (CORRECT)
|
||||
|
||||
### Scenario 2: Site with configured WordPress integration & valid credentials
|
||||
- **Before Fix:** ✅ Shows "Connected" (already correct)
|
||||
- **After Fix:** ✅ Shows "Connected" (still correct)
|
||||
|
||||
### Scenario 3: Site with configured integration but invalid credentials
|
||||
- **Before Fix:** ❌ Shows "Connected" (WRONG)
|
||||
- **After Fix:** ✅ Shows "Error" (CORRECT)
|
||||
|
||||
---
|
||||
|
||||
## Impact
|
||||
|
||||
This fix ensures that users can **trust the connection indicator**:
|
||||
- Green = Actually connected and authenticated
|
||||
- Gray = Not configured (need to set up integration)
|
||||
- Red = Configuration exists but connection failed
|
||||
- Yellow = Testing connection
|
||||
|
||||
**No more false positives!** 🎯
|
||||
|
||||
Reference in New Issue
Block a user