Beispiel #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)
Beispiel #2
0
def deleteTransaction():
    """
    API to delete a particular transaction
    """
    user_name = request.json['username']
    bill_id = request.json['bill_id']
    group_id = request.json['group_id']
    refresh_token(connection(), user_name)
    mapped_name = request.json['mapped_name']
    try:
        title = get_bill_name(connection(), bill_id)
        bill_data = get_bill_data(connection(), bill_id)

        message = "You deleted this group bill " + title
        message_description = str(bill_data)
        # adding transaction to logs
        insert_into_recent_table(connection(), user_name, str(time()), "11:Deleted group bill " + title,
                                 message + message_description)

        delete_from_group_bills_table(connection(), bill_id)
        delete_from_groups_table(connection(), bill_id, group_id)
        if mapped_name:
            delete_file(mapped_name)  # deleting that image from dropbox

        return jsonify(True)
    except:
        return jsonify(False)
Beispiel #3
0
def signInUser():
    try:
        username = request.json['username']
        password = request.json['password']
        sign_in = SignIn(username, password)
        if sign_in.check_user():
            valid = sign_in.check_password()
        else:
            valid = "User does not exist"
        if valid == "User successfully authenticated":
            token = str(generate_token())
            db = connection()
            presentTime = str(time())
            insert_into_token_table(db, username, presentTime, token)

            message = """You just signed in, is it really you? Stay organized and on track,
                      If not! change your password immediately. For everyone minute spent in organizing,
                      an hour is earned!"""
            insert_into_recent_table(connection(), username, str(time()), "3:Signed In", message)

        else:
            token = False
        return jsonify({'valid': valid, 'token': token, 'username': username})
    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)
Beispiel #5
0
def edit_transaction():
    try:
        if 'image' in request.files:
            # Image has to be uploaded
            file = request.files['image']
            file_name = file.filename
            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:
            # Image not a part of the transaction
            mapped_file_name = str(False)
        user_name = request.form['username']
        uid = request.form['uid']
        title = request.form['Name']
        date_time = request.form['Date']
        description = request.form['Description']
        amount = request.form['Amount']
        category = request.form['category']

        # adding the transaction record
        edit_transactions_image_table(connection(), uid, user_name, title,
                                      date_time, amount, description,
                                      mapped_file_name, category)
        # refresh the token, needs to be added to other API Calls
        refresh_token(connection(), request.form['username'])

        message = "You edited this transaction "
        message_description = {
            'Title': title,
            'DateTime': date_time,
            'Description': description,
            'Amount': amount,
            'Category': category,
        }
        # adding transaction to logs
        insert_into_recent_table(connection(), user_name, str(time()),
                                 "19:Edit Transaction " + title,
                                 message + str(message_description))

        return jsonify({'editStatus': True})
    except:
        return jsonify(False)
def previewImage():
    """
    API to preview the image for a particular transaction
    """
    user_name = request.json['username']
    mapped_image_name = request.json['mapped_name']
    try:
        original_image_name = request.json['original_name']

        # adding transaction to logs
        insert_into_recent_table(connection(), user_name, str(time()), "20:Previewed Bill", original_image_name)

    except KeyError:
        original_image_name = ""
        bill_title = request.json['bill_title']
        # adding transaction to logs
        insert_into_recent_table(connection(), user_name, str(time()), "21:Previewed Group Bill", bill_title)

    refresh_token(connection(), user_name)
    try:
        # downloading the image to cacheable region
        user_name = str('.' + user_name)
        file = path.join(getcwd(), "temp", user_name, mapped_image_name)
        if not path.exists(file):
            download_file(user_name, mapped_image_name, original_image_name)
        with open(file, "rb") as f:
            Image_data = f.read()
            encoded_string = b64encode(Image_data)
        return jsonify({'Image': str(encoded_string.decode('utf-8'))})
    except:
        return jsonify(False)
