Example #1
0
def remove_users_from_group():
    try:
        user_name = request.json['user_name']
        refresh_token(connection(), user_name)
        users = request.json['users']
        users = list(set(users))  # Avoid adding same users multiple times to the groups
        group_id = request.json['group_id']
        group_admin = request.json['group_admin']

        group_title = get_group_title(connection(), group_id)
        if not group_title:
            return jsonify(False)
        for user in users:
            if not get_group_admin_approval(connection(), user, group_id):
                insert_into_admin_approvals_table(connection(), group_admin, "awaiting", "remove",
                                                  user, group_title, group_id)
        # adding transaction to logs
        message = "The users were waiting for the admins approval to be removed from the group " + group_title
        message_description = " The users are " + str(users)
        insert_into_recent_table(connection(), user_name, str(time()),
                                 "16:Awaiting approval for removed users from group " + group_title,
                                 message + message_description)

        return jsonify(True)
    except:
        return jsonify(False)
def add_users_to_group():
    try:
        group_admin = request.json['user_name']
        refresh_token(connection(), group_admin)
        users = request.json['users']
        users = list(
            set(users))  # Avoid adding same users multiple times to the groups
        group_id = request.json['group_id']
        group_title = get_group_title(connection(), group_id)
        if not group_title:
            return jsonify(False)
        for user in users:
            try:  # resolving admin approvals
                resolve_admin_approval(connection(), group_admin, "remove",
                                       user, group_id)
            except:
                pass

        # adding transaction to logs
        message = "You as a group admin of the group " + group_title + " rejected the claim to remove the users"
        message_description = "The users are " + str(users)
        insert_into_recent_table(
            connection(), group_admin, str(time()),
            "17:Rejected claim to remove users from group" + group_title,
            message + message_description)

        return jsonify(True)
    except:
        return jsonify(False)
Example #3
0
def add_users_to_group():
    try:
        user_name = request.json['user_name']
        refresh_token(connection(), user_name)
        users = request.json['users']
        users = list(set(users))  # Avoid adding same users multiple times to the groups

        group_id = request.json['group_id']
        group_title = get_group_title(connection(), group_id)

        # updating list of pending users
        pending_users = get_group_pending_users(connection(), group_id)
        new_set_users = literal_eval(pending_users)
        new_set_users = list(set(new_set_users + users))
        add_new_pending_users_group(connection(), group_id, str(new_set_users))

        response = {'success': [], 'fail': []}

        if not group_title:
            return jsonify(False)
        for user in users:
            try:  # resolving admin approvals
                group_admin = request.json['group_admin']
                resolve_admin_approval(connection(), group_admin, "add", user, group_id)
            except:
                pass

            #  if user has rejected the group, or exited, or has been removed, update the status to pending
            if get_status_for_group(connection(), group_id, user, "rejected") or \
                    get_status_for_group(connection(), group_id, user, "removed") or \
                    get_status_for_group(connection(), group_id, user, "exited") or \
                    get_status_for_group(connection(), group_id, user, "pending") or \
                    get_status_for_group(connection(), group_id, user, "awaiting"):
                if get_status_for_group(connection(), group_id, user, "rejected") and \
                        get_group_pending_state_machine(connection(), user, group_id) >= 4:
                    # user has rejected the group too many times, can't be added
                    response['fail'].append(user)
                else:  # successfully add the user to the group
                    update_group_status(connection(), group_id, user, "pending")
                    response['success'].append(user)
            #  if user entry does not exist in the group, then add a new entry
            elif not get_status_for_group(connection(), group_id, user, "accepted"):
                response['success'].append(user)
                insert_into_pending_requests_table(connection(), group_id, user, "pending", 0)
        # adding transaction to logs

        if response['success']:
            message = "You added a few users to the group " + group_title + ". The users are: "
            message_description = response['success']
            insert_into_recent_table(connection(), user_name, str(time()), "6:Added users to group " + group_title,
                                     message + str(message_description))

        return jsonify(response)
    except:
        return jsonify(False)
Example #4
0
def change_admin():
    try:
        group_admin = request.json['group_admin']
        refresh_token(connection(), request.json['user_name'])
        group_id = request.json['group_id']
        group_title = get_group_title(connection(), group_id)
        if not group_title:
            return jsonify(False)
        change_group_admin(connection(), group_id, group_admin)

        # adding transaction to logs
        message = "Group: %s, New Admin: %s" % (group_title, group_admin)
        insert_into_recent_table(connection(), group_admin, str(time()),
                                 "8:Changed group admin of " + group_title,
                                 message)
        return jsonify(True)
    except:
        return jsonify(False)
Example #5
0
def group_status_update():
    try:
        user_name = request.json['user_name']
        refresh_token(connection(), request.json['user_name'])
        group_id = request.json['group_id']
        group_title = get_group_title(connection(), group_id)
        if not group_title:
            return jsonify(False)
        delete_group(connection(), group_id)
        delete_users_in_group(connection(), group_id)

        message = "You just deleted the group " + group_title
        message_description = "Hope it's purpose served you well!"
        # adding transaction to logs
        insert_into_recent_table(connection(), user_name, str(time()), "10:Deleted Group " + group_title, message +
                                 message_description)

        return jsonify(True)
    except:
        return jsonify(False)
