Exemplo n.º 1
0
    def login(username, password):
        # make sure admin with specified username exists
        admin_object = admin_collection.find_one({'UserName': username}, {
            'Password': 1,
            'Key': 1
        })

        if admin_object is None:
            return Tools.Result(False, Tools.errors('INF'))

        hash_key = str(admin_object['Key'])[2:-1]

        encrypted_password = str(admin_object['Password'])[2:-1].encode()

        cipher_suite = Fernet(hash_key)

        decrypted_password = str(
            cipher_suite.decrypt(encrypted_password))[2:-1]

        if decrypted_password != password:
            return Tools.Result(False, 'NA')

        token = Auth.add_token(admin_object['_id'])

        if token is False:
            return Tools.Result(False, Tools.errors("FTGT"))

        response = {'Id': admin_object['_id'], 'Token': token}

        return Tools.Result(True, Tools.dumps(response))
Exemplo n.º 2
0
    def unlike_item(item_id, user_id):
        valid = item_collection.find_one({'_id':
                                          ObjectId(item_id)}) is not None

        if not valid:
            return Tools.Result(False, Tools.errors('INF'))

        # make sure user did not liked the item before
        liked_before = item_collection.find_one({
            '_id': ObjectId(item_id),
            'Likes.UserId': user_id
        }) is not None

        if not liked_before:
            return Tools.Result(False, Tools.errors('INF'))

        # update the likes
        item_collection.update_one({'_id': ObjectId(item_id)}, {
            '$pull': {
                'Likes': {
                    'UserId': user_id
                }
            },
            '$inc': {
                'LikesCount': -1
            }
        })

        return Tools.Result(True, 'd')
Exemplo n.º 3
0
    def update_info(admin_id, username=None, firstname=None, lastname=None):

        if username is None and firstname is None and lastname is None:
            return Tools.Result(False, Tools.errors('NA'))

        # make sure admin exists
        exists = admin_collection.find_one({'_id': ObjectId(admin_id)},
                                           {'_id': 1}) is not None

        if not exists:
            return Tools.Result(False, Tools.errors('INF'))

        # make sure specified username is unique
        unique = admin_collection.find_one({'UserName': username},
                                           {'_id': 1}) is None

        if not unique:
            return Tools.Result(False, Tools.errors('NA'))

        updated_values = {}
        if username is not None:
            updated_values['Username'] = username
        if firstname is not None:
            updated_values['FirstName'] = firstname
        if lastname is not None:
            updated_values['LastName'] = lastname

        admin_collection.update_one({'_id': ObjectId(admin_id)},
                                    {'$set': {
                                        **updated_values
                                    }})

        return Tools.Result(True, 'd')
Exemplo n.º 4
0
    def comment_on_item(item_id, user_id, comment, rate):

        valid = item_collection.find_one({'_id':
                                          ObjectId(item_id)}) is not None

        if not valid:
            return Tools.Result(False, Tools.errors('INF'))

        # # make sure user did not comment on the item before
        # commented_before = item_collection.find_one({'_id': ObjectId(item_id), 'Comments.UserId': user_id}) is not None

        # if commented_before:
        #     return Tools.Result(False, Tools.errors('IAE'))

        # update the comments
        item_collection.update_one({'_id': ObjectId(item_id)}, {
            '$push': {
                'Comments': {
                    'CommentId': ObjectId(),
                    'UserId': user_id,
                    'Comment': comment,
                    'Rate': rate,
                    'Seen': False,
                    'Created_at': datetime.now()
                }
            }
        })

        return Tools.Result(True, 'd')
Exemplo n.º 5
0
 def verify_phone_number(phone_number, code):
     try:
         client = Client()
         client.lookups.phone_numbers(phone_number).fetch(type="carrier")
         return Tools.Result(True, "True")
     except Exception as ex:
         return Tools.Result(False, ex.args)
Exemplo n.º 6
0
    def reset_password(admin_id, prev_password, new_password):

        # make sure admin exists
        admin_object = admin_collection.find_one({'_id': ObjectId(admin_id)}, {
            '_id': 1,
            'Key': 1,
            'Password': 1
        })

        if admin_object is None:
            return Tools.Result(False, Tools.errors('INF'))

        hash_key = str(admin_object['Key'])[2:-1]

        encrypted_password = str(admin_object['Password'])[2:-1].encode()

        cipher_suite = Fernet(hash_key)

        decrypted_password = str(
            cipher_suite.decrypt(encrypted_password))[2:-1]

        if decrypted_password != prev_password:
            return Tools.Result(False, 'NA')

        encrypted_password = cipher_suite.encrypt(new_password.encode())

        admin_collection.update_one({'_id': ObjectId(admin_id)},
                                    {'$set': {
                                        'Password': encrypted_password
                                    }})

        return Tools.Result(True, 'd')
Exemplo n.º 7
0
    def get_item(item_id):
        item_object = item_collection.find_one({'_id': ObjectId(item_id)}, {
            'RowId': 1,
            'CategoryName': 1,
            'Title': 1,
            'Description': 1,
            'MenuImageUrl': 1,
            'ItemImageUrl': 1,
            'Likes': 1,
            'Price': 1
        })

        if item_object is None:
            return Tools.Result(False, Tools.errors('INF'))

        menu_image_id = item_object['MenuImageUrl']['MenuImageId']
        item_object.pop('MenuImageUrl')
        item_object[
            'MenuImageUrl'] = 'https://cafe-art-backend.liara.run/item/menu/image/{}'.format(
                menu_image_id)

        item_image_id = item_object['ItemImageUrl']['ItemImageId']
        item_object.pop('ItemImageUrl')
        item_object[
            'ItemImageUrl'] = 'https://cafe-art-backend.liara.run/item/item/image/{}'.format(
                item_image_id)

        gallery_images_urls = Item._get_gallery_image_urls(item_id)

        item_object['GalleryUrls'] = gallery_images_urls

        return Tools.Result(True, Tools.dumps(item_object))
Exemplo n.º 8
0
    def get_all_items_by_category():

        categories = Category._get_categories()
        print(categories)

        items_object = item_collection.find({}, {
            '_id': 0,
            'RowId': 1,
            'Title': 1
        })

        items = []
        for item in items_object:
            items.append(item)

        if len(items) == 0:
            return Tools.Result(False, Tools.errors('INF'))

        items_by_category = {}
        for category in categories:
            items_by_category[category['Title']] = []

        for item in items:
            for category in categories:
                if int(item['RowId']) == int(category['RowId']):
                    items_by_category[category['Title']].append(item['Title'])

        return Tools.Result(True, items_by_category)
Exemplo n.º 9
0
    def get_all_items():
        items_object = item_collection.find({})

        items = []
        for item in items_object:
            items.append(item)

        if len(items) == 0:
            return Tools.Result(False, Tools.errors('INF'))

        items = Item._get_gallery_image_urls_for_items(items)

        for item in items:
            menu_image_id = item['MenuImageUrl']['MenuImageId']
            item.pop('MenuImageUrl')
            item[
                'MenuImageUrl'] = 'https://cafe-art-backend.liara.run/item/menu/image/{}'.format(
                    menu_image_id)

            item_image_id = item['ItemImageUrl']['ItemImageId']
            item.pop('ItemImageUrl')
            item[
                'ItemImageUrl'] = 'https://cafe-art-backend.liara.run/item/item/image/{}'.format(
                    item_image_id)

        return Tools.Result(True, Tools.dumps(items))
Exemplo n.º 10
0
    def modify_category(category_id, row_id=None, title=None, icon_url=None, image_url=None):

        if row_id is None and title is None and icon_url is None and image_url is None:
            return Tools.Result(False, Tools.errors('NA'))

        valid = category_collection.find_one(
            {'_id': ObjectId(category_id)}, {'_id': 1}) is not None

        if not valid:
            return Tools.Result(False, Tools.errors('INF'))

        updating_values = {}
        if row_id is not None:
            updating_values['RowId'] = row_id
        if title is not None:
            updating_values['Title'] = title
        if icon_url is not None:
            updating_values['IconUrl.IconImage'] = icon_url
        if image_url is not None:
            updating_values['ImageUrl.ImageUrl'] = image_url

        category_collection.update_one(
            {'_id': ObjectId(category_id)},
            {
                '$set': {**updating_values}
            }
        )

        return Tools.Result(True, 'd')
Exemplo n.º 11
0
    def resend_activation_code_to_phone_number(phone_number):
        # validate phone number
        if re.match(User.Constants.phone_regex, phone_number) is None:
            return Tools.Result(False, Tools.errors('NA'))

        # make sure user is registered and in not confirmed status
        valid = user_collection.find_one({'PhoneNumber': phone_number},
                                         {'_id': 1}) is not None

        if not valid:
            return Tools.Result(False, Tools.errors('NA'))

        # generate an activation code
        activation_code = User.generate_activation_code()

        # store new generated code
        user_collection.update_one({'PhoneNumber': phone_number}, {
            '$set': {
                'Update_at': datetime.now(),
                'Code.Code': activation_code,
                'Code.Is_Used': False
            }
        })
        # send code to phone number
        sending_result = send_code_phone_number(phone_number, activation_code)

        return sending_result
Exemplo n.º 12
0
    def get_info(admin_id):
        # make sure admin exists
        info = admin_collection.find_one({'_id': ObjectId(admin_id)})

        if info is None:
            return Tools.Result(False, Tools.errors('INF'))

        return Tools.Result(True, Tools.dumps(info))
Exemplo n.º 13
0
    def get_gallery_images(item_id):
        item = item_collection.find_one({'_id': ObjectId(item_id)},
                                        {'Gallery': 1})

        if item is None:
            return Tools.Result(False, Tools.errors('INF'))

        return Tools.Result(True, Tools.dumps(item['Gallery']))
Exemplo n.º 14
0
    def get_activation_code(phone_number):

        user_object = user_collection.find_one({'PhoneNumber': phone_number},
                                               {'Code': 1})

        if user_object is None:
            return Tools.Result(False, Tools.errors('INF'))

        return Tools.Result(True, user_object['Code']['Code'])
Exemplo n.º 15
0
    def get_comments_on_item(item_id):
        item_object = item_collection.find_one({'_id': ObjectId(item_id)},
                                               {'Comments': 1})

        if item_object is None:
            return Tools.Result(False, Tools.errors('INF'))

        comments = item_object['Comments']

        return Tools.Result(True, Tools.dumps(comments))
Exemplo n.º 16
0
    def delete_item(item_id):
        valid = item_collection.find_one({'_id':
                                          ObjectId(item_id)}) is not None

        if not valid:
            return Tools.Result(False, Tools.errors('INF'))

        item_collection.delete_one({'_id': ObjectId(item_id)})

        return Tools.Result(True, 'd')
Exemplo n.º 17
0
    def delete_event(event_id):

        valid = event_collection.find_one({'_id':
                                           ObjectId(event_id)}) is not None

        if not valid:
            return Tools.Result(False, Tools.errors('INF'))

        event_collection.delete_one({'_id': ObjectId(event_id)})

        return Tools.Result(True, 'd')
Exemplo n.º 18
0
    def delete_category(row_id):

        valid = category_collection.find_one(
            {'RowId': row_id}, {'_id': 1}) is not None

        if not valid:
            return Tools.Result(False, Tools.errors('INF'))

        category_collection.delete_one({'RowId': row_id})

        return Tools.Result(True, 'd')
Exemplo n.º 19
0
    def delete_notification(notification_id):

        valid = notification_collection.find_one(
            {'_id': ObjectId(notification_id)}, {'_id': 1}) is not None

        if not valid:
            return Tools.Result(False, Tools.errors('INF'))

        notification_collection.delete_one({'_id': ObjectId(notification_id)})

        return Tools.Result(True, 'd')
Exemplo n.º 20
0
    def delete_image(image_id):
        result = cafe_collection.update_one(
            {}, {'$pull': {
                'Images': {
                    'ImageId': image_id
                }
            }})

        if result.modified_count == 0:
            return Tools.Result(False, Tools.errors('INF'))
        else:
            return Tools.Result(True, 'd')
