Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(tls): Add preconfigured TLS settings #118

Merged
merged 6 commits into from
Aug 13, 2024
Merged

feat(tls): Add preconfigured TLS settings #118

merged 6 commits into from
Aug 13, 2024

Conversation

0x676e67
Copy link
Owner

@0x676e67 0x676e67 commented Aug 13, 2024

Summary by CodeRabbit

  • New Features

    • Added a feature for customizable header order management.
    • Introduced preconfigured TLS/HTTP2 settings to enhance usability and security for users.
  • Documentation

    • Updated the README documentation for improved clarity regarding new features and functionality.
  • Refactor

    • Enhanced the ClientBuilder struct for better TLS settings handling and HTTP version preferences, improving overall usability.

Copy link

coderabbitai bot commented Aug 13, 2024

Warning

Rate limit exceeded

@0x676e67 has exceeded the limit for the number of commits or files that can be reviewed per hour. Please wait 21 minutes and 0 seconds before requesting another review.

How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

Commits

Files that changed from the base of the PR and between 1df1812 and 73ce83b.

Walkthrough

The recent changes enhance the management of TLS settings and HTTP headers, introducing a modular approach. Key updates include the addition of preconfigured TLS capabilities and a new enum variant for HTTP version preferences, allowing developers greater flexibility and control. This refinement improves the usability of the API, making it easier to establish secure connections and manage headers dynamically.

Changes

Files Change Summary
examples/pre_configured_tls.rs Introduces an async main function for setting up a TLS client with configurable HTTP/2 settings.
src/async_impl/client.rs Modifies ClientBuilder for better TLS handling; adds All variant to HttpVersionPref and new methods for applying TLS settings.
src/blocking/client.rs Adds use_preconfigured_tls method for flexible TLS configuration; updates TLS version methods for consistency.
src/lib.rs Exports HttpVersionPref for wider accessibility.
src/tls/impersonate/... Updates get_settings across multiple files to return tuples of TlsSettings and closures for header initialization, enhancing flexibility and modularity.

Sequence Diagram(s)

sequenceDiagram
    participant Client
    participant TLS_Settings
    participant Header_Initialization

    Client->>TLS_Settings: Request TLS settings
    TLS_Settings-->>Client: Return (TlsSettings, init_headers closure)
    Client->>Header_Initialization: Execute init_headers with HeaderMap
    Header_Initialization-->>Client: Headers initialized
Loading

🐰 In the meadow where bunnies play,
New TLS settings brighten the day!
With headers in tow, they hop with glee,
A flexible world, so merry and free!
Hooray for changes, let’s leap and cheer,
Code's now a garden, blooming this year! 🌼


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

Additionally, you can add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.

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.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 8

Outside diff range, codebase verification and nitpick comments (13)
src/tls/impersonate/safari/safari17_0.rs (1)

12-30: Enhance documentation for the get_settings function.

The function now returns a tuple containing TlsSettings and a closure for header initialization. It would be beneficial to document this behavior clearly, especially the purpose and usage of the closure.

/// Returns TLS settings and a closure for initializing headers.
/// 
/// The closure can be used to set default HTTP headers for the connection.
src/tls/impersonate/safari/safari17_2_1.rs (1)

12-30: Enhance documentation for the get_settings function.

The function now returns a tuple containing TlsSettings and a closure for header initialization. It would be beneficial to document this behavior clearly, especially the purpose and usage of the closure.

/// Returns TLS settings and a closure for initializing headers.
/// 
/// The closure can be used to set default HTTP headers for the connection.
src/tls/impersonate/safari/safari17_5.rs (1)

12-30: Enhance documentation for the get_settings function.

The function now returns a tuple containing TlsSettings and a closure for header initialization. It would be beneficial to document this behavior clearly, especially the purpose and usage of the closure.

/// Returns TLS settings and a closure for initializing headers.
/// 
/// The closure can be used to set default HTTP headers for the connection.
src/tls/impersonate/chrome/v114.rs (1)

14-32: Enhance documentation for get_settings.

The function now returns a tuple with TlsSettings and a closure for header initialization. Consider updating the documentation to reflect this change, explaining the purpose and usage of the closure.

