89%macro mv_registerclient(client_id=
94 ,grant_type=authorization_code|refresh_token
95 ,required_user_groups=
98 ,outds=mv_registerclient
99 ,access_token_validity=DEFAULT
100 ,refresh_token_validity=DEFAULT
103%local fname1 fname2 fname3 libref access_token url tokloc msg;
105%
if client_name=DEFAULT %then %let client_name=
106 Generated by %mf_getuser() (&sysuserid) on %sysfunc(datetime(),datetime19.
109options noquotelenmax;
111%
if "&consul_token"=
"0" %then %
do;
113 %let tokloc=/etc/SASSecurityCertificateFramework/tokens/consul/
default;
114 %let tokloc=%mf_loc(VIYACONFIG)&tokloc/client.token;
116 %
if %sysfunc(fileexist(&tokloc))=0 %then %
do;
117 %let msg=Unable to access the consul token at &tokloc;
118 %put &sysmacroname: &msg;
119 %put Try passing the value in the consul= macro parameter;
120 %put See docs: https:
121 %mp_abort(mac=mv_registerclient,msg=%str(&msg))
127 call symputx(
'consul_token',token);
130 %
if "&consul_token"=
"0" %then %
do;
131 %put &sysmacroname: Unable to source the consul token from &tokloc;
132 %put It seems your account (&sysuserid) does not have admin rights;
133 %put Please speak with your platform adminstrator;
140%let base_uri=%mf_getplatform(VIYARESTAPI);
143%let fname1=%mf_getuniquefileref();
144proc http method=
'POST' out=&fname1
145 url=
"&base_uri/SASLogon/oauth/clients/consul?callback=false%str(&)%trim(
147 headers
"X-Consul-Token"=
"&consul_token";
150%put &=SYS_PROCHTTP_STATUS_CODE;
151%put &=SYS_PROCHTTP_STATUS_PHRASE;
153%let libref=%mf_getuniquelibref();
154libname &libref JSON fileref=&fname1;
159 call symputx(
'access_token',access_token,
'l');
165%let fname2=%mf_getuniquefileref();
166%
if x&client_id.x=xx %then %
do;
167 %let client_id=client_%sysfunc(ranuni(0),hex16.);
168 %let client_secret=secret_%sysfunc(ranuni(0),hex16.);
171%let scopes=%sysfunc(coalescec(&scopes,openid));
172%let scopes=%mf_getquotedstr(&scopes,QUOTE=D,indlm=|);
173%let grant_type=%mf_getquotedstr(&grant_type,QUOTE=D,indlm=|);
174%let required_user_groups=
175 %mf_getquotedstr(&required_user_groups,QUOTE=D,indlm=|);
179 length clientid clientsecret clientname scope grant_types reqd_groups
181 clientid=
'"client_id":'!!quote(trim(symget(
'client_id')));
182 clientsecret=
',"client_secret":'!!quote(trim(symget(
'client_secret')));
183 clientname=
',"name":'!!quote(trim(symget(
'client_name')));
184 scope=
',"scope":['!!symget(
'scopes')!!
']';
185 grant_types=symget(
'grant_type');
186 if grant_types =
'""' then grant_types =
'';
187 grant_types=cats(
',"authorized_grant_types": [',grant_types,
']');
188 reqd_groups=symget(
'required_user_groups');
189 if reqd_groups =
'""' then reqd_groups =
'';
190 else reqd_groups=cats(
',"required_user_groups":[',reqd_groups,
']');
191 autoapprove=trim(symget(
'autoapprove'));
192 if not missing(autoapprove) then autoapprove=
193 cats(
',"autoapprove":',autoapprove);
194 use_session=trim(symget(
'use_session'));
195 if not missing(use_session) then use_session=
196 cats(
',"use_session":',use_session);
203 if not missing(reqd_groups) then put reqd_groups;
206%
if &access_token_validity ne DEFAULT %then %
do;
207 put
',"access_token_validity":' "&access_token_validity";
209%
if &refresh_token_validity ne DEFAULT %then %
do;
210 put
',"refresh_token_validity":' "&refresh_token_validity";
213 put
',"redirect_uri": "urn:ietf:wg:oauth:2.0:oob"';
217%let fname3=%mf_getuniquefileref();
218proc http method=
'POST' in=&fname2 out=&fname3
219 url=
"&base_uri/SASLogon/oauth/clients";
220 headers
"Content-Type"=
"application/json"
221 "Authorization"=
"Bearer &access_token";
230 if _infile_=:
'{"err'!!
'or":' then
do;
231 length message $32767;
232 message=scan(_infile_,-2,
'"');
233 call symputx(
'err',message,
'l');
236%
if "&err" ne
"NONE" %then %
do;
237 %put %str(ERR)OR: &err;
241%
if %index(%superq(grant_type),authorization_code) %then %
do;
243 if symexist(
'_baseurl') then do;
244 url=symget('_baseurl');
245 if subpad(url,length(url)-9,9)='SASStudio'
246 then url=substr(url,1,length(url)-11);
247 else url=
"&systcpiphostname";
249 else url=
"&systcpiphostname";
250 call symputx('url',url);
254%put Please provide the following details to the developer:;
256%put CLIENT_ID=&client_id;
257%put CLIENT_SECRET=&client_secret;
258%put GRANT_TYPE=&grant_type;
260%if %index(%superq(grant_type),authorization_code) %then %do;
263 %put NOTE: Visit the link below and select 'openid' to get the grant code:;
265 %put NOTE- &url/SASLogon/oauth/authorize?client_id=&client_id%str(&)%trim(
271 client_id=symget('client_id');
272 client_secret=symget('client_secret');
283filename &fname1 clear;
284filename &fname2 clear;
285filename &fname3 clear;
286libname &libref clear;
288%mend mv_registerclient;