Exemplo n.º 21
0
    def login_as_guest(uuid):
        guest_id = ObjectId()
        token = Auth.add_token(str(guest_id))

        if not token:
            return Tools.Result(False, Tools.errors("FTGT"))

        user_collection.insert_one({'_id': guest_id, 'Uuid': uuid})

        response = {'Id': str(guest_id), 'Token': token}

        return Tools.Result(True, Tools.dumps(response))
Exemplo n.º 22
0
 def check(user_id, user_token):
     try:
         if not ObjectId.is_valid(user_id):
             raise Exception("Invalid Id")
         same_auth = auth_collection.find_one({
             AuthModelVN.Id: user_id,
             AuthModelVN.Token: user_token
         })
         if not same_auth:
             raise Exception("Not accepted")
         return Tools.Result(True, "accepted")
     except Exception as ex:
         return Tools.Result(False, ex.args)
Exemplo n.º 23
0
 def add(sender_id, receiver_id, text, date, event_id):
     try:
         same_text = text_collection.find_one(
             {TextMessageModelVN.SenderId: sender_id, TextMessageModelVN.ReceiverId: receiver_id,
              TextMessageModelVN.Date: date, TextMessageModelVN.EventId: event_id}, {TextMessageModelVN.id})
         if same_text:
             raise Exception("Not allow to send message")
         new_text = TextMessageModel(Sender_id=sender_id, Receiver_id=receiver_id, Text=text, Date=date,
                                     Event_id=event_id).dict()
         new_text = text_collection.insert_one(new_text)
         return Tools.Result(True, str(new_text.inserted_id))
     except Exception as ex:
         return Tools.Result(False, ex.args)
Exemplo n.º 24
0
    def add_category(row_id, title, icon_url, image_url):

        # make sure row id is unique
        is_unique = category_collection.find_one(
            {'RowId': row_id}, {'_id': 1}) is None

        if not is_unique:
            return Tools.Result(False, Tools.errors('IAE'))

        category_collection.insert_one(
            Category(row_id, title, icon_url, image_url, datetime.now()).__dict__)

        return Tools.Result(True, 'd')
Exemplo n.º 25
0
    def update_profile_info(user_id, name, birthdate):

        result = user_collection.update_one({'_id': ObjectId(user_id)}, {
            '$set': {
                'Name': name,
                'BirthDate': birthdate,
                'Update_at': datetime.now()
            }
        })

        if result.modified_count == 0:
            return Tools.Result(False, Tools.errors('INF'))
        else:
            return Tools.Result(True, 'd')
Exemplo n.º 26
0
    def get_profile_info(user_id):
        user_object = user_collection.find_one({'_id': ObjectId(user_id)})

        if user_object is None:
            return Tools.Result(False, Tools.errors('INF'))

        favorite_items = Item._get_favorite_items(user_id)

        response = {
            'ProfileInfo': user_object,
            'FavoriteItems': favorite_items
        }

        return Tools.Result(True, Tools.dumps(response))
Exemplo n.º 27
0
    def delete_image_from_gallery(item_id, gallery_image_id):
        item = item_collection.find_one({'_id': ObjectId(item_id)}, {'_id': 1})

        if item is None:
            return Tools.Result(False, Tools.errors('INF'))

        item_collection.update_one(
            {'_id': ObjectId(item_id)},
            {'$pull': {
                'Gallery': {
                    'Id': gallery_image_id
                }
            }})

        return Tools.Result(True, 'd')
Exemplo n.º 28
0
def logout():
    try:
        return User.logout(request.headers['Id'],
                           request.headers['Token']
                           )
    except Exception as ex:
        return Tools.Result(False, ex.args)
Exemplo n.º 29
0
def get_events_sorted():
    try:
        return Event.get_events_sorted()
    except Exception as ex:
        import traceback
        traceback.print_exc()
        return Tools.Result(False, ex.args)
Exemplo n.º 30
0
def comments_seen():
    try:
        return Item.comments_seen()
    except Exception as ex:
        import traceback
        traceback.print_exc()
        return Tools.Result(False, ex.args)