Advertisement
Guest User

Untitled

a guest
Mar 19th, 2016
137
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 49.40 KB | None | 0 0
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. from array import array
  4. from PIL import Image
  5. import SocketServer
  6. import io
  7. import re
  8. import requests#infolder input
  9. import hashlib
  10. import json
  11. import httplib
  12. import urllib
  13. import datetime
  14. import MySQLdb
  15. import socket
  16. import sys
  17. import os
  18. import time
  19. import select
  20. import errno
  21. try:
  22. import threading
  23. except ImportError:
  24. import dummy_threading as threading
  25.  
  26. ZEROANS = bytearray()
  27. ZEROANS.append(0)
  28. vk_token = ''
  29. def passEncryptBig(paswd,dtstr):
  30. mmdd55 = hashlib.md5()
  31. toret = paswd[::-1]
  32. toret = toret + dtstr
  33. mmdd55.update(toret)
  34. toret = mmdd55.hexdigest()
  35. mmdd55.update(toret)
  36. toret = mmdd55.hexdigest()
  37. toret = toret + "d5c4f768bfa"
  38. mmdd55.update(toret)
  39. return mmdd55.hexdigest()[::-1]
  40. def passEncrypt(paswd):
  41. mmdd55 = hashlib.md5()
  42. mmdd55.update(passwd)
  43. toret = mmdd55.hexdigest()
  44. toret = toret + "d5c4f768bfa"
  45. mmdd55.update(toret)
  46. return mmdd55.hexdigest()[::-1]
  47.  
  48. the_beginning = datetime.datetime.strptime("201507232136", "%Y%m%d%H%M")
  49.  
  50. class ThreadedTCPRequestHandler(SocketServer.BaseRequestHandler):
  51. def setup(self):
  52. self.user_id = None
  53. print "Connected to", self.client_address[0]
  54. def finish(self):
  55. print "Disconnected from", self.client_address[0]
  56. self.request.close()
  57. def handle(self):
  58. db = MySQLdb.connect(host='localhost',user='pythonserver',passwd='IveGotToBeFast030815', db='app_data')
  59. db.autocommit(1)
  60. firstGet = self.request.recv(40)
  61. firstGetBytes = bytearray(firstGet)
  62. if not firstGet:
  63. return
  64. if firstGetBytes[0] == 0 and firstGet[1:33] == "d844df439917043c911364d9046fd87c" and firstGet[33:36] == "1.0":
  65. #login
  66. self.request.send(ZEROANS)
  67. login = self.request.recv(30)
  68. cur = db.cursor()
  69. dbgetpass = 'SELECT IFNULL(password,""),crtndtstmp,user_id FROM login_data WHERE username="' + login +'";'
  70. cur.execute(dbgetpass)
  71. res = cur.fetchall()
  72. dataans = '000000000000'
  73. if len(res) == 1:
  74. dataans = res[0][1]
  75. ansans = bytearray()
  76. ansans.append(0)
  77. ansans += bytearray(dataans)
  78. self.request.send(ansans)#Maybe send date and get partly encrypted passsword? --> Check it now yeah
  79. passwd = self.request.recv(1024)
  80. answer = bytearray()
  81. if len(res) == 1:
  82. if res[0][0] == "":
  83. #check------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  84. answer.append(1)
  85. elif res[0][0] == passEncrypt(passwd):
  86. answer.append(0)
  87. self.user_id = res[0][2]
  88. else:
  89. answer.append(1)
  90. else:
  91. answer.append(1)
  92. self.request.send(answer)
  93. if answer[0] == 0:
  94. self.authenticated()
  95. elif firstGetBytes[0] == 1 and firstGet[1:33] == "d844df439917043c911364d9046fd87c" and firstGet[33:36] == "1.0":
  96. #login via social network
  97. self.request.send(ZEROANS)
  98. social_network = self.request.recv(40)
  99. social_network_bytes = bytearray(social_network)
  100. self.request.send(ZEROANS)
  101. access_token = self.request.recv(1024)
  102. self.request.send(ZEROANS)
  103. social_network_user_id = self.request.recv(1024)
  104. cur = db.cursor()#if social network = 0 vk = 1 fb
  105. if social_network_bytes[0] == 0:
  106. dbgetuserid = 'SELECT user_id FROM login_data WHERE vk_user_id="' +social_network_user_id+ '";'
  107. elif social_network_bytes[0] == 1:
  108. dbgetuserid = 'SELECT user_id FROM login_data WHERE fb_user_id="' +social_network_user_id+ '";'
  109. else:
  110. #something went wrongк
  111. return
  112. #Check token, answer and authenticate
  113. cur.execute(dbgetuserid)
  114. res = cur.fetchall()
  115. answer = bytearray()
  116. #ask for app token (already my) https://oauth.vk.com/access_token?client_id=5069874&client_secret=JBP4X3OFkgjsAiAk7sik&v=5.40&grant_type=client_credentials
  117. #ask to check token https://api.vk.com/method/secure.checkToken?token=<user_access_token>&client_secret=<app_secret>&access_token=<access_token>
  118. token_valid = False #checktoken
  119. if social_network_bytes[0] == 0:
  120. doc = urllib.urlopen("https://api.vk.com/method/secure.checkToken?token="+str(access_token)+"&client_secret=JBP4X3OFkgjsAiAk7sik&access_token="+str(vk_token)+"")
  121. resp = doc.read()
  122. splitted = json.loads(resp)
  123. try:
  124. if splitted['response']['user_id'] == social_network_user_id:
  125. token_valid = True
  126. except:
  127. print 'Invalid token'
  128. elif social_network_bytes[0] == 1:
  129. doc = urllib.urlopen("https://graph.facebook.com/debug_token?input_token=" + str(access_token) + "&access_token=1632962563640392|fb79b9da958cceeb9252d9ea35ba1823")
  130. resp = doc.read()
  131. splitted = json.loads(resp)
  132. try:
  133. if splitted['data']['user_id'] == social_network_user_id:
  134. token_valid = True
  135. except:
  136. print 'Invalid token'
  137. if token_valid:
  138. if len(res) == 1:
  139. answer.append(0)
  140. self.user_id = res[0][0]
  141. elif len(res) == 0:#ask if possible to register
  142. partans = bytearray()
  143. partans.append(1)
  144. self.request.send(partans)
  145. ispos = self.request.recv(1)
  146. ipbs = bytearray(ispos)
  147. if ipbs[0] != 0:
  148. return
  149. self.request.send(ZEROANS)
  150. login = self.request.recv(30)
  151. login = login.lower()
  152. dbgetlogin = 'SELECT username FROM login_data WHERE username = "' + login + '";'
  153. cur.execute(dbgetlogin)
  154. logres = cur.fetchall()
  155. if len(login) < 6 or len(login) > 20 or not(re.match("^[a-z0-9_-]*$", login)):
  156. answer.append(1)
  157. self.request.send(answer)
  158. return
  159. if len(logres) > 0:
  160. answer.append(2)
  161. self.request.send(answer)
  162. return
  163. dbcheckifblocked = 'SELECT username FROM besties WHERE username = "' + login + '";'
  164. cur.execute(dbcheckifblocked)
  165. checkres = cur.fetchall()
  166. if len(checkres) > 0:
  167. answer.append(3)
  168. self.request.send(answer)
  169. return
  170. #createuser
  171. #authenticate
  172. if social_network_bytes[0] == 0:
  173. dbgenerateuser = 'INSERT INTO login_data VALUES (NULL, "' + login + '" ,1 , NULL ,"' + dtststr + '", "' + mailaddr + '" , ' + social_network_user_id + ', NULL);'
  174. elif social_network_bytes[0] == 1:
  175. dbgenerateuser = 'INSERT INTO login_data VALUES (NULL, "' + login + '" ,2 , NULL ,"' + dtststr + '", "' + mailaddr + '" , NULL, ' + social_network_user_id + ');'
  176. cur.execute(dbgenerateuser)
  177. #get user_id
  178. insertedid = int(cur.lastrowid)
  179. self.user_id = insertedid
  180. answer.append(0)
  181. else:
  182. answer.append(2)
  183. else:
  184. answer.append(2)
  185. self.request.send(answer)
  186. if answer[0] == 0:
  187. self.authenticated()
  188. elif firstGetBytes[0] == 2 and firstGet[1:33] == "d844df439917043c911364d9046fd87c" and firstGet[33:36] == "1.0":
  189. #register
  190. self.request.send(ZEROANS)
  191. login = self.request.recv(30)
  192. login = login.lower()
  193. cur = db.cursor()
  194. dbgetlogin = 'SELECT username FROM login_data WHERE username = "' + login + '";'
  195. cur.execute(dbgetlogin)
  196. res = cur.fetchall()
  197. answer = bytearray()
  198. if len(login) < 6 or len(login) > 20 or not(re.match("^[a-z0-9_-]*$", login)):
  199. answer.append(1)
  200. self.request.send(answer)
  201. return
  202. if len(res) > 0:
  203. answer.append(2)
  204. self.request.send(answer)
  205. return
  206. dbcheckifblocked = 'SELECT username FROM besties WHERE username = "' + login + '";'
  207. cur.execute(dbcheckifblocked)
  208. checkres = cur.fetchall()
  209. if len(checkres) > 0:
  210. answer.append(3)
  211. self.request.send(answer)
  212. return
  213. self.request.send(ZEROANS)
  214. mailaddr = self.request.recv(50)
  215. mailaddr = mailaddr.lower()
  216. dbgetmail = 'SELECT mailaddr FROM login_data WHERE mailaddr = "' + mailaddr + '";'
  217. cur.execute(dbgetmail)
  218. mailres = cur.fetchall()
  219. if len(mailres) > 0:
  220. answer.append(1)
  221. self.request.send(answer)
  222. return
  223. if not re.match("[^@]+@[^@]+\.[^@]+",mailaddr):
  224. answer.append(2)
  225. self.request.send(answer)
  226. return
  227. self.request.send(ZEROANS)
  228. passwd = self.request.recv(40)
  229. dtst = datetime.datetime.now()
  230. dtststr = dtst.strftime("%Y%m%d%H%M")
  231. if not re.match("^[A-Za-z0-9_-]*$",passwd) or len(passwd) < 6:
  232. answer.append(1)
  233. self.request.send(answer)
  234. return
  235. passwd = passEncryptBig(passwd, dtststr)
  236. print "Will register new user"
  237. dbgenerateuser = 'INSERT INTO login_data VALUES (NULL, "'+login+'" ,0 , "'+ passwd +'" ,"'+dtststr+'", "'+ mailaddr +'" , NULL, NULL);'
  238. print dbgenerateuser
  239. cur.execute(dbgenerateuser)
  240. answer.append(0)
  241. self.request.send(answer)
  242. #check username and email--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  243. elif firstGetBytes[0] == 3 and firstGet[1:33] == "d844df439917043c911364d9046fd87c" and firstGet[33:36] == "1.0":
  244. #forgot my password----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  245. pass
  246. else:
  247. answer = bytearray()
  248. answer.append(1)
  249. self.request.send(answer)
  250. return
  251. def send_id_list(self, from_beginning, feed_friends, last_id, feed_theme):
  252. id_list = []
  253. #CHANGE THIS METHOD TO USE ID NOT TIMESTAMP
  254. #REALLY
  255. #IT LOOKS LIKE SHIT
  256. #YOU NEED IT!
  257. #JUST CHANGE IT
  258. #!!!!!!!!
  259. #---------------------------------------------------------------------------------------------FROM HERE--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  260. feeddb = MySQLdb.connect(host='localhost',user='pythonserver',passwd='IveGotToBeFast030815', db='app_data')#check------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  261. feeddb.autocommit(1)
  262. curr= feeddb.cursor()
  263. if self.feed_friends == True:
  264. dbgetidsintimes = 'SELECT post_id FROM user_posts, subscriptions WHERE '+(('user_posts.post_id <' + str(last_id)) if not from_beginning else '')+(' ' if feed_theme == 0 else (' ' + ('AND' if not from_beginning else '') + ' user_posts.theme = ' + str(feed_theme))) +(' ' if feed_friends==False else (' AND ((user_posts.user_id = subscriptions.user_id AND subscriptions.subscriber_id = ' + str(user_id) +') OR (user_posts.user_id = ' + str(user_id)+ '))' )) + ' ORDER BY user_posts.post_id DESC LIMIT 10;'#check------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  265. else:
  266. dbgetidsintimes = 'SELECT post_id FROM user_posts, global_tabl WHERE '+(('user_posts.post_id <' + str(last_id)) if not from_beginning else '')+(' ' if feed_theme == 0 else (' ' + ('AND' if not from_beginning else '') + ' user_posts.theme = ' + str(feed_theme))) +(' AND user_posts.post_id = global_tabl.post_id' if feed_friends==False else (' ' + str(user_id) +')'))+ ' ORDER BY user_posts.post_id DESC LIMIT 10;'#check------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  267. #print dbgetidsintimes
  268. #ckeck sort by timestamp---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  269. curr.execute(dbgetidsintimes)
  270. posts = curr.fetchall()
  271. for line in posts:
  272. id_list.append(str(line[0]))
  273. length = bytearray()
  274. #---------------------------------------------------------------------------------------------TILL HERE--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  275. length.append(len(id_list))
  276. self.request.send(length)
  277. counter = 0
  278. while counter < len(id_list):
  279. wannait = self.request.recv(1)
  280. wannabytes = bytearray(wannait)
  281. if wannabytes[0] == 0:
  282. self.request.send(id_list[counter])
  283. counter += 1
  284. def authenticated(self):
  285. db = MySQLdb.connect(host='localhost',user='pythonserver',passwd='IveGotToBeFast030815', db='app_data')
  286. db.autocommit(1)
  287. cur = db.cursor()
  288. while 1:
  289. #get command and doit, while authenticated
  290. true_request = self.request.recv(1024)
  291. request_bytes = bytearray(true_request)
  292. if not true_request or len(true_request) == 0:
  293. return
  294. #0-3 reserved
  295. if request_bytes[0] == 0 or request_bytes[0] == 1 or request_bytes[0] == 2 or request_bytes[0] == 3:
  296. #registerFirst
  297. answer = bytearray()
  298. answer.append(1)
  299. self.request.send(answer)
  300. elif request_bytes[0] == 4:
  301. #get post id list
  302. #0byte command
  303. #1byte beginning or not
  304. #2byte friends or not
  305. #3byte theme
  306. #4+byte last postid if r[1] == 0
  307. from_beginning = False
  308. feed_friends = False
  309. last_id = None
  310. if request_bytes[1] == 1:
  311. #from beginning
  312. from_beginning = True
  313. if request_bytes[2] == 1:
  314. feed_friends = True
  315. feed_theme = request_bytes[3]
  316. if not from_beginning:
  317. last_id = true_request[4:]
  318. self.send_id_list(from_beginning, feed_friends, last_id, feed_theme)
  319. elif request_bytes[0] == 5:
  320. #-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!->->->->->->->->->->->––––––>–––––>–––>––>–>––––––>–––––>–––>––>–>––––––>–––––>–––>––>–>––––––>–––––>–––>––>–>PAUSE
  321. #get big outer wrangle by ID
  322. #0byte command
  323. #1+byte postid
  324. wrnglD = int(true_request[1:])
  325. newcur = db.cursor()
  326. tosend = []
  327. #get this post from db
  328. getWrangleFirstPart = 'SELECT wrngls.quest, wrngls.likes_numb,wrngls.votes_numb,wrngls.has_image FROM wrngls WHERE wrngls.post_id = ' + str(wrnglD) + ';'
  329. newcur.execute(getWrangleFirstPart)
  330. curFirstPart = newcur.fetchall()
  331. if len(curFirstPart) != 1:
  332. print "Break 5:1:" + str(len(curFirstPart))
  333. return
  334. thisquestion = curFirstPart[0][0]
  335. thislikes = curFirstPart[0][1]
  336. thisvotes = curFirstPart[0][2]
  337. hasImage = False if curFirstPart[0][3]==0 else True
  338. getWrangleSecondPart = 'SELECT user_posts.user_id FROM user_posts WHERE user_posts.post_id = ' + str(wrnglD) + ';'
  339. newcur.execute(getWrangleSecondPart)
  340. curSecondPart = newcur.fetchall()
  341. if len(curSecondPart) != 1:
  342. print "Break 5:2:" + str(len(curSecondPart))
  343. return
  344. thisauthorid = curSecondPart[0][0]
  345. getWrangleThirdPart = 'SELECT login_data.username FROM login_data WHERE login_data.user_id = ' + str(thisauthorid) + ';'
  346. newcur.execute(getWrangleThirdPart)
  347. curThirdPart = newcur.fetchall()
  348. if len(curThirdPart) != 1:
  349. print "Break 5:3:" + str(len(curThirdPart))
  350. return
  351. thisauthorname = curThirdPart[0][0]
  352. liked = False
  353. voted = False
  354. tosend.append(thisquestion)
  355. tosend.append(str(thislikes))
  356. tosend.append(str(thisvotes))
  357. tosend.append(thisauthorname)
  358. ifliked = 'SELECT post_id FROM likes WHERE post_id = '+ str(wrnglD) + ' AND user_id = ' + str(self.user_id) + ';'
  359. newcur.execute(ifliked)
  360. fetchliked = newcur.fetchall()
  361. liked = False if len(fetchliked) == 0 else True
  362. ifvoted = 'SELECT post_id FROM votes WHERE post_id = '+ str(wrnglD) + ' AND user_id = ' + str(self.user_id) + ';'
  363. newcur.execute(ifvoted)
  364. fetchvoted = newcur.fetchall()
  365. voted = False if len(fetchvoted) == 0 else True
  366. tuplatup = liked,voted,hasImage
  367. fishka = bytearray()
  368. if tuplatup == (False,False,False):
  369. fishka.append(0)
  370. elif tuplatup == (False,False,True):
  371. fishka.append(1)
  372. elif tuplatup == (False,True,False):
  373. fishka.append(2)
  374. elif tuplatup == (False,True,True):
  375. fishka.append(3)
  376. elif tuplatup == (True,False,False):
  377. fishka.append(4)
  378. elif tuplatup == (True,False,True):
  379. fishka.append(5)
  380. elif tuplatup == (True,True,False):
  381. fishka.append(6)
  382. elif tuplatup == (True,True,True):
  383. fishka.append(7)
  384. else:
  385. print "Break 5:4"
  386. tosend.append(fishka)
  387. self.request.send(tosend[0])
  388. counter = 1
  389. while counter < len(tosend):
  390. wannam = self.request.recv(1)
  391. wannbyte = bytearray(wannam)
  392. if wannbyte[0] == 0:
  393. self.request.send(tosend[counter])
  394. else:
  395. break
  396. counter += 1
  397. wannam = self.request.recv(1)
  398. wannbyte = bytearray(wannam)
  399. if wannbyte[0] == 0:
  400. #send image if there is
  401. path = "profile_images/" + str(thisauthorid) + ".jpg"
  402. try:
  403. f = open(path, "rb")
  404. imgtosend = f.read()
  405. lenstringtosend = int(len(imgtosend))
  406. self.request.send(str(lenstringtosend))
  407. countrr = 0
  408. while countrr < len(imgtosend):
  409. onesender = bytearray()
  410. onesender.append(imgtosend[countrr])
  411. self.request.send(onesender)
  412. countrr += 1
  413. except:
  414. self.request.send(ZEROANS)
  415. elif request_bytes[0] == 6:
  416. #Image by wrangleID
  417. #0byte command
  418. #1+byte postid
  419. wrnlID = int(true_request[1:])
  420. path = "wrangle_images/" + str(wrnlID) + ".jpg"
  421. try:
  422. f = open(path, "rb")
  423. imgtosend = f.read()
  424. lenstringtosend = int(len(imgtosend))
  425. self.request.send(str(lenstringtosend))
  426. countrr = 0
  427. while countrr < len(imgtosend):
  428. onesender = bytearray()
  429. onesender.append(imgtosend[countrr])
  430. self.request.send(onesender)
  431. countrr += 1
  432. except:
  433. self.request.send(ZEROANS)
  434. elif request_bytes[0] == 7:
  435. #inside wrangle by wrangleID
  436. #0byte command
  437. #1+bytes wrangleID
  438. #IF VOTED SHOW STATISTICS----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  439. #IF FINISHED SHOW CORRECT----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  440. wrnglD = int(true_request[1:])
  441. dbinswrng = 'SELECT comments_numb,expirtids,wrngltype FROM wrngls WHERE post_id =' +str(wrnglD)+';'#DAATA
  442. cur.execute(dbinswrng)
  443. gotins = cur.fetchall()
  444. comments_numb = gotins[0][0]
  445. expirtids = gotins[0][1]
  446. wrngltype = gotins[0][2]
  447. dbinstheme = 'SELECT theme FROM user_posts WHERE post_id = ' +str(wrnglD)+';'
  448. cur.execute(dbinstheme)
  449. themetable = cur.fetchall()
  450. themewrng = int(themetable[0][0])
  451. dbanswrs = 'SELECT ans_numb,ans_text FROM answersft WHERE post_id = ' + str(wrnglD) + ';'
  452. cur.execute(dbanswrs)
  453. answrs = cur.fetchall()
  454. self.request.send(str(comments_numb))
  455. theywanna = self.request.recv(1)
  456. wannabytes = bytearray(theywanna)
  457. if len(wannabytes) == 0 or wannabytes[0] != 0:
  458. break
  459. themebytes = bytearray()
  460. themebytes.append(themewrng)
  461. self.request.send(themebytes)
  462. clidatstr = self.request.recv(15)
  463. clidat = datetime.datetime.strptime(clidatstr, "%Y%m%d%H%M%S")
  464. heretime = datetime.datetime.now()
  465. nowleft = heretime - datetime.timedelta(hours = 15)
  466. nowright = heretime + datetime.timedelta(hours = 11)
  467. if clidat < nowleft or clidat > nowright:
  468. self.request.send('1')
  469. break
  470. difference = clidat - heretime
  471. exprtimedate = datetime.datetime.strptime(str(expirtids), "%Y%m%d%H%M")
  472. cliexptida = exprtimedate + difference
  473. cliexptidastr = cliexptida.strftime("%Y%m%d%H%M%S")
  474. self.request.send(cliexptidastr)
  475. counter = 0
  476. while counter < len(answrs):
  477. wannat = self.request.recv(1)
  478. wannbyte = bytearray(wannat)
  479. if wannbyte[0] != 0:
  480. return
  481. tosend = bytearray()
  482. tosend.append(answrs[counter][0])
  483. stringtosend = answrs[counter][1]
  484. bytearraystrtosend = bytearray(stringtosend)
  485. tosend += bytearraystrtosend
  486. self.request.send(tosend)
  487. counter += 1
  488. wannat = self.request.recv(1)
  489. wannbyte = bytearray(wannat)
  490. if wannbyte[0] != 0:
  491. return
  492. self.request.send(ZEROANS)
  493. elif request_bytes[0] == 8:
  494. #like post
  495. #0byte command
  496. #1+bytes wrangleID
  497. wrnglD = int(true_request[1:])
  498. #print "LIIIIIKED!!!!!!?"
  499. isitliked = 'SELECT post_id FROM likes WHERE user_id = ' + str(self.user_id) + ' AND post_id = ' + str(wrnglD) + ';'
  500. cur.execute(isitliked)
  501. results = cur.fetchall()
  502. #print "-f-f-f--f-f-f-f-f--f-f--->" + str(len(results))
  503. dtliked = datetime.datetime.now()
  504. waaah = dtliked.strftime("%Y%m%d%H%M")
  505. if len(results) == 0:
  506. makeitliked = 'INSERT INTO likes VALUES ('+str(self.user_id) +' , '+str(wrnglD)+' , ' + waaah +');'
  507. cur.execute(makeitliked)
  508. incrlikes = 'UPDATE wrngls SET likes_numb = likes_numb + 1 WHERE post_id = ' + str(wrnglD) + ';'
  509. cur.execute(incrlikes)
  510. self.request.send(ZEROANS)
  511. elif request_bytes[0] == 9:
  512. #dislike post
  513. #0byte command
  514. #1+bytes wrangleID
  515. #dislike
  516. wrnglD = int(true_request[1:])
  517. isitliked = 'SELECT post_id FROM likes WHERE user_id = ' + str(self.user_id) + ' AND post_id = ' + str(wrnglD) + ';'
  518. cur.execute(isitliked)
  519. results = cur.fetchall()
  520. if len(results) == 1:
  521. makeitliked = 'DELETE FROM likes WHERE user_id = '+str(self.user_id) +' AND post_id = '+str(wrnglD) +';'
  522. cur.execute(makeitliked)
  523. incrlikes = 'UPDATE wrngls SET likes_numb = likes_numb - 1 WHERE post_id = ' + str(wrnglD) + ';'
  524. cur.execute(incrlikes)
  525. self.request.send(ZEROANS)
  526. elif request_bytes[0] == 10:
  527. #vote
  528. #0byte command
  529. #1byte number of answer
  530. #2+byte wrangleID
  531. ansnumb = int(request_bytes[1])
  532. wrnglD = int(true_request[2:])
  533. isitvoted = 'SELECT ans_numb FROM votes WHERE user_id = ' str(self.user_id) +' AND post_id = ' + str(wrnglD) + ';'
  534. cur.execute(isitvoted)
  535. results = cur.fetchall()
  536. dtvoted = datetime.datetime.now()
  537. vtd = dtvoted.strftime("%Y%m%d%H%M")
  538. if len(results) == 0:
  539. makeitvoted = 'INSERT INTO votes VALUES (' + str(self.user_id) + ' , ' + str(wrnglD) + ' , ' + str(ansnumb) + ' , ' + vtd +');'
  540. cur.execute(makeitvoted)
  541. incrvoted = 'UPDATE wrngls SET votes_numb = votes_numb + 1 WHERE post_id = ' + str(wrnglD) + ';'
  542. #UPDATE current answer counter--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  543. cur.execute(incrvoted)
  544. self.request.send(ZEROANS)
  545. elif request_bytes[0] == 11:
  546. #get comments id list--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  547. #0byte command
  548. #1byte from last?
  549. #2+bytes wrngID
  550. wrnglD = int(true_request[2:])
  551. sellast = ''
  552. if request_bytes[1] == 1:
  553. sellast = 'SELECT comment_id FROM comments WHERE post_id = '+ str(wrnglD) + ' ORDER BY comment_id DESC LIMIT 10;'
  554. elif request_bytes[2] == 2:
  555. #get comments numb from the wrngl DB table----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  556. else:
  557. self.request.send(ZEROANS)
  558. wtwanna = self.request.recv(20)
  559. sellast = 'SELECT comment_id FROM comments WHERE post_id = ' +str(wrnglD)+ ' AND comment_id < ' + str(wtwanna) + ' ORDER BY comment_id DESC LIMIT 10;'
  560. cur.execute(sellast)
  561. results = cur.fetchall()
  562. ans = bytearray()
  563. ans.append(len(results))
  564. self.request.send(ans)
  565. sndctr = 0
  566. while sndctr < len(results):
  567. twnt = self.request.recv(1)
  568. bttwnt = bytearray(twnt)
  569. if bttwnt[0] != 0:
  570. return
  571. tosend = str(results[sndctr][0])
  572. self.request.send(tosend)
  573. sndctr += 1
  574. elif request_bytes[0] == 12:
  575. #getcomment
  576. #0byte command
  577. #1+byte wrnglID
  578. wrnglD = int(true_request[1:])
  579. self.request.send(ZEROANS)
  580. gotcha = self.request.recv(21)
  581. cmmntD = int(gotcha)
  582. getcomment = 'SELECT user_id,comment_text FROM comments WHERE post_id = ' +str(wrnglD)+ ' AND comment_id = ' +str(cmmntD)+ ';'
  583. cur.execute(getcomment)
  584. reslts = cur.fetchall()
  585. if len(results) != 1:
  586. return
  587. cmntauthorID = results[0][0]
  588. cmntTXT = results[0][1]
  589. getusrname = 'SELECT login_data.username FROM login_data WHERE login_data.user_id = ' + str(cmntauthorID) + ';'
  590. cur.execute(getusrname)
  591. result = cur.fetchall()
  592. if len(result) != 1:
  593. return
  594. cmntauthorUN = str(result[0][0])
  595. self.request.send(cmntauthorUN)
  596. twnt = self.request.recv(1)
  597. twntb = bytearray(twnt)
  598. if twntb[0] != 0:
  599. return
  600. size = (len(cmntTXT)/1024) + 1
  601. sizetosend = bytearray()
  602. sizetosend.append(size)
  603. self.request.send(sizetosend)
  604. twnt = self.request.recv(1)
  605. twntb = bytearray(twnt)
  606. if twntb[0] != 0:
  607. return
  608. sndrctr = 0
  609. while sndrctr < size-1:
  610. self.request.send(cmntTXT[(sndrctr*1024):((sndrctr+1)*1024)])
  611. sndrctr += 1
  612. self.request.send(cmntTXT[(sndrctr*1024):])
  613. #no more than 254*1024 bytes
  614. twnt = self.request.recv(1)
  615. twntb = bytearray(twnt)
  616. if twntb[0] == 0:
  617. #send image if there is
  618. path = "profile_images/" + str(cmntauthorID) + ".jpg"#CHANGE-----------------WHAT FOR?--------------------------------------
  619. try:
  620. f = open(path, "rb")
  621. imgtosend = f.read()
  622. lenstringtosend = int(len(imgtosend))
  623. self.request.send(str(lenstringtosend))
  624. countrr = 0
  625. while countrr < len(imgtosend):
  626. onesender = bytearray()
  627. onesender.append(imgtosend[countrr])
  628. self.request.send(onesender)
  629. countrr += 1
  630. except:
  631. self.request.send(ZEROANS)
  632. elif request_bytes[0] == 13:
  633. #new comment
  634. #0byte command
  635. #1+byes wrnglID
  636. wrnglD = int(true_request[1:])
  637. self.request.send(ZEROANS)
  638. sizeget = self.request.recv(1)
  639. sizegetb = bytearray(sizeget)
  640. cmnttxt = ''
  641. gtctr = 0
  642. while gtctr < sizegetb[0]:
  643. gotstr = self.request.recv(1024)
  644. cmnttxt += gotstr
  645. gtctr += 1
  646. dtcommented = datetime.datetime.now()
  647. waaah = dtcommented.strftime("%Y%m%d%H%M")
  648. putcntindb = 'INSERT INTO comments VALUES(' + str(wrnglD) + ', (SELECT MAX(comment_id) FROM comments WHERE post_id = ' + str(wrnglD) + ') + 1, ' + str(self.user_id) + ', ' + str(cmnttxt) + ', ' + str(waaah) + ');'
  649. cur.execute(putcntindb)
  650. putcntindb = 'UPDATE wrngls SET comments_numb = comments_numb + 1 WHERE post_id = ' + str(wrnglD) + ';'
  651. cur.execute(putcntindb)
  652. #get @ ans #'s------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  653. elif request_bytes[0] == 14:
  654. #delete comment----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  655. #0byte
  656. #1+bytes wrnglID
  657. wrnglD = int(true_request[1:])
  658. self.request.send(ZEROANS)
  659. cmntid = self.request.recv(1024)
  660. cmntID = int(cmntid)
  661. dltcmt = 'DELETE FROM comments WHERE comment_id = ' + str(cmntID) + ' AND post_id = ' + str(wrnglD) + ';'
  662. #check return on server-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  663. cur.execute(dltcmt)
  664. dltcmt = 'UPDATE wrngls SET comments_numb = comments_numb - 1 WHERE post_id = ' + str(wrnglD) + ';'
  665. cur.execute(dltcmt)
  666. elif request_bytes[0] == 15:
  667. #create post
  668. #0byte
  669. #------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  670. #create new publication
  671. theme = true_request[1]
  672. self.request.send(ZEROANS)
  673. #print "-2--->---->----><----<----<----"
  674. wrangletext = self.request.recv(1024)
  675. self.request.send(ZEROANS)
  676. #print "-3--->---->----><----<----<----"
  677. datesstring = self.request.recv(26)
  678. expiration_date_string = datesstring[0:12]#yyMMddHHmm
  679. user_device_date = datesstring[12:26]#yyMMddHHmmss
  680. #print "-4--->---->----><----<----<----"
  681. clidat = datetime.datetime.strptime(user_device_date, "%Y%m%d%H%M%S")
  682. heretime = datetime.datetime.now()
  683. nowleft = heretime - datetime.timedelta(hours = 15)
  684. #print "-5--->---->----><----<----<----"
  685. nowright = heretime + datetime.timedelta(hours = 11)
  686. if clidat < nowleft or clidat > nowright:
  687. self.request.send('1')
  688. break
  689. difference = clidat - heretime
  690. #print "-6--->---->----><----<----<----"
  691. cliexp = datetime.datetime.strptime(expiration_date_string, "%Y%m%d%H%M")
  692. expiration_time = cliexp - difference
  693. expiration_dati_string_server = expiration_time.strftime("%Y%m%d%H%M")
  694. self.request.send(ZEROANS)
  695. #print "-7--->---->----><----<----<----"
  696. getlen = self.request.recv(1)
  697. getlenbytes = bytearray(getlen)
  698. #print "-8--->---->----><----<----<----"
  699. leng = int(getlenbytes[0])
  700. cntr = 0
  701. answers = []
  702. #print "-9--->---->----><----<----<----"
  703. while cntr < leng:
  704. self.request.send(ZEROANS)
  705. answers.append(self.request.recv(1024))
  706. cntr += 1#dafuq?------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  707. imglenstr = self.request.recv(1024)
  708. #print "-10--->---->----><----<----<----"
  709. self.request.send(ZEROANS)
  710. #print "-11--->---->----><----<----<----"
  711. #print imglenstr
  712. imglen = int(imglenstr)
  713. has_image = True
  714. if imglen < 2:
  715. has_image = False
  716. imgcounter = 0
  717. imgbytes = bytearray()
  718. while imgcounter < imglen:
  719. got = self.request.recv(1)
  720. gotbytes = bytearray(got)
  721. imgbytes.append(gotbytes[0])
  722. imgcounter += 1
  723. image = Image.open(io.BytesIO(imgbytes))#CHECK IMAGE RESOLUTION--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  724. #HERE
  725. #print image.size
  726. if image.size != (640,640):
  727. cantdoit = bytearray()
  728. cantdoit.append(1)
  729. self.request.send(cantdoit)
  730. else:
  731. #NEED YOU
  732. self.request.send(ZEROANS)
  733. attachment = self.request.recv(1024)
  734. has_attach = True
  735. byteatt = bytearray(attachment)
  736. if len(byteatt) == 1 and byteatt[0] == 0:
  737. #noattachment
  738. has_attach = False
  739. first_insert = 'INSERT INTO user_posts VALUES (NULL, ' + str(self.user_id) +', ' + heretime.strftime("%Y%m%d%H%M") + ', ' + str(theme) +');'
  740. cur.execute(first_insert)
  741. insertedid = int(cur.lastrowid)
  742. second_insert = 'INSERT INTO wrngls VALUES (' + str(insertedid) + ', "' + wrangletext + '" , 0 , 0 , ' + ('1' if has_image else '0') + ' , 0 , '+expiration_dati_string_server+',0);'
  743. cur.execute(second_insert)
  744. ansctr = 0
  745. while ansctr < len(answers):
  746. third_insert = 'INSERT INTO answersft VALUES ('+str(insertedid)+','+str(ansctr)+', "'+answers[ansctr]+'");'
  747. cur.execute(third_insert)
  748. ansctr += 1
  749. savepath = 'wrangle_images/' +str(insertedid)+ '.jpg'
  750. image.save(savepath)
  751. #add attachment------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  752. elif request_bytes[0] == 16:
  753. #get peoples ids list
  754. #0byte command
  755. #1byte action
  756. #2byte from last
  757. #who are subscribed or subscribe liked smth
  758. #GET REAL NUMBER OF ELEMS HERE AND COMMENTS----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  759.  
  760. elif request_bytes[0] == 17:
  761. #get mini profile decription
  762. #0byte command
  763. #1+byte user_id
  764. pass
  765. elif request_bytes[0] == 18:
  766. #profile get
  767. #0byte command
  768. pass
  769. elif request_bytes[0] == 19:
  770. #subscribe
  771. #0byte
  772. pass
  773. elif request_bytes[0] == 20:
  774. #unsubscribe
  775. #0byte command
  776. pass
  777. elif request_bytes[0] == 21:
  778. #number of posts
  779. #0byte command
  780. pass
  781. elif request_bytes[0] == 22:
  782. #postid list
  783. #0byte command
  784. pass
  785. elif request_bytes[0] == 23:
  786. #minimal post decription
  787. #0byte command
  788. pass
  789. elif request_bytes[0] == 24:
  790. #delete post
  791. #0byte
  792. pass
  793. elif request_bytes[0] == 25:
  794. #select correct answer
  795. #0byte command
  796. pass
  797. elif request_bytes[0] == 26:
  798. #change nam
  799. #0byte command
  800. pass
  801. elif request_bytes[0] == 27:
  802. #upload profile image
  803. #0byte command
  804. pass
  805. elif request_bytes[0] == 28:
  806. #delete profile image
  807. #0byte command
  808. pass
  809. elif request_bytes[0] == 29:
  810. #change description
  811. #0byte command
  812. pass
  813. elif request_bytes[0] == 30:
  814. #sharing save???------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  815. #0byte command
  816. pass
  817. elif request_bytes[0] == 31:
  818. #search
  819. #0byte command
  820. pass
  821. else:
  822. break
  823.  
  824. class ThreadedTCPServer(SocketServer.ThreadingMixIn, SocketServer.TCPServer):
  825. pass
  826.  
  827. if __name__ == "__main__":
  828. doc = urllib.urlopen("https://oauth.vk.com/access_token?client_id=5069874&client_secret=JBP4X3OFkgjsAiAk7sik&v=5.40&grant_type=client_credentials")
  829. resp = doc.read()
  830. splitted = json.loads(resp)
  831. vk_token = splitted['access_token']
  832. #same for FB
  833. HOST, PORT = '', 9196
  834. server = ThreadedTCPServer((HOST, PORT), ThreadedTCPRequestHandler)
  835. ip, port = server.server_address
  836. server_thread = threading.Thread(target=server.serve_forever)
  837. # Exit the server thread when the main thread terminates
  838. server_thread.daemon = True
  839. server_thread.start()
  840. print "Server loop running in thread:", server_thread.name
  841. counter = 60*2
  842. while counter > 0:
  843. time.sleep(1)
  844. counter = counter - 1
  845. print counter, "seconds left"
  846. server.shutdown()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement