Beispiel #1
0
    def accept_friend_request(self, sender, dest):
        sender_doc = self.__get_user_doc(sender)
        sender_dict = sender_doc.get().to_dict()
        if sender_dict is None: return response(404, "sender not found")

        dest_doc = self.__get_user_doc(dest)
        dest_dict = dest_doc.get().to_dict()
        if dest_dict is None: return response(404, "dest not found")

        dest_friends = dest_dict['friends']
        if sender not in dest_friends or dest_friends[sender] == True:
            return response(
                403,
                "there is no pending friend request between sender and dest")
        sender_friends = sender_dict['friends']

        channel = 'chan_' + sender_dict['username'] + '_' + dest_dict[
            'username']

        temp = dest_friends[sender]
        temp['is_friends'] = True
        temp['channel'] = channel
        dest_friends[sender] = temp
        dest_doc.set({'friends': dest_friends}, merge=True)

        sender_friends[dest] = {
            'username': dest_dict['username'],
            'pp': dest_dict['pp'],
            'is_friends': True,
            'channel': channel,
        }
        sender_doc.set({'friends': sender_friends}, merge=True)
        return response(201, sender)
Beispiel #2
0
    def delete_friend_or_friend_request(self, uid, friend):
        user_doc = self.__get_user_doc(uid)
        user_dict = user_doc.get().to_dict()
        if user_dict is None: return response(404, "user not found")

        friend_doc = self.__get_user_doc(friend)
        friend_dict = friend_doc.get().to_dict()
        user_friends = user_dict['friends']
        if friend not in user_friends:
            return response(
                403,
                "friend isn't a friend of user or there is no pending friend request between them"
            )

        friend_friends = friend_dict['friends']
        user_friends.pop(friend)
        temp = user_dict
        temp['friends'] = user_friends
        user_doc.set(temp)

        if uid in friend_friends:
            friend_friends.pop(uid)
            temp = friend_dict
            temp['friends'] = friend_friends
            friend_doc.set(temp)
        return response(200, friend)
Beispiel #3
0
    def send_friend_request(self, sender, dest):
        sender_doc = self.__get_user_doc(sender)
        sender_dict = sender_doc.get().to_dict()
        if sender_dict is None: return response(404, "sender not found")

        dest_uid = self.__get_user_uid(dest)
        if dest_uid is None: return response(404, "dest not found")

        dest_doc = self.__get_user_doc(dest_uid)
        dest_dict = dest_doc.get().to_dict()
        if dest_dict is None: return response(404, "dest not found")

        dest_friends = dest_dict['friends']
        if sender in dest_friends:
            return response(
                403,
                "sender is already friends with dest or there is already a pending friend request between them"
            )

        dest_friends[sender] = {
            'username': sender_dict['username'],
            'pp': sender_dict['pp'],
            'is_friends': False,
        }
        dest_doc.set({'friends': dest_friends}, merge=True)
        return response(201, dest_uid)
Beispiel #4
0
def delete_friend_or_friend_request():
    if 'uid' in request.args and 'friend' in request.args:
        uid = request.args['uid']
        friend = request.args['friend']
        if uid == friend:
            return response(400, "uid and friend can't be the same")
        return db.delete_friend_or_friend_request(uid, friend)
    return response(
        400, "uid: user that's deleting a friend"
        "friend: user that's being deleted")
Beispiel #5
0
def send_friend_request():
    json_data = request.get_json()
    if 'sender' in json_data and 'dest' in json_data:
        sender = json_data['sender']
        dest = json_data['dest']
        if sender == dest:
            return response(400, "sender and dest can't be the same")
        return db.send_friend_request(sender, dest)
    return response(
        400, "sender: user sending friend request"
        "dest: user the friend request is being sent to")
Beispiel #6
0
    def update_user_pp(self, uid, encoded_pp):
        try:
            pp_link = self.__upload_user_pp(uid, encoded_pp)
        except TypeError as te:
            return response(403, str(te))
        user_doc = self.__get_user_doc(uid)

        pp = {'pp': pp_link}

        user_doc.update(pp)
        return response(201, pp)
Beispiel #7
0
def accept_friend_request():
    json_data = request.get_json()
    if 'sender' in json_data and 'dest' in json_data:
        sender = json_data['sender']
        dest = json_data['dest']
        if sender == dest:
            return response(400, "sender and dest can't be the same")
        return db.accept_friend_request(sender, dest)
    return response(
        400, "sender: user that sent the friend request"
        "dest: user that is accepting the friend request")
Beispiel #8
0
    def create_group(self, name):
        if name in self.__get_group_list():
            return response(403, "group already exists")

        group = {
            'name': name,
            'msg': [],
        }

        doc_ref = self.__db.collection('groups').document(name)
        doc_ref.set(group)
        return response(201, group)
Beispiel #9
0
def grant_token():
	if 'Authorization' in request.headers and request.headers['Authorization'].split(' ')[0] == 'Bearer':
		raw_token = request.headers['Authorization']
		token = raw_token.split(' ')[1]
		decoded_token = db.auth.verify_id_token(token)
		if not decoded_token:
			return response(403, 'Unauthorized')
		channels = [friend.channel for friend in db.get_all_friends()]
		channels.append(db.get_all_groups())
		pubnub.grant()\
			.auth_keys(token)\
			.channels(channels)\
			.read(True)\
			.write(True)
		return 'true'
	return response(400, 'No valid Authorization token was found')
