async def update_p2p_online(obj): global objs myclient = pymongo.MongoClient('mongodb://localhost:27017/') mydb = myclient['social_network'] websocket = mydb["websocket"] friends = mydb["friends"] users = mydb["users"] user_name = websocket.find_one({"websocket": str(obj)})["username"] my_id = str(users.find_one({"u_name": user_name})["_id"]) friend = [] q1 = {"friend_id": my_id, "status": 1} for i in friends.find(q1): friend.append( users.find_one({"_id": object_id(i["user_id"])})["u_name"]) q2 = {"user_id": my_id, "status": 1} for i in friends.find(q2): friend.append( users.find_one({"_id": object_id(i["friend_id"])})["u_name"]) q = {"username": {"$in": friend}} select = {"websocket": 1, "username": 1} for u in websocket.find(q, select): #print("sending_online status to ",u["websocket"]) data = {"type": "p2p_online", "username": user_name} try: await objs[u["websocket"]].send(json.dumps(data)) except: pass
async def rules(obj): global objs myclient = pymongo.MongoClient('mongodb://localhost:27017/') mydb = myclient['social_network'] websocket = mydb["websocket"] friends = mydb["friends"] users = mydb["users"] rules = mydb["rules"] user_name = websocket.find_one({"websocket": str(obj)})["username"] my_id = str(users.find_one({"u_name": user_name})["_id"]) q = {"user_id": my_id} rull = [] for i in rules.find(q): i["_id"] = str(i["_id"]) rull.append(i) print("#rules ", rull) friend = [] #ind({"$or":[{"sender_id":my_id,"receiver_id" q1 = { "$or": [{ "friend_id": my_id, "status": 1 }, { "friend_id": my_id, "status": 2 }] } for i in friends.find(q1): #check is that friend block by me if (friends.find_one({ "user_id": my_id, "status": 2, "friend_id": i["user_id"] }) != None): continue friend.append( users.find_one({"_id": object_id(i["user_id"])})["u_name"]) q2 = {"user_id": my_id, "status": 1} for i in friends.find(q2): uname = users.find_one({"_id": object_id(i["friend_id"])})["u_name"] if (uname not in friend): friend.append(uname) data = {"type": "rules", "rules": rull, "friends": friend} data = json.dumps(data) await obj.send(data)
async def p2p(obj): global objs myclient = pymongo.MongoClient('mongodb://localhost:27017/') mydb = myclient['social_network'] websocket = mydb["websocket"] friends = mydb["friends"] users = mydb["users"] user_name = websocket.find_one({"websocket": str(obj)})["username"] my_id = str(users.find_one({"u_name": user_name})["_id"]) friend = [] #ind({"$or":[{"sender_id":my_id,"receiver_id" q1 = { "$or": [{ "friend_id": my_id, "status": 1 }, { "friend_id": my_id, "status": 2 }] } print("#0q ", q1) for i in friends.find(q1): print("#0 ", i) #check is that friend block by me if (friends.find_one({ "user_id": my_id, "status": 2, "friend_id": i["user_id"] }) != None): continue friend.append( users.find_one({"_id": object_id(i["user_id"])})["u_name"]) q2 = {"user_id": my_id, "status": 1} for i in friends.find(q2): print("#2 ", i) uname = users.find_one({"_id": object_id(i["friend_id"])})["u_name"] if (uname not in friend): friend.append() q = {"username": {"$in": friend}} select = {"username": 1} onlines = [] for u in websocket.find(q, select): onlines.append(u["username"]) data = {"type": "p2p_users_meta", "friends": friend, "onlines": onlines} data = json.dumps(data) await obj.send(data)
def friend_suggestions(request): my_id=is_valid_request(request) if(my_id==0): data={} data["_id"]=-1 data=json.dumps(data) return HttpResponse(data, content_type='application/json') myclient = pymongo.MongoClient('mongodb://localhost:27017/') mydb = myclient['social_network'] users=mydb["users"] session = mydb["session"] friends=mydb["friends"] #friend made by me Friends=[] Friends.append(object_id(my_id)) q2={"user_id":my_id} #from m q3={"_id":1,"u_name":1,"f_name":1,"l_name":1,"pic_url":1} select={"_id":1,"friend_id":1} for i in friends.find(q2,select): Friends.append(object_id(i["friend_id"])) #friend made me a friend q1={"friend_id":my_id} #from m select={"_id":1,"user_id":1} for i in friends.find(q1,select): Friends.append(object_id(i["user_id"])) data=[] #people who block me add in feature dont show them in result who block me so i cant see them for i in users.find({"_id":{"$nin":Friends}},{"pass_d":0}): i["_id"]=str(i["_id"]) data.append(i) return HttpResponse(json.dumps(data), content_type="application/json")
async def add_rule(obj, data): # {"type":"add_rule","rule_name":"rule","for_":"null","rule_type":"4","rule":".*gm$"} myclient = pymongo.MongoClient('mongodb://localhost:27017/') mydb = myclient['social_network'] websocket = mydb["websocket"] rules = mydb["rules"] users = mydb["users"] my_user_name = websocket.find_one({"websocket": str(obj)})["username"] my_id = str(users.find_one({"u_name": my_user_name}, {"_id": 1})["_id"]) #my id is object id of rule definer and for is username of rule define for q = { "user_id": my_id, "rule_name": data["rule_name"], "for_": data["for_"], "rule_type": data["rule_type"], "rule": data["rule"] } if (data["id"] != ""): rules.update_one({"_id": object_id(data["id"])}, {"$set": q}) else: rules.insert(q)
def menu(request): myclient = pymongo.MongoClient('mongodb://localhost:27017/') mydb = myclient['social_network'] users=mydb["users"] session = mydb["session"] post=mydb["post"] data={} if request.method == "POST": data={} data["username"]=request.POST.get('username') data["_id"]=object_id(request.POST.get('_id')) if(session.find_one(data)!=None): data=users.find_one({"u_name":data["username"]},{"pass_d":0}) data["_id"]=str(data["_id"]) else: data={} data["_id"]=-1 data=json.dumps(data) return HttpResponse(data, content_type='application/json') else: data={} data["_id"]=-1 data=json.dumps(data) return HttpResponse(data, content_type='application/json') #data contain user details name pic_url return render(request, 'menu.html', {"data" : data})
def profile(request): myclient = pymongo.MongoClient('mongodb://localhost:27017/') mydb = myclient['social_network'] users = mydb["users"] session = mydb["session"] post = mydb["post"] mydb2 = myclient['webhost'] my_ipv6 = mydb2["my_ipv6"] data = {} #in future add current age of that user #select no of posts user_id = request.GET.get("id") data = users.find_one({"_id": object_id(user_id)}, {"pass_d": 0}) data["_id"] = str(data["_id"]) q = {"user_id": user_id} data['post_count'] = post.count_documents(q) #select no of comments comments = mydb["comments"] q = {"user_id": user_id} data['comments_count'] = comments.count_documents(q) #select no of likes likes = mydb["like_dislike"] data['like_count'] = likes.count_documents(q) #select no of likes to this users post #1. get user post ids post_ids = [] for i in post.find(q, {"id": 1}): post_ids.append(str(i["_id"])) q = {} data['own_like_count'] = likes.count_documents({ "post_id": { "$in": post_ids }, "action": 1 }) #select no of comments to this users post data['own_comment_count'] = comments.count_documents( {"post_id": { "$in": post_ids }}) #data=json.dumps(data) #return HttpResponse(data, content_type='application/json') return render(request, 'account.html', {"data": data})
def logout(request): myclient = pymongo.MongoClient('mongodb://localhost:27017/') mydb = myclient['social_network'] users = mydb["users"] session = mydb["session"] if (request.method == "POST"): query = {} query["username"] = request.POST.get("username") query["_id"] = object_id(request.POST.get("_id")) session.remove(query) #delete session return render(request, 'index.html', {"username": 0}) #websocket=mydb["websocket"] removed websocket entry by websocket connection query = { "username": users.find_one({"_id": object_id(request.session['u_id'])})["u_name"] } session.remove(query) #delete session #websocket.remove(query)#clear from websocket objects request.session['u_id'] = 0 #reset session variable return render(request, 'index.html', {"username": 0})
async def delete_rule(obj, data): myclient = pymongo.MongoClient('mongodb://localhost:27017/') mydb = myclient['social_network'] websocket = mydb["websocket"] rules = mydb["rules"] users = mydb["users"] my_user_name = websocket.find_one({"websocket": str(obj)})["username"] my_id = str(users.find_one({"u_name": my_user_name}, {"_id": 1})["_id"]) #my id is object id of rule definer and for is username of rule define for q = {"_id": object_id(data["rule_id"]), "user_id": my_id} rules.remove(q)
def is_valid_request(request): myclient = pymongo.MongoClient('mongodb://localhost:27017/') mydb = myclient['social_network'] users=mydb["users"] session = mydb["session"] if request.method == "POST": data={} data["username"]=request.POST.get('username') data["_id"]=object_id(request.POST.get('_id')) if(session.find_one(data)!=None): #found old session ok my_id=str(users.find_one({"u_name":data["username"]})["_id"]) return my_id else: return 0 else: return 0
async def blocked(obj, data): global objs myclient = pymongo.MongoClient('mongodb://localhost:27017/') mydb = myclient['social_network'] websocket = mydb["websocket"] friends = mydb["friends"] users = mydb["users"] user_name = websocket.find_one({"websocket": str(obj)})["username"] my_id = str(users.find_one({"u_name": user_name})["_id"]) friend = [] q2 = {"user_id": my_id, "status": 2} for i in friends.find(q2): friend.append( users.find_one({"_id": object_id(i["friend_id"])})["u_name"]) data = {"type": "blocked", "blocked": friend} data = json.dumps(data) await obj.send(data)
def register(obj, data): global objs myclient = pymongo.MongoClient('mongodb://localhost:27017/') mydb = myclient['social_network'] mycol = mydb["session"] websocket = mydb["websocket"] if (websocket.find_one({"websocket": str(obj)}) == None): #user does not have another active session q = {"_id": object_id(data['key']), "username": data['user']} if (mycol.find(q)): #user has active entry in session valid objs[str(obj)] = obj websocket.insert({ "key": data["key"], "username": data["user"], "websocket": str(obj) }) print("\n", websocket.find().count(), " users online ") print("\n", len(objs), " users online as per objs") else: print("not valid session found") else: print("user_allready active session: ")
def my_friends(request): #mongodb update success #load friend who are friend or requested me or requested by or blocked by me myclient = pymongo.MongoClient('mongodb://localhost:27017/') mydb = myclient['social_network'] users=mydb["users"] session = mydb["session"] friends=mydb["friends"] mydb2 = myclient['webhost'] my_ipv6=mydb2["my_ipv6"] if request.method == "POST": data={} data["username"]=request.POST.get('username') data["_id"]=object_id(request.POST.get('_id')) if(session.find_one(data)!=None): #found old session ok my_id=str(users.find_one({"u_name":data["username"]})["_id"]) else: return HttpResponse(json.dumps({"request user has no active session":"invalid request"}), content_type="application/json") else: return HttpResponse(json.dumps({"request type post needed":"found_get"}), content_type="application/json") data=[] #friend made by me print("my id: ",my_id) q2={"user_id":my_id} #from m q3={"_id":1,"u_name":1,"f_name":1,"l_name":1,"pic_url":1} select={"_id":1,"friend_id":1,"status":1} for i in friends.find(q2,select): try: status=i["status"] if(status==0): status=0;#requested by me if(status==1): status=1;#accepted by me allready "friends" if(status==2): #second useer block me so i cant see him "" status=2 user=users.find_one({"_id":object_id(i["friend_id"])},q3) user["friend_id"]=str(i["friend_id"]) user["status"]=i["status"] user["_id"]=str(user["_id"]) data.append(user) except: pass #friend made me a friend q1={"friend_id":my_id} #from m select={"_id":1,"user_id":1,"status":1} for i in friends.find(q1,select): try: status=i["status"] if(status==0): status=3;#requested by me not accepted yet by him "requested" if(status==1): status=1;#accepted by me" if(status==2): status=2#i block by him continue i["_id"]=str(i["_id"]) i["status"]=status user=users.find_one({"_id":object_id(i["user_id"])},q3) user["friend_id"]=str(i["user_id"]) user["status"]=i["status"] user["_id"]=str(user["_id"]) data.append(user) except: pass return HttpResponse(json.dumps(data), content_type="application/json")
def main(request): myclient = pymongo.MongoClient('mongodb://localhost:27017/') mydb = myclient['social_network'] users = mydb["users"] session = mydb["session"] mydb2 = myclient['webhost'] my_ipv6 = mydb2["my_ipv6"] if request.method == "POST": data = {} data["username"] = request.POST.get('username') data["_id"] = object_id(request.POST.get('_id')) if (session.find_one(data) != None): #found old session ok #data["username"]=username data["_id"] = str(data["_id"]) ipv6 = '[' + my_ipv6.find().limit(1).sort("_id", -1)[0]["ipv6"] + ']' data["websocket_ip"] = ipv6 data["pic_url"] = users.find_one({"u_name": data["username"]})["pic_url"] data = json.dumps(data) return HttpResponse(data, content_type='application/json') else: #not found old session #user is not login data = {} data["_id"] = -1 data = json.dumps(data) return HttpResponse(data, content_type='application/json') data = {} if (not is_login(request)): #is user not login #user is not login data["_id"] = -1 data = json.dumps(data) return HttpResponse(data, content_type='application/json') #user is loogin my_id = request.session[ 'u_id'] #object_id_of_mongo collection users if user is login username = users.find_one({"_id": object_id(my_id)})["u_name"] #return HttpResponse(username, content_type='application/json') #get inserted quey data in session to use for chatting and current session data = session.find_one({"username": username}) if (data == None): data = {} #use has no active session data["_id"] = -1 data = json.dumps(data) return HttpResponse(data, content_type='application/json') data["username"] = username data["_id"] = str(data["_id"]) ipv6 = '[' + my_ipv6.find().limit(1).sort("_id", -1)[0]["ipv6"] + ']' data["websocket_ip"] = ipv6 data = json.dumps(data) return HttpResponse(data, content_type='application/json')