def group_list(token): response = '{"group_list":[]}' groups = "" openseed = mysql.connector.connect(host="localhost", user=settings["dbuser"], password=settings["dbpassword"], database="openseed") mycursor = openseed.cursor() owner = json.loads(Account.user_from_id(token))["user"] find = "SELECT title,allowed,denied FROM `groups` WHERE `owner` = %s OR `allowed` LIKE % %s %" mycursor.execute(find) results = mycursor.fetchall() for group in results: if groups == "": groups += '{"group":"title":"' + group[0] + '","allowed":[' + group[ 1] + '],"denied":[' + group[2] + ']}' else: groups += ',{"group":"title":"' + group[ 0] + '","allowed":[' + group[1] + '],"denied":[' + group[ 2] + ']}' response = '{"group_list":[' + groups + ']}' openseed.commit() mycursor.close() openseed.close() return response
def like_post(token, author, post, percent=30): w.unlock(fix_thy_self, user_passphrase=settings["passphrase"]) print("voting on ", post) poster = token if token != who: poster = json.loads(Account.user_from_id(token))["hive"] print("as ", poster) print("at ", percent) already_voted = -1 # Gets votes on the post result = h.get_active_votes(author, post) if result and poster != None and poster != "": # We run through the votes to make sure we haven't already voted on this post for vote in result: if vote['voter'] == poster: already_voted = 1 break else: already_voted = 0 if already_voted == 0: identifier = ('@' + author + '/' + post) h.commit.vote(identifier, float(percent), poster) return ('{"liked_hive_post":{"response":"voted","weight":' + str(percent) + ',"post":"' + post + '"}}') else: return ( '{"liked_hive_post":{"response":"already voted","weight":"error","post":"' + post + '"}}') return ( '{"liked_hive_post":{"response":"error","weight":"error","post":"error"}}' )
def send_chat(userid,chatroom,data,appPub): response = '{"chat_response":{"speaker":"server","message":"denied"}}' roomInfo = find_chatroom(chatroom) theRoom = roomInfo[0] if len(theRoom) > 3: username = json.loads(Account.user_from_id(userid))["user"] if username and username != None and username != "none": response = '{"chat_response":{"speaker":"server","message":"No data"}}' openseed = mysql.connector.connect( host = "localhost", user = settings["dbuser"], password = settings["dbpassword"], database = "openseed" ) mysearch = openseed.cursor() if len(data) > 0: chat = "INSERT INTO chat (room,title,attendees,record,speaker,appPub) VALUES (%s,%s,%s,%s,%s,%s)" val1 = (theRoom,roomInfo[1],roomInfo[2],data,username,appPub) mysearch.execute(chat,val1) openseed.commit() mysearch.close() openseed.close() response = '{"chat_response":{"speaker":"'+username+'","room":"'+theRoom+'","message":"received"}}' else: response = '{"chat_response":{"speaker":"server","message":"couldn\'t determine speaker"}}' else: response = '{"chat_response":{"speaker":"server","message":"no room found at '+chatroom+'"}}' return response
def request_status(token, account): status = '{"request":"denied"}' jsoned = status openseed = mysql.connector.connect(host="localhost", user="******", password="******", database="openseed") mysearch = openseed.cursor() username = json.loads(Account.user_from_id(token))["user"] search = "SELECT * FROM connections WHERE userid1 = %s AND userid2 = %s" val1 = (username, account) val2 = (account, username) mysearch.execute(search, val1) result1 = mysearch.fetchall() mysearch.execute(search, val2) result2 = mysearch.fetchall() if len(result1) == 1: status = result1[0] elif len(result2) == 1: status = result2[0] thestate = "pending" if status[4] == 0: thestate = "denied" if status[4] == 1: thestate = "pending" if status[4] == 2: thestate = "accepted" jsoned = '{"request":"' + thestate + '","account":"' + account + '"}' mysearch.close() openseed.close() return '{"request_status":' + jsoned + '}'
def get_chat(token,chatroom,last): chat = '{"chat":{"speaker":"server","room":"'+chatroom+'","message":"none","index":"-1"}}' jsoned = chat room = "" index1 = 0 status1 = "" username = json.loads(Account.user_from_id(token))["user"] openseed = mysql.connector.connect( host = "localhost", user = settings["dbuser"], password = settings["dbpassword"], database = "openseed" ) mysearch = openseed.cursor() search = "SELECT Id,record,attendees,date,speaker,appPub FROM chat WHERE room = %s AND Id > %s ORDER BY Id ASC" val1 = (chatroom,str(last)) mysearch.execute(search,val1) result1 = mysearch.fetchall() if len(result1) != 0: status1 = result1[0][1] index1 = result1[0][0] jsoned = '{"chat":{"speaker":"'+str(result1[0][4])+'","room":"'+chatroom+'","message":"'+status1.decode()+'","index":"'+str(index1)+'","appPub":"'+str(result1[0][5])+'","date":"'+str(result1[0][3])+'"}}' mysearch.close() openseed.close() if status1 != None: chat = jsoned else: chat = '{chat:{"speaker":"server","room":"'+chatroom+'","message":"none","index":"-1"}}' return chat
def get_chat_history(userid,room,count,last): history = [] response = '{"chat_history":[]}' username = json.loads(Account.user_from_id(userid))["user"] if room: jsoned = "" openseed = mysql.connector.connect( host = "localhost", user = settings["dbuser"], password = settings["dbpassword"], database = "openseed" ) mysearch = openseed.cursor() search = "SELECT Id,record,attendees,date,speaker FROM chat WHERE room = %s AND Id > %s ORDER BY Id DESC LIMIT "+count val1 = (room,str(last)) mysearch.execute(search,val1) result1 = mysearch.fetchall() for message in result1: status1 = message[1] index1 = message[0] if jsoned == "": jsoned = '{"speaker":"'+str(message[4])+'","room":"'+room+'","message":"'+status1.decode()+'","index":"'+str(index1)+'","date":"'+str(message[3])+'"}' else: jsoned = '{"speaker":"'+str(message[4])+'","room":"'+room+'","message":"'+status1.decode()+'","index":"'+str(index1)+'","date":"'+str(message[3])+'"},'+jsoned response = '{"chat_history":['+jsoned+"]}" return response
def get_conversations(token): chatlist = "" convolist = [] openseed = mysql.connector.connect( host = "localhost", user = settings["dbuser"], password = settings["dbpassword"], database = "openseed" ) username = json.loads(Account.user_from_id(token))["user"] mysearch = openseed.cursor() chat = "SELECT room,attendees,title,id FROM chat WHERE attendees LIKE %s ORDER BY Id DESC" val1 = ("%"+username+"%",) mysearch.execute(chat,val1) chat_result = mysearch.fetchall() rooms = "SELECT room,attendees,title,count FROM chatrooms WHERE attendees LIKE %s ORDER BY count DESC" val2 = ("%"+username+"%",) mysearch.execute(rooms,val2) room_result = mysearch.fetchall() for c in chat_result: if convolist.count != 0: if str(c[0]) not in convolist: convolist.append(str(c[0])) if chatlist != "": chatlist = chatlist+',{"room":"'+str(c[0])+'","attendees":"'+str(c[1])+'","title":"'+str(c[2])+'","index":'+str(c[3])+'}' else: chatlist = '{"room":"'+str(c[0])+'","attendees":"'+str(c[1])+'","title":"'+str(c[2])+'","index":'+str(c[3])+'}' else: convolist.append(str(c[0])) if chatlist != "": chatlist = chatlist+',{"room":"'+str(c[0])+'","attendees":"'+str(c[1])+'","title":"'+str(c[2])+'","index":'+str(c[3])+'}' else: chatlist = '{"room":"'+str(c[0])+'","attendees":"'+str(c[1])+'","title":"'+str(c[2])+'","index":'+str(c[3])+'}' for r in room_result: if convolist.count != 0: if str(r[0]) not in convolist: convolist.append(str(r[0])) if chatlist != "": chatlist = chatlist+',{"room":"'+str(r[0])+'","attendees":"'+str(r[1])+'","title":"'+str(r[2])+'","index":'+str(r[3])+'}' else: chatlist = '{"room":"'+str(r[0])+'","attendees":"'+str(r[1])+'","title":"'+str(r[2])+'","index":'+str(r[3])+'}' else: convolist.append(str(r[0])) if chatlist != "": chatlist = chatlist+',{"room":"'+str(r[0])+'","attendees":"'+str(r[1])+'","title":"'+str(r[2])+'","index":'+str(r[3])+'}' else: chatlist = '{"room":"'+str(r[0])+'","attendees":"'+str(r[1])+'","title":"'+str(r[2])+'","index":'+str(r[3])+'}' mysearch.close() openseed.close() return '{"conversations":['+chatlist+']}'
def post_comment(token, author, post, body): w.unlock(fix_thy_self, user_passphrase=settings["passphrase"]) response = '{"hive_comment":{"response":"error","post":"error"}}' print("commenting on ", post) poster = token if token != who: poster = json.loads(Account.user_from_id(token))["hive"] if poster == None or poster == "": poster = who body += "\n " + json.loads( Account.user_from_id(token))["user"] + " on ODESI" reply_identifier = '/'.join([author, post]) print(reply_identifier) h.commit.post(title='', body=body, author=poster, permlink='', reply_identifier=reply_identifier) response = '{"hive_comment":{"response":"added","post":"' + post + '"}}' return response
def get_requests(token, count): requests = "" openseed = mysql.connector.connect(host="localhost", user=settings["dbuser"], password=settings["dbpassword"], database="openseed") username = json.loads(Account.user_from_id(token))["user"] mysearch = openseed.cursor() search = "SELECT * FROM connections WHERE userid2 = %s AND response = 1 LIMIT " + str( count) val = (username, ) mysearch.execute(search, val) result = mysearch.fetchall() if len(result) > 0: for a in result: theresponse = "pending" thetype = "chat" if a[4] == 0: theresponse = "denied" if a[4] == 1: theresponse = "pending" if a[4] == 2: theresponse = "accepted" if a[3] == 1: thetype = "chat" if a[3] == 2: thetype = "group" if requests == "": requests = '{"request":"' + str(a[0]) + '","from":"' + str( a[1] ) + '","type":"' + thetype + '","response":"' + theresponse + '"}' else: requests = requests + ',{"request":"' + str( a[0] ) + '","from":"' + str( a[1] ) + '","type":"' + thetype + '","response":"' + theresponse + '"}' else: requests = '{"request":"none"}' mysearch.close() openseed.close() return '{"requests":[' + str(requests) + ']}'
def delete_group(token, title, appPub): response = '{deleted_group:{"error":"not the owner"}}' openseed = mysql.connector.connect(host="localhost", user=settings["dbuser"], password=settings["dbpassword"], database="openseed") username = json.loads(Account.user_from_id(token))["user"] if Account.check_db(title, "groups") != 1: mycursor = openseed.cursor() sql = "DELETE FROM `groups` WHERE title = %s AND owner = %s" val = (title, username) openseed.commit() mycursor.close() openseed.close() return response
def get_key(thetype, register, room): result = "" #cleanroom = room.split("[")[1].split("]")[0] #wharoom = cleanroom.split(",")[0]+', '+cleanroom.split(",")[1] #reverseroom = cleanroom.split(",")[1]+', '+cleanroom.split(",")[0] reg = "" code = "" openseed = mysql.connector.connect(host="localhost", user=settings["dbuser"], password=settings["dbpassword"], database="openseed") mysearch = openseed.cursor() check = "SELECT registered,code,validusers FROM onetime WHERE room = %s AND type = %s" val1 = (room, thetype) #val2 = (reverseroom,thetype) mysearch.execute(check, val1) result1 = mysearch.fetchall() #mysearch.execute(check,val2) #result2 = mysearch.fetchall() if len(result1) == 1: result = result1 #elif len(result2) == 1: # result = result2 else: result = 0 if result != 0: validusers = result[0][2] vuser = json.loads(Account.user_from_id(register))["user"] if validusers.find(vuser) != -1: if len(result1) == 1: reg = result[0][0] if reg != register: code = '{"room":"' + room + '","key":"' + result[0][1] + '"}' else: code = '{"room":"' + room + '","key":"' + result[0][1] + '"}' else: code = '{"room":"denied","key":"denied"}' else: code = '{"room":"denied","key":"denied"}' openseed.commit() mysearch.close() openseed.close() return '{"lock":' + str(code) + '}'
def import_profile(token, hiveaccount): openseed = json.loads( "{" + Account.get_profile(json.loads(Account.user_from_id(token))["user"]) + '}') od1 = openseed["profile"]["openseed"] od2 = openseed["profile"]["extended"] banner = "" profile_image = "" name = od1["name"] if "banner" in od2: banner = od2["banner"] if "profile_img" in od2: profile_image = od2["profile_img"] about = od2["about"] email = od1["email"] phone = od1["phone"] profession = od1["profession"] company = od1["company"] hive = json.loads(get_account(hiveaccount)) pfile = "" if "profile" in hive: pfile = hive["profile"] if "app" in hive: pfile = hive["app"]["profile"] if "name" in pfile: name = pfile["name"] if "about" in pfile: about = pfile["about"] if "profile_image" in pfile: profile_image = pfile["profile_image"] if "cover_image" in pfile: banner = pfile["cover_image"] data1 = '{"name":"' + name + '","email":"' + email + '","phone":"' + phone + '","profession":"' + profession + '","company":"' + company + '"}' data2 = '{"about":"' + about + '","profile_img":"' + profile_image + '","banner":"' + banner + '"}' Account.set_profile(token, data1, data2, "", "", "", 1) return
def create_group(token, title, allowed, denied, appPub): openseed = mysql.connector.connect(host="localhost", user=settings["dbuser"], password=settings["dbpassword"], database="openseed") username = json.loads(Account.user_from_id(token))["user"] if Account.check_db(title, "groups") != 1: mycursor = openseed.cursor() findlast = "SELECT token FROM `user_tokens` WHERE 1 LIMIT 1" mycursor.execute(findlast) lasttoken = mycursor.fetchall() newid = "" if len(lasttoken) <= 0: newid = Seed.crypt_key() else: newid = lasttoken[0][0] uid = Seed.generate_usertoken(newid) sql = "INSERT INTO `groups` (`id`,`title`,`owner`,`allowed`,`denied`,`permissions`) VALUES (%s,%s,%s,%s,%s,%s)" val = (str(uid), str(title), str(username), str(allowed), str(denied), str('{"admin":"' + str(username) + '"}')) mycursor.execute(sql, val) utokens = "INSERT INTO `user_tokens` (`token`,`username`) VALUES (%s,%s)" utoken_vals = (str(uid), str(title)) mycursor.execute(utokens, utoken_vals) openseed.commit() mycursor.close() openseed.close() email = "*****@*****.**" pfile = create_default_profile(uid, name, email) for a in allowed: Connections.connection_request(uid, a, 2, "request", appPub) for d in denied: Connections.connection_request(uid, d, 2, "denied", appPub) return '{"group":{"token":"' + uid + '","title":"' + name + '","allowed":[' + allowed + '],"denied":[' + denied + ']}}' else: return '{"group":{"title":"exists"}}'
def find_attendees(token,userlist,create,appPub): room = "" title = "" found = "" username = json.loads(Account.user_from_id(token))["user"] openseed = mysql.connector.connect( host = "localhost", user = settings["dbuser"], password = settings["dbpassword"], database = "openseed" ) mysearch = openseed.cursor() search = "SELECT room,title,attendees FROM chatrooms WHERE attendees LIKE %s" vals = ("%"+username+"%",) mysearch.execute(search,vals) result = mysearch.fetchall() mysearch.close() openseed.close() for room in result: members = room[2].split(",") checkfor = userlist.split(",") for m in checkfor: if m in members: members.remove(m) if len(members) == 0: found = room break if found == "": if int(create) == 1 and len(userlist.split(",")) == 2: return create_chatroom(token,"chat",userlist,appPub) else: key = Seed.get_room_key(token,found[0]) if key != "": output = '{"type":"server","room":"'+found[0]+'","title":"'+found[1]+'","key":"'+key+'"}' else: output = '{"type":"server","room":"'+found[0]+'","title":"'+found[1]+'","key":"error"}' return output
def get_room_key(token, room): reg = "" code = "" openseed = mysql.connector.connect(host="localhost", user=settings["dbuser"], password=settings["dbpassword"], database="openseed") mysearch = openseed.cursor() username = json.loads(Account.user_from_id(token))["user"] check = "SELECT code FROM onetime WHERE validusers LIKE %s AND room = %s" val1 = ("%" + username + "%", room) mysearch.execute(check, val1) result = mysearch.fetchall() if len(result) == 1: code = result[0][0] openseed.commit() mysearch.close() openseed.close() return str(code)
def update_key(thetype, register, validusers): reg = "" code = "" openseed = mysql.connector.connect(host="localhost", user=settings["dbuser"], password=settings["dbpassword"], database="openseed") mysearch = openseed.cursor() check = "SELECT registered,code FROM onetime WHERE validusers = %s AND type = %s" val1 = (validusers, thetype) val2 = (validusers.split(",")[1] + "," + validusers.split(",")[0], thetype) mysearch.execute(check, val1) result1 = mysearch.fetchall() mysearch.execute(check, val2) result2 = mysearch.fetchall() if validusers.find(Account.user_from_id(register)) != -1: if len(result1) == 1: reg = result1[0][0].decode() if reg != register: code = result1[0][1].decode() else: code = result1[0][1].decode() if len(result2) == 1: reg = result2[0][0].decode() if reg != register: code = result2[0][1].decode() else: code = result2[0][1].decode() else: code = "denied" openseed.commit() mysearch.close() openseed.close() return str(code)
def del_user_from_group(token, title, user): response = '{"group_del":{"user":"******"}}' openseed = mysql.connector.connect(host="localhost", user=settings["dbuser"], password=settings["dbpassword"], database="openseed") if Account.check_db(title, "groups") == 1: mycursor = openseed.cursor() owner = json.loads(Account.user_from_id(token))["user"] find = "SELECT allowed,denied FROM `groups` WHERE `title` = %s AND `owner` = %s" vals = ( title, owner, ) mycursor.execute(find, vals) results = mycursor.fetchall()[0] allowed = results[0] denied = results[1] newallowed = [] for a in denied.split(","): if user == a: response = '{"group_del":{"user":"******"}}' break for d in allowed.split(","): if user != d: newallowed.append(d) adding = "UPDATE groups SET allowed = %s, denied = %s WHERE owner = %s AND title = %s" vals = (newallowed.join(","), denied + "," + user, owner, title) mycursour.execute(adding, vals) response = '{"group_del":{"user":"******"}}' openseed.commit() mycursor.close() openseed.close() return response
def create_chatroom(creator,title,userlist,appPub): openseed = mysql.connector.connect( host = "localhost", user = settings["dbuser"], password = settings["dbpassword"], database = "openseed" ) room = Seed.generate_publicid(userlist+creator+title) chatcreator = openseed.cursor() newchat = "INSERT INTO chat (room,title,attendees,record,speaker,appPub) VALUES (%s,%s,%s,%s,'server',%s)" vals = (room,title,userlist,'new',appPub) chatcreator.execute(newchat,vals) newroom = "INSERT INTO chatrooms (creator,title,attendees,room) VALUES (%s,%s,%s,%s)" room_vals = (creator,title,userlist,room) chatcreator.execute(newroom,room_vals) openseed.commit() chatcreator.close() openseed.close() username= json.loads(Account.user_from_id(creator))["user"] newkey = Seed.store_onetime(1,username,userlist,room) return '{"type":"server","room":"'+room+'","title":"'+title+'","key":"'+newkey+'"}'
def check_chat(userid,room): openseed = mysql.connector.connect( host = "localhost", user = settings["dbuser"], password = settings["dbpassword"], database = "openseed" ) username = json.loads(Account.user_from_id(userid))["user"] mysearch = openseed.cursor() check = "SELECT Id FROM chat WHERE room = %s" val1 = (room.split("[")[1].split("]")[0],) val2 = (room.split("[")[1].split("]")[0],) mysearch.execute(check,val1) result1 = len(mysearch.fetchall()) mysearch.execute(check,val2) result2 = len(mysearch.fetchall()) mysearch.close() openseed.close() # Below are the 3 states that any chat can be in. # 0 = No key No chat # 1 = Key exists but not chat has started and registration is open # 2 = Key exists and Chat has started but registration is open # 3 = Chat exists and has started but registration is closed if result1 > 0: if check_onetime(username,room) == 1: return 2 else: return 3 elif result2 > 0: if check_onetime(username,room) == 1: return 2 else: return 3 else: if check_onetime(username,room) == 1: return 1 else: return 0
def connection_request(token, requestee, thetype, response, appPub): output = '{"request":"error"}' theresponse = 1 openseed = mysql.connector.connect(host="localhost", user=settings["dbuser"], password=settings["dbpassword"], database="openseed") if response == "request": theresponse = 1 if response == "accept": theresponse = 2 if response == "denied": theresponse = 0 username = json.loads(Account.user_from_id(token))["user"] if username != "none": request_search = openseed.cursor() search = "SELECT * FROM `connections` WHERE userid1 LIKE %s AND userid2 LIKE %s" vals_1 = (username, requestee) vals_2 = (requestee, username) request_search.execute(search, vals_1) exists_1 = request_search.fetchall() request_search.execute(search, vals_2) exists_2 = request_search.fetchall() # Checks to see if the request is already accepted if len(exists_1) == 1 and exists_1[0][4] == 2 and theresponse != 0: output = '{"request":"accepted","to":"' + requestee + '","from":"' + username + '"}' elif len(exists_2) == 1 and exists_2[0][4] == 2 and theresponse != 0: output = '{"request":"accepted","to":"' + requestee + '","from":"' + username + '"}' # Checks to see if the request is already denied elif len(exists_1) == 1 and exists_1[0][4] == 0: output = '{"request":"denied","to":"' + requestee + '","from":"' + username + '"}' elif len(exists_2) == 1 and exists_2[0][4] == 0: output = '{"request":"denied","to":"' + requestee + '","from":"' + username + '"}' # Checks to see if there is no request either direction elif len(exists_1) != 1 and len(exists_2) != 1 and theresponse != 0: insert = "INSERT INTO `connections` (`userid1`,`userid2`,`response`) VALUES (%s,%s,%s)" values = (username, requestee, theresponse) request_search.execute(insert, values) openseed.commit() output = '{"request":"sent","to":"' + requestee + '","from":"' + username + '"}' # checks to see if the second user has sent a request to the first and auto connects users. elif len(exists_2) == 1 and int(theresponse) == 1 and theresponse != 0: update = "UPDATE `connections` SET `response` = %s WHERE userid1 LIKE %s AND userid2 LIKE %s" values = ("2", requestee, username) request_search.execute(update, values) openseed.commit() chatroom = Chat.find_attendees(token, requestee + "," + username, 1, appPub) output = '{"request":"accepted","room":' + chatroom + '}' # disallows user from create a second request or updating their own request to others. elif len(exists_1) == 1 and int(theresponse) != 0: output = '{"request":"exists","to":"' + requestee + '","from":"' + username + '"}' # Allow users to disconnect from others or cancel request. elif len(exists_1) == 1 and int(theresponse) == 0: update = "UPDATE `connections` SET `response` = %s WHERE userid1 LIKE %s AND userid2 LIKE %s" values = ("0", username, requestee) request_search.execute(update, values) openseed.commit() output = '{"request":"denied","to":"' + requestee + '","from":"' + username + '"}' elif len(exists_2) == 1 and int(theresponse) == 0: update = "UPDATE `connections` SET `response` = %s WHERE userid1 LIKE %s AND userid2 LIKE %s" values = ("0", requestee, username) request_search.execute(update, values) openseed.commit() output = '{"request":"denied","to":"' + requestee + '","from":"' + username + '"}' request_search.close() openseed.close() else: output = '{"request":"error","log":"bad token"}' return output