electerious / Ackee

Self-hosted, Node.js based analytics tool for those who care about privacy.
https://ackee.electerious.com
MIT License
4.2k stars 351 forks source link

Error when using MongoDB URL with replicas #310

Open dottgonzo opened 2 years ago

dottgonzo commented 2 years ago

🐞 Describe the bug

i'm using my default connection to my replicated instance of mongo db. The url is:

mongodb://USERNAME:PASSWORD@MONGO1_URL:27017,MONGO2_URL:27017,MONGO3_URL:27017/ackee?authSource=admin&authMechanism=SCRAM-SHA-1

with MONGO1_URL, MONGO2_URL, MONGO3_URL fql names of the mongodb servers (that is currently used from many apps as mongodb uri),

but when the container start, it crash with:

TypeError [ERR_INVALID_URL]: Invalid URL: ........

and the error shows the desidered uri

it seems a valid url, accepted from mongodb spec, what is wrong? it seems an issue

the mongodb spec is:

mongodb://[username:password@]host1[:port1][,...hostN[:portN]][/[defaultauthdb][?options]]
dottgonzo commented 2 years ago

seems that if use the same URI removing ports it works, so:

mongodb://USERNAME:PASSWORD@MONGO1_URL,MONGO2_URL,MONGO3_URL/ackee?authSource=admin&authMechanism=SCRAM-SHA-1

instead of

mongodb://USERNAME:PASSWORD@MONGO1_URL:27017,MONGO2_URL:27017,MONGO3_URL:27017/ackee?authSource=admin&authMechanism=SCRAM-SHA-1

but the ports are allowed on mongodb specs, so it remain a bug

electerious commented 2 years ago

Found the problem. Ackee passes the URL to mongoose.connect so it theoretically supports this type of URL, but there's a stripUrlAuth function that removes the username and password from the URL before logging it to the console and this function can't deal with multiple URLs. See https://github.com/electerious/Ackee/blob/master/src/index.js#L19

A PR is welcome!