From fe846fb81f8f2ba875180bb08d35c5a60b229e0f Mon Sep 17 00:00:00 2001 From: NMerz Date: Mon, 5 Oct 2020 12:29:28 -0400 Subject: [PATCH] Delete Lambda prototype Prototype the User DELETE lambda. Amplify does not include this functionality, so putting it in a Lambda with the fine-grained API. This currently does not invalidate outstanding tokens nor does it clean up the database. @claytonwwilson You will want to add the clean up code instead of the deleted stuff in UserDeleter --- .../User/resources/cognitoProperties.json | 3 + Lambdas/Lists/User/src/UserDELETE.java | 11 ++++ Lambdas/Lists/User/src/UserDeleter.java | 59 ++++++++++++++++++ Lambdas/Lists/pom.xml | 42 ++++++++++++- Lambdas/Lists/target/Lists-1.0-SNAPSHOT.jar | Bin 0 -> 6620 bytes .../target/maven-archiver/pom.properties | 5 ++ .../compile/default-compile/inputFiles.lst | 4 ++ .../java/com/example/listify/AuthManager.java | 10 +++ .../com/example/listify/MainActivity.java | 7 ++- .../java/com/example/listify/Requestor.java | 22 +++++-- .../java/com/example/listify/data/User.java | 4 ++ 11 files changed, 158 insertions(+), 9 deletions(-) create mode 100644 Lambdas/Lists/User/resources/cognitoProperties.json create mode 100644 Lambdas/Lists/User/src/UserDELETE.java create mode 100644 Lambdas/Lists/User/src/UserDeleter.java create mode 100644 Lambdas/Lists/target/Lists-1.0-SNAPSHOT.jar create mode 100644 Lambdas/Lists/target/maven-archiver/pom.properties create mode 100644 Lambdas/Lists/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst create mode 100644 Listify/app/src/main/java/com/example/listify/data/User.java diff --git a/Lambdas/Lists/User/resources/cognitoProperties.json b/Lambdas/Lists/User/resources/cognitoProperties.json new file mode 100644 index 0000000..a01aefd --- /dev/null +++ b/Lambdas/Lists/User/resources/cognitoProperties.json @@ -0,0 +1,3 @@ +{ + "userPoolId": "us-east-2_MFgSVKQMd", +} \ No newline at end of file diff --git a/Lambdas/Lists/User/src/UserDELETE.java b/Lambdas/Lists/User/src/UserDELETE.java new file mode 100644 index 0000000..b1a7076 --- /dev/null +++ b/Lambdas/Lists/User/src/UserDELETE.java @@ -0,0 +1,11 @@ +import com.amazonaws.services.lambda.runtime.Context; +import com.amazonaws.services.lambda.runtime.RequestHandler; + +import java.util.Map; + +public class UserDELETE implements RequestHandler, Object> { + + public Object handleRequest(Map inputMap, Context unfilled) { + return BasicHandler.handleRequest(inputMap, unfilled, UserDeleter.class); + } +} \ No newline at end of file diff --git a/Lambdas/Lists/User/src/UserDeleter.java b/Lambdas/Lists/User/src/UserDeleter.java new file mode 100644 index 0000000..bd04d9b --- /dev/null +++ b/Lambdas/Lists/User/src/UserDeleter.java @@ -0,0 +1,59 @@ +import com.amazonaws.services.cognitoidp.AWSCognitoIdentityProvider; +import com.amazonaws.services.cognitoidp.AWSCognitoIdentityProviderClientBuilder; +import com.amazonaws.services.cognitoidp.model.AdminDeleteUserRequest; +import com.amazonaws.services.cognitoidp.model.AdminUserGlobalSignOutRequest; + +import java.io.IOException; +import java.sql.SQLException; +import java.util.HashMap; +import java.util.Map; +import java.util.Properties; + +public class UserDeleter implements CallHandler { + + private DBConnector connector; + private String cognitoID; + + //private final String REMOVE_FROM_LIST = "DELETE FROM ListProduct WHERE (ProductID = ? AND ListID = ?);"; + + public UserDeleter(DBConnector connector, String cognitoID) { + this.connector = connector; + this.cognitoID = cognitoID; + } + + public Object conductAction(Map bodyMap, HashMap queryString, String cognitoID) throws SQLException { + AWSCognitoIdentityProvider awsCognitoIdentityProvider = AWSCognitoIdentityProviderClientBuilder.defaultClient(); + Properties cognitoProperties; + try { + cognitoProperties = DBConnector.loadProperties("cognitoProperties.json"); + } catch (IOException e) { + e.printStackTrace(); + return null; + } + String userPoolId = cognitoProperties.get("userPoolId").toString(); + System.out.println(userPoolId); + AdminDeleteUserRequest adminDeleteUserRequest = new AdminDeleteUserRequest().withUserPoolId(userPoolId); + adminDeleteUserRequest.setUsername(cognitoID); + System.out.println(adminDeleteUserRequest); + awsCognitoIdentityProvider.adminDeleteUser(adminDeleteUserRequest); + AdminUserGlobalSignOutRequest adminUserGlobalSignOutRequest = new AdminUserGlobalSignOutRequest().withUserPoolId(userPoolId); + adminUserGlobalSignOutRequest.setUsername(cognitoID); + System.out.println(adminUserGlobalSignOutRequest); + awsCognitoIdentityProvider.adminUserGlobalSignOut(adminUserGlobalSignOutRequest); + + return null; + + // Connection connection = connector.getConnection(); +// try { +// PreparedStatement statement = connection.prepareStatement(REMOVE_FROM_LIST); +// statement.setInt(1, (Integer) bodyMap.get("ProductID")); +// statement.setInt(2, (Integer) bodyMap.get("ListID")); +// System.out.println(statement); +// statement.executeUpdate(); +// connection.commit(); +// } finally { +// connection.close(); +// } +// return null; + } +} diff --git a/Lambdas/Lists/pom.xml b/Lambdas/Lists/pom.xml index 1984615..9fb5565 100644 --- a/Lambdas/Lists/pom.xml +++ b/Lambdas/Lists/pom.xml @@ -42,13 +42,53 @@ org.apache.httpcomponents httpclient - 4.5 + 4.5.12 com.google.code.gson gson 2.8.6 + + com.amazonaws + aws-java-sdk-cognitoidentity + 1.11.875 + + + com.amazonaws + aws-java-sdk-cognitoidp + 1.11.875 + + + software.amazon.ion + ion-java + 1.5.1 + + + joda-time + joda-time + 2.10.6 + + + commons-logging + commons-logging + 1.2 + + + com.fasterxml.jackson.dataformat + jackson-dataformat-cbor + 2.11.3 + + + com.fasterxml.jackson.dataformat + jackson-dataformat-xml + 2.8.5 + + + com.fasterxml.jackson.core + jackson-databind + 2.11.3 + 1.11 diff --git a/Lambdas/Lists/target/Lists-1.0-SNAPSHOT.jar b/Lambdas/Lists/target/Lists-1.0-SNAPSHOT.jar new file mode 100644 index 0000000000000000000000000000000000000000..a611fefc3c3059bbfccca1c0031a71d3b0e7443a GIT binary patch literal 6620 zcma)A2Rxhaw@>XYBB))pN9;|N*g|b;773-qie0sesy&KYwfAU^+SS&cwaeeAhEi%Y zwo+XEExot>-Fu(pect4g^F5!F^FGh_oad_p!^R;3{1`|*W!*nM{526?+_jVq6d>xi zR0MSXG9v&uU6`G&>k`;s{2Xv`fqypBQn;nAqO5Pgucfl9H8`LNgYb`%!XP~F28V0) z1Sdp3F1zz-yzAwIL7)Wqp9+kgQ1iZF^J&VA(xZgw>3d}HRDv0ZK}jNdRQ{9$db{B0 z{lUFx-=<6r5tPQ8nzn#8pmSuEv4;2vUJjMtN~?LRIp8v~XuHZv7I{(y`il2uBO2;aq2VcX z8kPHAiJ2UV93pOZW6GBP`vR*1n3wx+XPQ$|X_&vmn$5RFP*_b0E)~gApEqg`&)Rl3 zZ`?gPdCmFyN+WE9BpR2HO#^1)^%Qbo1XMJlk&EYoage za%X)#K>T5hz5hn$?(JMCh48S|J1&#Kav9NKHcKvtVb-z&?Q7~AKy_0xr#3JKm$cM&>hR`K&?H%cG!^^vFyB zt5QdNa8c|7@WDcU$U@sR`kBU3+5q_7e>{udOp%Nh=i|F9n4l}+M9)i(lvK%PrJb!+ zyO508i?Ol8@&Zjf3qp+E+fw@v=<#v4v3sK(c0eKmGKGH0olVWgAH{}WKyY_wZJEk3 zDt!D&UGT}~^{%653fgv5a9<{PHBULA^qrB@#rM0?ZJov*$WNswo&_(|l*{|t=#Eu9 z(s*aLe2RfY*DbOXoXhJsbxF#R?$4cQ=0~siR|d27=F1B+a*d}5>(nrY<@hGs&v?!} zB|u1QOi%~kR|>8zvlo(fi%n8w8#R>{9$mQ|cNNsaVZ@;>p0LVa)QA$(drvqPuCeG_ zlnQSsWrf!kDya-Rmx(`Hb;A$S#Swcq7(kk=SYB*Z*3To0G{aq)7jG3FGLJKPHv6{r zRlb=P&(>qVjj?&R7k6(TZW5*PD;$U!VVsI{+u3q!>n%zto1azlZ53#(G-qCW?GpAx zDrD?ArDIY{t%6mY_vQ=v?d4T;z~L%gFWA8@U8-ZrL#=FoPQ*>$_1ONV<~Zkl(4q?< z(kElhH^hjWj*2dhoms(GElIAGCrkd$Y0};VHhycke%q#~C8q$95tLw*#5DkVXGaK1 z6rd6)cynbqX*9S;=LADzGqjdH5+GmKbc}6!ph|Kc`Br8W!%A|>pSNro@5oXnVT?bH z#t)tODiSju$nyqRJ+Y?4>O-G@TLFjuYW|4>!{O@3MX=DKUqXOTA~drnx7UGAB0j!8 zP5k+P9$dTytTT2;kI&xrzrJcf_&r)+hMr9mYd2U>ZJeup65;WQCYq=|m)b(RZnaE< zNd!q9Ov`rbdUROP;`EcptbMC)8VoUNRQXxJV$*BaEr1E)1aD8ZTKB;b)wd$nJ_kv{ zfF4q?h_8qRJ`Nhh{mdsKuVqv|g`_V9uSSP)8mLBWO+P;-umujuC`&C#eilh1ao5Aw zJc(&jJMczWVBfOQc1_>a&g*1v@^*0hko^k(VYi@Es*XZhubo5Xs9#dR)H(hoeNk2^ z>iU!oSh?Z>00m?K0L2A;DM1xooSkjq9xm>G^4Ck_Z^o3y;4>y1j!=bbPW+Y1QCC51 z{K&$t$~-P{J}hYEJVze@Tb<(;2iLsuX4}mBt&_ILlRgAkZTD+=AYl5jiA1cAEAJLswf7;%UgPMx0`u{JD;S%J#3o`YcH4eB zhJyTys{k*P_mZ5%Eg#pLOkAun_ygNOrj#5Xorf<%2^uFoNYG&|D&oZX0;TMK0@BQi#+5-Wk_C@h zm_kJk3BV_&;kf2meg;$}Bo2fxB^b%eyW>Hz37zy~tQtJ5p#f_qQX)4zOt>Moj@N-!bgNc2R>#xF9D z=veI2IIS#Qe-~?Iq=Noq%>%AJzV1k&$ql}1d2gp`NT|wfnn4hy#o>@x?#I<1a~$j+ zSI4F-k2EDlO1+bX2vN9Z90%PiA|<+$F-XfuyRrV#km~>{^flEv8kbYg?|N@Y8wLlB zFh$Cy=r{)vWhmDC&pEj zHpiZxm4%Gi!&!sBw4XY|hlRJGkD`aByUCez3!Wm~`0MQ(k=N;B>lg*=xF_Q=q0yY% zPeO}rWgp&Um*rgY%}l6f&XSdeT^m!;>?Zcn?S}cJiF0J>kzVI7Ezm3WVC6wm(Qf(} zc5{fre6+fe3^nhna}cfXqF&w_)Nzk8iN}OTOKhivHrQr%$Y6<)ZMY@gwQY?$?ClD$ zkkBv6WxH>HGLI|bfw{F2-Cf-epmKZ=M9%KdwgmTw)@aWkX?A};YL5|+>U)mxk8#22 zC$_f?8i-YsKX>+8TT`l&FLY0c3=%D)f2ENr?mfPP&*m~x z9bdfmq_o>1b+0aMT?3~)J6g*1gM<;dnEAOSQEVdVLTpQUy zyfi>$O?`W4vW}9ywcm8Fnz&X~oeOSmcY}CvC7uP%4~4p=(xuPHc@nm-h*gc) z_Hv6I8+l9!Z@eWxN+43+Sl+5J(;0~5P2zD-0;7~fdQ7GaKpeKS0T%4&-c-Ky&$HA$ z_GhWPDZC$dp4_u*N^he8n5cpR61PR{5DZGGp;2?b0hH5EjVD0*#|3mGCaFZ8g0==| zY9)n%rEh7W19kZ<7TKDd+@;Puh>kC$=CDAjyn*A|`)F%+ib8kC8d7696=IS{MM+;` zATun+^+=QEnbJ<1hv}uDeJvO@@`aa!$Iv+H?0k3zT_Gd-s*6^wR|o!@-wA8o_53-d?YOPWw7s+jIIZO? z_{j%WWQM7_TFqy$5{`1&y!}un@Nk$ZCe=&qOEnqkbj+k=s2Fv>pNtnZdt5yn9}RCU zth3866d>~xo>BL!4NJ|p2sYLs_jp8r+>B0kpzB5+{6HbSnFR|VmHyY{hpAre8k7% zUY+DvA|nUO-Z)!a7!`apiMl5cGH`(XTR z*`AI-H2w1L*MX;uZ^UE`;@@cD?jC9K z5tBp_*);ZHq&jGb7JEhbxVfy-&?!L`dpY>!SOy3#p*g$T@Y{Ef^xl&6liU%Svu@1d7Bp<(x_5$Z-mA91Ugn-hHZ)k)lTPxqKKGi>o-WuV40y zeePS&YAuT8wg*WPgf1{$dxIKxlGc*@j5<+mPUdQZQ!q*}-}CDbaf;dkA^OG?WlF!# zIXQn-^PUf%#M~g#LsX01Yu>AbbcpUp;_Q>6pXAed% zntvWmeMqKi@STSguc;f&h#$y&Fh#4zyyD5eA)BOMIQB`j?+!A?t8D)9L7o=A7r9bx zF~+YY;}I{?J=Cde)ooKw9Y;vef8Y(RIISq2MnImu0c7hNS=ix{0e1$H`^;nIX4uZn z3~7=U_+4J*S#Qw?AArlNadP!AtgKEm$-W%U>acqtv8xkv2~`ERWUXNBqYqiw-N+Bk zj&gnRL>^1?>CyJ-g2d_6WdWP!nFYn5-X?O*myL;m`$ns@TkE{j%6G~kYnDS*O2Fbn zil_;L%$m-wA;)Wber0p5xw>}q1fQVyTyCq@^WJG08RUO_q0gsJ%06dgu1sWP)f zdWJ7v`OY@vF=bCbst8w(DLJTye5qz-p@o27B4FC;Pkr*ea+@1og}(xte%2>$FhFf& zVQ6`yYy{^ye0k1+%d8C&LMx0da*oDK>XIl|oj6ZA_E&7J*NgffTNr5vnG?EdY|0`D zLAtb2V_|PH#?7qH2c?QvCW=$qD7_L@tg~IJNB#8}@6fUywu@%U@jVkv0YAXvL14nE zSNwA~DW{$VADDaXDZba7rD8_oS+`onCo}Nd(6W&~IeiIy%^KhNF=ro~WsnEb_4TJ2(|)@@Ti1OVtBbH6av8BCX z7+ZxropKqXKn;5Pt7>?~5HK+9%quyfin2kIPJFe(I<$gxJc5zs2B*4yx?L}!Y|+ej z`94NcSv|E!k+qVlxM?h(?n{!ZNFx^GC|n43vO;m$d0GczaMOtXrgA|tber+K$$BFVN%yB40$H)bNPcY<9Q zLQ48>!J$=Co2T4@{>L<++B(M0n4C(xzBuz287DNCO!-5H@ZDIuJ9WX3#aI4p8nww#$P<*BwO9mh852=xaR^6s{`uwOhw$<`g4sVB@0&tW2HbjTiuv#zutw zh{8%`ncRo+D!D9jRe++0xu``Q0g`E5xqFC4Lil}Xj)Yk?WLKCq`Eclcz*{^%3%Ph3 z=^bd28soQ9tmAJMgwFm@c+HYcR!yTy&LHpTS+VIriRPQLW?FZ%$y{ik! z9g?udry900UOk$nL2F^4zH4_lM2UO(WjTRzRb2C20-3{G=g&a|?4K0La!GocBRyl6 z4I7P;b!wXf3}c8dv*3846FFYLAslg$g=ZJnkK+u&M#tU7)z;m^!4}1T59Q*_K3Gi_ zA_xpZXBFpU6_&7Zcv-u83hv;jn!$-*u2j(|Ew#`iP7}}1!M5DAs--YmCl?Q#J*)c` zQ~AXkF15leBmVwEyFjr1a*+E=V|#UlP;b9CO8o^T8Fu$eh8-uD%pz?c-16sU@?b9oNhyAMxMt%|YKPni~+RN7YA1&-xW13%$ z@4CBqx~e1o7ZBsWgESpb9;kny1OU~GoMwU-TM4lMfWQlVj_v<~y1F3weUMH=DY`Bh zg20}IU2fpl>G&c?Fh$ub&5S2i$z!+fd%pOb9vtJui8$F45obYYQ90(B`YL3e_nb;D zWU0Fx8q#h=7-(W_p9V>i5DeqmW%73v_h^sGwhnPPK$I2S8Lx^N4`58z{jOMtd4*yd z9Dn+zTf57P~;$wvSloC%Y5_IyZoiEV%YWWWEELXMei=^ z{;Dda*t)LPt8zYC)yC7btmW7%QiDz}>OfDQESPf$x1_gI&UUVqfM<`1-!dwHhPTSh>6ht;L+2MMU3*fIEPkVHBq7C({;O^!pyWaj(4U8JevybG<@V+#3g3+ zYZH5WrTnOR{U`dJZ{|W1Sz52)e)wd$YV<)2(WmKfQouYHZF$XNYu0VXPS179mge;v z>7$V0H~YP$>R~zTS5_EUgN`R9_bc4=8JW*^k6zg3Vzi&$5MVe8oNqHG=(V!qFmx6!F%>1!3dz!=JK6ZJQ?7_uEo2r_L zyv4!qvSx}mu;;CA_5@jxp9A?XgxxDxVC;X_rY{1%7(l?L!jJnud-M|ad#(D1@sCju z%y}{Y1N%w2{@KItH03|we|UI%G5=46`DgU+B%Moi5bkdTo}b~rYq>As%p|{Sz<?j0Q|z|m+)W7@duOsIe>ukb3DqQlK(fa{`&*}!K{~H zkzc`=Jp1oXelYE&6Z?O6@;C4P?dtc;`?s@#;Qar~)n7b(nV#Qoz)O!?RKKL>?|=Ab da6dd=Zbuy$?uBXy0FYd~_^<(hbm|}9{tKEJ2^IhV literal 0 HcmV?d00001 diff --git a/Lambdas/Lists/target/maven-archiver/pom.properties b/Lambdas/Lists/target/maven-archiver/pom.properties new file mode 100644 index 0000000..68bd418 --- /dev/null +++ b/Lambdas/Lists/target/maven-archiver/pom.properties @@ -0,0 +1,5 @@ +#Generated by Maven +#Mon Oct 05 10:19:24 EDT 2020 +groupId=groupId +artifactId=Lists +version=1.0-SNAPSHOT diff --git a/Lambdas/Lists/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/Lambdas/Lists/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst new file mode 100644 index 0000000..db1626f --- /dev/null +++ b/Lambdas/Lists/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst @@ -0,0 +1,4 @@ +/Users/MNM/Documents/GitHub/Listify/Lambdas/Lists/src/main/java/CallHandler.java +/Users/MNM/Documents/GitHub/Listify/Lambdas/Lists/src/main/java/DBConnector.java +/Users/MNM/Documents/GitHub/Listify/Lambdas/Lists/src/main/java/BasicHandler.java +/Users/MNM/Documents/GitHub/Listify/Lambdas/Lists/src/main/java/InputUtils.java diff --git a/Listify/app/src/main/java/com/example/listify/AuthManager.java b/Listify/app/src/main/java/com/example/listify/AuthManager.java index 030fb88..6f87694 100644 --- a/Listify/app/src/main/java/com/example/listify/AuthManager.java +++ b/Listify/app/src/main/java/com/example/listify/AuthManager.java @@ -8,6 +8,7 @@ import com.amplifyframework.auth.options.AuthSignUpOptions; import com.amplifyframework.auth.result.AuthSignInResult; import com.amplifyframework.auth.result.AuthSignUpResult; import com.amplifyframework.core.Amplify; +import com.example.listify.data.User; import org.json.JSONException; import org.json.JSONObject; @@ -85,6 +86,10 @@ public class AuthManager { waiting = false; } + public void signOutSuccess() { + waiting = false; + } + public void startSignUp(String email, String password) throws AuthException { this.email = email; this.password = password; @@ -124,6 +129,11 @@ public class AuthManager { throwIfAuthError(); } + public void deleteUser(Requestor requestor) { + requestor.deleteObject("N/A", User.class); + Amplify.Auth.signOut(this::signOutSuccess, error -> setAuthError(error)); + } + public static Properties loadProperties(Context context, String path) throws IOException, JSONException { diff --git a/Listify/app/src/main/java/com/example/listify/MainActivity.java b/Listify/app/src/main/java/com/example/listify/MainActivity.java index 0e8061b..0e84fdb 100644 --- a/Listify/app/src/main/java/com/example/listify/MainActivity.java +++ b/Listify/app/src/main/java/com/example/listify/MainActivity.java @@ -14,8 +14,8 @@ import androidx.navigation.ui.AppBarConfiguration; import androidx.navigation.ui.NavigationUI; import com.amplifyframework.auth.AuthException; import com.example.listify.data.Item; -import com.example.listify.data.ListEntry; import com.example.listify.data.List; +import com.example.listify.data.ListEntry; import com.google.android.material.navigation.NavigationView; import org.json.JSONException; @@ -60,7 +60,7 @@ public class MainActivity extends AppCompatActivity { //------------------------------------------------------------------------------------------// - boolean testAPI = false; + boolean testAPI = true; //----------------------------------API Testing---------------------------------------------// if (testAPI) { @@ -78,6 +78,9 @@ public class MainActivity extends AppCompatActivity { } Requestor requestor = new Requestor(authManager, configs.getProperty("apiKey")); + + authManager.deleteUser(requestor); + //The name is the only part of this that is used, the rest is generated by the Lambda. List testList = new List(-1, "New List", "user filled by lambda", Instant.now().toEpochMilli()); //Everything except addedDate is used for ItemEntry diff --git a/Listify/app/src/main/java/com/example/listify/Requestor.java b/Listify/app/src/main/java/com/example/listify/Requestor.java index 5f34f98..4d0c6d1 100644 --- a/Listify/app/src/main/java/com/example/listify/Requestor.java +++ b/Listify/app/src/main/java/com/example/listify/Requestor.java @@ -24,20 +24,30 @@ public class Requestor { client = new OkHttpClient(); } - public void getObject(String id, Class classType, Receiver receiver) { - getObject(id, classType, receiver, null); - } - public void getListOfIds(Class ofType, Receiver successHandler, RequestErrorHandler failureHandler) { String getURL = DEV_BASEURL + "/" + ofType.getSimpleName() + "?id=-1"; Request postRequest = buildBaseRequest(getURL, "GET", null); launchCall(postRequest, successHandler, Integer[].class, failureHandler); } + public void getObject(String id, Class classType, Receiver receiver) { + getObject(id, classType, receiver, null); + } + public void getObject(String id, Class classType, Receiver successHandler, RequestErrorHandler failureHandler) { String getURL = DEV_BASEURL + "/" + classType.getSimpleName() + "?id=" + id; - Request postRequest = buildBaseRequest(getURL, "GET", null); - launchCall(postRequest, successHandler, classType, failureHandler); + Request getRequest = buildBaseRequest(getURL, "GET", null); + launchCall(getRequest, successHandler, classType, failureHandler); + } + + public void deleteObject(String id, Class classType) { + deleteObject(id, classType, null); + } + + public void deleteObject(String id, Class classType, RequestErrorHandler failureHandler) { + String deleteURL = DEV_BASEURL + "/" + classType.getSimpleName() + "?id=" + id; + Request deleteRequest = buildBaseRequest(deleteURL, "DELETE", "{}"); + launchCall(deleteRequest, null, classType, failureHandler); } public void postObject(Object toPost) throws JSONException { diff --git a/Listify/app/src/main/java/com/example/listify/data/User.java b/Listify/app/src/main/java/com/example/listify/data/User.java new file mode 100644 index 0000000..65ba3e6 --- /dev/null +++ b/Listify/app/src/main/java/com/example/listify/data/User.java @@ -0,0 +1,4 @@ +package com.example.listify.data; + +public class User { +}