mirror of
https://github.com/sasjs/core.git
synced 2026-01-16 13:00:05 +00:00
feat(*): recreate library as scoped package
This commit is contained in:
132
viya/mv_tokenrefresh.sas
Normal file
132
viya/mv_tokenrefresh.sas
Normal file
@@ -0,0 +1,132 @@
|
||||
/**
|
||||
@file mv_tokenrefresh.sas
|
||||
@brief Get an additional access token using a refresh token
|
||||
@details Before an access token can be obtained, a refresh token is required
|
||||
For that, check out the `mv_tokenauth` macro.
|
||||
|
||||
Usage:
|
||||
|
||||
* prep work - register client, get refresh token, save it for later use ;
|
||||
%mv_registerclient(outds=client)
|
||||
%mv_tokenauth(inds=client,code=wKDZYTEPK6)
|
||||
data _null_;
|
||||
file "~/refresh.token";
|
||||
put "&refresh_token";
|
||||
run;
|
||||
|
||||
* now do the things n stuff;
|
||||
data _null_;
|
||||
infile "~/refresh.token";
|
||||
input;
|
||||
call symputx('refresh_token',_infile_);
|
||||
run;
|
||||
%mv_tokenrefresh(client_id=&client
|
||||
,client_secret=&secret
|
||||
)
|
||||
|
||||
A great article for explaining all these steps is available here:
|
||||
|
||||
https://blogs.sas.com/content/sgf/2019/01/25/authentication-to-sas-viya/
|
||||
|
||||
@param inds= A dataset containing client_id and client_secret
|
||||
@param outds= A dataset containing access_token and refresh_token
|
||||
@param client_id= The client name (alternative to inds)
|
||||
@param client_secret= client secret (alternative to inds)
|
||||
@param grant_type= valid values are "password" or "authorization_code" (unquoted).
|
||||
The default is authorization_code.
|
||||
@param user= If grant_type=password then provide the username here
|
||||
@param pass= If grant_type=password then provide the password here
|
||||
@param access_token_var= The global macro variable to contain the access token
|
||||
@param refresh_token_var= The global macro variable containing the refresh token
|
||||
|
||||
@version VIYA V.03.04
|
||||
@author Allan Bowe
|
||||
@source https://github.com/macropeople/macrocore
|
||||
|
||||
<h4> Dependencies </h4>
|
||||
@li mp_abort.sas
|
||||
@li mf_getplatform.sas
|
||||
@li mf_getuniquefileref.sas
|
||||
@li mf_getuniquelibref.sas
|
||||
@li mf_existds.sas
|
||||
|
||||
**/
|
||||
|
||||
%macro mv_tokenrefresh(inds=mv_registerclient
|
||||
,outds=mv_tokenrefresh
|
||||
,client_id=someclient
|
||||
,client_secret=somesecret
|
||||
,grant_type=authorization_code
|
||||
,user=
|
||||
,pass=
|
||||
,access_token_var=ACCESS_TOKEN
|
||||
,refresh_token_var=REFRESH_TOKEN
|
||||
);
|
||||
%global &access_token_var &refresh_token_var;
|
||||
options noquotelenmax;
|
||||
|
||||
%local fref1 libref;
|
||||
|
||||
/* test the validity of inputs */
|
||||
%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password)
|
||||
,mac=&sysmacroname
|
||||
,msg=%str(Invalid value for grant_type: &grant_type)
|
||||
)
|
||||
|
||||
%mp_abort(iftrue=(&grant_type=password and (%str(&user)=%str() or %str(&pass)=%str()))
|
||||
,mac=&sysmacroname
|
||||
,msg=%str(username / password required)
|
||||
)
|
||||
|
||||
%if %mf_existds(&inds) %then %do;
|
||||
data _null_;
|
||||
set &inds;
|
||||
call symputx('client_id',client_id,'l');
|
||||
call symputx('client_secret',client_secret,'l');
|
||||
call symputx("&refresh_token_var",&refresh_token_var,'l');
|
||||
run;
|
||||
%end;
|
||||
|
||||
%mp_abort(iftrue=(%str(&client_id)=%str() or %str(&client_secret)=%str())
|
||||
,mac=&sysmacroname
|
||||
,msg=%str(client / secret must both be provided)
|
||||
)
|
||||
|
||||
/**
|
||||
* Request access token
|
||||
*/
|
||||
%local base_uri; /* location of rest apis */
|
||||
%let base_uri=%mf_getplatform(VIYARESTAPI);
|
||||
|
||||
%let fref1=%mf_getuniquefileref();
|
||||
proc http method='POST'
|
||||
in="grant_type=refresh_token%nrstr(&)refresh_token=&&&refresh_token_var"
|
||||
out=&fref1
|
||||
url="&base_uri/SASLogon/oauth/token"
|
||||
WEBUSERNAME="&client_id"
|
||||
WEBPASSWORD="&client_secret"
|
||||
AUTH_BASIC;
|
||||
headers "Accept"="application/json"
|
||||
"Content-Type"="application/x-www-form-urlencoded";
|
||||
run;
|
||||
/*data _null_;infile &fref1;input;put _infile_;run;*/
|
||||
|
||||
/**
|
||||
* Extract access / refresh tokens
|
||||
*/
|
||||
|
||||
%let libref=%mf_getuniquelibref();
|
||||
libname &libref JSON fileref=&fref1;
|
||||
|
||||
/* extract the token */
|
||||
data &outds;
|
||||
set &libref..root;
|
||||
call symputx("&access_token_var",access_token);
|
||||
call symputx("&refresh_token_var",refresh_token);
|
||||
run;
|
||||
|
||||
|
||||
libname &libref clear;
|
||||
filename &fref1 clear;
|
||||
|
||||
%mend;
|
||||
Reference in New Issue
Block a user