From 92201e171fb929550a5e00967ac9a9cf24ad6285 Mon Sep 17 00:00:00 2001 From: Colin Gillespie Date: Mon, 24 Jun 2024 18:05:52 +0100 Subject: [PATCH] feat: Automatically extract Posit versions --- R/posit_versions.R | 4 +- R/rvest.R | 45 +++++ inst/extdata/versions/connect.csv | 296 ++++++++++++++++++++-------- inst/extdata/versions/drivers.csv | 12 +- inst/extdata/versions/workbench.csv | 42 ++-- 5 files changed, 299 insertions(+), 100 deletions(-) create mode 100644 R/rvest.R diff --git a/R/posit_versions.R b/R/posit_versions.R index cafc20f..4e5822f 100644 --- a/R/posit_versions.R +++ b/R/posit_versions.R @@ -12,8 +12,8 @@ get_posit_versions = function(type = c("connect", "workbench", "drivers")) { fname = system.file("extdata", "versions", paste0(type, ".csv"), mustWork = TRUE, package = "audit.base" ) - versions = readr::read_csv(fname, comment = "#", col_types = c("c", "D", "c")) - versions = dplyr::arrange(versions, dplyr::desc(date)) + versions = readr::read_csv(fname, comment = "#", col_types = c("c", "c")) + versions = dplyr::arrange(versions, dplyr::desc(name)) return(versions) } diff --git a/R/rvest.R b/R/rvest.R new file mode 100644 index 0000000..000e32e --- /dev/null +++ b/R/rvest.R @@ -0,0 +1,45 @@ +extract_cves = function(url) { + page = rvest::read_html(url) + sections = rvest::html_elements(page, "section") + v_tibbles = purrr::map_df(sections, extract_components) + all_v = get_all_versions(page) |> + dplyr::filter(!.data$name %in% v_tibbles$name) %>% + dplyr::bind_rows(v_tibbles) %>% + dplyr::arrange(dplyr::desc(name)) + all_v +} + +extract_components = function(section) { + posit_name = rvest::html_attrs(section) + posit_name = as.vector(posit_name["id"]) + posit_id = stringr::str_extract(posit_name, "[0-9]{4}\\.[0-9]{1,2}\\.[0-9]{1,2}") + + li = section %>% + rvest::html_elements("li") %>% + rvest::html_text2() + + cves = stringr::str_extract(li, "^CVE-[0-9]{4}-[0-9]*") + cves = cves[!is.na(cves)] + + if (length(cves) == 0L || is.na(posit_id)) { + NULL + } else { + tibble::tibble(name = posit_id, cve = cves) + } + } + +get_all_versions = function(page) { + versions = page %>% + rvest::html_nodes('h2') %>% + rvest::html_text() + v = stringr::str_extract(versions, "202[0-9]\\.[0-9]{2}\\.[0-9]{1,2}") + tibble::tibble(name = v[!is.na(v)], cve = "") +} + +update_posit_versions = function() { + readr::write_csv(extract_cves("https://docs.posit.co/connect/news/"), + file = "inst/extdata/versions/connect.csv") + + readr::write_csv(extract_cves("https://docs.posit.co/ide/news/"), + file = "inst/extdata/versions/workbench.csv") +} \ No newline at end of file diff --git a/inst/extdata/versions/connect.csv b/inst/extdata/versions/connect.csv index 9e6a8d3..3921e8d 100644 --- a/inst/extdata/versions/connect.csv +++ b/inst/extdata/versions/connect.csv @@ -1,78 +1,218 @@ -#https://docs.posit.co/connect/news/ -version,date,cve -2024.05.0,2024-05-31,CVE-2024-24787 -2024.05.0,2024-05-31,CVE-2024-24788 -2024.04.1,2024-05-07, -2024.04.0,2024-04-29,CVE-2023-39320 -2024.04.0,2024-04-29,CVE-2023-39320 -2024.04.0,2024-04-29,CVE-2023-39319 -2024.04.0,2024-04-29,CVE-2023-39321 -2024.04.0,2024-04-29,CVE-2023-45288 -2024.04.0,2024-04-29,CVE-2023-45857 -2024.04.0,2024-04-29,CVE-2024-31207 -2024.03.0,2024-03-28, -2024.02.0,2024-02-27,CVE-2023-7104 -2024.01.0,2024-01-25,CVE-2023-48795 -2024.01.0,2024-01-25,CVE-2023-45683 -2023.12.0,2023-12-18,CVE-2023-45283 -2023.12.0,2023-12-18,CVE-2023-45284 -2023.12.0,2023-12-18,CVE-2023-39326 -2023.12.0,2023-12-18,CVE-2023-45285 -2023.10.0,2023-10-31,CVE-2023-39323 -2023.10.0,2023-10-31,CVE-2023-39325 -2023.10.0,2023-10-31,CVE-2023-44487 -2023.09.0,2023-09-23,CVE-2023-29409 -2023.09.0,2023-09-23,CVE-2023-39318 -2023.09.0,2023-09-23,CVE-2023-39319 -2023.09.0,2023-09-23,CVE-2023-39320 -2023.09.0,2023-09-23,CVE-2023-39321 -2023.09.0,2023-09-23,CVE-2023-39322 -2023.09.0,2023-09-23,CVE-2023-26117 -2023.09.0,2023-09-23,CVE-2023-26116 -2023.09.0,2023-09-23,CVE-2023-26118 -2023.07.0,2023-07-27,CVE-2023-29406 -2023.06.0,2023-06-26,CVE-2023-29401 -2023.06.0,2023-06-26,CVE-2023-29402 -2023.06.0,2023-06-26,CVE-2023-29403 -2023.06.0,2023-06-26,CVE-2023-29404 -2023.06.0,2023-06-26,CVE-2023-29405 -2023.05.0,2023-05-10,CVE-2023-24537 -2023.05.0,2023-05-10,CVE-2023-24538 -2023.05.0,2023-05-10,CVE-2023-24534 -2023.05.0,2023-05-10,CVE-2023-24536 -2023.05.0,2023-05-10,CVE-2023-28119 -2023.05.0,2023-05-10,CVE-2022-41912 -2023.05.0,2023-05-10,CVE-2023-24539 -2023.05.0,2023-05-10,CVE-2023-24540 -2023.05.0,2023-05-10,CVE-2023-29400 -2023.05.0,2023-05-10,CVE-2023-26125 -2023.03.0,2023-03-13,CVE-2022-41722 -2023.03.0,2023-03-13,CVE-2022-41725 -2023.03.0,2023-03-13,CVE-2022-41724 -2023.03.0,2023-03-13,CVE-2022-41723 -2023.03.0,2023-03-13,CVE-2023-24532 -2023.01.0,2023-01-25,CVE-2022-35737 -2022.12.0,2022-12-10,CVE-2022-0536 -2022.12.0,2022-12-10,CVE-2022-41720 -2022.12.0,2022-12-10,CVE-2022-41717 -2022.11.0,2022-11-16,CVE-2022-25844 -2022.11.0,2022-11-16,CVE-2022-25869 -2022.11.0,2022-11-16,CVE-2022-41716 -2022.10.0,2022-10-26,CVE-2022-2879 -2022.10.0,2022-10-26,CVE-2022-2879 -2022.10.0,2022-10-26,CVE-2022-41715 -2022.10.0,2022-10-26,CVE-2022-32149 -2022.09.0,2022-09-13,CVE-2022-28948 -2022.09.0,2022-09-13,CVE-2022-28948 -2022.09.0,2022-09-13,CVE-2022-32190 -2022.08.1,2022-08-25, -2022.08.0,2022-08-17,CVE-2022-32189 -2022.07.0,2022-07-21,CVE-2022-1705 -2022.07.0,2022-07-21,CVE-2022-32148 -2022.07.0,2022-07-21,CVE-2022-30631 -2022.07.0,2022-07-21,CVE-2022-30633 -2022.07.0,2022-07-21,CVE-2022-28131 -2022.07.0,2022-07-21,CVE-2022-30635 -2022.07.0,2022-07-21,CVE-2022-30632 -2022.07.0,2022-07-21,CVE-2022-30630 -2022.07.0,2022-07-21,CVE-2022-1962 +name,cve +2024.05.0,CVE-2024-24787 +2024.05.0,CVE-2024-24788 +2024.05.0,CVE-2024-24787 +2024.05.0,CVE-2024-24788 +2024.04.1, +2024.04.0,CVE-2023-39320 +2024.04.0,CVE-2023-39320 +2024.04.0,CVE-2023-39319 +2024.04.0,CVE-2023-39321 +2024.04.0,CVE-2023-45288 +2024.04.0,CVE-2023-45857 +2024.04.0,CVE-2024-31207 +2024.04.0,CVE-2023-39320 +2024.04.0,CVE-2023-39320 +2024.04.0,CVE-2023-39319 +2024.04.0,CVE-2023-39321 +2024.04.0,CVE-2023-45288 +2024.04.0,CVE-2023-45857 +2024.04.0,CVE-2024-31207 +2024.03.0, +2024.02.0,CVE-2023-7104 +2024.02.0,CVE-2023-7104 +2024.01.0,CVE-2023-48795 +2024.01.0,CVE-2023-45683 +2024.01.0,CVE-2023-48795 +2024.01.0,CVE-2023-45683 +2023.12.0,CVE-2023-45283 +2023.12.0,CVE-2023-45284 +2023.12.0,CVE-2023-39326 +2023.12.0,CVE-2023-45285 +2023.12.0,CVE-2023-45283 +2023.12.0,CVE-2023-45284 +2023.12.0,CVE-2023-39326 +2023.12.0,CVE-2023-45285 +2023.10.0,CVE-2023-39323 +2023.10.0,CVE-2023-39325 +2023.10.0,CVE-2023-44487 +2023.10.0,CVE-2023-39323 +2023.10.0,CVE-2023-39325 +2023.10.0,CVE-2023-44487 +2023.09.0,CVE-2023-29409 +2023.09.0,CVE-2023-39318 +2023.09.0,CVE-2023-39319 +2023.09.0,CVE-2023-39320 +2023.09.0,CVE-2023-39321 +2023.09.0,CVE-2023-39322 +2023.09.0,CVE-2023-26117 +2023.09.0,CVE-2023-26116 +2023.09.0,CVE-2023-26118 +2023.09.0,CVE-2023-29409 +2023.09.0,CVE-2023-39318 +2023.09.0,CVE-2023-39319 +2023.09.0,CVE-2023-39320 +2023.09.0,CVE-2023-39321 +2023.09.0,CVE-2023-39322 +2023.09.0,CVE-2023-26117 +2023.09.0,CVE-2023-26116 +2023.09.0,CVE-2023-26118 +2023.07.0,CVE-2023-29406 +2023.07.0,CVE-2023-29406 +2023.06.0,CVE-2023-29401 +2023.06.0,CVE-2023-29402 +2023.06.0,CVE-2023-29403 +2023.06.0,CVE-2023-29404 +2023.06.0,CVE-2023-29405 +2023.06.0,CVE-2023-29401 +2023.06.0,CVE-2023-29402 +2023.06.0,CVE-2023-29403 +2023.06.0,CVE-2023-29404 +2023.06.0,CVE-2023-29405 +2023.05.0,CVE-2023-24537 +2023.05.0,CVE-2023-24538 +2023.05.0,CVE-2023-24534 +2023.05.0,CVE-2023-24536 +2023.05.0,CVE-2023-28119 +2023.05.0,CVE-2022-41912 +2023.05.0,CVE-2023-24539 +2023.05.0,CVE-2023-24540 +2023.05.0,CVE-2023-29400 +2023.05.0,CVE-2023-26125 +2023.05.0,CVE-2022-38131 +2023.05.0,CVE-2023-24537 +2023.05.0,CVE-2023-24538 +2023.05.0,CVE-2023-24534 +2023.05.0,CVE-2023-24536 +2023.05.0,CVE-2023-28119 +2023.05.0,CVE-2022-41912 +2023.05.0,CVE-2023-24539 +2023.05.0,CVE-2023-24540 +2023.05.0,CVE-2023-29400 +2023.05.0,CVE-2023-26125 +2023.05.0,CVE-2022-38131 +2023.03.0,CVE-2022-41722 +2023.03.0,CVE-2022-41725 +2023.03.0,CVE-2022-41724 +2023.03.0,CVE-2022-41723 +2023.03.0,CVE-2023-24532 +2023.03.0,CVE-2022-41722 +2023.03.0,CVE-2022-41725 +2023.03.0,CVE-2022-41724 +2023.03.0,CVE-2022-41723 +2023.03.0,CVE-2023-24532 +2023.01.1, +2023.01.0, +2022.12.0,CVE-2022-0536 +2022.12.0,CVE-2022-41720 +2022.12.0,CVE-2022-41717 +2022.12.0,CVE-2022-0536 +2022.12.0,CVE-2022-41720 +2022.12.0,CVE-2022-41717 +2022.11.0,CVE-2022-25844 +2022.11.0,CVE-2022-25869 +2022.11.0,CVE-2022-41716 +2022.11.0,CVE-2022-25844 +2022.11.0,CVE-2022-25869 +2022.11.0,CVE-2022-41716 +2022.10.0,CVE-2022-2879 +2022.10.0,CVE-2022-2880 +2022.10.0,CVE-2022-41715 +2022.10.0,CVE-2022-32149 +2022.10.0,CVE-2022-2879 +2022.10.0,CVE-2022-2880 +2022.10.0,CVE-2022-41715 +2022.10.0,CVE-2022-32149 +2022.09.0,CVE-2022-28948 +2022.09.0,CVE-2022-27664 +2022.09.0,CVE-2022-32190 +2022.09.0,CVE-2022-28948 +2022.09.0,CVE-2022-27664 +2022.09.0,CVE-2022-32190 +2022.08.1, +2022.08.0,CVE-2022-32189 +2022.08.0,CVE-2022-32189 +2022.07.0,CVE-2022-1705 +2022.07.0,CVE-2022-32148 +2022.07.0,CVE-2022-30631 +2022.07.0,CVE-2022-30633 +2022.07.0,CVE-2022-28131 +2022.07.0,CVE-2022-30635 +2022.07.0,CVE-2022-30632 +2022.07.0,CVE-2022-30630 +2022.07.0,CVE-2022-1962 +2022.07.0,CVE-2022-1705 +2022.07.0,CVE-2022-32148 +2022.07.0,CVE-2022-30631 +2022.07.0,CVE-2022-30633 +2022.07.0,CVE-2022-28131 +2022.07.0,CVE-2022-30635 +2022.07.0,CVE-2022-30632 +2022.07.0,CVE-2022-30630 +2022.07.0,CVE-2022-1962 +2022.06.2, +2022.06.0,CVE-2022-30634 +2022.06.0,CVE-2022-30629 +2022.06.0,CVE-2022-30580 +2022.06.0,CVE-2022-29804 +2022.06.0,CVE-2022-30634 +2022.06.0,CVE-2022-30629 +2022.06.0,CVE-2022-30580 +2022.06.0,CVE-2022-29804 +2022.05.1, +2022.05.0,CVE-2022-21698 +2022.05.0,CVE-2020-28483 +2022.05.0,CVE-2022-29526 +2022.05.0,CVE-2022-21698 +2022.05.0,CVE-2020-28483 +2022.05.0,CVE-2022-29526 +2022.04.3, +2022.04.2, +2022.04.1, +2022.04.0,CVE-2022-24675 +2022.04.0,CVE-2022-28327 +2022.04.0,CVE-2022-27536 +2022.04.0,CVE-2022-24675 +2022.04.0,CVE-2022-28327 +2022.04.0,CVE-2022-27536 +2022.03.3, +2022.03.2, +2022.03.1, +2022.03.0,CVE-2022-24921 +2022.03.0,CVE-2022-27191 +2022.03.0,CVE-2022-24921 +2022.03.0,CVE-2022-27191 +2022.02.4, +2022.02.3, +2022.02.2, +2022.02.0,CVE-2020-7676 +2022.02.0,CVE-2019-10768 +2022.02.0,CVE-2022-23806 +2022.02.0,CVE-2022-23772 +2022.02.0,CVE-2022-23773 +2022.02.0,CVE-2020-7676 +2022.02.0,CVE-2019-10768 +2022.02.0,CVE-2022-23806 +2022.02.0,CVE-2022-23772 +2022.02.0,CVE-2022-23773 +2021.12.1, +2021.12.0,CVE-2021-43565 +2021.12.0,CVE-2021-44716 +2021.12.0,CVE-2021-44717 +2021.12.0,CVE-2021-43565 +2021.12.0,CVE-2021-44716 +2021.12.0,CVE-2021-44717 +2021.11.1, +2021.11.0,CVE-2021-41772 +2021.11.0,CVE-2021-41771 +2021.11.0,CVE-2021-41772 +2021.11.0,CVE-2021-41771 +2021.10.0,CVE-2021-38297 +2021.10.0,CVE-2021-39293 +2021.10.0,CVE-2021-38297 +2021.10.0,CVE-2021-39293 +2021.09.0, +2021.08.2, +2021.08.1,CVE-2021-3664 +2021.08.1,CVE-2021-27515 +2021.08.0,CVE-2021-36221 diff --git a/inst/extdata/versions/drivers.csv b/inst/extdata/versions/drivers.csv index b7fd76b..236897c 100644 --- a/inst/extdata/versions/drivers.csv +++ b/inst/extdata/versions/drivers.csv @@ -1,8 +1,8 @@ # https://docs.posit.co/pro-drivers/documentation/ -version,date,cve -2024.03.0,2024-03-01, -2023.12.1,2023-11-03, -2023.05.0,2023-05-01, -2022.11.0,2022-11-01, -2021.10.0,2021-10-01, +version,cve +2024.03.0, +2023.12.1, +2023.05.0, +2022.11.0, +2021.10.0, diff --git a/inst/extdata/versions/workbench.csv b/inst/extdata/versions/workbench.csv index 66337fc..fd18644 100644 --- a/inst/extdata/versions/workbench.csv +++ b/inst/extdata/versions/workbench.csv @@ -1,14 +1,28 @@ -# https://docs.posit.co/ide/news/ -version,date,cve -2024.04.1,2024-05-13, -2024.04.0,2024-04-29, -2023.12.1,2024-01-29, -2023.12.0,2023-12-15, -2023.09.1,2023-10-17, -2023.09.0,2023-09-25, -2023.06.2,2023-08-24, -2023.06.1,2023-07-07, -2023.06.0,2023-06-08, -2023.03.2,2023-06-12, -2023.03.1,2023-05-12, -2023.03.0,2023-03-16, +name,cve +2024.04.2, +2024.04.1, +2024.04.0, +2023.12.1, +2023.12.0, +2023.09.1, +2023.09.0, +2023.06.2, +2023.06.1, +2023.06.0, +2023.03.2, +2023.03.1, +2023.03.0, +2022.12.0, +2022.07.2, +2022.07.1, +2022.07.0, +2022.02.4, +2022.02.3, +2022.02.2, +2022.02.1, +2022.02.0, +2021.09.4, +2021.09.3, +2021.09.2, +2021.09.1, +2021.09.0,