/// Returns a tuple containing TlsSettings and a closure to initialize headers.
/// 
/// The closure allows for flexible header management after obtaining the TLS settings.
src/tls/impersonate/chrome/v100.rs (1)

14-32: Update get_settings documentation.

The function now returns a tuple with TlsSettings and a closure for header initialization. It's beneficial to update the documentation to explain the closure's purpose.

/// Returns a tuple containing TlsSettings and a closure to initialize headers.
/// 
/// The closure allows for flexible header management after obtaining the TLS settings.
src/tls/impersonate/chrome/v101.rs (1)

14-32: Add documentation for get_settings.

The function now returns a tuple with TlsSettings and a closure for header initialization. Consider documenting this change to enhance understanding of the closure's role.

/// Returns a tuple containing TlsSettings and a closure to initialize headers.
/// 
/// The closure allows for flexible header management after obtaining the TLS settings.
src/tls/impersonate/chrome/v107.rs (1)

31-32: Consider documenting the closure usage.

It might be beneficial to add documentation or comments explaining the purpose and expected usage of the returned closure for header initialization. This can aid in understanding and maintaining the code.

+ // The closure returned is used to initialize headers with specific values.
src/tls/impersonate/edge/edge127.rs (1)

29-30: Add comments for closure usage.

Consider adding comments to explain the purpose and usage of the closure returned by get_settings. This can help with code readability and maintenance.

+ // The closure returned is used to initialize headers with specific values.
src/tls/impersonate/okhttp/okhttp3_13.rs (1)

47-48: Consider documenting the closure's role.

Adding comments to clarify the purpose and usage of the closure returned by get_settings can improve code clarity and assist future developers.

+ // The closure returned is used to initialize headers with specific values.
src/tls/impersonate/chrome/v119.rs (1)

15-33: Enhance documentation for the new return type.

The get_settings function now returns a tuple containing TlsSettings and a closure for header initialization. It would be beneficial to document this change clearly, explaining the purpose of the closure and how it should be used.

/// Returns TLS settings and a closure to initialize HTTP headers.
/// 
/// The closure can be invoked to set up default headers after the TLS settings are obtained.
src/tls/impersonate/chrome/v120.rs (1)

15-33: Document the closure return type in get_settings.

The get_settings function now returns a tuple with TlsSettings and a closure. Adding documentation to describe the closure's role and usage would improve clarity.

/// Returns TLS settings and a closure for initializing HTTP headers.
/// 
/// The closure should be executed to set up headers after obtaining TLS settings.
src/tls/impersonate/mod.rs (2)

19-25: Clarify the purpose of the boxed closure in impersonate_match.

The macro now returns a boxed closure along with settings. Consider documenting the rationale for boxing the closure and its intended use.

/// Matches the impersonate version and returns the corresponding TLS settings and a boxed closure for header initialization.

Line range hint 32-80:
Update tls_settings function documentation.

The tls_settings function now returns a tuple with TlsSettings and a boxed closure. Update the documentation to reflect this change and explain how the closure should be used.

/// Retrieves TLS settings and a boxed closure for header initialization based on the impersonate version.
/// 
/// The closure should be called to initialize headers after obtaining the settings.
Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

Commits

Files that changed from the base of the PR and between 5e48411 and 87f078f.

