使用Openapi-generator快速生成acunetix_sdk
2023-4-30 00:28:0 Author: 白帽子(查看原文) 阅读量:21 收藏

STATEMENT

声明

由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,雷神众测及文章作者不为此承担任何责任。

雷神众测拥有对此文章的修改和解释权。如欲转载或传播此文章,必须保证此文章的完整性,包括版权声明等全部内容。未经雷神众测允许,不得任意修改或者增减此文章内容,不得以任何方式将其用于商业目的。

前言

在调用awvs的rest-api的时候,虽然有官方的文档,但是需要一个一个接口去写,非常的麻烦,到Acunetix的官网找rest-api文档时看到了使用swagger生成python的sdk,但是找不到文章中的swagger.yaml文件,应该是要通过邮件获取,所以去github上搜索发现了一个Acunetix Scanner API12的openapi文件,考虑的两个版本接口相差不大,很多接口都还是和之前一样的,就直接使用这个文件了。

usage

支持生成的编程语言,我喜欢使用rust,所以就以生成rust的sdk作为例子,go语言同理。

➜  ~ openapi-generator-cli list -sada,ada-server,android,apache2,apex,asciidoc,aspnetcore,avro-schema,bash,crystal,c,clojure,cwiki,cpp-qt-client,cpp-qt-qhttpengine-server,cpp-pistache-server,cpp-restbed-server,cpp-restsdk,cpp-tiny,cpp-tizen,cpp-ue4,csharp,csharp-netcore,csharp-netcore-functions,dart,dart-dio,eiffel,elixir,elm,erlang-client,erlang-proper,erlang-server,fsharp-functions,fsharp-giraffe-server,go,go-echo-server,go-server,go-gin-server,graphql-schema,graphql-nodejs-express-server,groovy,kotlin,kotlin-server,kotlin-spring,kotlin-vertx,ktorm-schema,haskell-http-client,haskell,haskell-yesod,java,jaxrs-cxf-client,java-inflector,java-micronaut-client,java-micronaut-server,java-msf4j,java-pkmst,java-play-framework,java-undertow-server,java-vertx-web,java-camel,jaxrs-cxf,jaxrs-cxf-extended,jaxrs-cxf-cdi,jaxrs-jersey,jaxrs-resteasy,jaxrs-resteasy-eap,jaxrs-spec,javascript,javascript-apollo,javascript-flowtyped,javascript-closure-angular,jmeter,k6,lua,markdown,mysql-schema,nim,nodejs-express-server,objc,ocaml,openapi,openapi-yaml,plantuml,perl,php,php-laravel,php-lumen,php-slim4,php-symfony,php-mezzio-ph,php-dt,powershell,protobuf-schema,python-legacy,python,python-fastapi,python-experimental,python-flask,python-aiohttp,python-blueplanet,r,ruby,ruby-on-rails,ruby-sinatra,rust,rust-server,scalatra,scala-akka,scala-akka-http-server,scala-finch,scala-gatling,scala-lagom-server,scala-play-server,scala-sttp,scalaz,spring,dynamic-html,html,html2,swift5,typescript,typescript-angular,typescript-aurelia,typescript-axios,typescript-fetch,typescript-inversify,typescript-jquery,typescript-nestjs,typescript-node,typescript-redux-query,typescript-rxjs,wsdl-schema

查看rust 配置,library参数是使用哪一个http库去发送请求,默认是reqwest,要修改可以使用--library指定,可以使用--package-name修改packageName为你自己喜欢的名字作为sdk的名称。

➜  ~ openapi-generator-cli config-help -g rust

生成rust的sdk

-i openapi的yaml文档输入文件

-o 生成sdk代码的目录

目录结构

可以看到文档都生成好了,有每一个参数的类型和描述。

moduls目录是请求和响应各种数据结构

api目录的default_api文件中是awvs的rest-api全部接口

调用SDK

新建一个rust项目,然后把上面生成好的sdk目录移动到,acunetix_rs目录里面作为子模块。