Beispiel #10
0
def get_user_pp():
	if 'uid' in request.args:
		uid = request.args['uid']
		return db.get_user_pp(uid)
	return response(
		400,
		"uid: uid of owner of the pic"
	)
Beispiel #11
0
    def send_message(self, name, msg, uid, username, time, pp):
        group_ref = self.__db.collection('groups').document(name)
        group = group_ref.get().to_dict()
        if group:
            message = {
                'data': msg,
                'uid': uid,
                'username': username,
                'time': time,
                'pp': pp
            }

            messages = group['msg']
            messages.append(message)

            group_ref.set({'msg': messages}, merge=True)
            return response(200, message)
        return response(404, "group not found")
Beispiel #12
0
def create_group():
	json_data = request.get_json()
	if 'name' in json_data:
		name = json_data['name']
		return db.create_group(name)
	return response(
		400,
		"name: name of group being created"
	)
Beispiel #13
0
def update_user_pp():
	json_data = request.get_json()
	if 'uid' in json_data and 'encoded_pp' in json_data:
		uid = json_data['uid']
		encoded_pp = json_data['encoded_pp']
		return db.update_user_pp(uid, encoded_pp)
	return response(
		400,
		"uid: uid of owner of the pic"
		"path: path to the file"
	)
Beispiel #14
0
    def create_user(self, username, email, pw, encoded_pp=None):
        if not self.__is_user_unique(username):
            return response(403, "username already exists")

        try:
            user_record = self.auth.create_user(email=email, password=pw)
        except firebase_admin._auth_utils.EmailAlreadyExistsError:
            return response(403, "user already exists")

        uid = user_record.uid

        user = {
            'uid': uid,
            'username': username,
            'friends': {},
            'pp': self.__upload_user_pp(uid, encoded_pp) if encoded_pp else ''
        }

        user_doc = self.__get_user_doc(uid)
        user_doc.set(user)
        return response(201, user)
Beispiel #15
0
def create_user():
	json_data = request.get_json()
	if 'username' in json_data and 'email' in json_data and 'pw' in json_data:
		username = json_data['username']
		email = json_data['email']
		pw = json_data['pw']
		pp_path = json_data.get('pp', None)
		return db.create_user(username, email, pw, pp_path)
	return response(
		400,
		"username: username of user being created"
		"email: email of user being created"
		"pw: password of user being created"
		"(optional) path: path of the file to upload"
	)
Beispiel #16
0
def send_message():
	json_data = request.get_json()
	if 'name' in json_data and 'msg' in json_data and 'uid' in json_data and 'username' in json_data and "time" in json_data:
		name = json_data['name']
		msg = json_data['msg']
		uid = json_data['uid']
		username = json_data['username']
		time = json_data['time']
		pp = json_data.get('pp', None)
		return db.send_message(name, msg, uid, username, time, pp)
	return response(
		400,
		"name: name of group"
		"msg: message content"
		"uid: uid of user sending message"
		"username: username of user being created"
		"(optional) pp: url of profile picture"
	)
Beispiel #17
0
 def get_group(self, name):
     group_ref = self.__db.collection('groups').document(name)
     group = group_ref.get().to_dict()
     if group: return response(200, group)
     return response(404, "group not found")
Beispiel #18
0
 def get_user(self, uid):
     user_doc = self.__get_user_doc(uid)
     user = user_doc.get().to_dict()
     if user: return response(200, user)
     return response(404, "user not found")
Beispiel #19
0
def get_group():
	if 'name' in request.args:
		name = request.args['name']
		return db.get_group(name)
	return response(400, "name: name of requested group")
Beispiel #20
0
 def get_user_pp(self, uid):
     user_doc = self.__get_user_doc(uid)
     pp_link = user_doc.get(['pp']).to_dict()
     if pp_link: return response(200, pp_link)
     return response(404, "user not found")
Beispiel #21
0
 def get_all_friends(self, uid):
     user_doc = self.__get_user_doc(uid)
     friends = user_doc.get(['friends']).to_dict()
     if friends: return response(200, friends)
     return response(404, "user not found")
Beispiel #22
0
 def get_all_groups(self):
     return response(200, self.__get_group_list())
Beispiel #23
0
def get_user_uid():
	if 'username' in request.args:
		username = request.args['username']
		return db.get_user_uid(username)
	return response(400, "username: username of requested user")
Beispiel #24
0
def get_user():
	if 'uid' in request.args:
		uid = request.args['uid']
		return db.get_user(uid)
	return response(400, "uid: uid of requested user")
Beispiel #25
0
def home():
    return response(200, "This is the InkChat server")
Beispiel #26
0
def get_all_friends():
    if 'uid' in request.args:
        uid = request.args['uid']
        return db.get_all_friends(uid)
    return response(400, "uid: user to get all friends from")