Files selected for processing (44)
  • examples/pre_configured_tls.rs (1 hunks)
  • src/async_impl/client.rs (3 hunks)
  • src/lib.rs (1 hunks)
  • src/tls/impersonate/chrome/v100.rs (1 hunks)
  • src/tls/impersonate/chrome/v101.rs (1 hunks)
  • src/tls/impersonate/chrome/v104.rs (1 hunks)
  • src/tls/impersonate/chrome/v105.rs (1 hunks)
  • src/tls/impersonate/chrome/v106.rs (1 hunks)
  • src/tls/impersonate/chrome/v107.rs (1 hunks)
  • src/tls/impersonate/chrome/v108.rs (1 hunks)
  • src/tls/impersonate/chrome/v109.rs (1 hunks)
  • src/tls/impersonate/chrome/v114.rs (1 hunks)
  • src/tls/impersonate/chrome/v116.rs (1 hunks)
  • src/tls/impersonate/chrome/v117.rs (1 hunks)
  • src/tls/impersonate/chrome/v118.rs (1 hunks)
  • src/tls/impersonate/chrome/v119.rs (1 hunks)
  • src/tls/impersonate/chrome/v120.rs (1 hunks)
  • src/tls/impersonate/chrome/v123.rs (1 hunks)
  • src/tls/impersonate/chrome/v124.rs (1 hunks)
  • src/tls/impersonate/chrome/v126.rs (1 hunks)
  • src/tls/impersonate/chrome/v127.rs (1 hunks)
  • src/tls/impersonate/edge/edge101.rs (1 hunks)
  • src/tls/impersonate/edge/edge122.rs (1 hunks)
  • src/tls/impersonate/edge/edge127.rs (1 hunks)
  • src/tls/impersonate/mod.rs (2 hunks)
  • src/tls/impersonate/okhttp/okhttp3_11.rs (1 hunks)
  • src/tls/impersonate/okhttp/okhttp3_13.rs (1 hunks)
  • src/tls/impersonate/okhttp/okhttp3_14.rs (1 hunks)
  • src/tls/impersonate/okhttp/okhttp3_9.rs (1 hunks)
  • src/tls/impersonate/okhttp/okhttp4_10.rs (1 hunks)
  • src/tls/impersonate/okhttp/okhttp4_9.rs (1 hunks)
  • src/tls/impersonate/okhttp/okhttp5.rs (1 hunks)
  • src/tls/impersonate/safari/safari15_3.rs (1 hunks)
  • src/tls/impersonate/safari/safari15_5.rs (1 hunks)
  • src/tls/impersonate/safari/safari15_6_1.rs (1 hunks)
  • src/tls/impersonate/safari/safari16.rs (1 hunks)
  • src/tls/impersonate/safari/safari16_5.rs (1 hunks)
  • src/tls/impersonate/safari/safari17_0.rs (1 hunks)
  • src/tls/impersonate/safari/safari17_2_1.rs (1 hunks)
  • src/tls/impersonate/safari/safari17_4_1.rs (1 hunks)
  • src/tls/impersonate/safari/safari17_5.rs (1 hunks)
  • src/tls/impersonate/safari/safari_ios_16_5.rs (1 hunks)
  • src/tls/impersonate/safari/safari_ios_17_2.rs (1 hunks)
  • src/tls/impersonate/safari/safari_ios_17_4_1.rs (1 hunks)
Additional comments not posted (59)
src/tls/impersonate/safari/safari15_6_1.rs (2)

12-13: Refactor: Return a closure for header initialization.

The get_settings function now returns a tuple, including a closure for header initialization. This change enhances flexibility by allowing deferred execution of header setup.


29-30: Verify: Ensure closure usage is consistent across the codebase.

The init_headers function is now returned as a closure. Verify that its usage is consistent and correctly implemented across the codebase.

src/tls/impersonate/safari/safari15_3.rs (2)

12-13: Refactor: Return a closure for header initialization.

The get_settings function now returns a tuple, including a closure for header initialization. This change enhances flexibility by allowing deferred execution of header setup.


29-30: Verify: Ensure closure usage is consistent across the codebase.

The init_headers function is now returned as a closure. Verify that its usage is consistent and correctly implemented across the codebase.

src/tls/impersonate/safari/safari15_5.rs (2)

12-13: Refactor: Return a closure for header initialization.

The get_settings function now returns a tuple, including a closure for header initialization. This change enhances flexibility by allowing deferred execution of header setup.


29-30: Verify: Ensure closure usage is consistent across the codebase.

The init_headers function is now returned as a closure. Verify that its usage is consistent and correctly implemented across the codebase.

src/tls/impersonate/safari/safari16.rs (2)

29-29: Verify the closure's integration.

The init_headers function is returned as a closure. Ensure that this integration does not introduce any side effects or unexpected behavior in the calling code.


12-13: Ensure correct handling of the new return type.

The get_settings function now returns a tuple with a closure for header initialization. Ensure that the calling code correctly handles this new return type.

src/tls/impersonate/safari/safari16_5.rs (2)