cargo new acunetix_rs

添加sdk到项目依赖,package是你生成sdk时候设置的packageName,默认是openapi,我把它改为acunetix_sdk,方便调用。

[package]name = "acunetix_rs"version = "0.1.0"edition = "2021"# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html[dependencies]acunetix_sdk = { path = "acunetix_sdk", package = "acunetix_sdk" }

调用函数示例:

初始化使用默认配置,设置上后端的BaseURL和Token

因为要忽略自签名的证书,所以要自定义请求的Client

use std::time::Duration;use acunetix_sdk::apis::configuration::{ApiKey, Configuration};use acunetix_sdk::apis::default_api as acunetix_api;use reqwest::redirect::Policy;# [tokio::main]async fn main() {    let mut api_config = Configuration::default();    let api_key = ApiKey {        prefix: None,        key: String::from("1986ad8c0a5b3df4d7028d5f3c06e936cafd94cb0191d430f8a57416536ddd410"),    };    let client = reqwest::Client::builder()       .pool_max_idle_per_host(0)        .danger_accept_invalid_certs(true)        .danger_accept_invalid_hostnames(true)        .redirect(Policy::none())        .timeout(Duration::new(300)).build().unwrap();    api_config.api_key = Some(api_key);    api_config.client = client;    api_config.base_path = String::from("https://192.168.0.116:13443/api/v1");    let info = acunetix_api::get_info(&api_config).await;    println!("{:?}", info);}

测试输出

Ok(Info { acumonitor: Some(true), build_number: Some("220401065"), license: Some(License { access: true, actived: None, email: "[email protected]", expired: false, expires: "2099-12-31T17:59:59", features: Some(["export_waf", "vuln_retest", "updates", "trending_graphs", "target_business_criticality", "scanning_profiles", "multi_engine", "bug_tracking_integration", "acumonitor", "api_key", "target_groups", "multi_user", "continuous_scans", "compliance_reports", "network_scans", "offline_activations", "pause_resume"]), limits: Some(LicenseLimit { demo_targets: Some(500), standard_targets: Some(999999), engines: Some(999999), users: None }), license_key: Some("1111-1111-1111-1111"), maintenance_expired: Some(false), maintenance_expires: Some("2099-12-31T17:59:59"), product_code: Some("AOPENT") }), license_extra: None, major_version: Some("14"), minor_version: Some("7"), update_info: Some(UpdateInfo { build_number: "-", major_version: "13", minor_version: "-", new_update: false, update_status: Some("not_available") }) })

总结

现在很多Web框架都兼容openapi的标准,在开放完后可以直接生成openapi的yaml文档,而且像insomnia这些api管理工具也直接导出,每次接口更新后使用openapi-generator重新生成就可以了,不用重复修改代码。

而且openapi还有可视的编辑器,可以非常方便的对yaml文件进行编辑。

后面会逐步将12版本的常用接口更新到14版本。

项目地址:https://github.com/emo-cat/acunetix_rs

参考

https://openapi-generator.tech/docs/usage

https://www.acunetix.com/blog/docs/acunetix-api-with-python/

https://www.twilio.com/docs/openapi/generating-a-rust-client-for-twilios-api

安恒信息

杭州亚运会网络安全服务官方合作伙伴

成都大运会网络信息安全类官方赞助商

武汉军运会、北京一带一路峰会

青岛上合峰会、上海进博会

厦门金砖峰会、G20杭州峰会

支撑单位北京奥运会等近百场国家级

重大活动网络安保支撑单位

END

长按识别二维码关注我们


文章来源: http://mp.weixin.qq.com/s?__biz=MzAwMDQwNTE5MA==&mid=2650246668&idx=1&sn=43a20181b527ce347fa5d5ee3d02cdb5&chksm=82ea55a5b59ddcb30a6805524aac2c74f4ff37f36d2202adae6c16f42fda2cc59b15007dcbe4#rd
如有侵权请联系:admin#unsafe.sh