From dcc8aae650dab8eb819e4168251125d31fa23eba Mon Sep 17 00:00:00 2001 From: AIIrondev Date: Fri, 31 Jul 2026 21:28:34 +0200 Subject: [PATCH] Implemenmtation of the new encryption into the my borrowed funktion --- Web/app.py | 152 +++++++++++++++++++++++------------------------------ 1 file changed, 65 insertions(+), 87 deletions(-) diff --git a/Web/app.py b/Web/app.py index 3b36ad7..298ecb7 100755 --- a/Web/app.py +++ b/Web/app.py @@ -10248,69 +10248,58 @@ def get_period_times(booking_date, period_num): """---------------------------------------------------------Borrowing-----------------------------------------------------------------""" + @app.route('/my_borrowed_items') def my_borrowed_items(): """ Zeigt alle vom aktuellen Benutzer ausgeliehenen und geplanten Objekte an. - - Returns: - Response: Gerendertes Template mit den ausgeliehenen und geplanten Objekten des Benutzers """ if 'username' not in session: flash('Bitte melden Sie sich an, um Ihre ausgeliehenen Objekte anzuzeigen', 'error') return redirect(url_for('login', next=request.path)) - + username = session['username'] + client = MongoClient(MONGODB_HOST, MONGODB_PORT) db = client[MONGODB_DB] - items_collection = db.items - ausleihungen_collection = db.ausleihungen - - # Get current time for comparison - current_time = datetime.datetime.now() - - # Get items currently borrowed by the user (where Verfuegbar=false and User=username) - borrowed_items = list(items_collection.find({'Verfuegbar': False, 'User': encrypt_text(username)})) - - # Get active and planned ausleihungen for the user - active_ausleihungen = list(ausleihungen_collection.find({ - 'User': encrypt_text(username), - 'Status': 'active' + items_collection = db['items'] + ausleihungen_collection = db['ausleihungen'] + + all_ausleihungen = list(ausleihungen_collection.find({ + 'Status': {'$in': ['active', 'planned']} })) - - planned_ausleihungen = list(ausleihungen_collection.find({ - 'User': encrypt_text(username), - 'Status': 'planned' - })) - - # Process items + active_items = [] planned_items = [] - processed_item_ids = set() # Keep track of processed item IDs to avoid duplicates - - # First, process items that are directly marked as borrowed by the user - for item in borrowed_items: - # Convert ObjectId to string for template - item['_id'] = str(item['_id']) - active_items.append(item) - processed_item_ids.add(item['_id']) - - # Process active appointments - for appointment in active_ausleihungen: - # Get the item ID from the appointment + processed_item_ids = set() + + for appointment in all_ausleihungen: + raw_user = appointment.get('User', '') + try: + decrypted_user = decrypt_text(raw_user) if raw_user else '' + except Exception as e: + app.logger.error(f"Entschlüsselungsfehler: {e}") + decrypted_user = '' + + if decrypted_user != username: + continue + item_id = appointment.get('Item') - - if not item_id or str(item_id) in processed_item_ids: - continue # Skip if we already processed this item or no item ID - - # Get item details - item_obj = items_collection.find_one({'_id': ObjectId(item_id)}) - + if not item_id: + continue + + try: + if isinstance(item_id, str): + query_id = ObjectId(item_id) + else: + query_id = item_id + item_obj = items_collection.find_one({'_id': query_id}) + except Exception: + item_obj = None + if item_obj: - # Convert ObjectId to string for template item_obj['_id'] = str(item_obj['_id']) - - # Add appointment data + item_obj['AppointmentData'] = { 'id': str(appointment['_id']), 'start': appointment.get('Start'), @@ -10319,54 +10308,43 @@ def my_borrowed_items(): 'period': appointment.get('Period'), 'status': appointment.get('VerifiedStatus', appointment.get('Status')), } - - # Mark that this item is part of an active appointment - item_obj['ActiveAppointment'] = True - - # Add to the list only if not already there - if str(item_obj['_id']) not in processed_item_ids: - active_items.append(item_obj) - processed_item_ids.add(str(item_obj['_id'])) - - # Process planned appointments - for appointment in planned_ausleihungen: - item_id = appointment.get('Item') - - if not item_id: - continue - - item_obj = items_collection.find_one({'_id': ObjectId(item_id)}) - - if item_obj: - item_obj['_id'] = str(item_obj['_id']) - - # Add appointment data - item_obj['AppointmentData'] = { - 'id': str(appointment['_id']), - 'start': appointment.get('Start'), - 'end': appointment.get('End'), - 'notes': appointment.get('Notes'), - 'period': appointment.get('Period'), - 'status': appointment.get('Status'), - } - - planned_items.append(item_obj) - + + status = appointment.get('Status') + if status == 'active': + item_obj['ActiveAppointment'] = True + if str(item_obj['_id']) not in processed_item_ids: + active_items.append(item_obj) + processed_item_ids.add(str(item_obj['_id'])) + elif status == 'planned': + planned_items.append(item_obj) + + all_borrowed_items = list(items_collection.find({'Verfuegbar': False})) + for item in all_borrowed_items: + raw_item_user = item.get('User', '') + try: + dec_item_user = decrypt_text(raw_item_user) if raw_item_user else '' + except Exception: + dec_item_user = '' + + if dec_item_user == username and str(item['_id']) not in processed_item_ids: + item['_id'] = str(item['_id']) + item['ActiveAppointment'] = True + item['AppointmentData'] = {'status': 'active (no document)'} + active_items.append(item) + processed_item_ids.add(item['_id']) + client.close() - - # DEBUG: Log what we're passing to the template - app.logger.info(f"Passing {len(active_items)} active items and {len(planned_items)} planned items to template") - if planned_items: - for i, item in enumerate(planned_items): - app.logger.info(f"Planned item {i+1}: {item['Name']}, Appointment ID: {item['AppointmentData']['id']}") - + + # DEBUG Logging + app.logger.info( + f"Passing {len(active_items)} active items and {len(planned_items)} planned items to template for user {username}") + return render_template( 'my_borrowed_items.html', items=active_items, planned_items=planned_items ) - @app.route('/api/push/vapid-key', methods=['GET']) def get_vapid_key(): """