fix: GeoIP Interceptor + Test Cases
Checklist
Make sure you have
- [x] Added test cases (unit and integration) wherever required
Description
Describe the aim/objective of this PR
Steps to test
Add steps to run and test teh desired changes
References
Add relevant links and screenshots outlining the working status of this PR Updated pr : #134
Demo
If relevant to your change, attach a screen recording showcasing that the change is working and giving desired results.
Summary by CodeRabbit
-
New Features
- Introduced
GeoIPInterceptorto perform geolocation checks based on IP addresses. - Added CodeQL GitHub Actions workflow for code analysis.
- Updated README with additional documentation and installation instructions.
- Added
@samagra-x/stencildependency topackage.json.
- Introduced
-
Bug Fixes
- Updated
nest-cli.jsoncollection reference to@nestjs/schematics.
- Updated
-
Chores
- Configured ESLint and Prettier for TypeScript in
sample/07-geopip-blocking. - Added
.gitignoreand.example.envfor configurations and exclusions.
- Configured ESLint and Prettier for TypeScript in
-
Tests
- Introduced tests for
FastifyFileInterceptorandAppController. - Added E2E tests for
GeoIpInterceptor.
- Introduced tests for
-
Documentation
- Enhanced README with framework purpose, usage instructions, and acknowledgements.
Parent issue: https://github.com/SamagraX-Stencil/stencil/issues/93
[!IMPORTANT]
Review skipped
Auto reviews are disabled on base/target branches other than the default branch.
Please check the settings in the CodeRabbit UI or the
.coderabbit.yamlfile in this repository. To trigger a single review, invoke the@coderabbitai reviewcommand.You can disable this status message by setting the
reviews.review_statustofalsein the CodeRabbit configuration file.
Walkthrough
The recent changes introduce a new GitHub Actions workflow for CodeQL analysis and update the README for enhanced clarity. They include modifications to the Stencil backend framework and introduce tests for file uploads. New GeoIPInterceptor functionality has been added, enabling the blocking of requests based on geolocation. Various sample projects have been updated with new configuration files, dependencies, and documentation improvements.
Changes
| File(s) / Path(s) | Summary |
|---|---|
.github/workflows/codeql.yml |
Introduced GitHub Actions CodeQL workflow for code security analysis. |
README.md |
Updated descriptions, clarified purpose, simplified usage instructions, and added acknowledgements. |
packages/common/src/interceptors/file-upload.interceptor.ts |
Modified FastifyFileInterceptor functionality. |
packages/common/src/interceptors/geoip.interceptor.ts |
Added logger, accessDeniedMessage, accessDeniedStatus, updated constructor, method signatures. |
packages/common/src/interceptors/index.ts |
Added export statement for geoip.interceptor. |
packages/common/test/file-upload.interceptor.spec.ts |
Introduced tests for FastifyFileInterceptor handling file uploads. |
sample/06-file-upload/nest-cli.json |
Changed collection reference from @samagra-x/schematics to @nestjs/schematics. |
sample/06-file-upload/package.json |
Added dependencies, reordered dev dependencies, updated husky. |
sample/07-geopip-blocking/... |
Introduced new ESLint, .example.env, .gitignore, .prettierrc, README.md, nest-cli.json, package.json, app.controller.spec.ts, app.controller.ts, app.module.ts, app.service.ts, main.ts, e2e test files, and tsconfig.json with updated configurations and sample app setup. |
Sequence Diagram(s)
sequenceDiagram
participant User
participant App
participant GeoIPInterceptor
participant GeoService
User ->> App: Send Request
App ->> GeoIPInterceptor: Intercept Request
GeoIPInterceptor ->> GeoService: Get Location by IP
GeoService -->> GeoIPInterceptor: Location Data
GeoIPInterceptor -->> App: Allow/Deny Request
App -->> User: Response
Poem
🐇 In the code with care we've sown,
GitHub Actions freshly flown,
Security checks with CodeQL,
README speaks our tale to tell.
Geo blocks keep the site secure,
Developer's path made clear and pure.
APIs bloom with tests anew,
NestJS guides our journey through. 🚀📘
Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media?
Tips
Chat
There are 3 ways to chat with CodeRabbit:
- Review comments: Directly reply to a review comment made by CodeRabbit. Example:
I pushed a fix in commit <commit_id>.Generate unit testing code for this file.Open a follow-up GitHub issue for this discussion.
- Files and specific lines of code (under the "Files changed" tab): Tag
@coderabbitaiin a new review comment at the desired location with your query. Examples:@coderabbitai generate unit testing code for this file.@coderabbitai modularize this function.
- PR comments: Tag
@coderabbitaiin a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:@coderabbitai generate interesting stats about this repository and render them as a table.@coderabbitai show all the console.log statements in this repository.@coderabbitai read src/utils.ts and generate unit testing code.@coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.@coderabbitai help me debug CodeRabbit configuration file.
Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.
CodeRabbit Commands (Invoked using PR comments)
@coderabbitai pauseto pause the reviews on a PR.@coderabbitai resumeto resume the paused reviews.@coderabbitai reviewto trigger an incremental review. This is useful when automatic reviews are disabled for the repository.@coderabbitai full reviewto do a full review from scratch and review all the files again.@coderabbitai summaryto regenerate the summary of the PR.@coderabbitai resolveresolve all the CodeRabbit review comments.@coderabbitai configurationto show the current CodeRabbit configuration for the repository.@coderabbitai helpto get help.
Other keywords and placeholders
- Add
@coderabbitai ignoreanywhere in the PR description to prevent this PR from being reviewed. - Add
@coderabbitai summaryto generate the high-level summary at a specific location in the PR description. - Add
@coderabbitaianywhere in the PR title to generate the title automatically.
CodeRabbit Configuration File (.coderabbit.yaml)
- You can programmatically configure CodeRabbit by adding a
.coderabbit.yamlfile to the root of your repository. - Please see the configuration documentation for more information.
- If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation:
# yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json
Documentation and Community
- Visit our Documentation for detailed information on how to use CodeRabbit.
- Join our Discord Community to get help, request features, and share feedback.
- Follow us on X/Twitter for updates and announcements.
- [x] @Savio629 to resolve the conflicts on this PR.
- [x] @techsavvyash @Savio629 to rethink on how to define the location rather than just passing in a list of countries. - We should be able to give a list of coordinates, geofence, list of countries, cities, etc.
⚠️ GitGuardian has uncovered 2 secrets following the scan of your pull request.
Please consider investigating the findings and remediating the incidents. Failure to do so may lead to compromising the associated services or software components.
Since your pull request originates from a forked repository, GitGuardian is not able to associate the secrets uncovered with secret incidents on your GitGuardian dashboard. Skipping this check run and merging your pull request will create secret incidents on your GitGuardian dashboard.
🔎 Detected hardcoded secrets in your pull request
| GitGuardian id | GitGuardian status | Secret | Commit | Filename | |
|---|---|---|---|---|---|
| 13002703 | Triggered | Generic High Entropy Secret | ed7cf9d5e1fd488bee07c1681c10249b09ffebbe | packages/common/test/file-upload/file-upload.service.spec.ts | View secret |
| 13002703 | Triggered | Generic High Entropy Secret | a3a8bfffb5765085cb613f59dba2b7bf180b1a4e | packages/common/test/file-upload/file-upload.service.spec.ts | View secret |
🛠 Guidelines to remediate hardcoded secrets
- Understand the implications of revoking this secret by investigating where it is used in your code.
- Replace and store your secrets safely. Learn here the best practices.
- Revoke and rotate these secrets.
- If possible, rewrite git history. Rewriting git history is not a trivial act. You might completely break other contributing developers' workflow and you risk accidentally deleting legitimate data.
To avoid such incidents in the future consider
- following these best practices for managing and storing secrets including API keys and other credentials
- install secret detection on pre-commit to catch secret before it leaves your machine and ease remediation.
🦉 GitGuardian detects secrets in your source code to help developers and security teams secure the modern development process. You are seeing this because you or someone else with access to this repository has authorized GitGuardian to scan your pull request.
CI on this thing is failing. @Savio629
CI on this thing is failing. @Savio629
Fixed it ✔
rethink on how to define the location rather than just passing in a list of countries. - We should be able to give a list of coordinates, geofence, list of countries, cities, etc.
So instead of passing just list of countries, we can pass key value pair of list of countries, coordinates, cities, geofences.
app.useGlobalInterceptors(new GeoIPInterceptor({
countries: ['India', 'United States'],
cities: ['Mumbai', 'New York'],
coordinates: [{ lat: 19.0748, lon: 72.8856 }],
geofences: [{ lat: 37.7749, lon: -122.4194, radius: 50 }],
}));
@techsavvyash
The list of countries, coordinates, cities, geofences is working
https://github.com/user-attachments/assets/437ee50d-a4ec-413b-a758-e508724ce33d