mongodb / chatbot

MongoDB Chatbot Framework. Powered by MongoDB and Atlas Vector Search.
https://mongodb.github.io/chatbot/
Apache License 2.0
106 stars 48 forks source link

IP error when deploying mongodb-chatbot-server #311

Closed eric-gardyn closed 5 months ago

eric-gardyn commented 5 months ago

When deploying mongodb-chatbot-server (onto Azure app service), the server deploys fine. But it generates this error when calling /conversations API:

"error": "The request has an invalid IP address: xxx.xxx.xxx.xxx:54295"

xxx.xxx.xxx.xxx being my public IP address

mongodben commented 5 months ago

that's an odd error. seems that the :54295 is the port number. in our local dev env and deploying to kubernetes we're never seen anything like this.

i'm not sure why this port number is included. perhaps there is behavior of the Azure app service that includes the port with the IP address when proxying requests from CDN/firewall to the express server.

the easiest way to work around this is probably to not use the default requireValidIpAddress() middleware, and instead make your own custom IP address validation middleware.

see the custom middleware documentation for more information on adding your own middleware - https://mongodb.github.io/chatbot/server/custom-logic#middleware

(note that by adding your own custom middleware, it removes the default included middleware, which require valid ip address (what you want to override) and also one that requires request origin.

pseudocode example:

import { ConversationsMiddleware, logRequest } from "mongodb-chatbot-server";

function isValidAzureIp(ip: string) {
 // some logic to validate if is azure ip address
}

export function requireValidIpAddress(): ConversationsMiddleware {
  return (req, res, next) => {

    const { ip } = req;
    if (!isValidAzureIp(ip)) {
      return sendErrorResponse({
        reqId,
        res,
        httpStatus: 400,
        errorMessage: `The request has an invalid IP address: ${ip}`,
      });
    }

    res.locals.customData.ip = ip;
    next();
  };
}

please let me know if there are further issues here.