Example #6
0
def remove_users_from_group():
    try:
        user_name = request.json['user_name']
        refresh_token(connection(), user_name)
        users = request.json['users']
        users = list(
            set(users))  # Avoid adding same users multiple times to the groups
        group_id = request.json['group_id']
        group_title = get_group_title(connection(), group_id)
        if not group_title:
            return jsonify(False)
        for user in users:
            try:  # resolving admin approvals
                group_admin = request.json['group_admin']
                resolve_admin_approval(connection(), group_admin, "remove",
                                       user, group_id)
                resolve_admin_approval(connection(), group_admin, "add", user,
                                       group_id)
            except:
                pass

            update_group_status(connection(), group_id, user, "removed")
            try:
                current_users = get_group_current_users(connection(), group_id)
                new_users = literal_eval(current_users)
                new_users.remove(user)
                add_new_users_group(connection(), group_id, str(new_users))
            except:
                pass
        message = "You removed users from the group " + group_title + ". The users removed were " + str(
            users)
        # adding transaction to logs
        insert_into_recent_table(connection(), user_name, str(time()),
                                 "15:Removed users from group " + group_title,
                                 message)

        return jsonify(True)
    except:
        return jsonify(False)
Example #7
0
def exit_group():
    try:
        user_name = request.json['user_name']
        refresh_token(connection(), request.json['user_name'])
        group_id = request.json['group_id']
        group_title = get_group_title(connection(), group_id)
        if not group_title:
            return jsonify(False)
        current_users = get_group_current_users(connection(), group_id)
        new_users = literal_eval(current_users)
        new_users.remove(user_name)
        add_new_users_group(connection(), group_id, str(new_users))

        update_group_status(connection(), group_id, user_name, "exited")

        message = "You left the group " + group_title + ". Why did you leave it? :("
        # adding transaction to logs
        insert_into_recent_table(connection(), user_name, str(time()),
                                 "13:Exited group " + group_title, message)
        return jsonify(True)
    except:
        return jsonify(False)
def group_bill():
    try:
        usage_exceeded = None
        if 'image' in request.files:
            # Image has to be uploaded
            file = request.files['image']
            file_name = file.filename

            # If user quota has been exceeded
            user_name = request.form['username']

            # Personal Bill Usage + Group Bill Usage
            size = space_usage(connection(), user_name) + group_space_usage(connection(), user_name)

            bool_is_user_premium = is_user_premium(connection(), user_name)
            premium = False
            if bool_is_user_premium == 'True':
                premium = True
            total_quota = get_total_size(premium)
            usage_exceeded = quota_exceeded(size, total_quota)
            if not usage_exceeded:  # Upload image if user has not exceeded his quota
                file_extension = file_name.split('.')[-1]
                original_file_name = file_name
                present_time = str(time())
                file_name = present_time + '.' + file_extension
                mapped_file_name = file_name

                # adding image mapping for cross referencing later
                insert_into_image_mapping_table(connection(), request.form['username'], original_file_name,
                                                mapped_file_name)

                # uploading the file to dropbox
                uploadFile(file, mapped_file_name)

                file.seek(0, SEEK_END)
                file_size = file.tell() / (10 ** 6)  # file_size in mb
                # adding entry to image size table
                insert_into_image_size_table(connection(), mapped_file_name, file_size)
            else:
                mapped_file_name = str(False)
        else:
            # Image not a part of the transaction
            mapped_file_name = str(False)

        user_name = request.form['username']
        title = request.form['title']
        date_time = request.form['date']
        description = request.form['description']
        amount = request.form['amount']
        category = request.form['category']
        uploader = user_name
        payer = request.form['payer']
        group_id = request.form['group_id']
        shares = request.form['shares']

        # adding the transaction record

        bill_id = insert_into_group_bills_table(connection(), uploader, title, date_time, amount, description,
                                                mapped_file_name, category, shares, payer, group_id)
        group_title = get_group_title(connection(), group_id)

        # add the bill_id to the groups table
        current_bills = get_groups_bills(connection(), group_id)
        new_bills = literal_eval(current_bills)
        new_bills.append(bill_id)
        add_new_bill_id(connection(), group_id, str(new_bills))

        message = "You added a group bill "
        message_description = {'Title': title,
                               'DateTime': date_time,
                               'Description': description,
                               'Amount': amount,
                               'Category': category,
                               'Uploader': uploader,
                               'Payer': payer,
                               'Shares': shares,
                               'Group': group_title
                               }
        # adding transaction to logs
        if category == 'settlement':
            insert_into_recent_table(connection(), user_name, str(time()), "24:Settled amount in group " + group_title,
                                     message + str(message_description))
        else:
            insert_into_recent_table(connection(), user_name, str(time()), "5:Added Group Transaction " + title,
                                     message + str(message_description))

        # refresh the token, needs to be added to other API Calls
        refresh_token(connection(), request.form['username'])

        if usage_exceeded is not None and usage_exceeded:
            message = "User Quota Exceeded"
            return jsonify({'uploadStatus': True, 'message': message})
        return jsonify({'uploadStatus': True})
    except:
        return jsonify(False)