diff --git a/DESCRIPTION b/DESCRIPTION index f5e8c5f..d81c4ec 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: apinsee Title: Manage Access to Insee APIs -Version: 0.0.0.9031 +Version: 0.0.0.9040 Authors@R: c( person("Romain", "Lesur", role = c("aut", "cre"), email = "romain.lesur@gmail.com", comment = c(ORCID = "0000-0002-0721-5595")), person() @@ -17,6 +17,7 @@ RoxygenNote: 6.1.1 Collate: 'endpoint.R' 'utils.R' + 'scope.R' 'token.R' 'insee_auth.R' 'zzz.R' diff --git a/NAMESPACE b/NAMESPACE index 3187791..909c282 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -4,5 +4,6 @@ export(TokenInsee) export(insee_auth) export(insee_deauth) export(insee_endpoint) +export(insee_scopes) export(insee_token) importFrom(rlang,":=") diff --git a/R/endpoint.R b/R/endpoint.R index 6bbd54b..404386d 100644 --- a/R/endpoint.R +++ b/R/endpoint.R @@ -35,18 +35,3 @@ insee_endpoint <- function(insee_url = getOption("apinsee.url")) { authorize = NULL ) } - -insee_scope <- function(insee_url = getOption("apinsee.url")) { - modify_insee_url <- function(path) { - httr::modify_url(url = insee_url, path = path) - } - - paths <- list( - c("metadonnees", "nomenclatures", "v1"), - c("entreprises", "sirene", "V3"), - c("entreprises", "sirene") - ) - - vapply(paths, modify_insee_url, character(1)) - -} diff --git a/R/insee_auth.R b/R/insee_auth.R index a1aa300..40b934d 100644 --- a/R/insee_auth.R +++ b/R/insee_auth.R @@ -30,6 +30,7 @@ NULL #' @param cache booléen indiquant si `apinsee` doit sauvegarder les jetons #' d'accès dans un fichier cache, par défaut `.httr-oauth`. #' @param verbose booléen; souhaitez-vous des messages d'information ? +#' @inheritParams insee_token #' @inheritParams insee_endpoint #' @inheritSection insee_endpoint Utilisation interne à l'Insee #' @encoding UTF-8 @@ -58,6 +59,7 @@ insee_auth <- function( key = Sys.getenv("INSEE_APP_KEY"), secret = Sys.getenv("INSEE_APP_SECRET"), validity_period = 86400, + api = c("Sirene V3", "Nomenclatures v1"), cache = FALSE, verbose = TRUE, insee_url = getOption("apinsee.url") @@ -76,7 +78,8 @@ insee_auth <- function( app = app, cache = cache, validity_period = validity_period, - insee_url = insee_url + insee_url = insee_url, + api = api ) stopifnot(is_legit_token(token, verbose = TRUE)) diff --git a/R/scope.R b/R/scope.R new file mode 100644 index 0000000..60008b8 --- /dev/null +++ b/R/scope.R @@ -0,0 +1,43 @@ +#' Addresses of the Insee APIs +#' +#' Cette fonction renvoie les adresses des API de l'Insee. +#' +#' @param api Un vecteur de chaînes de caractères dont chaque élément comprend +#' le nom d'une API. La correspondance partielle est acceptée. +#' @inheritParams insee_endpoint +#' @inheritSection insee_endpoint Utilisation interne à l'Insee +#' +#' @return Un vecteur de chaînes de caractères comprenant les adresses des API +#' de l'Insee. +#' @keywords internal +#' @export +#' +#' @examples +#' insee_scopes() +#' insee_scopes("Sirene") +#' insee_scopes("Nomenclatures") +#' insee_scopes(c("Sirene", "Nomenclatures")) +insee_scopes <- function( + api = c("Sirene V3", "Nomenclatures v1"), + insee_url = getOption("apinsee.url") +) { + api <- match.arg(api, several.ok = TRUE) + + paths <- list( + `Nomenclatures v1` = list( + c("metadonnees", "nomenclatures", "v1") + ), + `Sirene V3` = list( + c("entreprises", "sirene", "V3"), + c("entreprises", "sirene") + ) + ) + + modify_insee_url <- function(path) { + vapply(path, function(x) httr::modify_url(url = insee_url, path = x), character(1)) + } + + urls <- lapply(paths, modify_insee_url) + + unlist(urls[api], use.names = FALSE) +} diff --git a/R/token.R b/R/token.R index ae26739..0a22b68 100644 --- a/R/token.R +++ b/R/token.R @@ -1,4 +1,4 @@ -#' @include endpoint.R +#' @include endpoint.R scope.R NULL #' Generate a valid token for an Insee application @@ -9,7 +9,12 @@ NULL #' @inheritParams httr::oauth2.0_token #' @inheritParams insee_endpoint #' @inheritSection insee_endpoint Utilisation interne à l'Insee -#' @param validity_period A positive integer; token validity period in seconds. +#' @param validity_period Un entier; durée de validité du jeton d'accès. Cette +#' valeur n'est utilisée que lorsque le dernier jeton d'accès a expiré ou a +#' été révoqué. +#' @param api Un vecteur de chaînes de caractères dont chaque élément comprend +#' le ou les noms des API accessibles par l'application. La correspondance +#' partielle est acceptée. #' #' @return Un objet de classe [TokenInsee]. #' @keywords internal @@ -18,7 +23,8 @@ NULL insee_token <- function( app, cache = getOption("httr_oauth_cache"), config_init = list(), credentials = NULL, - validity_period = 86400, insee_url = getOption("apinsee.url") + validity_period = 86400, insee_url = getOption("apinsee.url"), + api = c("Sirene V3", "Nomenclatures v1") ) { stopifnot( @@ -26,7 +32,8 @@ insee_token <- function( validity_period > 0 ) - scope <- insee_scope() + api <- match.arg(api, several.ok = TRUE) + scope <- insee_scopes(api = api, insee_url = insee_url) user_params <- list( grant_type = "client_credentials", diff --git a/man/TokenInsee.Rd b/man/TokenInsee.Rd index 5b364f8..7a2cb98 100644 --- a/man/TokenInsee.Rd +++ b/man/TokenInsee.Rd @@ -13,18 +13,18 @@ TokenInsee Cette classe représente les jetons d'accès aux applications créées sur \href{https://api.insee.fr}{api.insee.fr} et hérite de la classe \link[httr:Token-class]{Token2.0} du package \link[httr:httr-package]{httr}. Les -objets de cette classe doivent être créés en appelant le constructeur +objets de cette classe doivent être créés en utilisant le constructeur \link[=insee_token]{insee_token()}. } \section{Methods}{ \itemize{ \item \code{has_expired()} : le jeton d'accès a-t-il expiré ? -\item \code{cache()} : sauvegarde le jeton d'accès dans un cache -\item \code{revoke()} : révoque le jeton d'accès +\item \code{cache()} : sauvegarde le jeton d'accès dans un cache. +\item \code{revoke()} : révoque le jeton d'accès. \item \code{refresh()} : rafraichit le jeton d'accès (le point d'accès de rafraichissement OAuth2 n'étant pas disponible, le jeton d'accès -courant est révoqué puis un nouveau jeton d'accès est généré) +courant est révoqué puis un nouveau jeton d'accès est généré). } } diff --git a/man/insee_auth.Rd b/man/insee_auth.Rd index 966a92d..47d3299 100644 --- a/man/insee_auth.Rd +++ b/man/insee_auth.Rd @@ -8,8 +8,8 @@ insee_auth(new_auth = FALSE, appname = "DefaultApplication", key = Sys.getenv("INSEE_APP_KEY"), secret = Sys.getenv("INSEE_APP_SECRET"), validity_period = 86400, - cache = FALSE, verbose = TRUE, - insee_url = getOption("apinsee.url")) + api = c("Sirene V3", "Nomenclatures v1"), cache = FALSE, + verbose = TRUE, insee_url = getOption("apinsee.url")) } \arguments{ \item{new_auth}{booléen, valeur par défaut : \code{FALSE}. Passer \code{TRUE} si vous @@ -21,6 +21,10 @@ souhaitez révoquer le jeton d'accès et vous authentifier à nouveau.} \item{validity_period}{entier, durée de validité du jeton d'accès en secondes.} +\item{api}{Un vecteur de chaînes de caractères dont chaque élément comprend +le ou les noms des API accessibles par l'application. La correspondance +partielle est acceptée.} + \item{cache}{booléen indiquant si \code{apinsee} doit sauvegarder les jetons d'accès dans un fichier cache, par défaut \code{.httr-oauth}.} diff --git a/man/insee_scopes.Rd b/man/insee_scopes.Rd new file mode 100644 index 0000000..207a0e0 --- /dev/null +++ b/man/insee_scopes.Rd @@ -0,0 +1,42 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/scope.R +\name{insee_scopes} +\alias{insee_scopes} +\title{Addresses of the Insee APIs} +\usage{ +insee_scopes(api = c("Sirene V3", "Nomenclatures v1"), + insee_url = getOption("apinsee.url")) +} +\arguments{ +\item{api}{Un vecteur de chaînes de caractères dont chaque élément comprend +le nom d'une API. La correspondance partielle est acceptée.} + +\item{insee_url}{Adresse du site fournissant les API. Ce paramètre n'est +utile que pour un usage interne à l'Insee, voir la section "Utilisation +interne à l'Insee".} +} +\value{ +Un vecteur de chaînes de caractères comprenant les adresses des API +de l'Insee. +} +\description{ +Cette fonction renvoie les adresses des API de l'Insee. +} +\section{Utilisation interne à l'Insee}{ + +Dans le cas d'utilisation standard, la valeur de l'option \code{apinsee.url} est +\code{"https://api.insee.fr/"}. Il n'est pas utile de la modifier sauf pour les +agents de l'Insee qui souhaiteraient utiliser les plateformes de test, de +recette ou de pré-production. Dans ce cas, afin de rendre les programmes +portables d'un environnement à un autre.il est préférable de déclarer +l'adresse en modifiant l'option \code{apinsee.url} : +\code{options(apinsee.url = "")}. +} + +\examples{ +insee_scopes() +insee_scopes("Sirene") +insee_scopes("Nomenclatures") +insee_scopes(c("Sirene", "Nomenclatures")) +} +\keyword{internal} diff --git a/man/insee_token.Rd b/man/insee_token.Rd index a2d7ddd..cece964 100644 --- a/man/insee_token.Rd +++ b/man/insee_token.Rd @@ -7,7 +7,8 @@ \usage{ insee_token(app, cache = getOption("httr_oauth_cache"), config_init = list(), credentials = NULL, validity_period = 86400, - insee_url = getOption("apinsee.url")) + insee_url = getOption("apinsee.url"), api = c("Sirene V3", + "Nomenclatures v1")) } \arguments{ \item{app}{An OAuth consumer application, created by @@ -24,11 +25,17 @@ A string means use the specified path as the cache file.} \item{credentials}{Advanced use only: allows you to completely customise token generation.} -\item{validity_period}{A positive integer; token validity period in seconds.} +\item{validity_period}{Un entier; durée de validité du jeton d'accès. Cette +valeur n'est utilisée que lorsque le dernier jeton d'accès a expiré ou a +été révoqué.} \item{insee_url}{Adresse du site fournissant les API. Ce paramètre n'est utile que pour un usage interne à l'Insee, voir la section "Utilisation interne à l'Insee".} + +\item{api}{Un vecteur de chaînes de caractères dont chaque élément comprend +le ou les noms des API accessibles par l'application. La correspondance +partielle est acceptée.} } \value{ Un objet de classe \link{TokenInsee}.