Skip to content

Commit c53a600

Browse files
authored
fix: fixed code scanning alerts (#6)
1 parent b59617f commit c53a600

File tree

5 files changed

+33
-9
lines changed

5 files changed

+33
-9
lines changed

.github/workflows/docker-build.yml

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,10 @@ on:
2424
type: boolean
2525
default: false
2626

27+
# Refer: https://docs.github.com/en/actions/security-for-github-actions/using-artifact-attestations/using-artifact-attestations-to-establish-provenance-for-builds#generating-artifact-attestations-for-your-builds
28+
permissions:
29+
contents: read
30+
2731
jobs:
2832
docker:
2933
name: Build & Push Docker Image
@@ -111,8 +115,8 @@ jobs:
111115
platforms: linux/amd64,linux/arm64
112116
push: true
113117
target: production
114-
cache-from: type=gha
115-
cache-to: type=gha,mode=max
118+
cache-from: type=registry,ref=chrisleekr/mcp-server-boilerplate:cache
119+
cache-to: type=registry,mode=max,ref=chrisleekr/mcp-server-boilerplate:cache
116120
build-args: |
117121
PACKAGE_VERSION=${{ env.PACKAGE_VERSION }}
118122
GIT_HASH=${{ env.GIT_HASH }}
@@ -129,8 +133,8 @@ jobs:
129133
platforms: linux/amd64,linux/arm64
130134
push: true
131135
target: production
132-
cache-from: type=gha
133-
cache-to: type=gha,mode=max
136+
cache-from: type=registry,ref=chrisleekr/mcp-server-boilerplate:cache
137+
cache-to: type=registry,mode=max,ref=chrisleekr/mcp-server-boilerplate:cache
134138
build-args: |
135139
PACKAGE_VERSION=${{ env.PACKAGE_VERSION }}
136140
GIT_HASH=${{ env.GIT_HASH }}

package-lock.json

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@
5555
"crypto-js": "^4.2.0",
5656
"dotenv": "^16.5.0",
5757
"express": "^5.1.0",
58+
"express-rate-limit": "^7.5.1",
5859
"helmet": "^8.1.0",
5960
"iovalkey": "^0.3.3",
6061
"jsonwebtoken": "^9.0.2",

release.config.dev.mjs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,31 +7,31 @@ export default {
77
'main',
88
{
99
name: 'feat/*',
10-
prerelease: `dev.${process.env.GITHUB_SHA?.slice(0, 7) || 'local'}`,
10+
prerelease: `dev-${process.env.GITHUB_SHA?.slice(0, 7) || 'local'}`,
1111

1212
channel: 'dev',
1313
},
1414
{
1515
name: 'fix/*',
16-
prerelease: `dev.${process.env.GITHUB_SHA?.slice(0, 7) || 'local'}`,
16+
prerelease: `dev-${process.env.GITHUB_SHA?.slice(0, 7) || 'local'}`,
1717

1818
channel: 'dev',
1919
},
2020
{
2121
name: 'refactor/*',
22-
prerelease: `dev.${process.env.GITHUB_SHA?.slice(0, 7) || 'local'}`,
22+
prerelease: `dev-${process.env.GITHUB_SHA?.slice(0, 7) || 'local'}`,
2323

2424
channel: 'dev',
2525
},
2626
{
2727
name: 'perf/*',
28-
prerelease: `dev.${process.env.GITHUB_SHA?.slice(0, 7) || 'local'}`,
28+
prerelease: `dev-${process.env.GITHUB_SHA?.slice(0, 7) || 'local'}`,
2929

3030
channel: 'dev',
3131
},
3232
{
3333
name: 'revert/*',
34-
prerelease: `dev.${process.env.GITHUB_SHA?.slice(0, 7) || 'local'}`,
34+
prerelease: `dev-${process.env.GITHUB_SHA?.slice(0, 7) || 'local'}`,
3535

3636
channel: 'dev',
3737
},

src/core/server/http/middleware.ts

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import bodyParser from 'body-parser';
22
import { Application, NextFunction, Request, Response } from 'express';
3+
import { rateLimit } from 'express-rate-limit';
34
import helmet from 'helmet';
45
import pinoHttp from 'pino-http';
56
import { v4 as uuidv4 } from 'uuid';
@@ -11,6 +12,23 @@ import { AsyncLocalStorageLoggingContext, loggingContext } from './context';
1112

1213
export function setupMiddleware(app: Application): void {
1314
app.use(helmet());
15+
16+
// Rate limit requests globally
17+
app.use(
18+
// Refer: https://express-rate-limit.mintlify.app/reference/configuration
19+
rateLimit({
20+
windowMs: 1 * 60 * 1000, // 1 minute
21+
max: 100, // Limit each IP to 100 requests per `windowMs`
22+
standardHeaders: true,
23+
legacyHeaders: false,
24+
// Can use `store` to use a database to store the rate limit data
25+
skip: (req: Request) => {
26+
// Skip rate limiting for kube-probe requests
27+
return req.headers['user-agent']?.includes('kube-probe') ?? false;
28+
},
29+
})
30+
);
31+
1432
app.use(bodyParser.json());
1533
app.use(bodyParser.urlencoded({ extended: true }));
1634

0 commit comments

Comments
 (0)