29-29: Verify the closure's integration.

The init_headers function is returned as a closure. Ensure that this integration does not introduce any side effects or unexpected behavior in the calling code.


12-13: Ensure correct handling of the new return type.

The get_settings function now returns a tuple with a closure for header initialization. Ensure that the calling code correctly handles this new return type.

Verification successful

Handling of the new return type is correctly implemented.

The impersonate_match macro in src/tls/impersonate/mod.rs handles the new tuple return type from get_settings by unpacking it and wrapping the closure. This ensures that the new return type is used correctly throughout the codebase.

  • File: src/tls/impersonate/mod.rs
Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify that all calls to `get_settings` handle the new tuple return type correctly.

# Test: Search for the function usage and check handling of the tuple return type.
rg --type rust -A 5 $'get_settings'

Length of output: 21251


Script:

#!/bin/bash
# Description: Find all usages of `get_settings` and check how the returned tuple is handled.

# Search for calls to `get_settings` and include some lines of context to see how the return value is used.
rg --type rust -A 5 'get_settings('

Length of output: 114


Script:

#!/bin/bash
# Description: Find all usages of `get_settings` and check how the returned tuple is handled.

# Search for calls to `get_settings` and include some lines of context to see how the return value is used.
rg --type rust -A 5 'get_settings'

Length of output: 21251


Script:

#!/bin/bash
# Description: Search for usage of the match arms or pattern matching involving `get_settings`.

# Search for the usage of the Impersonate enum or any pattern matching that might involve `get_settings`.
rg --type rust -A 10 'Impersonate::'

Length of output: 8075


Script:

#!/bin/bash
# Description: Check where the `impersonate_match` macro is used in the codebase.

# Search for the usage of the `impersonate_match` macro.
rg --type rust 'impersonate_match!'

Length of output: 88

src/tls/impersonate/safari/safari17_4_1.rs (2)

29-29: Verify the closure's integration.

The init_headers function is returned as a closure. Ensure that this integration does not introduce any side effects or unexpected behavior in the calling code.

Verification successful

No side effects found with init_headers integration. The init_headers function in safari17_4_1.rs is a pure function that modifies a HeaderMap by inserting headers. It does not interact with external systems or shared state, ensuring no side effects or unexpected behaviors.

Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify that the `init_headers` closure is used correctly.

# Test: Search for the usage of the closure in the codebase.
rg --type rust -A 5 $'init_headers'

Length of output: 26823


Script:

#!/bin/bash
# Search for the usage of `init_headers` in the `safari17_4_1.rs` file to check for potential side effects.
rg --type rust -A 10 'init_headers' src/tls/impersonate/safari/safari17_4_1.rs

Length of output: 552


12-13: Ensure correct handling of the new return type.

The get_settings function now returns a tuple with a closure for header initialization. Ensure that the calling code correctly handles this new return type.

src/tls/impersonate/safari/safari_ios_16_5.rs (2)

Line range hint 32-45:
Header initialization logic is correct.

The init_headers function correctly sets the necessary HTTP headers. The logic is clear and well-structured.


12-30: LGTM! Verify the function usage in the codebase.

The changes to get_settings improve modularity by returning a closure for header initialization. This allows for deferred execution, which can be beneficial for managing side effects. Ensure that all usages of get_settings correctly handle the new return type.

src/tls/impersonate/safari/safari_ios_17_4_1.rs (2)

Line range hint 32-45:
Header initialization logic is correct.

The init_headers function correctly sets the necessary HTTP headers. The logic is clear and well-structured.


12-30: LGTM! Verify the function usage in the codebase.

The changes to get_settings enhance modularity by returning a closure for header initialization, allowing deferred execution. Ensure that all usages of get_settings correctly handle the new return type.

src/tls/impersonate/safari/safari_ios_17_2.rs (2)

Line range hint 32-45:
Header initialization logic is correct.

The init_headers function correctly sets the necessary HTTP headers. The logic is clear and well-structured.


12-30: LGTM! Verify the function usage in the codebase.

The changes to get_settings enhance modularity by returning a closure for header initialization, allowing deferred execution. Ensure that all usages of get_settings correctly handle the new return type.

examples/pre_configured_tls.rs (5)

1-9: Imports look good.

The necessary modules for TLS and HTTP operations are correctly imported.


10-13: TLS settings initialization is correct.

The TlsSettings structure is initialized with appropriate parameters.


14-23: TLS extension settings are correctly configured.

The TlsExtensionSettings are set with appropriate options for SNI, HTTP version preference, and TLS versions.


24-41: HTTP/2 frame settings are correctly configured.

The Http2FrameSettings are initialized with appropriate parameters for window sizes, streams, and header settings.


42-57: HTTP client configuration and API call are correct.

The client is built using the preconfigured TLS settings, and the API call is appropriately handled.

src/tls/impersonate/okhttp/okhttp3_11.rs (2)

Line range hint 1-10: Imports look good.

The necessary modules for TLS settings and HTTP headers are correctly imported.


11-43: Function logic and encapsulation are correct.

The get_settings function now returns a tuple with TlsSettings and a closure for header initialization, promoting better modularity.

Ensure that all calls to get_settings correctly handle the new return type.

src/tls/impersonate/okhttp/okhttp4_9.rs (2)

Line range hint 1-10: Imports look good.

The necessary modules for TLS settings and HTTP headers are correctly imported.


11-45: Function logic and encapsulation are correct.

The get_settings function now returns a tuple with TlsSettings and a closure for header initialization, promoting better modularity.

Ensure that all calls to get_settings correctly handle the new return type.

src/tls/impersonate/okhttp/okhttp5.rs (1)

11-46: Ensure correct usage of the returned closure.

The get_settings function now returns a tuple with TlsSettings and a closure (init_headers). Ensure that the caller of this function correctly invokes the closure to initialize headers. This change improves modularity but requires careful handling to avoid missing the header initialization step.

src/tls/impersonate/chrome/v123.rs (1)

12-30: Verify closure usage for header initialization.

The get_settings function now returns a tuple with TlsSettings and a closure (init_headers). Ensure that the caller correctly invokes this closure to initialize headers. This modification enhances flexibility but requires proper usage to maintain functionality.

src/tls/impersonate/okhttp/okhttp3_14.rs (1)

11-46: Check for proper closure invocation.

The get_settings function now returns a tuple with TlsSettings and a closure (init_headers). Ensure that the closure is properly invoked by the caller to initialize headers. This change enhances the design but requires careful implementation to ensure headers are initialized.

src/tls/impersonate/chrome/v117.rs (2)

29-30: Ensure proper usage of init_headers.

The init_headers function is now returned as a closure. Verify that it is invoked in the correct context to ensure headers are initialized as intended.


12-30: Review the new return type in get_settings.

The function now returns a tuple containing TlsSettings and a closure for header initialization. This change enhances flexibility by allowing headers to be initialized at a later stage. Ensure that the closure is invoked correctly in the calling code to maintain expected functionality.

src/tls/impersonate/chrome/v116.rs (2)

29-30: Ensure proper usage of init_headers.

The init_headers function is now returned as a closure. Verify that it is invoked in the correct context to ensure headers are initialized as intended.


12-30: Review the new return type in get_settings.

The function now returns a tuple with TlsSettings and a closure for header initialization. This change improves flexibility by allowing headers to be set later. Ensure that the closure is used correctly in the calling code to maintain expected functionality.

src/tls/impersonate/edge/edge101.rs (2)

29-30: Ensure proper usage of init_headers.

The init_headers function is now returned as a closure. Verify that it is invoked in the correct context to ensure headers are initialized as intended.


12-30: Review the new return type in get_settings.

The function now returns a tuple with TlsSettings and a closure for header initialization. This change enhances flexibility by allowing headers to be set later. Ensure that the closure is used correctly in the calling code to maintain expected functionality.

src/tls/impersonate/okhttp/okhttp4_10.rs (1)

11-45: Enhance flexibility with deferred header initialization.

The changes to the get_settings function improve flexibility by allowing the caller to initialize headers at a later point. This can be useful for scenarios where headers depend on runtime conditions.

Ensure that all usages of get_settings in the codebase are updated to handle the new return type.

src/tls/impersonate/chrome/v126.rs (1)

12-29: Improve modularity with closure for header initialization.

The function now returns a closure for header initialization, allowing for more modular and flexible code. This change aligns with functional programming practices by decoupling behavior from data.

Verify that all instances of get_settings in the codebase are adapted to the new return type.

Verification successful

All get_settings instances match the new return type signature. The codebase has been updated to ensure that all occurrences of get_settings adhere to the new return type, enhancing modularity and flexibility.

Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify all function calls to `get_settings` match the new signature.

# Test: Search for the function usage. Expect: Only occurrences of the new signature.
rg --type rust -A 5 $'get_settings'

Length of output: 21251

src/tls/impersonate/chrome/v127.rs (1)

12-29: Enhance API usability with closure for header initialization.

The function now returns a closure for header initialization, improving the API's usability by allowing deferred execution. This change supports more dynamic header management.

Ensure that all usages of get_settings in the codebase are updated to handle the new return type.

src/tls/impersonate/chrome/v124.rs (2)

29-30: Encapsulation: Include init_headers in the return tuple.

The inclusion of init_headers as a closure in the return tuple promotes better encapsulation and modularity. This approach allows the caller to initialize headers as needed, aligning with functional programming practices.


12-30: Refactor: Return a tuple with TlsSettings and a closure.

The get_settings function now returns a tuple containing TlsSettings and a closure for header initialization. This change enhances flexibility by allowing dynamic header management after obtaining TLS settings. Ensure that all usages of get_settings in the codebase are updated to handle the new return type.

src/tls/impersonate/edge/edge122.rs (2)

29-30: Encapsulation: Use init_headers in the return tuple.

Including init_headers as a closure in the return tuple enhances encapsulation and modularity, allowing dynamic header initialization. This aligns with best practices for functional programming.


10-30: Refactor: Update get_settings to return a tuple.

The get_settings function now returns a tuple with TlsSettings and a closure for header initialization. This change improves flexibility in header management. Ensure that all usages of get_settings in the codebase are updated to accommodate the new return type.

src/tls/impersonate/chrome/v118.rs (2)

31-32: Encapsulation: Integrate init_headers in the return tuple.

The integration of init_headers as a closure in the return tuple supports better encapsulation and modularity, allowing for flexible header initialization. This approach is consistent with functional programming principles.


14-32: Refactor: Modify get_settings to return a tuple.

The get_settings function now returns a tuple containing TlsSettings and a closure for header initialization. This modification increases flexibility in managing headers. Verify that all usages of get_settings in the codebase are updated to handle the new return type.

src/tls/impersonate/chrome/v109.rs (1)

14-32: LGTM! Verify the function usage in the codebase.

The changes to return a tuple with TlsSettings and a closure for header initialization are well-implemented. This enhances flexibility and modularity as intended.

Ensure that all function calls to get_settings are updated to handle the new return type correctly.

Verification successful

Function Usage Verified: Correct Handling of New Return Type

The changes to the get_settings function in v109.rs are correctly integrated into the codebase. The Impersonate enum and the tls_settings function ensure that the new return type is properly handled in the client implementation.

  • The impersonate method in async_impl/client.rs uses the tls_settings function, which handles the new tuple return type appropriately.

No further issues found.

Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify all function calls to `get_settings` match the new signature.

# Test: Search for the function usage. Expect: Only occurrences of the new signature.
rg --type rust -A 5 $'get_settings'

Length of output: 21251


Script:

#!/bin/bash
# Description: Find all usages of `v109::get_settings` to verify correct handling of the new return type.

# Test: Search for calls to `v109::get_settings` in the codebase.
rg --type rust 'v109::get_settings'

Length of output: 103


Script:

#!/bin/bash
# Description: Find all usages of the enum or mapping that includes `Chrome109 => v109::get_settings`.

# Test: Search for usages of the enum or mapping in `mod.rs` that includes `Chrome109 => v109::get_settings`.
rg --type rust 'Chrome109' -A 5

Length of output: 1470


Script:

#!/bin/bash
# Description: Search for function calls or logic that utilize the enum or mapping structure including `Chrome109`.

