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))
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')
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')
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')
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)
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')
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))
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)
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))
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')
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
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))
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']))
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'])
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))
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')
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')
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')
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')
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')
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))
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)
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)
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')
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')
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))
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')
def logout(): try: return User.logout(request.headers['Id'], request.headers['Token'] ) except Exception as ex: return Tools.Result(False, ex.args)
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)
def comments_seen(): try: return Item.comments_seen() except Exception as ex: import traceback traceback.print_exc() return Tools.Result(False, ex.args)