diff --git a/all.sas b/all.sas index ef3edac..cbfafcf 100644 --- a/all.sas +++ b/all.sas @@ -19023,6 +19023,150 @@ run; options &optval; %mend ms_createfile; +/** + @file + @brief Creates a user on SASjs Server + @details Creates a user on SASjs Server with the following attributes: + + @li UserName + @li Password + @li isAdmin + @li displayName + + The userid is created by sasjs/server. All users are created with `isActive` + set to `true`. + + Example: + + %ms_createuser(newuser,secretpass,displayname=New User!) + + @param [in] username The username to apply. No spaces or special characters. + @param [in] password The initial password to set. + @param [in] isadmin= (false) Set to true to give the user admin rights + @param [in] displayName= (0) Set a friendly name (spaces & special characters + are ok). If not provided, username will be used instead. + @param [in] mdebug= (0) Set to 1 to enable DEBUG messages + @param [out] outds= (work.ms_createuser) This output dataset will contain the + values from the JSON response (such as the id of the new user) +|ID:best.|DISPLAYNAME:$8.|USERNAME:$8.|ISACTIVE:best.|ISADMIN:best.| +|---|---|---|---|---| +|`6 `|`New User `|`newuser `|`1 `|`0 `| + + + +

SAS Macros

+ @li mf_getuniquefileref.sas + @li mf_getuniquelibref.sas + @li mp_abort.sas + +

Related Files

+ @li ms_createuser.test.sas + @li ms_getusers.sas + +**/ + +%macro ms_createuser(username,password + ,isadmin=false + ,displayname=0 + ,outds=work.ms_createuser + ,mdebug=0 + ); + +%mp_abort( + iftrue=(&syscc ne 0) + ,mac=ms_createuser.sas + ,msg=%str(syscc=&syscc on macro entry) +) + +%local fref0 fref1 fref2 libref optval rc msg; +%let fref0=%mf_getuniquefileref(); +%let fref1=%mf_getuniquefileref(); +%let fref2=%mf_getuniquefileref(); +%let libref=%mf_getuniquelibref(); + +/* avoid sending bom marker to API */ +%let optval=%sysfunc(getoption(bomfile)); +options nobomfile; + +data _null_; + file &fref0 termstr=crlf; + username=quote(cats(symget('username'))); + password=quote(cats(symget('password'))); + isadmin=symget('isadmin'); + displayname=quote(cats(symget('displayname'))); + if displayname='"0"' then displayname=username; + +%if &mdebug=1 %then %do; + putlog _all_; +%end; + + put '{'@; + put '"displayName":' displayname @; + put ',"username":' username @; + put ',"password":' password @; + put ',"isAdmin":' isadmin @; + put ',"isActive": true }'; +run; + +data _null_; + file &fref1 lrecl=1000; + infile "&_sasjs_tokenfile" lrecl=1000; + input; + put "Authorization: Bearer " _infile_; + put "Content-Type: application/json"; + put "accept: application/json"; +run; + +%if &mdebug=1 %then %do; + data _null_; + infile &fref0; + input; + put _infile_; + data _null_; + infile &fref1; + input; + put _infile_; + run; +%end; + +proc http method='POST' in=&fref0 headerin=&fref1 out=&fref2 + url="&_sasjs_apiserverurl/SASjsApi/user"; +%if &mdebug=1 %then %do; + debug level=1; +%end; +run; + +%mp_abort( + iftrue=(&syscc ne 0) + ,mac=ms_createuser.sas + ,msg=%str(Issue submitting query to SASjsApi/user) +) + +libname &libref JSON fileref=&fref2; + +data &outds; + set &libref..root; + drop ordinal_root; +run; + + +%mp_abort( + iftrue=(&syscc ne 0) + ,mac=ms_createuser.sas + ,msg=%str(Issue reading response JSON) +) + +/* reset options */ +options &optval; + +%if &mdebug=1 %then %do; + filename &fref0 clear; + filename &fref1 clear; + filename &fref2 clear; + libname &libref clear; +%end; + +%mend ms_createuser; /** @file @brief Deletes a file from SASjs Drive @@ -19121,6 +19265,113 @@ filename &binaryfref clear; filename &headref clear; %mend ms_getfile;/** + @file + @brief Fetches the list of users from SASjs Server + @details Fetches the list of users from SASjs Server and writes them to an + output dataset. + + Example: + + %ms_getusers(outds=userlist) + + @param [in] mdebug= (0) Set to 1 to enable DEBUG messages + @param [out] outds= (work.ms_getusers) This output dataset will contain the + list of user accounts. Format: +|DISPLAYNAME:$18.|USERNAME:$10.|ID:best.| +|---|---|---| +|`Super Admin `|`secretuser `|`1`| +|`Sabir Hassan`|`sabir`|`2`| +|`Mihajlo Medjedovic `|`mihajlo `|`3`| +|`Ivor Townsend `|`ivor `|`4`| +|`New User `|`newuser `|`5`| + + + +

SAS Macros

+ @li mf_getuniquefileref.sas + @li mf_getuniquelibref.sas + @li mp_abort.sas + +

Related Files

+ @li ms_createuser.sas + @li ms_getusers.test.sas + +**/ + +%macro ms_getusers( + outds=work.ms_getusers + ,mdebug=0 + ); + +%mp_abort( + iftrue=(&syscc ne 0) + ,mac=ms_getusers.sas + ,msg=%str(syscc=&syscc on macro entry) +) + +%local fref0 fref1 libref optval rc msg; +%let fref0=%mf_getuniquefileref(); +%let fref1=%mf_getuniquefileref(); +%let libref=%mf_getuniquelibref(); + +/* avoid sending bom marker to API */ +%let optval=%sysfunc(getoption(bomfile)); +options nobomfile; + +data _null_; + file &fref0 lrecl=1000; + infile "&_sasjs_tokenfile" lrecl=1000; + input; + put "Authorization: Bearer " _infile_; + put "accept: application/json"; +run; + +%if &mdebug=1 %then %do; + data _null_; + infile &fref0; + input; + put _infile_; + run; +%end; + +proc http method='GET' headerin=&fref0 out=&fref1 + url="&_sasjs_apiserverurl/SASjsApi/user"; +%if &mdebug=1 %then %do; + debug level=1; +%end; +run; + +%mp_abort( + iftrue=(&syscc ne 0) + ,mac=ms_getusers.sas + ,msg=%str(Issue submitting GET query to SASjsApi/user) +) + +libname &libref JSON fileref=&fref1; + +data &outds; + set &libref..root; + drop ordinal_root; +run; + + +%mp_abort( + iftrue=(&syscc ne 0) + ,mac=ms_getusers.sas + ,msg=%str(Issue reading response JSON) +) + +/* reset options */ +options &optval; + +%if &mdebug=1 %then %do; + filename &fref0 clear; + filename &fref1 clear; + libname &libref clear; +%end; + +%mend ms_getusers; +/** @file @brief Executes a SASjs Server Stored Program @details Runs a Stored Program (using POST method) and extracts the webout and