From 426ce5766b9711137167ab1bf0cc01018e30a105 Mon Sep 17 00:00:00 2001 From: Dion MITCHELL Date: Tue, 12 Sep 2017 14:12:13 +0200 Subject: [PATCH 1/3] feat(auth): add new authentication mechanisms --- src/main/java/com/callr/Api.java | 65 ++++++++++++++----- src/main/java/com/callr/auth/ApiKeyAuth.java | 15 +++++ .../com/callr/auth/CallrAuthentication.java | 3 + src/main/java/com/callr/auth/LoginAs.java | 35 ++++++++++ .../com/callr/auth/LoginPasswordAuth.java | 20 ++++++ .../java/com/callr/auth/UserSessionAuth.java | 14 ++++ 6 files changed, 134 insertions(+), 18 deletions(-) create mode 100644 src/main/java/com/callr/auth/ApiKeyAuth.java create mode 100644 src/main/java/com/callr/auth/CallrAuthentication.java create mode 100644 src/main/java/com/callr/auth/LoginAs.java create mode 100644 src/main/java/com/callr/auth/LoginPasswordAuth.java create mode 100644 src/main/java/com/callr/auth/UserSessionAuth.java diff --git a/src/main/java/com/callr/Api.java b/src/main/java/com/callr/Api.java index a7b6b4f..3c475b7 100644 --- a/src/main/java/com/callr/Api.java +++ b/src/main/java/com/callr/Api.java @@ -1,6 +1,7 @@ package com.callr; import com.callr.exceptions.*; +import com.callr.auth.*; import com.google.gson.JsonParser; import com.google.gson.JsonElement; @@ -26,33 +27,44 @@ import javax.net.ssl.HttpsURLConnection; public class Api { - private static final String SDK_VERSION = "1.4.0"; + private static final String SDK_VERSION = "1.5.0"; private String _apiUrl = "https://api.callr.com/json-rpc/v1.1/"; - private String _login = null; - private String _password = null; private Hashtable _config = null; + private LoginAs _logAs = null; + private CallrAuthentication _auth = null; /** - * Constructor + * Default Constructor + * @param auth CallrAuthentication CALLR authentication object + * @param config extra configuration options + */ + public Api(CallrAuthentication auth, Hashtable config){ + this._auth = auth; + this._config = config; + } + + /** + * Overloaded constructor * @param login CALLR login * @param password CALLR password * @param config extra configuration options + * @deprecated */ + @Deprecated public Api(String login, String password, Hashtable config) { - _login = login; - _password = password; - _config = config; + this(new LoginPasswordAuth(login, password), config); } - + // overload Api constructor for optional parameters /** * Constructor * @param login * @param password + * @deprecated */ + @Deprecated public Api(String login, String password) { - _login = login; - _password = password; + this(new LoginPasswordAuth(login, password), null); } /** @@ -63,6 +75,21 @@ public void setApiUrl(String url){ this._apiUrl = url; } + /** + * setLoginAs - set to null to clear + * @param logAs LoginAs + */ + public void setLoginAs(LoginAs logAs){ + this._logAs = logAs; + } + + /** + * setLoginAs overload for updating object + */ + public void setLoginAs(String type, String target) throws CallrClientException { + this._logAs = new LoginAs(type, target); + } + // Send a request to CALLR webservice /** * call @@ -72,7 +99,7 @@ public void setApiUrl(String url){ @SuppressWarnings({ "rawtypes", "unchecked" }) public JsonElement call(String method, Object... params) throws CallrException, CallrClientException { ArrayList array = new ArrayList(); - + for (Object el : params) { array.add(el); } @@ -132,9 +159,6 @@ public PasswordAuthentication getPasswordAuthentication() { proxy = Proxy.NO_PROXY; } - // encode credentials to base64 Basic Auth format - tmp = new String(Base64.encodeBase64((this._login + ":" + this._password).getBytes())); - try { postDataBytes = gson.toJson(createObject(method, params, id)).getBytes("UTF-8"); conn = (HttpsURLConnection) url.openConnection(proxy); @@ -143,9 +167,14 @@ public PasswordAuthentication getPasswordAuthentication() { conn.setRequestProperty("Content-Type", "application/json-rpc; charset=utf-8"); conn.setRequestProperty("User-Agent", "sdk=JAVA; sdk-version="+SDK_VERSION+"; lang-version="+System.getProperty("java.version")+"; platform="+System.getProperty("os.name")); conn.setRequestProperty("charset", "utf-8"); - conn.setRequestProperty("Authorization", "Basic " + tmp); + conn.setRequestProperty("Authorization", this._auth.toString()); conn.setRequestProperty("Content-Length", Integer.toString(postDataBytes.length)); + // Check for LoginAs + if(this._logAs != null){ + conn.setRequestProperty("CALLR-Login-As", this._logAs.toString()); + } + // Send request out = new DataOutputStream(conn.getOutputStream()); out.write(postDataBytes); @@ -174,7 +203,7 @@ public PasswordAuthentication getPasswordAuthentication() { } } } - + // overload send method for optional parameters @SuppressWarnings("rawtypes") /** @@ -199,13 +228,13 @@ private Hashtable createObject(String method, ArrayList params, // Response analysis private JsonElement parseResponse(String response) throws CallrException { JsonElement result = null; - + try { result = new JsonParser().parse(response); } catch (Exception e) { throw new CallrException("INVALID_RESPONSE", -1, response); } - + if (result != null && result.isJsonObject() && result.getAsJsonObject().has("result")) { return result.getAsJsonObject().get("result"); } else if (result.isJsonObject() && result.getAsJsonObject().has("error")) { diff --git a/src/main/java/com/callr/auth/ApiKeyAuth.java b/src/main/java/com/callr/auth/ApiKeyAuth.java new file mode 100644 index 0000000..8f43128 --- /dev/null +++ b/src/main/java/com/callr/auth/ApiKeyAuth.java @@ -0,0 +1,15 @@ +package com.callr.auth; + +public class ApiKeyAuth extends CallrAuthentication { + private String apiKey; + + public ApiKeyAuth(String apiKey){ + this.apiKey = apiKey; + } + + @Override + public String toString(){ + return String.format("Api-Key %s", this.apiKey); + } + +} \ No newline at end of file diff --git a/src/main/java/com/callr/auth/CallrAuthentication.java b/src/main/java/com/callr/auth/CallrAuthentication.java new file mode 100644 index 0000000..d65248a --- /dev/null +++ b/src/main/java/com/callr/auth/CallrAuthentication.java @@ -0,0 +1,3 @@ +package com.callr.auth; + +public abstract class CallrAuthentication {} \ No newline at end of file diff --git a/src/main/java/com/callr/auth/LoginAs.java b/src/main/java/com/callr/auth/LoginAs.java new file mode 100644 index 0000000..721d4f0 --- /dev/null +++ b/src/main/java/com/callr/auth/LoginAs.java @@ -0,0 +1,35 @@ +package com.callr.auth; + +import java.util.*; +import com.callr.exceptions.CallrClientException; + +public class LoginAs { + + private String type; + private String target; + + private static HashMap loginAsTypes = new HashMap() { + { + put("user", "user.login"); + put("account", "account.hash"); + } + }; + + public LoginAs(String type, String target) throws CallrClientException { + setLoginAs(type, target); + } + + @Override + public String toString(){ + return String.format("%s %s", loginAsTypes.get(this.type), this.target); + } + + public void setLoginAs(String type, String target) throws CallrClientException { + if(!loginAsTypes.containsKey(type.toLowerCase())){ + throw new CallrClientException("ERROR_IN_LOGINAS", -1, "type must be one of " + loginAsTypes.keySet().toString()); + } else { + this.type = type.toLowerCase(); + this.target = target; + } + } +} \ No newline at end of file diff --git a/src/main/java/com/callr/auth/LoginPasswordAuth.java b/src/main/java/com/callr/auth/LoginPasswordAuth.java new file mode 100644 index 0000000..e7b7716 --- /dev/null +++ b/src/main/java/com/callr/auth/LoginPasswordAuth.java @@ -0,0 +1,20 @@ +package com.callr.auth; + +import org.apache.commons.codec.binary.Base64; + + +public class LoginPasswordAuth extends CallrAuthentication { + private String login; + private String password; + + public LoginPasswordAuth(String login, String password){ + this.login = login; + this.password = password; + } + + @Override + public String toString(){ + String loginPassB64 = new String(Base64.encodeBase64((this.login + ":" + this.password).getBytes())); + return String.format("Basic %s", loginPassB64); + } +} \ No newline at end of file diff --git a/src/main/java/com/callr/auth/UserSessionAuth.java b/src/main/java/com/callr/auth/UserSessionAuth.java new file mode 100644 index 0000000..895cc57 --- /dev/null +++ b/src/main/java/com/callr/auth/UserSessionAuth.java @@ -0,0 +1,14 @@ +package com.callr.auth; + +public class UserSessionAuth extends CallrAuthentication { + private String userSessionToken; + + public UserSessionAuth(String userSessionToken){ + this.userSessionToken = userSessionToken; + } + + @Override + public String toString(){ + return String.format("Session %s", this.userSessionToken); + } +} From cf157973e56c53b6a8113d8107834513a63fd48b Mon Sep 17 00:00:00 2001 From: Dion MITCHELL Date: Tue, 12 Sep 2017 14:13:32 +0200 Subject: [PATCH 2/3] feat(samples): update sample and readme to use new authentication mechanisms --- README.md | 2 +- samples/CallrSampleApp/app/build.gradle | 62 +++++++++--------- .../app/libs/callr-sdk-java-1.4.0.jar | Bin 8160 -> 0 bytes .../app/libs/callr-sdk-java-1.5.0.jar | Bin 0 -> 12333 bytes .../samples/callrsampleapp/MainActivity.java | 3 +- samples/CallrSampleApp/build.gradle | 46 ++++++------- samples/CallrSampleApp/settings.gradle | 2 +- 7 files changed, 58 insertions(+), 57 deletions(-) delete mode 100644 samples/CallrSampleApp/app/libs/callr-sdk-java-1.4.0.jar create mode 100644 samples/CallrSampleApp/app/libs/callr-sdk-java-1.5.0.jar diff --git a/README.md b/README.md index cc170c6..c097441 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,7 @@ See full example in [samples](samples/) - This can be imported into Android Stud ```java // Set your credentials -Api tc = new Api("login", "password"); +Api tc = new Api(new LoginPasswordAuth("login", "password"), null); Hashtable param = new Hashtable(); param.put("flash_message", false); diff --git a/samples/CallrSampleApp/app/build.gradle b/samples/CallrSampleApp/app/build.gradle index a5d1160..c32e8d1 100644 --- a/samples/CallrSampleApp/app/build.gradle +++ b/samples/CallrSampleApp/app/build.gradle @@ -1,31 +1,31 @@ -apply plugin: 'com.android.application' - -android { - compileSdkVersion 25 - buildToolsVersion "25.0.2" - defaultConfig { - applicationId "com.callr.samples.callrsampleapp" - minSdkVersion 17 - targetSdkVersion 25 - versionCode 1 - versionName "1.0" - testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" - } - buildTypes { - release { - minifyEnabled false - proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' - } - } -} - -dependencies { - compile fileTree(include: ['*.jar'], dir: 'libs') - androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { - exclude group: 'com.android.support', module: 'support-annotations' - }) - testCompile 'junit:junit:4.12' - compile files('libs/callr-sdk-java-1.4.0.jar') - compile 'com.google.code.gson:gson:2.8.0' - compile 'commons-codec:commons-codec:1.10' -} +apply plugin: 'com.android.application' + +android { + compileSdkVersion 25 + buildToolsVersion "25.0.2" + defaultConfig { + applicationId "com.callr.samples.callrsampleapp" + minSdkVersion 17 + targetSdkVersion 25 + versionCode 1 + versionName "1.0" + testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" + } + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + } + } +} + +dependencies { + compile fileTree(include: ['*.jar'], dir: 'libs') + androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { + exclude group: 'com.android.support', module: 'support-annotations' + }) + testCompile 'junit:junit:4.12' + compile files('libs/callr-sdk-java-1.5.0.jar') + compile 'com.google.code.gson:gson:2.8.0' + compile 'commons-codec:commons-codec:1.10' +} diff --git a/samples/CallrSampleApp/app/libs/callr-sdk-java-1.4.0.jar b/samples/CallrSampleApp/app/libs/callr-sdk-java-1.4.0.jar deleted file mode 100644 index 8ccc08613cfc751953bdf185a495a8f1e6de42f3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8160 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 Q^X_wbmvJL^NH8$}2g`B7Bme*a diff --git a/samples/CallrSampleApp/app/libs/callr-sdk-java-1.5.0.jar b/samples/CallrSampleApp/app/libs/callr-sdk-java-1.5.0.jar new file mode 100644 index 0000000000000000000000000000000000000000..9f2cec1e40bfd8d54ef91dc9b28ec330d3fe815f GIT binary patch literal 12333 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 Ax&QzG literal 0 HcmV?d00001 diff --git a/samples/CallrSampleApp/app/src/main/java/com/callr/samples/callrsampleapp/MainActivity.java b/samples/CallrSampleApp/app/src/main/java/com/callr/samples/callrsampleapp/MainActivity.java index 7faf5a4..54d77f2 100644 --- a/samples/CallrSampleApp/app/src/main/java/com/callr/samples/callrsampleapp/MainActivity.java +++ b/samples/CallrSampleApp/app/src/main/java/com/callr/samples/callrsampleapp/MainActivity.java @@ -7,6 +7,7 @@ import android.widget.EditText; import com.callr.exceptions.CallrException; +import com.callr.auth.*; import com.callr.Api; public class MainActivity extends Activity { @@ -26,7 +27,7 @@ protected void onCreate(Bundle savedInstanceState) { public void sendSMS(View view){ String phoneNumber = ((EditText)findViewById(R.id.editPhonenumber)).getText().toString(); String message = ((EditText)findViewById(R.id.editMessage)).getText().toString(); - Api api = new Api("login", "password"); + Api api = new Api(new LoginPasswordAuth("login", "password"), null); try { api.call("sms.send","SMS", phoneNumber, message, null); } catch (CallrException e) { diff --git a/samples/CallrSampleApp/build.gradle b/samples/CallrSampleApp/build.gradle index cfce2ca..74b2ab0 100644 --- a/samples/CallrSampleApp/build.gradle +++ b/samples/CallrSampleApp/build.gradle @@ -1,23 +1,23 @@ -// Top-level build file where you can add configuration options common to all sub-projects/modules. - -buildscript { - repositories { - jcenter() - } - dependencies { - classpath 'com.android.tools.build:gradle:2.2.3' - - // NOTE: Do not place your application dependencies here; they belong - // in the individual module build.gradle files - } -} - -allprojects { - repositories { - jcenter() - } -} - -task clean(type: Delete) { - delete rootProject.buildDir -} +// Top-level build file where you can add configuration options common to all sub-projects/modules. + +buildscript { + repositories { + jcenter() + } + dependencies { + classpath 'com.android.tools.build:gradle:2.2.3' + + // NOTE: Do not place your application dependencies here; they belong + // in the individual module build.gradle files + } +} + +allprojects { + repositories { + jcenter() + } +} + +task clean(type: Delete) { + delete rootProject.buildDir +} diff --git a/samples/CallrSampleApp/settings.gradle b/samples/CallrSampleApp/settings.gradle index d3db109..e7b4def 100644 --- a/samples/CallrSampleApp/settings.gradle +++ b/samples/CallrSampleApp/settings.gradle @@ -1 +1 @@ -include ':app' +include ':app' From 1acd531497d1e8f5f95a6eb70f7ffca4bccc1033 Mon Sep 17 00:00:00 2001 From: Dion MITCHELL Date: Tue, 12 Sep 2017 14:18:00 +0200 Subject: [PATCH 3/3] feat(jar): update jar to new version --- jars/callr-sdk-java-1.4.0.jar | Bin 8160 -> 0 bytes jars/callr-sdk-java-1.5.0.jar | Bin 0 -> 12333 bytes 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 jars/callr-sdk-java-1.4.0.jar create mode 100644 jars/callr-sdk-java-1.5.0.jar diff --git a/jars/callr-sdk-java-1.4.0.jar b/jars/callr-sdk-java-1.4.0.jar deleted file mode 100644 index 8ccc08613cfc751953bdf185a495a8f1e6de42f3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8160 zcmb7J1ymf{vPFWsJ0v*6;I0X-g9mqa8#F-@2oOAYaA!zx3!1^*f@^S>U_nFR!@KW> zdvo7=YyC58x_eev?Neu+>YClPRTSVKp~Bpc1RQ<&e_j0hfO2;RNok0&$SFy)sr=gv z87BVDOg(uy!2a%bz}*-BuVx@IB{^v+bq!XK^a*I7Ur~XDbp%6!1u!%)T&2c7&b74e z3X~t}0V=SFBO|TlX~q*Wx6pdkr^$1H<=xT&CHP^-Ckl7J!`1K<)YMz3qYy%SNj{)L zLoGgdqjtUMdXb2I%G6-UH1n7l_#J%(0|Udm-m4zw&*)%aPy_$Ih(~wPnK?Q9ivOP$ z_lv)`Ff*~Ycl{rB1b?%$@G`S-cC&GE1pjhD{@3KY6SQAXVPRmj;9+3??jq)FL(9Qx zW^V!p2dVkn;fZ1Urs{*YPfbTP^>)iXf=*dWGWMGZo{&EWsJ@YZc09$a!^)gwP(LU6 zQxkPEAb_d`i*Cp;Y?}Dps->0HLQ^eQ<5Pd%AF#$)ScJ!XV0yCiDRMBzak-7;FEKIMm7> zBDN*U;!e~rgl(@{S|m}XF{2qPOt-i;liAoB-60FqE(d26b~IAWif2A>KveCFR9?RVWyfX$a~A414V2sWqrKIM!u&g;#w-(Nkc zCj>Dr`KlhTYsKi#`U<0x01gfh7-zs7wyWK0k#z{9%RN9{FL>hs#3$HYTyC=Q75mWS zR8n>}o6wzrtXi-xcvqWlm?mBid6nf{#I%Ww}(lKFR zE+}AN@cx!scX{$hmgH-r`KWKY-%{yJeuhH*9+w9?yC|AIllXpQTVVB72T04lq})DUAMBk{s^;d2vgn(Ei{toQTnI^Hrf)731RtXg?WW} z@>P;_plr1Sw}d`!00cDw@LV@5Rx3XUz@qj+KHoO7G^Z2w(!3uRWA1}=n5S%oMwo7L zoo=>ZP@>INz8&}XFEywWc3VVsBGqYn)#70Zqa_nPY>ii)Z`{Wp{~#mK%~y*Hp8KGa zP3W>DkN^iT=myz7KN5)491{{Dqbdo!Mk(Y0h<;r04l13(#sT5js&63%O@4IC4d(YN zRDCy_uMJtTBQ1eosLkh%N+$@K`^3qo<}c)^Fo+$5Ne^~xyp2&zkrTJMO-v0rb2~fr zJl&)AYQ!Q9iG0@aHVWaYM3P@{Qi*YnJe;0|#&(~BI<7!o52f!N4i*+I^`l`GT3*5^ zT>0P?;IS-_gL*7m+l^aTx=tBLCtmEy%QABXF=33C$lnGla1hl;D56pt=^26tI~i@E3>qU#tbS=S^+e+9a^8Slx{QS7JSzAZ*F_$Q zMa&%QPLlUrBWp^3hUTy)ww2h>+StttFJgZEoC@HC42EG5iRjYm_N!%oVI9dog zbK+xQM%+}4kXd6Kfsnm2Am*}f!qyeAX2|t%ATrZ@a9+__A6X;djk9g z>C5Xvkr+kS9vw~LUgr1cIeUB6_&g@`t9y!EXx!Z?pt#)J0vMJ``V}AEBgs9+Owf8- zn;{7f$JzKZYGEv;Bz{^-1zo*qv(y6M6X4VhC_psDN|#&Irb2D(J+^y=TzEOH5OeBF z`jUA%%2JsDf%D^!+`8br;S8LoJtzvJLr=du$jzOVXp!#|{ z*AF*sNAhRUbw8H1p18ivt}_*}Nc$pJ#YQGw5_GY_iCNq?6HB)0)7RVkmQK#q23FVK zo)d?&HaIBac>$CVr*PF|R=SWXsRs)Y&S$-5T4RxV6tnWphNLh)|NQJI>6ar)^0A{= z_*n8s*bDtkhAk$74iHufs%{44aMU0|BuPhUPE=u;!q40#*rXed)LaU#uLn8H1#m5e zz>}J8`?F&sUu!H1b8GDwO9DN%+_>B~nXO(FrumZ!?$i1)si;6GcPwmaJNMtDC}2~V zh;`*HKr{4^9CEiX2e3;U-X*r-3^}I|YY-26NzgCGuKs4QoMf8nj{VB>6>5-S@+cYgJnh&2@ zxmkOSOERmar7XyYo$WDc2PMJX#7-ObyhDE2)v zg6&cs4z2c-b1|~~fxs7|)V)?7vh`JMzU<3Ow`-h*(QR0{lOTj|a+tS6P-q4;yVO9! zH@z0!t!}q?snOEFhOF2bBU@W<058?`L?Z2dc#C#ygoJhGsFX3+J?C2lZw5-{IYvuzX z&355x@ymSoDsdVOA-G+YhJ(P^k7JI1+Kmganq1o5>>tOHrA-$d!waEuF3k>*)B6p98r%Vzg!57)^^snl8RO6SEnn!AFA+gjw*724Cb zs#j=+_BtO{rH`qf((NgPc*}4mF$%`oBPN3kM`$X)Ah^^FNpf9=`rD~xLrR)mX2ue`UrSIjUsA3qzh8?|r1PZ71uchT^% zZ`ANEG*s^a7p{N{FOb-lb%ZyKXIgwKS~PXIA)qQ5ro}3CqO=4Na?SGwY)Wv5-c-g#d{Z!gxz+oqsg>* zi1M@2hjvOWOIk1!CkD^<*W$LM(O%e-+j%*X;QJ6$EyucB;M6SVMx{G=QL>c-6Fhy< z*(#qJR^l{b%g~iAIn{8Rp1US4Tht8VyQ!DI51>Q^;A=2xi;G1D4#=5mqx ztyFoZFTC+Vxx!nbK?tp3IvSWSi0Z6K7pAjv-Ja;n}A=Gd~&`NL0))d93u znB`1dRF0UeR5#U|p!kVzvr<~6jXJp(aEiY_A2Md5NtW7Qva5SR=pI;Um5e{7xH@Yy zjx?cO=rLXRECvy%`a5%(QPOrVkys?m;Beqxz9=jEAK}M`V`HapPq9 zTe6<^B9(4&p5TTGx++KMsnP$R}2MkHDTY99)QEXiYbkntlp zbvjW8t$U>oHM-3^PSudBG!!Y>GGzG&d$68^A1`#7cnQS~Qz+s|G~L34WWENVn{kL2 zwjx6+dq=xDCMfo zvbx08Dvum!@0uHp-lbfcsnEgZLjMJRZ4_A7k2G^xGHrQA%gY_%pk&RxxwR@SEcwkw zV%(Sc7a3#I7PX=wV|(4yS~PfHiWK=Nr{tTuCW&%8o<|P{&fqoJCGVpJSxlLx@O(II zusxLW3H3Ev*NxD*CRCp{)gtgCvr-8oO(H5=#gNw6{n&D_d{;m?t`#LgCvaxo|y9}XxJteYIK+CU$S17w8i)bvtR?}1;gRV=Yqd{@SG-- zH!)|c9mr?M28sk7_r;Jzu(nNSuOeAudst$Xx{`*Zj7E;l>^h;?;ce5|ABlhZl(3Ic zS&}+4i{2aNPST-Q^|sbhDL`*Kj59vTa`6_kGD;8zzFByg z{a&8Rr(;j4PvZ?16Zkx84HhMGXtkcedmgE>JsS{co3KZpMkkVB>z?x7C`v0fT7C2r zaj|Xl!tt8^>X2oxvsU1FbG!2U1B*p8L!rZFTdM2OVlriCFUqP@;VxI`H}a-bnU(n) zvpJo`r72ji=J4LfKhM?2M>8U!MzDW>oAuRH5>UVEdH~>HVA%flHv5-GiNt+}MZ(_3 z!qH9Y&-Te5Z@Q7HAO$#8d=ahgE_zUvatWyVD3DaQnlqprPQo_3-u8r?>dZVXG}-Dq z-|QonA1EaOgg;;TX}DQcG6Jl@2lbm7p5I=dA76b(Hzq40jMe5)e(r7pYpeBzuUt<}JcDvqZU(ww&L*e2^(E#aVcM%r6q_wH0$f{`ZmO9k4|qL8 zp<^{L^oygUWc%~cu@EZzbmJ&<;xMtjOB%wLf-Z2joO@_2(0+PV6wNs*q$puE)uOtD2QtF5HI-_bIB1`3#zMn)%7jqhv9$Li`}dfK4%^qBU#U&xpO8w^cNnUm}}p z4Qt-5o{zokg@lO=Mz9YfTu5UgvUvBoK79(=k1fv*OyK^&;OTC8)IAfgR_#ltQmF4Ifz~aH_ zQTx$~vmWs3!m}%)IX>Al@shhm5VSlQYV^xz*G-Gu*nyL$-LF}OD3}bc1$-HYcY93K zWl(J>z&-5tx9v%J(9f3Bqg2sqwJQ11s@t`(#-nes;|!}4vrRGt)1BdT#J?-`s2e;k zP)-xKTbO={$OXWojR-`ERX*B=n-FixeB#cc*%zZ0L%a&c3}=Mp&~4-VAWw@&Yf8)2 zqsUybu!HpHGxg72EY{tg{p!U!n0Qz?{%Sk^)0pI+#&-=)*54bPzxR6?|CigpoLRu; zb}Y6g9wxsgM~3l!tuHU-078km>$Fl~|MB$y7U{#}zo9taMdjsSU!tYwG{=kYcV31a zAzIubIV?Ff27vxz#w(0|_0_RtUWAp^YUA8uTV}V@imHaJi!vU?D;_PY)r84TrY^h6 zZ1R`@TIR4f1BcyDOAk>}h}mfDUR>pAo84SoyrqmTSspRx?DRJpbTZydc@x15@)959 z?Nmxg7?KjN4svJLFYj+dZ5!-`^g>WxsBQC8B8XKJG7a9khD4PFBEPJRsp!jN4A&uL zFpb2G-Q;Ym=_w2yx0l0p07md?Y)g14^U}6aBvce{MMAbZBtIreBgj(8BAR!fKf10} zD2mU?S_%VHxxvLDR5R*iP}9jLf9VJ4Re%WVrmf7HOczUVTq+CnLdwN+L3bI%tO!^M zKe@aX6@IR%qBZ)0~$t(w1T0 zb6A=WU9EFcr5J@@&`Akw`+(Y~PK@w8xjJCe*1uMS^GRizcy)Y^BFZ=SutjF2eNS14 z%#DC}xAoOeyJk>1l`q@-nk4|YY^(_53lE`X#SynkBzddO9XQqA2G>~Rp=^RdCF~4w zsoBMwS;?#jXDhq1KGsj^fSTj9jBn0@Yi4UaL)p-g*wK$pvworFBAnys>bjLuHsnS) zN}LS^`g)W23_-dmz96*h_k^Q#tfn@=_}C(3E}73$?O6dRU7>!g^ZZD<+;tt59`MDh zv$eL5rM&nJX`5M^a$MotVK$w))`?4jTpvLwYb!GbJTi6gZQ+RD53;QAXLR(V#=Q{aip;!+O?aa}L)HrdHcb`|y)&&HX#}_dY_cdIDL%fJx zL&e5qwk!97VbPB>IR32R6*B{vMC9cU9+fFC#oPTVwwFVx=eMEuMepf zn{3|jDj{2}rnl(8P{j{f{+8j#QY@;Wj2Z28{ZF!%vMH_%J_!%aC&BE;@XDsMd8(%5 zUfN^2=%RT>>`Al98^m9+#2vb_Yt0r7qdiOHyhM;7dzJ-l{S=Nk@o8ubtEfay5Z?$d zSv7KyppnaK_4N@g+n52dPws+@>ctNDr}y*cZA9h}O9!YBV1a5{6C9G;Uv(H62K`P>64Xx%vAL^__ktJi|D#6US2t%@Cua*+HyaDE zx`*d4R^)+zUPT2(R#=pPM{eQjmF`uz{kZp97%Ut< z{C}79?pAO&uwnMa?$5tU^@H1gmiX?C??>KihP&f0x4#H}4+#Gh+3sbyKgRvUop+ai zh;k31{x018v4DG@dymb3d;Iwy_TT;PHMc*;y&u*c=XntK{=!8cg8k33-Jc-)uf_ic z@fQ*AcZlB=od*cpJ1y`bieLK9?*PA(=m!9P+`j_+Wf>Cxl~Vr>{yPJF0H3~-pB|$7 z9bD?~O#K1&pSI9-Qm{>3kRBFADSDVeU!H z1I*$7g87Y%Jgn?LlbSzq_h0i8{$phi!TpB%Z;JC*@c&d(9>DR*{(s;P6-Gq?0r4IO Q^X_wbmvJL^NH8$}2g`B7Bme*a diff --git a/jars/callr-sdk-java-1.5.0.jar b/jars/callr-sdk-java-1.5.0.jar new file mode 100644 index 0000000000000000000000000000000000000000..9f2cec1e40bfd8d54ef91dc9b28ec330d3fe815f GIT binary patch literal 12333 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 Ax&QzG literal 0 HcmV?d00001