def registerUser():
    try:
        username = request.json['username']
        password = request.json['password']
        is_premium = request.json['premium']
        signup = SignUp(username, password, is_premium)
        registered = signup.add_user_after_authentication()
        token = False
        if registered:
            token = str(generate_token())
            db = connection()
            presentTime = str(time())

            message = "Welcome to Costrajectory, our beautiful chaos! You are in for an exhilarating journey with us!"
            # adding transaction to logs
            insert_into_recent_table(connection(), username, presentTime,
                                     "2:Registered Profile", message)

            # adding entry to username alias table
            alias = get_alias(username)
            add_alias(connection(), username, alias)

            insert_into_token_table(db, username, presentTime, token)
        x = jsonify({
            'username': request.json['username'],
            'registered': registered,
            'token': token
        })
        return x
    except:
        return jsonify(False)
Beispiel #8
0
def create_sharing_group():
    try:
        group_admin = request.json['user_name']
        refresh_token(connection(), request.json['user_name'])
        group_title = request.json['group_title']
        group_description = request.json['group_description']
        users = request.json['users']

        users = list(
            set(users))  # Avoid adding same users multiple times to the groups
        pending_users = users[:]

        current_users = str([group_admin])  # only adding admin to the group
        group_creation_time = str(time())
        group_id = insert_into_group_table(connection(), group_admin,
                                           current_users, group_title,
                                           group_description,
                                           group_creation_time, pending_users)

        # adding admin to accepted list
        insert_into_pending_requests_table(connection(), group_id, group_admin,
                                           "accepted")

        for user in pending_users:
            insert_into_pending_requests_table(connection(), group_id, user,
                                               "pending")

        message = "You created a new group, enjoy! " + group_title
        # adding transaction to logs
        insert_into_recent_table(connection(), group_admin, str(time()),
                                 "9:Created Group " + group_title, message)

        return jsonify(True)
    except:
        return jsonify(False)
Beispiel #9
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)
Beispiel #10
0
def api_go_premium():
    try:
        username = request.json['username']
        refresh_token(connection(), request.json['username'])

        message = "Now, we're talking, you are premium, way to go!"
        # adding transaction to logs
        insert_into_recent_table(connection(), username, str(time()),
                                 "1:Premium User", message)

        bool_is_user_premium = is_user_premium(connection(), username)
        if bool_is_user_premium == 'False':
            user_go_premium(connection(), username)
            bool_is_user_premium = is_user_premium(connection(), username)
    except KeyError:
        bool_is_user_premium = 'Username not found'
    return jsonify({'isPremium': bool_is_user_premium})
Beispiel #11
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)
Beispiel #12
0
def signout():
    """
    API when user signs out. Delete all his transaction Data
    """
    try:
        upload_db(
        )  # upload the dropbox server to the latest code (automation)
        user_name = request.json['username']

        message = "There are no goodbyes for us, wherever you are, you data will stay safe in our heart!"
        # adding transaction to logs
        insert_into_recent_table(connection(), user_name, str(time()),
                                 "4:Signed Out", message)

        user_data_path = path.join(getcwd(), "temp", "." + user_name)
        if path.exists(user_data_path):
            rmtree(user_data_path)
        return jsonify(True)
    except:
        return jsonify(False)
Beispiel #13
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)
Beispiel #14
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)
Beispiel #15
0
def delete_transaction():
    """
    API to delete a particular transaction
    """
    user_name = request.json['username']
    uid = request.json['uid']
    refresh_token(connection(), user_name)
    mapped_name = request.json['mapped_name']
    try:
        title = get_bill_name(connection(), uid)
        # adding transaction to logs
        bill_data = query_particular_transaction(connection(), uid)
        message = "You just deleted this transaction "
        insert_into_recent_table(connection(), user_name, str(time()),
                                 "18:Deleted Transaction " + title,
                                 message + str(bill_data))

        message = delete_from_image_table(connection(), uid, user_name)
        delete_file(mapped_name)  # deleting that image from dropbox
        return jsonify(message)
    except:
        return jsonify("Deleting the transaction failed.")
