88%macro mv_registerclient(client_id=
93 ,grant_type=authorization_code|refresh_token
94 ,required_user_groups=
97 ,outds=mv_registerclient
98 ,access_token_validity=DEFAULT
99 ,refresh_token_validity=DEFAULT
102%local fname1 fname2 fname3 libref access_token url tokloc msg;
104%
if client_name=DEFAULT %then %let client_name=
105 Generated by %mf_getuser() (&sysuserid) on %sysfunc(datetime(),datetime19.
108options noquotelenmax;
110%
if "&consul_token"=
"0" %then %
do;
112 %let tokloc=/etc/SASSecurityCertificateFramework/tokens/consul/
default;
113 %let tokloc=%mf_loc(VIYACONFIG)&tokloc/client.token;
115 %
if %sysfunc(fileexist(&tokloc))=0 %then %
do;
116 %let msg=Unable to access the consul token at &tokloc;
117 %put &sysmacroname: &msg;
118 %put Try passing the value in the consul= macro parameter;
119 %put See docs: https:
120 %mp_abort(mac=mv_registerclient,msg=%str(&msg))
126 call symputx(
'consul_token',token);
129 %
if "&consul_token"=
"0" %then %
do;
130 %put &sysmacroname: Unable to source the consul token from &tokloc;
131 %put It seems your account (&sysuserid) does not have admin rights;
132 %put Please speak with your platform adminstrator;
139%let base_uri=%mf_getplatform(VIYARESTAPI);
142%let fname1=%mf_getuniquefileref();
143proc http method=
'POST' out=&fname1
144 url=
"&base_uri/SASLogon/oauth/clients/consul?callback=false%str(&)%trim(
146 headers
"X-Consul-Token"=
"&consul_token";
149%put &=SYS_PROCHTTP_STATUS_CODE;
150%put &=SYS_PROCHTTP_STATUS_PHRASE;
152%let libref=%mf_getuniquelibref();
153libname &libref JSON fileref=&fname1;
158 call symputx(
'access_token',access_token,
'l');
164%let fname2=%mf_getuniquefileref();
165%
if x&client_id.x=xx %then %
do;
166 %let client_id=client_%sysfunc(ranuni(0),hex16.);
167 %let client_secret=secret_%sysfunc(ranuni(0),hex16.);
170%let scopes=%sysfunc(coalescec(&scopes,openid));
171%let scopes=%mf_getquotedstr(&scopes,QUOTE=D,indlm=|);
172%let grant_type=%mf_getquotedstr(&grant_type,QUOTE=D,indlm=|);
173%let required_user_groups=
174 %mf_getquotedstr(&required_user_groups,QUOTE=D,indlm=|);
178 length clientid clientsecret clientname scope grant_types reqd_groups
180 clientid=
'"client_id":'!!quote(trim(symget(
'client_id')));
181 clientsecret=
',"client_secret":'!!quote(trim(symget(
'client_secret')));
182 clientname=
',"name":'!!quote(trim(symget(
'client_name')));
183 scope=
',"scope":['!!symget(
'scopes')!!
']';
184 grant_types=symget(
'grant_type');
185 if grant_types =
'""' then grant_types =
'';
186 grant_types=cats(
',"authorized_grant_types": [',grant_types,
']');
187 reqd_groups=symget(
'required_user_groups');
188 if reqd_groups =
'""' then reqd_groups =
'';
189 else reqd_groups=cats(
',"required_user_groups":[',reqd_groups,
']');
190 autoapprove=trim(symget(
'autoapprove'));
191 if not missing(autoapprove) then autoapprove=
192 cats(
',"autoapprove":',autoapprove);
193 use_session=trim(symget(
'use_session'));
194 if not missing(use_session) then use_session=
195 cats(
',"use_session":',use_session);
202 if not missing(reqd_groups) then put reqd_groups;
205%
if &access_token_validity ne DEFAULT %then %
do;
206 put
',"access_token_validity":' "&access_token_validity";
208%
if &refresh_token_validity ne DEFAULT %then %
do;
209 put
',"refresh_token_validity":' "&refresh_token_validity";
212 put
',"redirect_uri": "urn:ietf:wg:oauth:2.0:oob"';
216%let fname3=%mf_getuniquefileref();
217proc http method=
'POST' in=&fname2 out=&fname3
218 url=
"&base_uri/SASLogon/oauth/clients";
219 headers
"Content-Type"=
"application/json"
220 "Authorization"=
"Bearer &access_token";
229 if _infile_=:
'{"err'!!
'or":' then
do;
230 length message $32767;
231 message=scan(_infile_,-2,
'"');
232 call symputx(
'err',message,
'l');
235%
if "&err" ne
"NONE" %then %
do;
236 %put %str(ERR)OR: &err;
240%
if %index(%superq(grant_type),authorization_code) %then %
do;
242 if symexist(
'_baseurl') then do;
243 url=symget('_baseurl');
244 if subpad(url,length(url)-9,9)='SASStudio'
245 then url=substr(url,1,length(url)-11);
246 else url="&systcpiphostname";
248 else url="&systcpiphostname";
249 call symputx('url',url);
253%put Please provide the following details to the developer:;
255%put CLIENT_ID=&client_id;
256%put CLIENT_SECRET=&client_secret;
257%put GRANT_TYPE=&grant_type;
259%if %index(%superq(grant_type),authorization_code) %then %do;
262 %put NOTE: Visit the link below and select 'openid' to get the grant code:;
264 %put NOTE- &url/SASLogon/oauth/authorize?client_id=&client_id%str(&)%trim(
270 client_id=symget('client_id');
271 client_secret=symget('client_secret');
282filename &fname1 clear;
283filename &fname2 clear;
284filename &fname3 clear;
285libname &libref clear;
287%mend mv_registerclient;