stencil icon indicating copy to clipboard operation
stencil copied to clipboard

fix: GeoIP Interceptor + Test Cases

Open DarrenDsouza7273 opened this issue 1 year ago • 6 comments

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 GeoIPInterceptor to 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/stencil dependency to package.json.
  • Bug Fixes

    • Updated nest-cli.json collection reference to @nestjs/schematics.
  • Chores

    • Configured ESLint and Prettier for TypeScript in sample/07-geopip-blocking.
    • Added .gitignore and .example.env for configurations and exclusions.
  • Tests

    • Introduced tests for FastifyFileInterceptor and AppController.
    • Added E2E tests for GeoIpInterceptor.
  • Documentation

    • Enhanced README with framework purpose, usage instructions, and acknowledgements.

Parent issue: https://github.com/SamagraX-Stencil/stencil/issues/93

DarrenDsouza7273 avatar Jun 23 '24 19:06 DarrenDsouza7273

[!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.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

You can disable this status message by setting the reviews.review_status to false in 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?

Share
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 @coderabbitai in 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 @coderabbitai in 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 pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file 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.

coderabbitai[bot] avatar Jul 06 '24 11:07 coderabbitai[bot]

  • [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.

techsavvyash avatar Jul 09 '24 18:07 techsavvyash

⚠️ 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
  1. Understand the implications of revoking this secret by investigating where it is used in your code.
  2. Replace and store your secrets safely. Learn here the best practices.
  3. Revoke and rotate these secrets.
  4. 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


🦉 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.

gitguardian[bot] avatar Jul 10 '24 18:07 gitguardian[bot]

CI on this thing is failing. @Savio629

techsavvyash avatar Aug 09 '24 19:08 techsavvyash

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

Savio629 avatar Aug 17 '24 17:08 Savio629

The list of countries, coordinates, cities, geofences is working

https://github.com/user-attachments/assets/437ee50d-a4ec-413b-a758-e508724ce33d

The denied request should send a error message in the response right?

Right now, it is just logging the denied request.

main ts - New folder - Visual Studio Code 21-08-2024 11_26_52

Savio629 avatar Aug 21 '24 06:08 Savio629