Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python
- # -*- coding: utf-8 -*-
- from array import array
- from PIL import Image
- import SocketServer
- import io
- import re
- import requests#infolder input
- import hashlib
- import json
- import httplib
- import urllib
- import datetime
- import MySQLdb
- import socket
- import sys
- import os
- import time
- import select
- import errno
- try:
- import threading
- except ImportError:
- import dummy_threading as threading
- ZEROANS = bytearray()
- ZEROANS.append(0)
- vk_token = ''
- def passEncryptBig(paswd,dtstr):
- mmdd55 = hashlib.md5()
- toret = paswd[::-1]
- toret = toret + dtstr
- mmdd55.update(toret)
- toret = mmdd55.hexdigest()
- mmdd55.update(toret)
- toret = mmdd55.hexdigest()
- toret = toret + "d5c4f768bfa"
- mmdd55.update(toret)
- return mmdd55.hexdigest()[::-1]
- def passEncrypt(paswd):
- mmdd55 = hashlib.md5()
- mmdd55.update(passwd)
- toret = mmdd55.hexdigest()
- toret = toret + "d5c4f768bfa"
- mmdd55.update(toret)
- return mmdd55.hexdigest()[::-1]
- the_beginning = datetime.datetime.strptime("201507232136", "%Y%m%d%H%M")
- class ThreadedTCPRequestHandler(SocketServer.BaseRequestHandler):
- def setup(self):
- self.user_id = None
- print "Connected to", self.client_address[0]
- def finish(self):
- print "Disconnected from", self.client_address[0]
- self.request.close()
- def handle(self):
- db = MySQLdb.connect(host='localhost',user='pythonserver',passwd='IveGotToBeFast030815', db='app_data')
- db.autocommit(1)
- firstGet = self.request.recv(40)
- firstGetBytes = bytearray(firstGet)
- if not firstGet:
- return
- if firstGetBytes[0] == 0 and firstGet[1:33] == "d844df439917043c911364d9046fd87c" and firstGet[33:36] == "1.0":
- #login
- self.request.send(ZEROANS)
- login = self.request.recv(30)
- cur = db.cursor()
- dbgetpass = 'SELECT IFNULL(password,""),crtndtstmp,user_id FROM login_data WHERE username="' + login +'";'
- cur.execute(dbgetpass)
- res = cur.fetchall()
- dataans = '000000000000'
- if len(res) == 1:
- dataans = res[0][1]
- ansans = bytearray()
- ansans.append(0)
- ansans += bytearray(dataans)
- self.request.send(ansans)#Maybe send date and get partly encrypted passsword? --> Check it now yeah
- passwd = self.request.recv(1024)
- answer = bytearray()
- if len(res) == 1:
- if res[0][0] == "":
- #check------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- answer.append(1)
- elif res[0][0] == passEncrypt(passwd):
- answer.append(0)
- self.user_id = res[0][2]
- else:
- answer.append(1)
- else:
- answer.append(1)
- self.request.send(answer)
- if answer[0] == 0:
- self.authenticated()
- elif firstGetBytes[0] == 1 and firstGet[1:33] == "d844df439917043c911364d9046fd87c" and firstGet[33:36] == "1.0":
- #login via social network
- self.request.send(ZEROANS)
- social_network = self.request.recv(40)
- social_network_bytes = bytearray(social_network)
- self.request.send(ZEROANS)
- access_token = self.request.recv(1024)
- self.request.send(ZEROANS)
- social_network_user_id = self.request.recv(1024)
- cur = db.cursor()#if social network = 0 vk = 1 fb
- if social_network_bytes[0] == 0:
- dbgetuserid = 'SELECT user_id FROM login_data WHERE vk_user_id="' +social_network_user_id+ '";'
- elif social_network_bytes[0] == 1:
- dbgetuserid = 'SELECT user_id FROM login_data WHERE fb_user_id="' +social_network_user_id+ '";'
- else:
- #something went wrongк
- return
- #Check token, answer and authenticate
- cur.execute(dbgetuserid)
- res = cur.fetchall()
- answer = bytearray()
- #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
- #ask to check token https://api.vk.com/method/secure.checkToken?token=<user_access_token>&client_secret=<app_secret>&access_token=<access_token>
- token_valid = False #checktoken
- if social_network_bytes[0] == 0:
- doc = urllib.urlopen("https://api.vk.com/method/secure.checkToken?token="+str(access_token)+"&client_secret=JBP4X3OFkgjsAiAk7sik&access_token="+str(vk_token)+"")
- resp = doc.read()
- splitted = json.loads(resp)
- try:
- if splitted['response']['user_id'] == social_network_user_id:
- token_valid = True
- except:
- print 'Invalid token'
- elif social_network_bytes[0] == 1:
- doc = urllib.urlopen("https://graph.facebook.com/debug_token?input_token=" + str(access_token) + "&access_token=1632962563640392|fb79b9da958cceeb9252d9ea35ba1823")
- resp = doc.read()
- splitted = json.loads(resp)
- try:
- if splitted['data']['user_id'] == social_network_user_id:
- token_valid = True
- except:
- print 'Invalid token'
- if token_valid:
- if len(res) == 1:
- answer.append(0)
- self.user_id = res[0][0]
- elif len(res) == 0:#ask if possible to register
- partans = bytearray()
- partans.append(1)
- self.request.send(partans)
- ispos = self.request.recv(1)
- ipbs = bytearray(ispos)
- if ipbs[0] != 0:
- return
- self.request.send(ZEROANS)
- login = self.request.recv(30)
- login = login.lower()
- dbgetlogin = 'SELECT username FROM login_data WHERE username = "' + login + '";'
- cur.execute(dbgetlogin)
- logres = cur.fetchall()
- if len(login) < 6 or len(login) > 20 or not(re.match("^[a-z0-9_-]*$", login)):
- answer.append(1)
- self.request.send(answer)
- return
- if len(logres) > 0:
- answer.append(2)
- self.request.send(answer)
- return
- dbcheckifblocked = 'SELECT username FROM besties WHERE username = "' + login + '";'
- cur.execute(dbcheckifblocked)
- checkres = cur.fetchall()
- if len(checkres) > 0:
- answer.append(3)
- self.request.send(answer)
- return
- #createuser
- #authenticate
- if social_network_bytes[0] == 0:
- dbgenerateuser = 'INSERT INTO login_data VALUES (NULL, "' + login + '" ,1 , NULL ,"' + dtststr + '", "' + mailaddr + '" , ' + social_network_user_id + ', NULL);'
- elif social_network_bytes[0] == 1:
- dbgenerateuser = 'INSERT INTO login_data VALUES (NULL, "' + login + '" ,2 , NULL ,"' + dtststr + '", "' + mailaddr + '" , NULL, ' + social_network_user_id + ');'
- cur.execute(dbgenerateuser)
- #get user_id
- insertedid = int(cur.lastrowid)
- self.user_id = insertedid
- answer.append(0)
- else:
- answer.append(2)
- else:
- answer.append(2)
- self.request.send(answer)
- if answer[0] == 0:
- self.authenticated()
- elif firstGetBytes[0] == 2 and firstGet[1:33] == "d844df439917043c911364d9046fd87c" and firstGet[33:36] == "1.0":
- #register
- self.request.send(ZEROANS)
- login = self.request.recv(30)
- login = login.lower()
- cur = db.cursor()
- dbgetlogin = 'SELECT username FROM login_data WHERE username = "' + login + '";'
- cur.execute(dbgetlogin)
- res = cur.fetchall()
- answer = bytearray()
- if len(login) < 6 or len(login) > 20 or not(re.match("^[a-z0-9_-]*$", login)):
- answer.append(1)
- self.request.send(answer)
- return
- if len(res) > 0:
- answer.append(2)
- self.request.send(answer)
- return
- dbcheckifblocked = 'SELECT username FROM besties WHERE username = "' + login + '";'
- cur.execute(dbcheckifblocked)
- checkres = cur.fetchall()
- if len(checkres) > 0:
- answer.append(3)
- self.request.send(answer)
- return
- self.request.send(ZEROANS)
- mailaddr = self.request.recv(50)
- mailaddr = mailaddr.lower()
- dbgetmail = 'SELECT mailaddr FROM login_data WHERE mailaddr = "' + mailaddr + '";'
- cur.execute(dbgetmail)
- mailres = cur.fetchall()
- if len(mailres) > 0:
- answer.append(1)
- self.request.send(answer)
- return
- if not re.match("[^@]+@[^@]+\.[^@]+",mailaddr):
- answer.append(2)
- self.request.send(answer)
- return
- self.request.send(ZEROANS)
- passwd = self.request.recv(40)
- dtst = datetime.datetime.now()
- dtststr = dtst.strftime("%Y%m%d%H%M")
- if not re.match("^[A-Za-z0-9_-]*$",passwd) or len(passwd) < 6:
- answer.append(1)
- self.request.send(answer)
- return
- passwd = passEncryptBig(passwd, dtststr)
- print "Will register new user"
- dbgenerateuser = 'INSERT INTO login_data VALUES (NULL, "'+login+'" ,0 , "'+ passwd +'" ,"'+dtststr+'", "'+ mailaddr +'" , NULL, NULL);'
- print dbgenerateuser
- cur.execute(dbgenerateuser)
- answer.append(0)
- self.request.send(answer)
- #check username and email--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- elif firstGetBytes[0] == 3 and firstGet[1:33] == "d844df439917043c911364d9046fd87c" and firstGet[33:36] == "1.0":
- #forgot my password----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- pass
- else:
- answer = bytearray()
- answer.append(1)
- self.request.send(answer)
- return
- def send_id_list(self, from_beginning, feed_friends, last_id, feed_theme):
- id_list = []
- #CHANGE THIS METHOD TO USE ID NOT TIMESTAMP
- #REALLY
- #IT LOOKS LIKE SHIT
- #YOU NEED IT!
- #JUST CHANGE IT
- #!!!!!!!!
- #---------------------------------------------------------------------------------------------FROM HERE--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- feeddb = MySQLdb.connect(host='localhost',user='pythonserver',passwd='IveGotToBeFast030815', db='app_data')#check------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- feeddb.autocommit(1)
- curr= feeddb.cursor()
- if self.feed_friends == True:
- 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------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- else:
- 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------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- #print dbgetidsintimes
- #ckeck sort by timestamp---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- curr.execute(dbgetidsintimes)
- posts = curr.fetchall()
- for line in posts:
- id_list.append(str(line[0]))
- length = bytearray()
- #---------------------------------------------------------------------------------------------TILL HERE--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- length.append(len(id_list))
- self.request.send(length)
- counter = 0
- while counter < len(id_list):
- wannait = self.request.recv(1)
- wannabytes = bytearray(wannait)
- if wannabytes[0] == 0:
- self.request.send(id_list[counter])
- counter += 1
- def authenticated(self):
- db = MySQLdb.connect(host='localhost',user='pythonserver',passwd='IveGotToBeFast030815', db='app_data')
- db.autocommit(1)
- cur = db.cursor()
- while 1:
- #get command and doit, while authenticated
- true_request = self.request.recv(1024)
- request_bytes = bytearray(true_request)
- if not true_request or len(true_request) == 0:
- return
- #0-3 reserved
- if request_bytes[0] == 0 or request_bytes[0] == 1 or request_bytes[0] == 2 or request_bytes[0] == 3:
- #registerFirst
- answer = bytearray()
- answer.append(1)
- self.request.send(answer)
- elif request_bytes[0] == 4:
- #get post id list
- #0byte command
- #1byte beginning or not
- #2byte friends or not
- #3byte theme
- #4+byte last postid if r[1] == 0
- from_beginning = False
- feed_friends = False
- last_id = None
- if request_bytes[1] == 1:
- #from beginning
- from_beginning = True
- if request_bytes[2] == 1:
- feed_friends = True
- feed_theme = request_bytes[3]
- if not from_beginning:
- last_id = true_request[4:]
- self.send_id_list(from_beginning, feed_friends, last_id, feed_theme)
- elif request_bytes[0] == 5:
- #-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!->->->->->->->->->->->––––––>–––––>–––>––>–>––––––>–––––>–––>––>–>––––––>–––––>–––>––>–>––––––>–––––>–––>––>–>PAUSE
- #get big outer wrangle by ID
- #0byte command
- #1+byte postid
- wrnglD = int(true_request[1:])
- newcur = db.cursor()
- tosend = []
- #get this post from db
- getWrangleFirstPart = 'SELECT wrngls.quest, wrngls.likes_numb,wrngls.votes_numb,wrngls.has_image FROM wrngls WHERE wrngls.post_id = ' + str(wrnglD) + ';'
- newcur.execute(getWrangleFirstPart)
- curFirstPart = newcur.fetchall()
- if len(curFirstPart) != 1:
- print "Break 5:1:" + str(len(curFirstPart))
- return
- thisquestion = curFirstPart[0][0]
- thislikes = curFirstPart[0][1]
- thisvotes = curFirstPart[0][2]
- hasImage = False if curFirstPart[0][3]==0 else True
- getWrangleSecondPart = 'SELECT user_posts.user_id FROM user_posts WHERE user_posts.post_id = ' + str(wrnglD) + ';'
- newcur.execute(getWrangleSecondPart)
- curSecondPart = newcur.fetchall()
- if len(curSecondPart) != 1:
- print "Break 5:2:" + str(len(curSecondPart))
- return
- thisauthorid = curSecondPart[0][0]
- getWrangleThirdPart = 'SELECT login_data.username FROM login_data WHERE login_data.user_id = ' + str(thisauthorid) + ';'
- newcur.execute(getWrangleThirdPart)
- curThirdPart = newcur.fetchall()
- if len(curThirdPart) != 1:
- print "Break 5:3:" + str(len(curThirdPart))
- return
- thisauthorname = curThirdPart[0][0]
- liked = False
- voted = False
- tosend.append(thisquestion)
- tosend.append(str(thislikes))
- tosend.append(str(thisvotes))
- tosend.append(thisauthorname)
- ifliked = 'SELECT post_id FROM likes WHERE post_id = '+ str(wrnglD) + ' AND user_id = ' + str(self.user_id) + ';'
- newcur.execute(ifliked)
- fetchliked = newcur.fetchall()
- liked = False if len(fetchliked) == 0 else True
- ifvoted = 'SELECT post_id FROM votes WHERE post_id = '+ str(wrnglD) + ' AND user_id = ' + str(self.user_id) + ';'
- newcur.execute(ifvoted)
- fetchvoted = newcur.fetchall()
- voted = False if len(fetchvoted) == 0 else True
- tuplatup = liked,voted,hasImage
- fishka = bytearray()
- if tuplatup == (False,False,False):
- fishka.append(0)
- elif tuplatup == (False,False,True):
- fishka.append(1)
- elif tuplatup == (False,True,False):
- fishka.append(2)
- elif tuplatup == (False,True,True):
- fishka.append(3)
- elif tuplatup == (True,False,False):
- fishka.append(4)
- elif tuplatup == (True,False,True):
- fishka.append(5)
- elif tuplatup == (True,True,False):
- fishka.append(6)
- elif tuplatup == (True,True,True):
- fishka.append(7)
- else:
- print "Break 5:4"
- tosend.append(fishka)
- self.request.send(tosend[0])
- counter = 1
- while counter < len(tosend):
- wannam = self.request.recv(1)
- wannbyte = bytearray(wannam)
- if wannbyte[0] == 0:
- self.request.send(tosend[counter])
- else:
- break
- counter += 1
- wannam = self.request.recv(1)
- wannbyte = bytearray(wannam)
- if wannbyte[0] == 0:
- #send image if there is
- path = "profile_images/" + str(thisauthorid) + ".jpg"
- try:
- f = open(path, "rb")
- imgtosend = f.read()
- lenstringtosend = int(len(imgtosend))
- self.request.send(str(lenstringtosend))
- countrr = 0
- while countrr < len(imgtosend):
- onesender = bytearray()
- onesender.append(imgtosend[countrr])
- self.request.send(onesender)
- countrr += 1
- except:
- self.request.send(ZEROANS)
- elif request_bytes[0] == 6:
- #Image by wrangleID
- #0byte command
- #1+byte postid
- wrnlID = int(true_request[1:])
- path = "wrangle_images/" + str(wrnlID) + ".jpg"
- try:
- f = open(path, "rb")
- imgtosend = f.read()
- lenstringtosend = int(len(imgtosend))
- self.request.send(str(lenstringtosend))
- countrr = 0
- while countrr < len(imgtosend):
- onesender = bytearray()
- onesender.append(imgtosend[countrr])
- self.request.send(onesender)
- countrr += 1
- except:
- self.request.send(ZEROANS)
- elif request_bytes[0] == 7:
- #inside wrangle by wrangleID
- #0byte command
- #1+bytes wrangleID
- #IF VOTED SHOW STATISTICS----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- #IF FINISHED SHOW CORRECT----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- wrnglD = int(true_request[1:])
- dbinswrng = 'SELECT comments_numb,expirtids,wrngltype FROM wrngls WHERE post_id =' +str(wrnglD)+';'#DAATA
- cur.execute(dbinswrng)
- gotins = cur.fetchall()
- comments_numb = gotins[0][0]
- expirtids = gotins[0][1]
- wrngltype = gotins[0][2]
- dbinstheme = 'SELECT theme FROM user_posts WHERE post_id = ' +str(wrnglD)+';'
- cur.execute(dbinstheme)
- themetable = cur.fetchall()
- themewrng = int(themetable[0][0])
- dbanswrs = 'SELECT ans_numb,ans_text FROM answersft WHERE post_id = ' + str(wrnglD) + ';'
- cur.execute(dbanswrs)
- answrs = cur.fetchall()
- self.request.send(str(comments_numb))
- theywanna = self.request.recv(1)
- wannabytes = bytearray(theywanna)
- if len(wannabytes) == 0 or wannabytes[0] != 0:
- break
- themebytes = bytearray()
- themebytes.append(themewrng)
- self.request.send(themebytes)
- clidatstr = self.request.recv(15)
- clidat = datetime.datetime.strptime(clidatstr, "%Y%m%d%H%M%S")
- heretime = datetime.datetime.now()
- nowleft = heretime - datetime.timedelta(hours = 15)
- nowright = heretime + datetime.timedelta(hours = 11)
- if clidat < nowleft or clidat > nowright:
- self.request.send('1')
- break
- difference = clidat - heretime
- exprtimedate = datetime.datetime.strptime(str(expirtids), "%Y%m%d%H%M")
- cliexptida = exprtimedate + difference
- cliexptidastr = cliexptida.strftime("%Y%m%d%H%M%S")
- self.request.send(cliexptidastr)
- counter = 0
- while counter < len(answrs):
- wannat = self.request.recv(1)
- wannbyte = bytearray(wannat)
- if wannbyte[0] != 0:
- return
- tosend = bytearray()
- tosend.append(answrs[counter][0])
- stringtosend = answrs[counter][1]
- bytearraystrtosend = bytearray(stringtosend)
- tosend += bytearraystrtosend
- self.request.send(tosend)
- counter += 1
- wannat = self.request.recv(1)
- wannbyte = bytearray(wannat)
- if wannbyte[0] != 0:
- return
- self.request.send(ZEROANS)
- elif request_bytes[0] == 8:
- #like post
- #0byte command
- #1+bytes wrangleID
- wrnglD = int(true_request[1:])
- #print "LIIIIIKED!!!!!!?"
- isitliked = 'SELECT post_id FROM likes WHERE user_id = ' + str(self.user_id) + ' AND post_id = ' + str(wrnglD) + ';'
- cur.execute(isitliked)
- results = cur.fetchall()
- #print "-f-f-f--f-f-f-f-f--f-f--->" + str(len(results))
- dtliked = datetime.datetime.now()
- waaah = dtliked.strftime("%Y%m%d%H%M")
- if len(results) == 0:
- makeitliked = 'INSERT INTO likes VALUES ('+str(self.user_id) +' , '+str(wrnglD)+' , ' + waaah +');'
- cur.execute(makeitliked)
- incrlikes = 'UPDATE wrngls SET likes_numb = likes_numb + 1 WHERE post_id = ' + str(wrnglD) + ';'
- cur.execute(incrlikes)
- self.request.send(ZEROANS)
- elif request_bytes[0] == 9:
- #dislike post
- #0byte command
- #1+bytes wrangleID
- #dislike
- wrnglD = int(true_request[1:])
- isitliked = 'SELECT post_id FROM likes WHERE user_id = ' + str(self.user_id) + ' AND post_id = ' + str(wrnglD) + ';'
- cur.execute(isitliked)
- results = cur.fetchall()
- if len(results) == 1:
- makeitliked = 'DELETE FROM likes WHERE user_id = '+str(self.user_id) +' AND post_id = '+str(wrnglD) +';'
- cur.execute(makeitliked)
- incrlikes = 'UPDATE wrngls SET likes_numb = likes_numb - 1 WHERE post_id = ' + str(wrnglD) + ';'
- cur.execute(incrlikes)
- self.request.send(ZEROANS)
- elif request_bytes[0] == 10:
- #vote
- #0byte command
- #1byte number of answer
- #2+byte wrangleID
- ansnumb = int(request_bytes[1])
- wrnglD = int(true_request[2:])
- isitvoted = 'SELECT ans_numb FROM votes WHERE user_id = ' str(self.user_id) +' AND post_id = ' + str(wrnglD) + ';'
- cur.execute(isitvoted)
- results = cur.fetchall()
- dtvoted = datetime.datetime.now()
- vtd = dtvoted.strftime("%Y%m%d%H%M")
- if len(results) == 0:
- makeitvoted = 'INSERT INTO votes VALUES (' + str(self.user_id) + ' , ' + str(wrnglD) + ' , ' + str(ansnumb) + ' , ' + vtd +');'
- cur.execute(makeitvoted)
- incrvoted = 'UPDATE wrngls SET votes_numb = votes_numb + 1 WHERE post_id = ' + str(wrnglD) + ';'
- #UPDATE current answer counter--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- cur.execute(incrvoted)
- self.request.send(ZEROANS)
- elif request_bytes[0] == 11:
- #get comments id list--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- #0byte command
- #1byte from last?
- #2+bytes wrngID
- wrnglD = int(true_request[2:])
- sellast = ''
- if request_bytes[1] == 1:
- sellast = 'SELECT comment_id FROM comments WHERE post_id = '+ str(wrnglD) + ' ORDER BY comment_id DESC LIMIT 10;'
- elif request_bytes[2] == 2:
- #get comments numb from the wrngl DB table----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- else:
- self.request.send(ZEROANS)
- wtwanna = self.request.recv(20)
- sellast = 'SELECT comment_id FROM comments WHERE post_id = ' +str(wrnglD)+ ' AND comment_id < ' + str(wtwanna) + ' ORDER BY comment_id DESC LIMIT 10;'
- cur.execute(sellast)
- results = cur.fetchall()
- ans = bytearray()
- ans.append(len(results))
- self.request.send(ans)
- sndctr = 0
- while sndctr < len(results):
- twnt = self.request.recv(1)
- bttwnt = bytearray(twnt)
- if bttwnt[0] != 0:
- return
- tosend = str(results[sndctr][0])
- self.request.send(tosend)
- sndctr += 1
- elif request_bytes[0] == 12:
- #getcomment
- #0byte command
- #1+byte wrnglID
- wrnglD = int(true_request[1:])
- self.request.send(ZEROANS)
- gotcha = self.request.recv(21)
- cmmntD = int(gotcha)
- getcomment = 'SELECT user_id,comment_text FROM comments WHERE post_id = ' +str(wrnglD)+ ' AND comment_id = ' +str(cmmntD)+ ';'
- cur.execute(getcomment)
- reslts = cur.fetchall()
- if len(results) != 1:
- return
- cmntauthorID = results[0][0]
- cmntTXT = results[0][1]
- getusrname = 'SELECT login_data.username FROM login_data WHERE login_data.user_id = ' + str(cmntauthorID) + ';'
- cur.execute(getusrname)
- result = cur.fetchall()
- if len(result) != 1:
- return
- cmntauthorUN = str(result[0][0])
- self.request.send(cmntauthorUN)
- twnt = self.request.recv(1)
- twntb = bytearray(twnt)
- if twntb[0] != 0:
- return
- size = (len(cmntTXT)/1024) + 1
- sizetosend = bytearray()
- sizetosend.append(size)
- self.request.send(sizetosend)
- twnt = self.request.recv(1)
- twntb = bytearray(twnt)
- if twntb[0] != 0:
- return
- sndrctr = 0
- while sndrctr < size-1:
- self.request.send(cmntTXT[(sndrctr*1024):((sndrctr+1)*1024)])
- sndrctr += 1
- self.request.send(cmntTXT[(sndrctr*1024):])
- #no more than 254*1024 bytes
- twnt = self.request.recv(1)
- twntb = bytearray(twnt)
- if twntb[0] == 0:
- #send image if there is
- path = "profile_images/" + str(cmntauthorID) + ".jpg"#CHANGE-----------------WHAT FOR?--------------------------------------
- try:
- f = open(path, "rb")
- imgtosend = f.read()
- lenstringtosend = int(len(imgtosend))
- self.request.send(str(lenstringtosend))
- countrr = 0
- while countrr < len(imgtosend):
- onesender = bytearray()
- onesender.append(imgtosend[countrr])
- self.request.send(onesender)
- countrr += 1
- except:
- self.request.send(ZEROANS)
- elif request_bytes[0] == 13:
- #new comment
- #0byte command
- #1+byes wrnglID
- wrnglD = int(true_request[1:])
- self.request.send(ZEROANS)
- sizeget = self.request.recv(1)
- sizegetb = bytearray(sizeget)
- cmnttxt = ''
- gtctr = 0
- while gtctr < sizegetb[0]:
- gotstr = self.request.recv(1024)
- cmnttxt += gotstr
- gtctr += 1
- dtcommented = datetime.datetime.now()
- waaah = dtcommented.strftime("%Y%m%d%H%M")
- 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) + ');'
- cur.execute(putcntindb)
- putcntindb = 'UPDATE wrngls SET comments_numb = comments_numb + 1 WHERE post_id = ' + str(wrnglD) + ';'
- cur.execute(putcntindb)
- #get @ ans #'s------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- elif request_bytes[0] == 14:
- #delete comment----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- #0byte
- #1+bytes wrnglID
- wrnglD = int(true_request[1:])
- self.request.send(ZEROANS)
- cmntid = self.request.recv(1024)
- cmntID = int(cmntid)
- dltcmt = 'DELETE FROM comments WHERE comment_id = ' + str(cmntID) + ' AND post_id = ' + str(wrnglD) + ';'
- #check return on server-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- cur.execute(dltcmt)
- dltcmt = 'UPDATE wrngls SET comments_numb = comments_numb - 1 WHERE post_id = ' + str(wrnglD) + ';'
- cur.execute(dltcmt)
- elif request_bytes[0] == 15:
- #create post
- #0byte
- #------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- #create new publication
- theme = true_request[1]
- self.request.send(ZEROANS)
- #print "-2--->---->----><----<----<----"
- wrangletext = self.request.recv(1024)
- self.request.send(ZEROANS)
- #print "-3--->---->----><----<----<----"
- datesstring = self.request.recv(26)
- expiration_date_string = datesstring[0:12]#yyMMddHHmm
- user_device_date = datesstring[12:26]#yyMMddHHmmss
- #print "-4--->---->----><----<----<----"
- clidat = datetime.datetime.strptime(user_device_date, "%Y%m%d%H%M%S")
- heretime = datetime.datetime.now()
- nowleft = heretime - datetime.timedelta(hours = 15)
- #print "-5--->---->----><----<----<----"
- nowright = heretime + datetime.timedelta(hours = 11)
- if clidat < nowleft or clidat > nowright:
- self.request.send('1')
- break
- difference = clidat - heretime
- #print "-6--->---->----><----<----<----"
- cliexp = datetime.datetime.strptime(expiration_date_string, "%Y%m%d%H%M")
- expiration_time = cliexp - difference
- expiration_dati_string_server = expiration_time.strftime("%Y%m%d%H%M")
- self.request.send(ZEROANS)
- #print "-7--->---->----><----<----<----"
- getlen = self.request.recv(1)
- getlenbytes = bytearray(getlen)
- #print "-8--->---->----><----<----<----"
- leng = int(getlenbytes[0])
- cntr = 0
- answers = []
- #print "-9--->---->----><----<----<----"
- while cntr < leng:
- self.request.send(ZEROANS)
- answers.append(self.request.recv(1024))
- cntr += 1#dafuq?------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- imglenstr = self.request.recv(1024)
- #print "-10--->---->----><----<----<----"
- self.request.send(ZEROANS)
- #print "-11--->---->----><----<----<----"
- #print imglenstr
- imglen = int(imglenstr)
- has_image = True
- if imglen < 2:
- has_image = False
- imgcounter = 0
- imgbytes = bytearray()
- while imgcounter < imglen:
- got = self.request.recv(1)
- gotbytes = bytearray(got)
- imgbytes.append(gotbytes[0])
- imgcounter += 1
- image = Image.open(io.BytesIO(imgbytes))#CHECK IMAGE RESOLUTION--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- #HERE
- #print image.size
- if image.size != (640,640):
- cantdoit = bytearray()
- cantdoit.append(1)
- self.request.send(cantdoit)
- else:
- #NEED YOU
- self.request.send(ZEROANS)
- attachment = self.request.recv(1024)
- has_attach = True
- byteatt = bytearray(attachment)
- if len(byteatt) == 1 and byteatt[0] == 0:
- #noattachment
- has_attach = False
- first_insert = 'INSERT INTO user_posts VALUES (NULL, ' + str(self.user_id) +', ' + heretime.strftime("%Y%m%d%H%M") + ', ' + str(theme) +');'
- cur.execute(first_insert)
- insertedid = int(cur.lastrowid)
- second_insert = 'INSERT INTO wrngls VALUES (' + str(insertedid) + ', "' + wrangletext + '" , 0 , 0 , ' + ('1' if has_image else '0') + ' , 0 , '+expiration_dati_string_server+',0);'
- cur.execute(second_insert)
- ansctr = 0
- while ansctr < len(answers):
- third_insert = 'INSERT INTO answersft VALUES ('+str(insertedid)+','+str(ansctr)+', "'+answers[ansctr]+'");'
- cur.execute(third_insert)
- ansctr += 1
- savepath = 'wrangle_images/' +str(insertedid)+ '.jpg'
- image.save(savepath)
- #add attachment------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- elif request_bytes[0] == 16:
- #get peoples ids list
- #0byte command
- #1byte action
- #2byte from last
- #who are subscribed or subscribe liked smth
- #GET REAL NUMBER OF ELEMS HERE AND COMMENTS----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- elif request_bytes[0] == 17:
- #get mini profile decription
- #0byte command
- #1+byte user_id
- pass
- elif request_bytes[0] == 18:
- #profile get
- #0byte command
- pass
- elif request_bytes[0] == 19:
- #subscribe
- #0byte
- pass
- elif request_bytes[0] == 20:
- #unsubscribe
- #0byte command
- pass
- elif request_bytes[0] == 21:
- #number of posts
- #0byte command
- pass
- elif request_bytes[0] == 22:
- #postid list
- #0byte command
- pass
- elif request_bytes[0] == 23:
- #minimal post decription
- #0byte command
- pass
- elif request_bytes[0] == 24:
- #delete post
- #0byte
- pass
- elif request_bytes[0] == 25:
- #select correct answer
- #0byte command
- pass
- elif request_bytes[0] == 26:
- #change nam
- #0byte command
- pass
- elif request_bytes[0] == 27:
- #upload profile image
- #0byte command
- pass
- elif request_bytes[0] == 28:
- #delete profile image
- #0byte command
- pass
- elif request_bytes[0] == 29:
- #change description
- #0byte command
- pass
- elif request_bytes[0] == 30:
- #sharing save???------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- #0byte command
- pass
- elif request_bytes[0] == 31:
- #search
- #0byte command
- pass
- else:
- break
- class ThreadedTCPServer(SocketServer.ThreadingMixIn, SocketServer.TCPServer):
- pass
- if __name__ == "__main__":
- doc = urllib.urlopen("https://oauth.vk.com/access_token?client_id=5069874&client_secret=JBP4X3OFkgjsAiAk7sik&v=5.40&grant_type=client_credentials")
- resp = doc.read()
- splitted = json.loads(resp)
- vk_token = splitted['access_token']
- #same for FB
- HOST, PORT = '', 9196
- server = ThreadedTCPServer((HOST, PORT), ThreadedTCPRequestHandler)
- ip, port = server.server_address
- server_thread = threading.Thread(target=server.serve_forever)
- # Exit the server thread when the main thread terminates
- server_thread.daemon = True
- server_thread.start()
- print "Server loop running in thread:", server_thread.name
- counter = 60*2
- while counter > 0:
- time.sleep(1)
- counter = counter - 1
- print counter, "seconds left"
- server.shutdown()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement