68 %macro mv_registerclient(client_id=
72 ,grant_type=authorization_code|refresh_token
73 ,required_user_groups=
76 ,outds=mv_registerclient
77 ,access_token_validity=DEFAULT
78 ,refresh_token_validity=DEFAULT
81 %local consul_token fname1 fname2 fname3 libref access_token url;
83 %
if client_name=DEFAULT %then %let client_name=
84 Generated by %mf_getuser() on %sysfunc(datetime(),datetime19.) using SASjs;
86 options noquotelenmax;
89 infile "%mf_loc(VIYACONFIG)/etc/SASSecurityCertificateFramework/tokens/consul/default/client.token";
91 call symputx('consul_token',token);
95 %let base_uri=%mf_getplatform(VIYARESTAPI);
98 %let fname1=%mf_getuniquefileref();
99 proc http method='POST' out=&fname1
100 url="&base_uri/SASLogon/oauth/clients/consul?callback=false%str(&)serviceId=app";
101 headers "X-Consul-Token"="&consul_token";
104 %let libref=%mf_getuniquelibref();
105 libname &libref JSON fileref=&fname1;
110 call symputx('access_token',access_token,'l');
116 %let fname2=%mf_getuniquefileref();
117 %if x&client_id.x=xx %then %do;
118 %let client_id=client_%sysfunc(ranuni(0),hex16.);
119 %let client_secret=secret_%sysfunc(ranuni(0),hex16.);
122 %let scopes=%sysfunc(coalescec(&scopes,openid));
123 %let scopes=%mf_getquotedstr(&scopes,QUOTE=D,indlm=|);
124 %let grant_type=%mf_getquotedstr(&grant_type,QUOTE=D,indlm=|);
125 %let required_user_groups=%mf_getquotedstr(&required_user_groups,QUOTE=D,indlm=|);
129 length clientid clientsecret clientname scope grant_types reqd_groups
131 clientid='"client_id":'!!quote(trim(symget('client_id')));
132 clientsecret=',"client_secret":'!!quote(trim(symget('client_secret')));
133 clientname=',"name":'!!quote(trim(symget('client_name')));
134 scope=',"scope":['!!symget('scopes')!!']';
135 grant_types=symget('grant_type');
136 if grant_types = '""' then grant_types ='';
137 grant_types=cats(',"authorized_grant_types": [',grant_types,']');
138 reqd_groups=symget('required_user_groups');
139 if reqd_groups = '""' then reqd_groups ='';
140 else reqd_groups=cats(',"required_user_groups":[',reqd_groups,']');
141 autoapprove=trim(symget('autoapprove'));
142 if not missing(autoapprove) then autoapprove=cats(',"autoapprove":',autoapprove);
143 use_session=trim(symget('use_session'));
144 if not missing(use_session) then use_session=cats(',"use_session":',use_session);
151 if not missing(reqd_groups) then put reqd_groups;
154 %if &access_token_validity ne DEFAULT %then %do;
155 put ',
"access_token_validity":
' "&access_token_validity";
157 %if &refresh_token_validity ne DEFAULT %then %do;
158 put ',
"refresh_token_validity":
' "&refresh_token_validity";
161 put ',
"redirect_uri":
"urn:ietf:wg:oauth:2.0:oob"';
165 %let fname3=%mf_getuniquefileref();
166 proc http method='POST
' in=&fname2 out=&fname3
167 url="&base_uri/SASLogon/oauth/clients";
168 headers "Content-Type"="application/json"
169 "Authorization"="Bearer &access_token";
178 if _infile_=:'{
"err'!!'or":
' then do;
179 length message $32767;
180 message=scan(_infile_,-2,'"');
181 call symputx('err',message,'l');
184 %if "&err
" ne "NONE
" %then %do;
185 %put %str(ERR)OR: &err;
189 %if %index(%superq(grant_type),authorization_code) %then %do;
191 if symexist('_baseurl') then do;
192 url=symget('_baseurl');
193 if subpad(url,length(url)-9,9)='SASStudio'
194 then url=substr(url,1,length(url)-11);
195 else url="&systcpiphostname
";
197 else url="&systcpiphostname
";
198 call symputx('url',url);
202 %put Please provide the following details to the developer:;
204 %put CLIENT_ID=&client_id;
205 %put CLIENT_SECRET=&client_secret;
206 %put GRANT_TYPE=&grant_type;
208 %if %index(%superq(grant_type),authorization_code) %then %do;
209 /* cannot use base_uri here as it includes the protocol which may be incorrect externally */
210 %put NOTE: The developer must also register below and select 'openid' to get the grant code:;
212 %put NOTE- &url/SASLogon/oauth/authorize?client_id=&client_id%str(&)response_type=code;
217 client_id=symget('client_id');
218 client_secret=symget('client_secret');
229 filename &fname1 clear;
230 filename &fname2 clear;
231 filename &fname3 clear;
232 libname &libref clear;