PageRenderTime 26ms CodeModel.GetById 19ms RepoModel.GetById 0ms app.codeStats 1ms

/src/serverClient/Request.java

https://bitbucket.org/mohamedmohamed1/mailserver
Java | 709 lines | 661 code | 31 blank | 17 comment | 24 complexity | 8e1ab683ff8789f026b2f3242bf3a118 MD5 | raw file
  1. package serverClient;
  2. import java.io.BufferedInputStream;
  3. import java.io.DataInputStream;
  4. import java.io.DataOutputStream;
  5. import java.io.File;
  6. import java.io.FileInputStream;
  7. import java.net.Socket;
  8. import java.util.StringTokenizer;
  9. import org.json.simple.JSONObject;
  10. import org.json.simple.parser.JSONParser;
  11. import org.json.simple.parser.ParseException;
  12. import ServerFileSystem.Email;
  13. import ServerFileSystem.ServerFolder;
  14. import ServerFileSystem.User;
  15. import dataStructure.DoubleLinkedList;
  16. /**
  17. * @author Muhammad Salah
  18. *
  19. */
  20. public class Request{
  21. JSONObject req = null;
  22. JSONObject response = null;
  23. JSONParser parser = new JSONParser();
  24. DataInputStream dis = null;
  25. DataOutputStream dos = null;
  26. DoubleLinkedList users = null;
  27. Socket skt = null;
  28. String name = null;
  29. public void setName(String name) {
  30. this.name = name;
  31. }
  32. public void setskt(Socket s) {
  33. skt = s;
  34. }
  35. public void setUsers(DoubleLinkedList u) {
  36. users = u;
  37. }
  38. public Request(DataInputStream di, DataOutputStream d) {
  39. dis = di;
  40. dos = d;
  41. }
  42. /******************************* client side Functions *********************************/
  43. public String reqRegister(String name, String pass) {
  44. req = new JSONObject();
  45. req.put("name", name);
  46. req.put("password", pass);
  47. req.put("reqNum", "1");
  48. return req.toString();
  49. }
  50. public String loginClient(String name, String pass) {
  51. req = new JSONObject();
  52. req.put("name", name);
  53. req.put("password", pass);
  54. req.put("reqNum", "2");
  55. return req.toString();
  56. }
  57. public String reqClose() {
  58. req = new JSONObject();
  59. req.put("reqNum", "0");
  60. return req.toString();
  61. }
  62. public boolean loginResponse(String s) throws ParseException {
  63. req = (JSONObject) parser.parse(s);
  64. return (boolean)req.get("res");
  65. }
  66. public String getFoldersReq (String name ) {
  67. req = new JSONObject();
  68. req.put("name", name);
  69. req.put("reqNum", "3");
  70. return req.toString();
  71. }
  72. public String createFolderReq(String userName, String folderName) {
  73. req = new JSONObject();
  74. req.put("name", userName);
  75. req.put("folderName", folderName);
  76. req.put("reqNum", "4");
  77. return req.toString();
  78. }
  79. public String deleteFolderReq(String userName, String folderName) {
  80. req = new JSONObject();
  81. req.put("reqNum", "6");
  82. req.put("userName", userName);
  83. req.put("folderName", folderName);
  84. return req.toString();
  85. }
  86. public boolean deleteFolderRes(String res) throws ParseException {
  87. req = (JSONObject) parser.parse(res);
  88. return (boolean)req.get("res");
  89. }
  90. public String getEmailsInFolderRequest (String name , String foldername) {
  91. req = new JSONObject();
  92. req.put("name", name);
  93. req.put("folderName", foldername);
  94. req.put("reqNum", "5");
  95. return req.toString();
  96. }
  97. public JSONObject EmailsResponse(String s) throws ParseException {
  98. JSONParser p = new JSONParser();
  99. return (JSONObject) p.parse(s);
  100. }
  101. public JSONObject foldersResponse(String s) throws ParseException {
  102. JSONParser p = new JSONParser();
  103. return (JSONObject) p.parse(s);
  104. }
  105. public String starUnstarEmailReq(String star,String userName, String folderName, String emailnum) {
  106. req = new JSONObject();
  107. req.put("name", userName);
  108. req.put("starred", star);
  109. req.put("folderName", folderName);
  110. req.put("emailnum",emailnum);
  111. req.put("reqNum", "8");
  112. return req.toString();
  113. }
  114. public String renameFolderReq(String userName, String folderName, String newFolder) {
  115. req = new JSONObject();
  116. req.put("name", userName);
  117. req.put("folderName", folderName);
  118. req.put("newFolder", newFolder);
  119. req.put("reqNum", "7");
  120. return req.toString();
  121. }
  122. public String newFolderReq(String userName, String folderName) {
  123. req = new JSONObject();
  124. req.put("name", userName);
  125. req.put("folderName", folderName);
  126. req.put("reqNum", "7");
  127. return req.toString();
  128. }
  129. public String setPriorityReq(String priority,String userName, String folderName, String emailnum) {
  130. req = new JSONObject();
  131. req.put("name", userName);
  132. req.put("folderName", folderName);
  133. req.put("emailnum",emailnum);
  134. req.put("priority", priority);
  135. req.put("reqNum", "10");
  136. return req.toString();
  137. }
  138. public boolean newFolderRes(String res) throws ParseException {
  139. req = (JSONObject) parser.parse(res);
  140. return (boolean)req.get("res");
  141. }
  142. public boolean renameFolderRes(String res) throws ParseException {
  143. req = (JSONObject) parser.parse(res);
  144. return (boolean)req.get("res");
  145. }
  146. public boolean starUnstarEmailRes(String res) throws ParseException {
  147. req = (JSONObject) parser.parse(res);
  148. return (boolean)req.get("res");
  149. }
  150. public boolean setPriorityRes(String res) throws ParseException {
  151. req = (JSONObject) parser.parse(res);
  152. return (boolean)req.get("res");
  153. }
  154. public String sendEmailReq(String to, String sub, String body, String userName, String attachNum) {
  155. req = new JSONObject();
  156. req.put("reqNum", "11");
  157. req.put("to", to);
  158. req.put("sub", sub);
  159. req.put("body", body);
  160. req.put("name", userName);
  161. req.put("attach", attachNum);
  162. return req.toString();
  163. }
  164. public String laodEmailreq(String username , String foldername , String emailnum) {
  165. req = new JSONObject();
  166. req.put("reqNum", "12");
  167. req.put("name", username);
  168. req.put("folderName", foldername);
  169. req.put("emailNum",emailnum );
  170. return req.toString();
  171. }
  172. public String SendAttachReq(File f) throws Exception {
  173. byte [] mybytearray = new byte [(int)f.length()];
  174. FileInputStream fis = new FileInputStream(f);
  175. BufferedInputStream bis = new BufferedInputStream(fis);
  176. bis.read(mybytearray,0,mybytearray.length);
  177. String s = new String(mybytearray);
  178. return s;
  179. }
  180. public String markAllAsReadReq(String username , String foldername) {
  181. req = new JSONObject();
  182. req.put("reqNum", "13");
  183. req.put("name", username);
  184. req.put("folderName", foldername);
  185. return req.toString();
  186. }
  187. public String DeleteEmailReq(String username , String foldername, String emailNum) {
  188. req = new JSONObject();
  189. req.put("reqNum", "14");
  190. req.put("name", username);
  191. req.put("folderName", foldername);
  192. req.put("emailNum", emailNum);
  193. return req.toString();
  194. }
  195. public String moveEmailReq(String username , String foldername,String folderTo, String emailNum) {
  196. req = new JSONObject();
  197. req.put("reqNum", "15");
  198. req.put("name", username);
  199. req.put("folderName", foldername);
  200. req.put("emailNum", emailNum);
  201. req.put("folderTo",folderTo);
  202. return req.toString();
  203. }
  204. public String getContactsReq(String userName) {
  205. req = new JSONObject();
  206. req.put("reqNum", "16");
  207. req.put("name", userName);
  208. return req.toString();
  209. }
  210. public JSONObject getContactsRes(String res) {
  211. JSONObject contacts = new JSONObject();
  212. try {
  213. contacts = (JSONObject) parser.parse(res);
  214. } catch (Exception e) {
  215. e.printStackTrace();
  216. }
  217. return contacts;
  218. }
  219. public String newContactReq(String userName, String contact) {
  220. req = new JSONObject();
  221. req.put("reqNum", "17");
  222. req.put("name", userName);
  223. req.put("contact", contact);
  224. return req.toString();
  225. }
  226. public String reportSpamReq(String userName, String folderName, String emailNum) {
  227. req = new JSONObject();
  228. req.put("reqNum", "18");
  229. req.put("name", userName);
  230. req.put("folderName", folderName);
  231. req.put("emailNum", emailNum);
  232. return req.toString();
  233. }
  234. public String removeContactReq(String userName, String contact) {
  235. req = new JSONObject();
  236. req.put("reqNum", "19");
  237. req.put("name", userName);
  238. req.put("contact", contact);
  239. return req.toString();
  240. }
  241. /******************************* Server side Functions *********************************/
  242. public void recieveReq(String r) throws ParseException {
  243. if(r == "exit") {
  244. return;
  245. }
  246. req = (JSONObject) parser.parse(r);
  247. }
  248. /**
  249. * this function checks the request number and the user name
  250. * and password of user and set response to true if the user name and
  251. * password matches
  252. * @param s
  253. * @return
  254. * @throws Exception
  255. */
  256. public String response() throws Exception {
  257. int reqnum = Integer.valueOf((String) req.get("reqNum"));
  258. switch (reqnum) {
  259. case 1:
  260. return register();
  261. case 2:
  262. return login();
  263. case 3:
  264. String x = loaduserdata();
  265. return x;
  266. case 4:
  267. return createNewFolder();
  268. case 5:
  269. return loadFoldersIndex();
  270. case 6:
  271. return deleteFolder();
  272. case 7:
  273. return renameFolder();
  274. case 8:
  275. return starunstarEmail();
  276. case 9:
  277. return newFolder();
  278. case 10:
  279. return setPriority();
  280. case 11:
  281. return recieveEmail();
  282. case 12:
  283. return returnEmail();
  284. case 13:
  285. return markAllEmailsRead();
  286. case 14:
  287. return DeleteEmail();
  288. case 15:
  289. return moveEmail();
  290. case 16:
  291. return getContacts();
  292. case 17:
  293. return newContact();
  294. case 18:
  295. return reportSpam();
  296. case 19:
  297. return removeContact();
  298. default:
  299. break;
  300. }
  301. return null;
  302. }
  303. private String loaduserdata() throws Exception {
  304. ServerFolder server = new ServerFolder();
  305. server.startServer("server");
  306. server.emptyTrash((String)req.get("name"));
  307. return (server.loadUserIndex((String)req.get("name"))).toString();
  308. }
  309. private String register() throws Exception {
  310. ServerFolder server = new ServerFolder();
  311. server.startServer("server");
  312. User u = new User();
  313. u.setName((String)req.get("name"));
  314. u.setPassword((String)req.get("password"));
  315. response = new JSONObject();
  316. response.put("res", server.addUser(u));
  317. return response.toString();
  318. }
  319. private String login() throws Exception {
  320. ServerFolder server = new ServerFolder();
  321. server.startServer("server");
  322. User u = new User();
  323. u.setName((String)req.get("name"));
  324. u.setPassword((String)req.get("password"));
  325. server.emptyTrash((String)req.get("name"));
  326. response = new JSONObject();
  327. response.put("res", server.login(u));
  328. return response.toString();
  329. }
  330. private String createNewFolder() {
  331. boolean b = false;
  332. try {
  333. ServerFolder server = new ServerFolder();
  334. server.startServer("server");
  335. String userName = (String) req.get("name");
  336. String folderName = (String) req.get("folderName");
  337. server.emptyTrash((String)req.get("name"));
  338. b = server.createFilter(userName, folderName);
  339. } catch(Exception e) {
  340. b = false;
  341. }
  342. response = new JSONObject();
  343. response.put("res", b);
  344. return response.toString();
  345. }
  346. public String[] getRegReq() {
  347. String[] s = {(String) req.get("name") , (String) req.get("password")};
  348. return s;
  349. }
  350. private String loadFoldersIndex() throws Exception {
  351. ServerFolder server = new ServerFolder();
  352. server.startServer("server");
  353. server.emptyTrash((String)req.get("name"));
  354. return (server.loadfolderindex((String)req.get("name"),(String)req.get("folderName"))).toString();
  355. }
  356. private String deleteFolder() throws Exception {
  357. boolean b = false;
  358. try {
  359. String fname = (String) req.get("folderName");
  360. String userName = (String) req.get("userName");
  361. ServerFolder server = new ServerFolder();
  362. server.startServer("server");
  363. server.emptyTrash((String)req.get("name"));
  364. b = server.deleteFolder(userName, fname);
  365. } catch(Exception e) {
  366. b = false;
  367. }
  368. response = new JSONObject();
  369. response.put("res", b);
  370. return response.toString();
  371. }
  372. private String renameFolder() {
  373. boolean b = false;
  374. try {
  375. String fname = (String) req.get("folderName");
  376. String userName = (String) req.get("name");
  377. String newFolder = (String) req.get("newFolder");
  378. ServerFolder server = new ServerFolder();
  379. server.startServer("server");
  380. server.emptyTrash((String)req.get("name"));
  381. b = server.renameFolder(userName, fname, newFolder);
  382. } catch(Exception e) {
  383. b = false;
  384. }
  385. response = new JSONObject();
  386. response.put("res", b);
  387. return response.toString();
  388. }
  389. private String starunstarEmail() {
  390. boolean b = false;
  391. try {
  392. String fname = (String) req.get("folderName");
  393. String userName = (String) req.get("name");
  394. String eNum = (String) req.get("emailnum");
  395. String star = (String) req.get("starred");
  396. ServerFolder server = new ServerFolder();
  397. server.startServer("server");
  398. server.emptyTrash((String)req.get("name"));
  399. if(star.equals("false")) {
  400. b = server.starEmail(userName, fname, eNum);
  401. } else {
  402. b = server.removeStarEmail(userName, fname, eNum);
  403. }
  404. } catch (Exception e) {
  405. b = false;
  406. }
  407. response = new JSONObject();
  408. response.put("res", b);
  409. return response.toString();
  410. }
  411. private String newFolder() {
  412. boolean b = false;
  413. try {
  414. String folderName = (String) req.get("folderName");
  415. String userName = (String) req.get("name");
  416. ServerFolder server = new ServerFolder();
  417. server.startServer("server");
  418. server.emptyTrash((String)req.get("name"));
  419. server.createFilter(userName, folderName);
  420. b = true;
  421. } catch (Exception e) {
  422. b = false;
  423. }
  424. response = new JSONObject();
  425. response.put("res", b);
  426. return response.toString();
  427. }
  428. private String setPriority() {
  429. boolean b = false;
  430. try {
  431. String fname = (String) req.get("folderName");
  432. String userName = (String) req.get("name");
  433. String eNum = (String) req.get("emailnum");
  434. String priority = (String) req.get("priority");
  435. ServerFolder server = new ServerFolder();
  436. server.startServer("server");
  437. server.emptyTrash((String)req.get("name"));
  438. b = server.setPriority(userName, fname, eNum, priority);
  439. if(!b) {
  440. throw new Exception();
  441. }
  442. } catch (Exception e) {
  443. }
  444. response = new JSONObject();
  445. response.put("res", b);
  446. return response.toString();
  447. }
  448. private String recieveEmail() {
  449. try {
  450. String to = (String) req.get("to");
  451. String userName = (String) req.get("name");
  452. String sub = (String) req.get("sub");
  453. String body = (String) req.get("body");
  454. int attach = Integer.valueOf((String) req.get("attach"));
  455. Email e = new Email();
  456. e.newEmail(sub, userName, to, body, "3");
  457. dos.writeUTF("okay");
  458. for(int i = 0; i < attach; i++) {
  459. String fileName = dis.readUTF();
  460. String size = dis.readUTF();
  461. int filesize = Integer.valueOf(size);
  462. byte[] file = new byte[filesize];
  463. if(filesize>0) {
  464. dis.readFully(file, 0, filesize);
  465. e.addAttachment(file, fileName);
  466. } else {
  467. throw new Exception();
  468. }
  469. }
  470. ServerFolder server = new ServerFolder();
  471. server.startServer("server");
  472. server.emptyTrash((String)req.get("name"));
  473. boolean bool = server.recieveFile(e);
  474. response = new JSONObject();
  475. response.put("res", bool);
  476. return response.toString();
  477. } catch (Exception e) {
  478. boolean bool = false;
  479. response = new JSONObject();
  480. response.put("res", bool);
  481. return response.toString();
  482. }
  483. }
  484. private String returnEmail() {
  485. try {
  486. String fname = (String) req.get("folderName");
  487. String userName = (String) req.get("name");
  488. String eNum = (String) req.get("emailNum");
  489. ServerFolder server = new ServerFolder();
  490. server.startServer("server");
  491. server.emptyTrash((String)req.get("name"));
  492. Email e = server.loadEmail(userName, fname, eNum);
  493. byte[] mybytes = e.toByteArray();
  494. dos.writeUTF(String.valueOf(mybytes.length));
  495. dos.write(mybytes);
  496. response = new JSONObject();
  497. response.put("res",true);
  498. return response.toString();
  499. } catch (Exception e) {
  500. boolean bool = false;
  501. response = new JSONObject();
  502. response.put("res", bool);
  503. return response.toString();
  504. }
  505. }
  506. private String markAllEmailsRead() {
  507. try {
  508. String fname = (String) req.get("folderName");
  509. String userName = (String) req.get("name");
  510. ServerFolder server = new ServerFolder();
  511. server.startServer("server");
  512. server.emptyTrash((String)req.get("name"));
  513. server.markAllEmailsRead(userName, fname);
  514. response = new JSONObject();
  515. response.put("res",true);
  516. return response.toString();
  517. } catch (Exception e) {
  518. boolean bool = false;
  519. response = new JSONObject();
  520. response.put("res", bool);
  521. return response.toString();
  522. }
  523. }
  524. private String DeleteEmail() {
  525. try {
  526. String fname = (String) req.get("folderName");
  527. String userName = (String) req.get("name");
  528. String emailNum = (String) req.get("emailNum");
  529. ServerFolder server = new ServerFolder();
  530. server.startServer("server");
  531. server.emptyTrash((String)req.get("name"));
  532. boolean bool = server.deleteEmail(userName, fname, emailNum);
  533. if(!bool) {
  534. throw new Exception();
  535. } else {
  536. response = new JSONObject();
  537. response.put("res", bool);
  538. return response.toString();
  539. }
  540. } catch (Exception e) {
  541. e.printStackTrace();
  542. response = new JSONObject();
  543. response.put("res", false);
  544. return response.toString();
  545. }
  546. }
  547. private String moveEmail() {
  548. try {
  549. String fname = (String) req.get("folderName");
  550. String userName = (String) req.get("name");
  551. String emailNum = (String) req.get("emailNum");
  552. String folderTo = (String) req.get("folderTo");
  553. ServerFolder server = new ServerFolder();
  554. server.startServer("server");
  555. server.emptyTrash((String)req.get("name"));
  556. boolean bool = server.moveEmail(userName, fname, folderTo, emailNum);
  557. if(!bool) {
  558. throw new Exception();
  559. } else {
  560. response = new JSONObject();
  561. response.put("res", bool);
  562. return response.toString();
  563. }
  564. } catch (Exception e) {
  565. e.printStackTrace();
  566. response = new JSONObject();
  567. response.put("res", false);
  568. return response.toString();
  569. }
  570. }
  571. private String getContacts() {
  572. try {
  573. String userName = (String) req.get("name");;
  574. ServerFolder server = new ServerFolder();
  575. server.startServer("server");
  576. server.emptyTrash((String)req.get("name"));
  577. String res = server.getContacts(userName);
  578. return res;
  579. } catch (Exception e) {
  580. e.printStackTrace();
  581. return null;
  582. }
  583. }
  584. private String newContact() {
  585. try {
  586. String userName = (String) req.get("name");
  587. String contactName = (String) req.get("contact");
  588. ServerFolder server = new ServerFolder();
  589. server.startServer("server");
  590. server.emptyTrash((String)req.get("name"));
  591. boolean bool = server.addContact(userName, contactName);
  592. if(!bool) {
  593. throw new Exception();
  594. } else {
  595. response = new JSONObject();
  596. response.put("res", bool);
  597. return response.toString();
  598. }
  599. } catch (Exception e) {
  600. e.printStackTrace();
  601. response = new JSONObject();
  602. response.put("res", false);
  603. return response.toString();
  604. }
  605. }
  606. private String reportSpam() {
  607. try {
  608. String userName = (String) req.get("name");
  609. String folderName = (String) req.get("folderName");
  610. String emailNum = (String) req.get("emailNum");
  611. ServerFolder server = new ServerFolder();
  612. server.startServer("server");
  613. server.emptyTrash((String)req.get("name"));
  614. boolean bool = server.reportSpam(userName, folderName, emailNum);
  615. if(!bool) {
  616. throw new Exception();
  617. } else {
  618. response = new JSONObject();
  619. response.put("res", bool);
  620. return response.toString();
  621. }
  622. } catch (Exception e) {
  623. e.printStackTrace();
  624. response = new JSONObject();
  625. response.put("res", false);
  626. return response.toString();
  627. }
  628. }
  629. private String removeContact() {
  630. try {
  631. String userName = (String) req.get("name");
  632. String contactName = (String) req.get("contact");
  633. ServerFolder server = new ServerFolder();
  634. server.startServer("server");
  635. server.emptyTrash((String)req.get("name"));
  636. boolean bool = server.removeContact(userName, contactName);
  637. if(!bool) {
  638. throw new Exception();
  639. } else {
  640. response = new JSONObject();
  641. response.put("res", bool);
  642. return response.toString();
  643. }
  644. } catch (Exception e) {
  645. e.printStackTrace();
  646. response = new JSONObject();
  647. response.put("res", false);
  648. return response.toString();
  649. }
  650. }
  651. private String startChat() {
  652. while (true) {
  653. try {
  654. String received = dis.readUTF();
  655. System.out.println(received);
  656. if(received.equals("logout")){
  657. break;
  658. }
  659. // break the string into message and recipient part
  660. StringTokenizer st = new StringTokenizer(received, "#");
  661. String MsgToSend = st.nextToken();
  662. String recipient = st.nextToken();
  663. // search for the recipient in the connected devices list.
  664. // ar is the vector storing client of active users
  665. for (int i = 0; i < users.size(); i++) {
  666. ClientHandler1 mc = (ClientHandler1) users.get(i);
  667. if (mc.name.equals(recipient) && mc.isLoggedin==true) {
  668. mc.dos.writeUTF(this.name+" : "+MsgToSend);
  669. break;
  670. }
  671. }
  672. } catch (Exception e) {
  673. e.printStackTrace();
  674. }
  675. }
  676. return "Done";
  677. }
  678. }