Skip to content

Conversation

perfectra1n
Copy link
Member

@perfectra1n perfectra1n commented Aug 21, 2025

Try to add some more logging (and tests) to try and help resolving #6444

@dosubot dosubot bot added the size:XL This PR changes 500-999 lines, ignoring generated files. label Aug 21, 2025
@perfectra1n perfectra1n changed the title feat(oidc): perhaps this will provide better logging and output for t… feat(oidc): perhaps this will provide better logging and output for the user Aug 21, 2025
@perfectra1n perfectra1n changed the title feat(oidc): perhaps this will provide better logging and output for the user feat(oidc): provide better logging and output for the user when oidc attempt is made Aug 21, 2025
@dosubot dosubot bot added size:XXL This PR changes 1000+ lines, ignoring generated files. and removed size:XL This PR changes 500-999 lines, ignoring generated files. labels Aug 22, 2025
app.use(auth(openID.generateOAuthConfig()));

// Add OAuth error logging middleware AFTER auth middleware
app.use(openID.oauthErrorLogger);

Check failure

Code scanning / CodeQL

Missing rate limiting High

This route handler performs
authorization
, but is not rate-limited.

Copilot Autofix

AI about 1 month ago

To fix the issue, we should add rate-limiting middleware to the application in order to prevent abuse of the authentication/authorization chain, including the openID.oauthErrorLogger middleware. The best practice is to use the popular express-rate-limit package. You should import this package near the top of your file, configure a sensible rate limit (for example, 100 requests per 15 minutes), and use app.use(limiter) immediately before the authentication middlewares, so that all upstream authentication attempts (and error loggers) will be protected. This approach ensures that expensive operations in the authentication chain are not abused by high-frequency requests. All changes are to be done in the shown region of apps/server/src/app.ts, including the import statement, definition/configuration of the limiter, and the application of the middleware.


Suggested changeset 2
apps/server/src/app.ts

Autofix patch

Autofix patch
Run the following command in your local git repository to apply this patch
cat << 'EOF' | git apply
diff --git a/apps/server/src/app.ts b/apps/server/src/app.ts
--- a/apps/server/src/app.ts
+++ b/apps/server/src/app.ts
@@ -1,3 +1,4 @@
+import RateLimit from "express-rate-limit";
 import express from "express";
 import path from "path";
 import favicon from "serve-favicon";
@@ -144,6 +145,13 @@
             });
         }
         
+        // Apply rate limiter before all authentication and error logging middleware
+        const limiter = RateLimit({
+            windowMs: 15 * 60 * 1000, // 15 minutes
+            max: 100, // limit each IP to 100 requests per windowMs
+        });
+        app.use(limiter);
+
         // Register OAuth middleware
         app.use(auth(openID.generateOAuthConfig()));
         
EOF
@@ -1,3 +1,4 @@
import RateLimit from "express-rate-limit";
import express from "express";
import path from "path";
import favicon from "serve-favicon";
@@ -144,6 +145,13 @@
});
}

// Apply rate limiter before all authentication and error logging middleware
const limiter = RateLimit({
windowMs: 15 * 60 * 1000, // 15 minutes
max: 100, // limit each IP to 100 requests per windowMs
});
app.use(limiter);

// Register OAuth middleware
app.use(auth(openID.generateOAuthConfig()));

apps/server/package.json
Outside changed files

Autofix patch

Autofix patch
Run the following command in your local git repository to apply this patch
cat << 'EOF' | git apply
diff --git a/apps/server/package.json b/apps/server/package.json
--- a/apps/server/package.json
+++ b/apps/server/package.json
@@ -4,7 +4,8 @@
   "description": "The server-side component of TriliumNext, which exposes the client via the web, allows for sync and provides a REST API for both internal and external use.",
   "private": true,
   "dependencies": {
-    "better-sqlite3": "12.2.0"
+    "better-sqlite3": "12.2.0",
+    "express-rate-limit": "^8.0.1"
   },
   "devDependencies": {
     "@electron/remote": "2.1.3",
EOF
@@ -4,7 +4,8 @@
"description": "The server-side component of TriliumNext, which exposes the client via the web, allows for sync and provides a REST API for both internal and external use.",
"private": true,
"dependencies": {
"better-sqlite3": "12.2.0"
"better-sqlite3": "12.2.0",
"express-rate-limit": "^8.0.1"
},
"devDependencies": {
"@electron/remote": "2.1.3",
This fix introduces these dependencies
Package Version Security advisories
express-rate-limit (npm) 8.0.1 None
Copilot is powered by AI and may make mistakes. Always verify output.
@perfectra1n
Copy link
Member Author

Example output from this commit:
#6444 (comment)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
size:XXL This PR changes 1000+ lines, ignoring generated files.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant