PBH-BTN / PeerBanHelper

自动封禁不受欢迎、吸血和异常的 BT 客户端,并支持自定义规则。PeerId黑名单/UserAgent黑名单/IP CIDR/假进度/超量下载/进度回退/多播追猎/连锁封禁/伪装检测 支持 qBittorrent/Transmission/Deluge/BiglyBT
GNU General Public License v3.0
539 stars 15 forks source link

订阅规则API中的formdata调整为json #152

Closed PluieM closed 3 weeks ago

PluieM commented 3 weeks ago

@Gaojianli 请求中的formdata已调整为json,api文档同步更新完毕

Summary by CodeRabbit

coderabbitai[bot] commented 3 weeks ago

Walkthrough

The recent changes introduce enhanced JSON handling in the RuleSubController class, update return types in IPBlackRuleList for better data encapsulation, and expand the Lang class with new string constants for IP ban rule updates and errors. These modifications aim to improve JSON parsing, enhance method responses, and provide more informative logging and error messages.

Changes

Files/Path Change Summary
.../RuleSubController.java Imported JsonUtil and JsonObject; updated methods to use JsonUtil for JSON parsing.
.../IPBlackRuleList.java Modified updateRule method to return a Map<String, ? extends Serializable> instead of String.
.../Lang.java Added new string constants for IP ban rule updates and errors; modified existing constants for dynamic values.

Sequence Diagram(s)

sequenceDiagram
    participant Client
    participant RuleSubController
    participant JsonUtil
    participant IPBlackRuleList
    participant Lang

    Client->>RuleSubController: changeCheckInterval request
    RuleSubController->>JsonUtil: Parse JSON body
    JsonUtil-->>RuleSubController: Parsed data
    RuleSubController->>IPBlackRuleList: Update rule with parsed data
    IPBlackRuleList-->>RuleSubController: Success/Failure Map
    RuleSubController->>Lang: Fetch appropriate message
    Lang-->>RuleSubController: Message
    RuleSubController-->>Client: Response with message

Poem

In the code where JSON flows, New methods bloom, as logic grows. IP rules now return with grace, A map of status, in their place. Strings of error, update cheer, In logs and messages, clear to hear. 🐰✨


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 - [X](https://twitter.com/intent/tweet?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A&url=https%3A//coderabbit.ai) - [Mastodon](https://mastodon.social/share?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A%20https%3A%2F%2Fcoderabbit.ai) - [Reddit](https://www.reddit.com/submit?title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&text=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code.%20Check%20it%20out%3A%20https%3A//coderabbit.ai) - [LinkedIn](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fcoderabbit.ai&mini=true&title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&summary=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code)
Tips ### Chat There are 3 ways to chat with [CodeRabbit](https://coderabbit.ai): - Review comments: Directly reply to a review comment made by CodeRabbit. Example: - `I pushed a fix in commit .` - `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 Configration 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](https://docs.coderabbit.ai/guides/configure-coderabbit) 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](https://coderabbit.ai/docs) for detailed information on how to use CodeRabbit. - Join our [Discord Community](https://discord.com/invite/GsXnASn26c) to get help, request features, and share feedback. - Follow us on [X/Twitter](https://twitter.com/coderabbitai) for updates and announcements.
Gaojianli commented 3 weeks ago

感谢,还有2个点有待优化:

  1. 没有地方查询目前的checkInerval
  2. 检查更新的时候遇到了500错误(概率出现):
    java.lang.NullPointerException: null
        at java.base/java.util.Objects.requireNonNull(Unknown Source) ~[?:?]
        at java.base/java.util.ImmutableCollections$MapN.<init>(Unknown Source) ~[?:?]
        at java.base/java.util.Map.of(Unknown Source) ~[?:?]
        at com.ghostchu.peerbanhelper.module.impl.webapi.RuleSubController.update(RuleSubController.java:144)
    ~[PeerBanHelper.jar:?]
        at com.ghostchu.peerbanhelper.module.impl.webapi.RuleSubController.lambda$onEnable$2(RuleSubController
    .java:56) ~[PeerBanHelper.jar:?]
        at io.javalin.router.Endpoint.handle(Endpoint.kt:52) ~[PeerBanHelper.jar:?]
        at io.javalin.router.ParsedEndpoint.handle(ParsedEndpoint.kt:15) ~[PeerBanHelper.jar:?]
        at io.javalin.http.servlet.DefaultTasks.HTTP$lambda$9$lambda$7$lambda$6(DefaultTasks.kt:52) ~[PeerBanH
    elper.jar:?]
        at io.javalin.http.servlet.JavalinServlet.handleTask(JavalinServlet.kt:99) ~[PeerBanHelper.jar:?]
        at io.javalin.http.servlet.JavalinServlet.handleSync(JavalinServlet.kt:64) ~[PeerBanHelper.jar:?]
        at io.javalin.http.servlet.JavalinServlet.handle(JavalinServlet.kt:50) ~[PeerBanHelper.jar:?]
        at io.javalin.http.servlet.JavalinServlet.service(JavalinServlet.kt:30) ~[PeerBanHelper.jar:?]
        at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:587) ~[PeerBanHelper.jar:?]
        at io.javalin.jetty.JavalinJettyServlet.service(JavalinJettyServlet.kt:52) ~[PeerBanHelper.jar:?]
        at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:587) ~[PeerBanHelper.jar:?]
        at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:764) ~[PeerBanHelper.jar:?]
        at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:529) ~[PeerBanHelper.jar:?]
        at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:221) ~[PeerBanHelper.j
    ar:?]
        at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1580) ~[PeerBanHelper.
    jar:?]
        at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:221) ~[PeerBanHelper.j
    ar:?]
        at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1381) ~[PeerBanHelper.
    jar:?]
        at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:176) ~[PeerBanHelper.ja
    r:?]
        at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:484) ~[PeerBanHelper.jar:?]
        at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1553) ~[PeerBanHelper.j
    ar:?]
PluieM commented 3 weeks ago

查询更新间隔接口已加上,文档同步更新了。上面提到的错误暂时没有能复现,在几个有可能出现的地方做了一些校验

Gaojianli commented 3 weeks ago

缺少参数时会直接崩溃,需要做好错误处理,这部分javalin应该有更简便的实现方式(自带校验),此外“保存规则”(https://apifox.com/apidoc/shared-b24f42a4-67f5-402a-900d-9fad3ae9917b/api-176455381)功能请求去除enable字段

Gaojianli commented 3 weeks ago
image

查询间隔接口文档有误

查询更新间隔接口已加上,文档同步更新了。上面提到的错误暂时没有能复现,在几个有可能出现的地方做了一些校验

Gaojianli commented 3 weeks ago

查询全部订阅规则更新日志 这个接口返回值里面包含分页,但是请求参数里面不包含分页,是否符合预期 @PluieM

Edit: 关于更新类型,IP_BAN_RULE_UPDATE_TYPE_AUTO 数据库中应该存储枚举类型而不是汉字,现在数据库中存储了手动更新不利于本地化进行

image