# Test: Search for usages of the enum or mapping structure in the codebase.
rg --type rust 'Chrome109' -B 5 -A 10

Length of output: 3887


Script:

#!/bin/bash
# Description: Search for functions or modules that use the selection mechanism involving `Chrome109`.

# Test: Search for functions or modules that utilize the enum or mapping structure in the codebase.
rg --type rust 'Impersonate' -A 10

Length of output: 77404

src/tls/impersonate/chrome/v105.rs (1)

14-32: LGTM! Verify the function usage in the codebase.

The changes to return a tuple with TlsSettings and a closure for header initialization are well-implemented. This enhances flexibility and modularity as intended.

Ensure that all function calls to get_settings are updated to handle the new return type correctly.

Verification successful

Function Usage Verified: get_settings Signature Consistency

The get_settings function is consistently implemented with the new return type across the codebase. All references and definitions align with the updated signature, ensuring correct usage.

  • src/tls/impersonate/mod.rs: Lists multiple versions of get_settings, all matching the new signature.
Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify all function calls to `get_settings` match the new signature.

# Test: Search for the function usage. Expect: Only occurrences of the new signature.
rg --type rust -A 5 $'get_settings'

Length of output: 21251

src/tls/impersonate/chrome/v104.rs (1)

14-32: LGTM! Verify the function usage in the codebase.

The changes to return a tuple with TlsSettings and a closure for header initialization are well-implemented. This enhances flexibility and modularity as intended.

Ensure that all function calls to get_settings are updated to handle the new return type correctly.

src/tls/impersonate/chrome/v108.rs (1)

14-32: LGTM! Verify the function usage in the codebase.

The changes to the get_settings function are approved. The new return type enhances flexibility by allowing deferred header initialization.

Ensure that all function calls to get_settings handle the new tuple return type properly.

src/tls/impersonate/okhttp/okhttp3_9.rs (1)

11-45: LGTM! Verify the function usage in the codebase.

The changes to the get_settings function are approved. The new return type enhances flexibility by allowing deferred header initialization.

Ensure that all function calls to get_settings handle the new tuple return type properly.

src/tls/impersonate/chrome/v106.rs (1)

14-32: LGTM! Verify the function usage in the codebase.

The changes to the get_settings function are approved. The new return type enhances flexibility by allowing deferred header initialization.

Ensure that all function calls to get_settings handle the new tuple return type properly.

src/tls/impersonate/chrome/v107.rs (1)

14-32: Ensure correct usage of the new tuple return type.

The get_settings function now returns a tuple containing TlsSettings and a closure for header initialization. Ensure that all invocations of this function handle the tuple correctly, particularly invoking the closure to initialize headers.

src/tls/impersonate/edge/edge127.rs (1)

12-30: Verify correct handling of the new tuple return type.

The get_settings function now returns a tuple with TlsSettings and a closure. Ensure all usage of this function correctly handles the tuple and invokes the closure for header initialization.

src/tls/impersonate/okhttp/okhttp3_13.rs (1)

11-48: Check for correct handling of the new tuple return type.

The get_settings function now returns a tuple with TlsSettings and a closure for header initialization. Ensure all usage of this function correctly handles the tuple and invokes the closure.

src/lib.rs (1)

356-357: Exporting HttpVersionPref enhances module functionality.

Adding HttpVersionPref to the public exports improves the flexibility of HTTP version preference management. This change is backward compatible and aligns with the PR objectives.

src/async_impl/client.rs (4)

65-73: Addition of All variant enhances HTTP version flexibility.

The All variant in HttpVersionPref allows for preferring both HTTP/1.1 and HTTP/2, increasing flexibility in HTTP version selection.


273-279: Refactoring of impersonate improves code clarity.

The refactoring to use apply_tls_settings streamlines the logic and enhances separation of concerns, making the code easier to maintain.


281-291: use_preconfigured_tls method enhances TLS configurability.

The new method allows users to apply custom TLS settings via a callback, improving the flexibility of the ClientBuilder.


293-320: apply_tls_settings centralizes TLS logic for better maintainability.

The new private method encapsulates the logic for applying TLS settings and updating HTTP2 configurations, enhancing code maintainability.

