Browse Source

progress bars and fixed issue when 0 api results came back

master
boB Rudis 4 years ago
parent
commit
cd1a2ca1d2
No known key found for this signature in database GPG Key ID: 1D7529BE14E2BBA9
  1. 7
      DESCRIPTION
  2. 1
      NAMESPACE
  3. 4
      NEWS.md
  4. 2
      R/assessments.R
  5. 4
      R/attackerkb-package.R
  6. 2
      R/contributor.R
  7. 2
      R/topics.R
  8. 20
      R/utils.R
  9. 4
      man/attackerkb.Rd
  10. 2
      man/attackerkb_api_key.Rd
  11. 3
      man/kb_assessments.Rd
  12. 3
      man/kb_contributors.Rd
  13. 3
      man/kb_topics.Rd

7
DESCRIPTION

@ -1,8 +1,8 @@
Package: attackerkb Package: attackerkb
Type: Package Type: Package
Title: Tools to Query the Rapid7 AttackerKB API Title: Tools to Query the Rapid7 AttackerKB API
Version: 0.1.0 Version: 0.1.1
Date: 2020-04-15 Date: 2020-04-18
Authors@R: c( Authors@R: c(
person("Bob", "Rudis", email = "bob@rud.is", role = c("aut", "cre"), person("Bob", "Rudis", email = "bob@rud.is", role = c("aut", "cre"),
comment = c(ORCID = "0000-0001-5670-2640")) comment = c(ORCID = "0000-0001-5670-2640"))
@ -22,6 +22,7 @@ Depends:
Imports: Imports:
httr, httr,
jsonlite, jsonlite,
data.table data.table,
progress
Roxygen: list(markdown = TRUE) Roxygen: list(markdown = TRUE)
RoxygenNote: 7.1.0 RoxygenNote: 7.1.0

1
NAMESPACE

@ -10,3 +10,4 @@ export(kd_contributor)
import(httr) import(httr)
importFrom(data.table,rbindlist) importFrom(data.table,rbindlist)
importFrom(jsonlite,fromJSON) importFrom(jsonlite,fromJSON)
importFrom(progress,progress_bar)

4
NEWS.md

@ -1,2 +1,6 @@
0.1.1
* Fixed an issue where errors wld be thrown if zero API results came back
* Added progress spinner for API calls vs the hacky dots
0.1.0 0.1.0
* Initial release * Initial release

2
R/assessments.R

@ -3,6 +3,8 @@
#' The main `kb_contributors` function maps 1:1 to the API. Leave values #' The main `kb_contributors` function maps 1:1 to the API. Leave values
#' `NULL` that you do not want included in the search parameters. #' `NULL` that you do not want included in the search parameters.
#' #'
#' Set the option `progress_enabled` to `FALSE` to disable progress spinner.
#'
#' @param assessment_id UUID of a specific assessment to return #' @param assessment_id UUID of a specific assessment to return
#' @param editor_id UUID of a contributor. #' @param editor_id UUID of a contributor.
#' @param topid_id UUID of the topic this assessment was based on. #' @param topid_id UUID of the topic this assessment was based on.

4
R/attackerkb-package.R

@ -4,6 +4,9 @@
#' various aspects of emergent or existing vulnerabilities and the community can query and #' various aspects of emergent or existing vulnerabilities and the community can query and
#' retrieve results. Tools are provided to query the AttackerKB API. #' retrieve results. Tools are provided to query the AttackerKB API.
#' #'
#' For all API calls, set the option `progress_enabled` to `FALSE` to disable
#' progress spinner.
#'
#' @md #' @md
#' @name attackerkb #' @name attackerkb
#' @keywords internal #' @keywords internal
@ -11,4 +14,5 @@
#' @import httr #' @import httr
#' @importFrom jsonlite fromJSON #' @importFrom jsonlite fromJSON
#' @importFrom data.table rbindlist #' @importFrom data.table rbindlist
#' @importFrom progress progress_bar
"_PACKAGE" "_PACKAGE"

2
R/contributor.R

@ -3,6 +3,8 @@
#' The main `kb_contributors` function maps 1:1 to the API. Leave values #' The main `kb_contributors` function maps 1:1 to the API. Leave values
#' `NULL` that you do not want included in the search parameters. #' `NULL` that you do not want included in the search parameters.
#' #'
#' Set the option `progress_enabled` to `FALSE` to disable progress spinner.
#'
#' @param contributor_id UUID of a specific contributror to return #' @param contributor_id UUID of a specific contributror to return
#' @param username Return contributors with the matching username. #' @param username Return contributors with the matching username.
#' @param avatar Return all contributors where avatar matches the given value #' @param avatar Return all contributors where avatar matches the given value

2
R/topics.R

@ -3,6 +3,8 @@
#' The main `kb_topics` function maps 1:1 to the API. Leave values #' The main `kb_topics` function maps 1:1 to the API. Leave values
#' `NULL` that you do not want included in the search parameters. #' `NULL` that you do not want included in the search parameters.
#' #'
#' Set the option `progress_enabled` to `FALSE` to disable progress spinner.
#'
#' @param topic_id UUID of a specific topic to return #' @param topic_id UUID of a specific topic to return
#' @param editor_id UUID of a contributor #' @param editor_id UUID of a contributor
#' @param name Text to query the name attribute. A substring match is performed #' @param name Text to query the name attribute. A substring match is performed

20
R/utils.R

@ -1,9 +1,18 @@
date_convert <- function(.x) {
as.POSIXct(.x, format="%Y-%m-%dT%H:%M:%OS", tz="GMT")
}
.kb_reshape <- function(.x, path) { .kb_reshape <- function(.x, path) {
if (length(.x) == 0) return(data.frame(stringsAsFactors=FALSE))
if (path == "/topics") { if (path == "/topics") {
easy_cols <- .x[, c("id", "editorId", "name", "created", "revisionDate", "disclosureDate", "document")] easy_cols <- .x[, c("id", "editorId", "name", "created", "revisionDate", "disclosureDate", "document")]
easy_cols[["created"]] <- date_convert(easy_cols[["created"]])
easy_cols[["revisionDate"]] <- date_convert(easy_cols[["revisionDate"]])
easy_cols$references <- .x[["metadata"]][["references"]] easy_cols$references <- .x[["metadata"]][["references"]]
cvss_v3 <- .x[["metadata"]][["baseMetricV3"]][["cvssV3"]] cvss_v3 <- .x[["metadata"]][["baseMetricV3"]][["cvssV3"]]
@ -46,12 +55,16 @@
} else if (path == "/contributors") { } else if (path == "/contributors") {
.x[["created"]] <- date_convert(.x[["created"]])
.x .x
} else if (path == "/assessments") { } else if (path == "/assessments") {
easy_cols <- .x[,c("id", "editorId", "topicId", "created", "revisionDate", "document", "score")] easy_cols <- .x[,c("id", "editorId", "topicId", "created", "revisionDate", "document", "score")]
easy_cols[["created"]] <- date_convert(easy_cols[["created"]])
easy_cols[["revisionDate"]] <- date_convert(easy_cols[["revisionDate"]])
metadata <- easy_cols[["metadata"]] metadata <- easy_cols[["metadata"]]
easy_cols$tags <- metadata[["tags"]] easy_cols$tags <- metadata[["tags"]]
@ -79,6 +92,9 @@
handle_response <- function(.x, api_key = attackerkb_api_key()) { handle_response <- function(.x, api_key = attackerkb_api_key()) {
.pb <- progress::progress_bar$new(format = "(:spin)", total = NA)
.pb$tick()
path <- .x[["links"]][["self"]][["href"]] path <- .x[["links"]][["self"]][["href"]]
ret <- .x[["data"]] ret <- .x[["data"]]
@ -89,7 +105,7 @@ handle_response <- function(.x, api_key = attackerkb_api_key()) {
while(length(next_href)) { while(length(next_href)) {
cat(".") .pb$tick()
httr::GET( httr::GET(
url = sprintf("https://api.attackerkb.com%s", next_href), url = sprintf("https://api.attackerkb.com%s", next_href),
@ -108,8 +124,6 @@ handle_response <- function(.x, api_key = attackerkb_api_key()) {
} }
cat("\n")
class(ret) <- c("tbl_df", "tbl", "data.frame") class(ret) <- c("tbl_df", "tbl", "data.frame")
ret ret

4
man/attackerkb.Rd

@ -10,6 +10,10 @@ Rapid7 manages a service — \url{https://attackerkb.com/} - where experts can e
various aspects of emergent or existing vulnerabilities and the community can query and various aspects of emergent or existing vulnerabilities and the community can query and
retrieve results. Tools are provided to query the AttackerKB API. retrieve results. Tools are provided to query the AttackerKB API.
} }
\details{
For all API calls, set the option \code{progress_enabled} to \code{FALSE} to disable
progress spinner.
}
\seealso{ \seealso{
Useful links: Useful links:
\itemize{ \itemize{

2
man/attackerkb_api_key.Rd

@ -10,7 +10,7 @@ attackerkb_api_key(force = FALSE)
\item{force}{Force setting a new AttackerKB key for the current environment?} \item{force}{Force setting a new AttackerKB key for the current environment?}
} }
\value{ \value{
atomic character vector containing the AttackerKB api key atomic character vector containing the AttackerKB API key
} }
\description{ \description{
The API wrapper functions in this package all rely on a AttackerKB API The API wrapper functions in this package all rely on a AttackerKB API

3
man/kb_assessments.Rd

@ -45,6 +45,9 @@ kb_assessment(assessment_id, api_key = attackerkb_api_key())
The main \code{kb_contributors} function maps 1:1 to the API. Leave values The main \code{kb_contributors} function maps 1:1 to the API. Leave values
\code{NULL} that you do not want included in the search parameters. \code{NULL} that you do not want included in the search parameters.
} }
\details{
Set the option \code{progress_enabled} to \code{FALSE} to disable progress spinner.
}
\references{ \references{
\url{https://api.attackerkb.com/api-docs/docs} \url{https://api.attackerkb.com/api-docs/docs}
} }

3
man/kb_contributors.Rd

@ -36,6 +36,9 @@ kd_contributor(contributor_id, api_key = attackerkb_api_key())
The main \code{kb_contributors} function maps 1:1 to the API. Leave values The main \code{kb_contributors} function maps 1:1 to the API. Leave values
\code{NULL} that you do not want included in the search parameters. \code{NULL} that you do not want included in the search parameters.
} }
\details{
Set the option \code{progress_enabled} to \code{FALSE} to disable progress spinner.
}
\references{ \references{
\url{https://api.attackerkb.com/api-docs/docs} \url{https://api.attackerkb.com/api-docs/docs}
} }

3
man/kb_topics.Rd

@ -51,6 +51,9 @@ kb_topic(
The main \code{kb_topics} function maps 1:1 to the API. Leave values The main \code{kb_topics} function maps 1:1 to the API. Leave values
\code{NULL} that you do not want included in the search parameters. \code{NULL} that you do not want included in the search parameters.
} }
\details{
Set the option \code{progress_enabled} to \code{FALSE} to disable progress spinner.
}
\references{ \references{
\url{https://api.attackerkb.com/api-docs/docs} \url{https://api.attackerkb.com/api-docs/docs}
} }

Loading…
Cancel
Save