Beispiel #16
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)
Beispiel #17
0
def profile_details():
    """
    API for querying and updating profile details
    """
    try:
        # Post request for updating the details
        if request.method == 'POST':
            user_name = request.form['user_name']

            # refreshing token for sign in
            refresh_token(connection(), user_name)

            first_name = request.form['first_name']
            last_name = request.form['last_name']

            alias = form_username_alias(first_name, last_name)
            if alias:
                update_alias(connection(), user_name, alias)

            email = request.form['email']
            address = request.form['address']
            address2 = request.form['address2']
            dob = request.form['dob']
            gender = request.form['gender']
            country = request.form['country']
            state = request.form['state']
            zip_code = request.form['zip_code']

            description = {
                'First Name': first_name,
                'Last Name': last_name,
                'Email Address': email,
                'Address': address,
                'Address2': address2,
                'Date of Birth': dob,
                'Gender': gender,
                'Country': country,
                'State': state,
                'Zip Code': zip_code
            }
            message = "You just updated your profile details! "

            # adding transaction to logs
            insert_into_recent_table(connection(), user_name, str(time()),
                                     "23:Profile Details Updated",
                                     message + str(description))

            if not query_profile_details(
                    connection(), user_name):  # User entry does not exist
                return jsonify(
                    insert_into_profile_details(connection(), user_name,
                                                first_name, last_name, email,
                                                address, address2, dob, gender,
                                                country, state, zip_code))
            else:
                return jsonify(
                    edit_profile_table(connection(), user_name, first_name,
                                       last_name, email, address, address2,
                                       dob, gender, country, state, zip_code))

        else:
            user_name = request.args.get('user_name')
            refresh_token(connection(), user_name)
            if not query_profile_details(
                    connection(), user_name):  # User entry does not exist
                response = {
                    'user_name': user_name,
                    'first_name': '',
                    'last_name': '',
                    'email': '',
                    'address': '',
                    'address2': '',
                    'dob': '',
                    'gender': '',
                    'country': '',
                    'state': '',
                    'zip_code': None
                }
            else:
                data = query_profile_details(connection(), user_name)
                response = {
                    'user_name': user_name,
                    'first_name': data[1],
                    'last_name': data[2],
                    'email': data[3],
                    'address': data[4],
                    'address2': data[5],
                    'dob': data[6],
                    'gender': data[7],
                    'country': data[8],
                    'state': data[9],
                    'zip_code': data[10]
                }
            return jsonify(response)
    except:
        return jsonify(False)
def edit_group_bill_api():
    try:
        if 'image' in request.files:
            # Image has to be uploaded
            file = request.files['image']
            file_name = file.filename
            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:
            # 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']
        payer = request.form['payer']
        group_id = request.form['group_id']
        shares = request.form['shares']
        bill_id = request.form['bill_id']

        # editing the transaction record
        edit_group_bill(connection(), title, date_time, amount, description,
                        mapped_file_name, category, shares, payer, group_id,
                        bill_id)

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

        message = "You added a group bill "
        message_description = {
            'Title': title,
            'DateTime': date_time,
            'Description': description,
            'Amount': amount,
            'Category': category,
            'Payer': payer,
            'Shares': shares,
            'Group': title
        }
        # adding transaction to logs
        insert_into_recent_table(connection(), user_name, str(time()),
                                 "12:Edit Group Bill " + title,
                                 message + str(message_description))

        return jsonify({'editStatus': True})
    except:
        return jsonify(False)
Beispiel #19
0
def upload():
    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']
            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['Name']
        date_time = request.form['Date']
        description = request.form['Description']
        amount = request.form['Amount']
        category = request.form['category']
        # adding the transaction record
        insert_into_image_table(connection(), user_name, title, date_time,
                                amount, description, mapped_file_name,
                                category)

        message_description = {
            'Title': title,
            'DateTime': date_time,
            'Description': description,
            'Amount': amount,
            'Category': category,
        }
        message = "You added a new bill "
        # adding transaction to logs
        insert_into_recent_table(connection(), user_name, str(time()),
                                 "22:Added 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)
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)