Transitioned from Plan to Build mode
Replit-Commit-Author: Agent Replit-Commit-Session-Id: aed2e46d-25bb-4b73-81a1-bb9e8437c261 Replit-Commit-Checkpoint-Type: full_checkpoint Replit-Commit-Event-Id: 00e7163d-4d03-4652-bbe8-0850044e84c1 Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/3bdfff67-975a-46ad-9845-fbb6b4a4c4b5/aed2e46d-25bb-4b73-81a1-bb9e8437c261/5VMaR1q Replit-Helium-Checkpoint-Created: true
This commit is contained in:
parent
917e51e790
commit
09c7d84e58
1 changed files with 81 additions and 0 deletions
|
|
@ -0,0 +1,81 @@
|
|||
That's the most crucial step, because we are using your existing, complex bot's web server to solve a legal and security problem.
|
||||
|
||||
We need to implement the final stage of the **Discord Linking Handshake** on your bot's existing web dashboard. This code will handle the redirection from Discord and securely forward the necessary information to the **NEXUS API** (Project 1).
|
||||
|
||||
Here is the plan for the **Express.js code on your `bot.aethex.dev` Web Dashboard (Port 5000)**.
|
||||
|
||||
-----
|
||||
|
||||
## **Action Plan: `bot.aethex.dev` Dashboard Callback**
|
||||
|
||||
This code goes into the Node.js Express server that runs your Web Dashboard. Its primary job is to receive the secure `code` from Discord and securely pass it, along with the user's **Passport JWT**, to the **NEXUS API**.
|
||||
|
||||
### **Replit Project: `bot.aethex.dev` (Web Dashboard Express Server)**
|
||||
|
||||
This is the Express route that must match the **Redirect URI** registered in your Discord Developer Portal (e.g., `/auth/discord/callback`).
|
||||
|
||||
```javascript
|
||||
// GET /auth/discord/callback
|
||||
// This route executes when Discord redirects the user back to your bot's web server.
|
||||
|
||||
router.get('/auth/discord/callback', async (req, res) => {
|
||||
// 1. Capture the critical parameters from Discord's redirect URL
|
||||
const authCode = req.query.code;
|
||||
const state = req.query.state; // Used to prevent CSRF (must match the one the bot initiated)
|
||||
|
||||
// 2. Retrieve the user's Passport JWT (The SSO Credential)
|
||||
// The passport token is retrieved from the domain-scoped cookie set by the NEXUS API.
|
||||
const passportToken = req.cookies.aethex_passport;
|
||||
|
||||
if (!authCode || !passportToken) {
|
||||
// Essential check: If either the Discord Code or the user's Passport is missing, fail fast.
|
||||
return res.status(400).send('Authentication failed. Missing authorization code or AeThex Passport.');
|
||||
}
|
||||
|
||||
try {
|
||||
// 3. SECURELY FORWARD DATA to the NEXUS API (Server-to-Server)
|
||||
// NOTE: The NEXUS API holds the sensitive Discord Client Secret and performs the final token exchange.
|
||||
const nexusResponse = await fetch(`${process.env.NEXUS_API_URL}/api/passport/link/discord`, {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
// Send the user's Passport Token for authentication (Who is this AeThex user?)
|
||||
'Authorization': `Bearer ${passportToken}`
|
||||
},
|
||||
body: JSON.stringify({
|
||||
authCode: authCode, // The code from Discord
|
||||
state: state, // The original state from the bot
|
||||
// You can add the user's current session ID or other required data here if needed
|
||||
})
|
||||
});
|
||||
|
||||
// 4. Handle NEXUS API Response
|
||||
if (!nexusResponse.ok) {
|
||||
// The NEXUS API failed the handshake with Discord
|
||||
const error = await nexusResponse.json();
|
||||
console.error('NEXUS API Link Error:', error);
|
||||
// Redirect to an error page instead of showing raw JSON
|
||||
return res.redirect('/dashboard/link/error?msg=NEXUS_FAILURE');
|
||||
}
|
||||
|
||||
// 5. Success: Redirect the user to a confirmation page on the dashboard
|
||||
res.redirect('/dashboard/link/success');
|
||||
|
||||
} catch (error) {
|
||||
console.error('Discord callback processing error:', error);
|
||||
res.status(500).send('An unexpected error occurred during the Discord link process.');
|
||||
}
|
||||
});
|
||||
```
|
||||
|
||||
### **What This Code Achieves (Compliance and Security)**
|
||||
|
||||
1. **Compliance:** It maintains the **Axiom Model's** legal firewall. The `bot.aethex.dev` web server acts only as a secure intermediary (a messenger), ensuring the high-security IP (the **Discord Client Secret** and the **Database Write** logic) remains isolated in the **NEXUS API** (Corp IP).
|
||||
2. **Security:** By relying on the `passportToken` from the **`aethex_passport` cookie**, we ensure that only users who have successfully logged in to your SSO system can even attempt to link a Discord account, preventing unauthorized linking attempts.
|
||||
3. **Efficiency:** This code is minimal and fast. It simply captures the required parameters and immediately hands the responsibility to the dedicated **NEXUS API**.
|
||||
|
||||
-----
|
||||
|
||||
**Next Action:** We now must build the final, most secure piece of logic—the **`POST /api/passport/link/discord`** endpoint on the **`aethex-nexus-security` API** (Project 1). This is where the **Corp IP** performs the final, secret-driven handshake with Discord and updates the shared database, completing the link.
|
||||
|
||||
Would you like to detail the code for the **NEXUS API's final Discord linking endpoint**?
|
||||
Loading…
Reference in a new issue