src/tls/impersonate/chrome/v114.rs Outdated Show resolved Hide resolved
src/tls/impersonate/chrome/v119.rs Outdated Show resolved Hide resolved
src/tls/impersonate/safari/safari17_0.rs Outdated Show resolved Hide resolved
src/tls/impersonate/chrome/v120.rs Outdated Show resolved Hide resolved
src/tls/impersonate/chrome/v100.rs Outdated Show resolved Hide resolved
src/tls/impersonate/chrome/v101.rs Outdated Show resolved Hide resolved
src/tls/impersonate/safari/safari17_2_1.rs Outdated Show resolved Hide resolved
src/tls/impersonate/safari/safari17_5.rs Outdated Show resolved Hide resolved
Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

Commits

Files that changed from the base of the PR and between 87f078f and 1df1812.

Files selected for processing (4)
  • README.md (1 hunks)
  • examples/pre_configured_tls.rs (1 hunks)
  • src/async_impl/client.rs (3 hunks)
  • src/blocking/client.rs (4 hunks)
Files skipped from review as they are similar to previous changes (1)
  • examples/pre_configured_tls.rs
Additional comments not posted (10)
README.md (1)

13-19: Update aligns with new features.

The simplification of "Headers order" and the addition of "Preconfigured TLS/HTTP2 settings" are consistent with the PR's objectives. Ensure that the documentation accurately reflects the capabilities of these features.

src/blocking/client.rs (4)

18-21: Consolidated imports improve readability.

The consolidation of TlsSettings and Version imports with Impersonate enhances the organization of the code.


Line range hint 712-731:
Refactoring enhances consistency.

Changing the parameter type from tls::Version to Version likely improves consistency. Ensure that this change does not introduce any issues elsewhere in the code.


731-731: Consistent method signature update.

The update to the max_tls_version method ensures consistency with the min_tls_version method.


110-118: Verify use_preconfigured_tls method implementation.

The use_preconfigured_tls method enhances flexibility by allowing preconfigured TLS settings. Ensure that the function parameters and internal logic align with the intended functionality.

src/async_impl/client.rs (5)

37-37: Necessary imports added.

The import of tls and related components is necessary for the new functionality.


65-73: New enum variant enhances flexibility.

The addition of the All variant to the HttpVersionPref enum allows for greater flexibility in HTTP version selection.


273-279: Refactored impersonate method simplifies logic.

The refactoring of the impersonate method simplifies the logic and improves separation of concerns. The changes are sound and enhance maintainability.


291-318: Encapsulated TLS settings logic improves organization.

The introduction of the apply_tls_settings method encapsulates the logic for applying TLS settings, improving code organization and maintainability.


281-289: Verify use_preconfigured_tls method implementation.

The use_preconfigured_tls method enhances configurability by allowing preconfigured TLS settings. Ensure that the function parameters and internal logic align with the intended functionality.

Verification successful

The use_preconfigured_tls method implementation is correct and consistent.

The method effectively applies preconfigured TLS settings by utilizing the apply_tls_settings function, which correctly modifies the necessary configurations. This ensures that the intended functionality is achieved without issues.

  • The method is properly integrated and used within the codebase.
  • The apply_tls_settings function correctly implements the required logic.
Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify the usage of `use_preconfigured_tls` method in the codebase.

# Test: Search for the usage of `use_preconfigured_tls`. Expect: Consistent usage with the new method signature.
rg --type rust 'use_preconfigured_tls'

Length of output: 401


Script:

#!/bin/bash
# Description: Verify the implementation of `apply_tls_settings` method.

# Test: Search for the implementation of `apply_tls_settings` in the codebase.
rg --type rust 'fn apply_tls_settings'

Length of output: 153


Script:

#!/bin/bash
# Description: Retrieve the implementation details of `apply_tls_settings`.

# Test: Extract the implementation of `apply_tls_settings` for detailed analysis.
rg --type rust -A 20 'fn apply_tls_settings' src/async_impl/client.rs

Length of output: 1184

@0x676e67 0x676e67 merged commit 440bbdf into main Aug 13, 2024
1 check passed
@0x676e67 0x676e67 deleted the feat branch August 14, 2024 04:57
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant