Commit 365a1acc authored by Lars Dalby's avatar Lars Dalby
Browse files

Merge branch 'dfd-auth-helpers' into 'main'

Add Datafordeler authentication helpers

See merge request !1
parents 00e9896c 13183c2a
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
Package: ecospgr
Title: Shared Loader Utilities for ecospg
Version: 0.2.2
Version: 0.3.0
Authors@R:
    person("Lars", "Dalby", email = "lars@ecos.au.dk", role = c("aut", "cre"))
Description: Extracts duplicated R code from ecospg data loaders into a
@@ -10,7 +10,6 @@ Description: Extracts duplicated R code from ecospg data loaders into a
License: MIT + file LICENSE
Encoding: UTF-8
Roxygen: list(markdown = TRUE)
RoxygenNote: 7.3.3
Imports:
    DBI,
    RPostgres,
@@ -23,3 +22,4 @@ Suggests:
    testthat (>= 3.0.0),
    withr
Config/testthat/edition: 3
Config/roxygen2/version: 8.0.0
+3 −0
Original line number Diff line number Diff line
@@ -4,6 +4,8 @@ export(epg_build_source_meta)
export(epg_collect_source_meta_overrides)
export(epg_create_partition)
export(epg_detect_xsd_for_gml)
export(epg_dfd_auth_params)
export(epg_dfd_auth_qs)
export(epg_ensure_dataset)
export(epg_ensure_topic)
export(epg_finalize_version)
@@ -21,4 +23,5 @@ export(epg_sanitize_name)
export(epg_set_raw_file_url)
export(epg_upload_raw_files)
export(epg_write_staging)
importFrom(utils,URLencode)
importFrom(utils,modifyList)

R/datafordeler_auth.R

0 → 100644
+46 −0
Original line number Diff line number Diff line
#' Datafordeler authentication query parameters
#'
#' Returns a named list of credential query parameters for Datafordeler URLs.
#' Prefers API-key auth (`apikey=`) when `DFD_API_KEY` is set; falls back to
#' legacy username/password (`username=…&password=…`). Errors if neither is
#' available.
#'
#' @param api_key  API key (default `Sys.getenv("DFD_API_KEY")`)
#' @param username Legacy service-user name (default `Sys.getenv("DFD_USERNAME")`)
#' @param password Legacy service-user password (default `Sys.getenv("DFD_PASSWORD")`)
#' @return Named list with either `apikey` OR `username` + `password`.
#' @export
epg_dfd_auth_params <- function(
  api_key  = Sys.getenv("DFD_API_KEY", ""),
  username = Sys.getenv("DFD_USERNAME", ""),
  password = Sys.getenv("DFD_PASSWORD", "")
) {
  if (nzchar(api_key)) return(list(apikey = api_key))
  if (nzchar(username) && nzchar(password)) {
    return(list(username = username, password = password))
  }
  cli::cli_abort(c(
    "No Datafordeler credentials.",
    "i" = "Set {.envvar DFD_API_KEY} (preferred) or {.envvar DFD_USERNAME} + {.envvar DFD_PASSWORD}."
  ))
}

#' Datafordeler authentication query string
#'
#' Returns a URL-encoded query-string fragment for the credentials returned by
#' [epg_dfd_auth_params()], e.g. `"apikey=abc123"` or
#' `"username=u&password=p"`. Does not include a leading `?` or `&`.
#'
#' @inheritParams epg_dfd_auth_params
#' @param ... Passed to [epg_dfd_auth_params()].
#' @return Character scalar.
#' @importFrom utils URLencode
#' @export
epg_dfd_auth_qs <- function(...) {
  p <- epg_dfd_auth_params(...)
  paste(
    names(p),
    vapply(unlist(p), utils::URLencode, character(1), reserved = TRUE),
    sep = "=", collapse = "&"
  )
}
+28 −0
Original line number Diff line number Diff line
% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/datafordeler_auth.R
\name{epg_dfd_auth_params}
\alias{epg_dfd_auth_params}
\title{Datafordeler authentication query parameters}
\usage{
epg_dfd_auth_params(
  api_key = Sys.getenv("DFD_API_KEY", ""),
  username = Sys.getenv("DFD_USERNAME", ""),
  password = Sys.getenv("DFD_PASSWORD", "")
)
}
\arguments{
\item{api_key}{API key (default \code{Sys.getenv("DFD_API_KEY")})}

\item{username}{Legacy service-user name (default \code{Sys.getenv("DFD_USERNAME")})}

\item{password}{Legacy service-user password (default \code{Sys.getenv("DFD_PASSWORD")})}
}
\value{
Named list with either \code{apikey} OR \code{username} + \code{password}.
}
\description{
Returns a named list of credential query parameters for Datafordeler URLs.
Prefers API-key auth (\verb{apikey=}) when \code{DFD_API_KEY} is set; falls back to
legacy username/password (\verb{username=…&password=…}). Errors if neither is
available.
}

man/epg_dfd_auth_qs.Rd

0 → 100644
+19 −0
Original line number Diff line number Diff line
% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/datafordeler_auth.R
\name{epg_dfd_auth_qs}
\alias{epg_dfd_auth_qs}
\title{Datafordeler authentication query string}
\usage{
epg_dfd_auth_qs(...)
}
\arguments{
\item{...}{Passed to \code{\link[=epg_dfd_auth_params]{epg_dfd_auth_params()}}.}
}
\value{
Character scalar.
}
\description{
Returns a URL-encoded query-string fragment for the credentials returned by
\code{\link[=epg_dfd_auth_params]{epg_dfd_auth_params()}}, e.g. \code{"apikey=abc123"} or
\code{"username=u&password=p"}. Does not include a leading \verb{?} or \code{&}.
}
Loading