1
0
Эх сурвалжийг харах

Adjusted visual items on various pages.

Adam Day 2 жил өмнө
parent
commit
cea8639cb0

+ 65 - 25
app.py

@@ -161,7 +161,7 @@ def scheduler(stop_event):
                             # Store the date in the DB
                             EmailReminderLog.create(date=email_date.strftime('%Y-%m-%d'), email=user.email, username=user.username, interval=interval.interval).save()
             else:
-                print("scheduler suspended")
+                pass
 
 
             # Get all email reminders from the DB
@@ -188,9 +188,9 @@ def scheduler(stop_event):
                 # Remove all reminders from the DB that are older than today's date
                 reminder_cleanup()
         except Exception as e:
-            print(e)
+            pass
 
-        time.sleep(1)  # Sleep for 5 seconds
+        time.sleep(3)  # Sleep for 5 seconds
 
 
 # Encrypt the password with SHA256
@@ -198,7 +198,6 @@ def encrypt_password(password):
     hash = hashlib.sha256(password.encode('utf-8')).hexdigest()
     return hash
 
-
 #db.connect()
 
 
@@ -314,17 +313,12 @@ def admin_password_check():
 
 # Start the scheduler loop in another thread
 shutdown_scheduler = threading.Event()
-#scheduler_thread = threading.Thread(target=scheduler, args=(shutdown_scheduler,))
-#scheduler_thread.start()
-
 scheduler_thread = threading.Thread(target=scheduler, args=(shutdown_scheduler,))
 scheduler_thread.start()
-#scheduler_thread.join()
 
 # Start the HTTP Server
 app = Flask(__name__)
-#app.secret_key = os.urandom(24)
-app.secret_key = "DEVELOPMENT"
+app.secret_key = os.urandom(24)
 
 
 def format_time_ago(timestamp):
@@ -532,11 +526,14 @@ def admin():
     except Exception as e:
         email_reminders = None
 
+    # Suspend setting
+    suspend_setting_setting = Settings.get(Settings.name == 'Suspend Scheduler')
+    suspend_setting = str(suspend_setting_setting.value).lower()
+
     context = {
         'ils_user_count': ils_users,
-        'ils_users_expiring': ils_expiring_users,
-        'email_reminders': email_reminders,
         'total_email_reminders': total_email_reminders,
+        'suspend_setting': suspend_setting,
     }
 
     return render_template('admin.html', context=context)
@@ -654,7 +651,6 @@ def admin_ils_users():
         username = request.form.get('username')
         email = request.form.get('email')
         date = request.form.get('date')
-        print(date)
         # Check to see if username already exists
         try:
             user = IlsUser.filter(IlsUser.username == username).first()
@@ -679,7 +675,7 @@ def admin_ils_users():
     # Suspend setting
     suspend_setting_setting = Settings.get(Settings.name == 'Suspend Scheduler')
     suspend_setting = str(suspend_setting_setting.value).lower()
-    print(suspend_setting)
+
 
     context = {
         'users': users,
@@ -801,9 +797,14 @@ def admin_ils_users_edit(id):
             message = 'User updated successfully'
             Log.create(username=session['username'], action='Updated ILS user: %s' % username, ).save()
 
+    # Suspend setting
+    suspend_setting_setting = Settings.get(Settings.name == 'Suspend Scheduler')
+    suspend_setting = str(suspend_setting_setting.value).lower()
+
     context = {
         'user': user,
         'message': message,
+        'suspend_setting': suspend_setting,
     }
 
     return render_template('admin_ils_user_edit.html', context=context)
@@ -913,7 +914,6 @@ def settings():
         try:
             setting = Settings.get(Settings.id == id)
         except Exception as e:
-            print(e)
             setting = None
 
         if setting:
@@ -960,9 +960,14 @@ def settings():
     # Get settings from DB
     all_settings = Settings.select().execute()
 
+    # Suspend setting
+    suspend_setting_setting = Settings.get(Settings.name == 'Suspend Scheduler')
+    suspend_setting = str(suspend_setting_setting.value).lower()
+
     context = {
         'settings': all_settings,
         'message': message,
+        'suspend_setting': suspend_setting,
     }
 
     return render_template('settings.html', context=context)
@@ -988,7 +993,6 @@ def schedule():
         try:
             int(interval)
         except Exception as e:
-            print(e)
             message = 'Error creating schedule. Value submitted must be a whole number.'
             return render_template('schedule.html', context={'message': message, 'schedules': schedules})
 
@@ -996,7 +1000,6 @@ def schedule():
         try:
             schedule = Schedule.get(Schedule.interval == interval)
         except Exception as e:
-            print(e)
             schedule = None
 
         if schedule:
@@ -1009,9 +1012,14 @@ def schedule():
 
     schedules = Schedule.select().order_by(Schedule.interval.cast("INTEGER")).execute()
 
+    # Suspend setting
+    suspend_setting_setting = Settings.get(Settings.name == 'Suspend Scheduler')
+    suspend_setting = str(suspend_setting_setting.value).lower()
+
     context = {
         'schedules': schedules,
         'message': message,
+        'suspend_setting': suspend_setting,
     }
 
     return render_template('schedule.html', context=context)
@@ -1106,6 +1114,34 @@ def system_log():
     return render_template('system_log.html', context=context)
 
 
+@app.route('/admin/system/scheduler/enable')
+def enable_scheduler():
+
+    if not requires_auth():
+        return redirect(url_for('login'))
+
+    # Get settings from DB
+    suspend_setting_setting = Settings.get(Settings.name == 'Suspend Scheduler')
+    suspend_setting_setting.value = False
+    suspend_setting_setting.save()
+
+    return redirect(request.referrer)
+
+
+@app.route('/admin/system/scheduler/disable')
+def disable_scheduler():
+
+    if not requires_auth():
+        return redirect(url_for('login'))
+
+    # Get settings from DB
+    suspend_setting_setting = Settings.get(Settings.name == 'Suspend Scheduler')
+    suspend_setting_setting.value = True
+    suspend_setting_setting.save()
+
+    return redirect(request.referrer)
+
+
 @app.route('/admin/system/log/password/resets')
 def password_reset_log():
     # Check to see if user is logged in
@@ -1124,13 +1160,17 @@ def password_reset_log():
 
 @app.route('/logout')
 def logout():
-    if 'username' in session:
-        username = session['username']
-        user = User.get(User.username == username)
-        user.logged_in = False
-        Log.create(username=session['username'], action='Logged out').save()
-        user.save()
-        session.pop('username', None)
+    try:
+        if 'username' in session:
+            username = session['username']
+            user = User.get(User.username == username)
+            user.logged_in = False
+            Log.create(username=session['username'], action='Logged out').save()
+            user.save()
+    except:
+        pass
+
+    session.pop('username', None)
     return redirect(url_for('login'))
 
 
@@ -1143,7 +1183,6 @@ def login():
         try:
             user = User.filter(User.username == username and User.password == password).first()
         except Exception as e:
-            print(e)
             user = None
             session.pop('username', None)
 
@@ -1173,6 +1212,7 @@ def clean_up():
     shutdown_scheduler.set()
     http_server.stop()
 
+
 if __name__ == "__main__":
 
     print("------------------------- Start up -----------------------------")

+ 19 - 33
templates/admin.html

@@ -4,6 +4,24 @@
     <div class="col">
         <h3 class="mb-3"><i class="ri-dashboard-fill"></i> Admin Dashboard</h3>
         <div class="row justify-content-center">
+            {% if context.suspend_setting == "false" %}
+                <div class="col-sm-12 mb-4">
+                    <div class="card">
+                        <div class="card-body text-center">
+                            <h3 class="text-success"><i class="ri-checkbox-circle-line"></i> Email Scheduler is running</h3>
+                        </div>
+                    </div>
+                </div>
+            {% else %}
+                <div class="col-sm-12 mb-4">
+                    <div class="card">
+                        <div class="card-body text-center">
+                            <h3 class="text-danger"><i class="ri-error-warning-line"></i> Email Scheduler is not running</h3>
+                            <a href="{{ url_for('enable_scheduler') }}" class="btn btn-dark mt-3">Enable Scheduler</a>
+                        </div>
+                    </div>
+                </div>
+            {% endif %}
 
             <div class="col-sm-12 col-md-6 mb-4">
                 <div class="card">
@@ -23,40 +41,8 @@
                 </div>
             </div>
 
-            <div class="col-sm-12 col-md-4 mb-4">
-                <div class="card">
-                    <div class="card-body text-center">
-                        <h4>Expiring in the next 7 days</h4>
-                        <ul class="text-start">
-                            {% for user in context.ils_users_expiring %}
-                                <li>{{ user.username }}</li>
-                            {% endfor %}
-                        </ul>
-                    </div>
-                </div>
-            </div>
 
-            <div class="col-sm-12 col-md-8 mb-4">
-                <div class="card">
-                    <div class="card-body text-center">
-                        <h4>Upcoming Reminders</h4>
-                        <table class="table table-hover text-start">
-                            <tr>
-                                <th>ILS User</th>
-                                <th>Reminder Type</th>
-                                <th>Send on</th>
-                            </tr>
-                            {% for reminder in context.email_reminders %}
-                                <tr data-bs-toggle="tooltip" data-bs-placement="right" data-container="body" title="{{ reminder.email }}">
-                                    <td>{{ reminder.username }}</td>
-                                    <td>{{ reminder.interval }} day reminder</td>
-                                    <td>{{ reminder.date }} {{ reminder.date | time_until }}</td>
-                                </tr>
-                            {% endfor %}
-                        </table>
-                    </div>
-                </div>
-            </div>
+
         </div>
     </div>
 </div>

+ 10 - 2
templates/admin_ils_user_edit.html

@@ -15,7 +15,11 @@
         <h3><i class="ri-shield-user-fill"></i> Edit ILS User</h3>
     </div>
     <div class="col text-end">
-        <a href="#!" class="btn btn-danger" data-bs-toggle="modal" data-bs-target="#remove-user"><i class="ri-trash-fill"></i> Delete ILS User</a>
+        {% if context.suspend_setting == "false" %}
+            <a href="#!" class="disabled btn btn-danger"><i class="ri-delete-bin-line"></i> Delete ILS User</a>
+        {% else %}
+            <a href="#!" class="btn btn-danger" data-bs-toggle="modal" data-bs-target="#remove-user"><i class="ri-delete-bin-line"></i> Delete ILS User</a>
+        {% endif %}
     </div>
 </div>
 <div class="row justify-content-center">
@@ -34,7 +38,11 @@
                 <input type="date" class="form-control" id="date" name="date" value="{{ context.user.reset_datetime }}">
             </div>
             <div class="mb-3 text-center">
-                <input type="submit" class="btn btn-primary w-100" value="Save">
+                {% if context.suspend_setting == "false" %}
+                    <input type="submit" class="disabled btn btn-primary w-100" value="Save">
+                {% else %}
+                    <input type="submit" class="btn btn-primary w-100" value="Save">
+                {% endif %}
             </div>
         </form>
     </div>

+ 8 - 3
templates/admin_ils_users.html

@@ -10,11 +10,11 @@
 
 {% if context.suspend_setting == "false" %}
 <div class="alert alert-warning" role="alert">
-  The scheduler is currently running. To make changes, you must first disable the scheduler. <a href="">Click here to disable the scheduler.</a>
+  The scheduler is currently running. To make changes, you must first disable the scheduler. <a href="{{ url_for('disable_scheduler') }}">Click here to disable the scheduler.</a>
 </div>
 {% else %}
 <div class="alert alert-primary" role="alert">
-  The scheduler is currently disabled. <a href="">Click here to enable the scheduler.</a>
+  The scheduler is currently disabled. <a href="{{ url_for('enable_scheduler') }}">Click here to enable the scheduler.</a>
 </div>
 {% endif %}
 
@@ -28,6 +28,7 @@
         <p class="lead">ILS users accounts establish with the ILS system.</p>
     </div>
 </div>
+
 <div class="row">
     <div class="col">
         <table class="table table-flush">
@@ -54,7 +55,11 @@
                         {{ user.reset_datetime|time_since }}
                     </td>
                     <td>
-                        <a href="{{ url_for('admin_ils_users_edit', id=user.id) }}" class="btn btn-secondary w-100">Edit</a>
+                        {% if context.suspend_setting == "false" %}
+                            <a href="#!" class="disabled btn btn-secondary w-100">Edit</a>
+                        {% else %}
+                            <a href="{{ url_for('admin_ils_users_edit', id=user.id) }}" class="btn btn-secondary w-100">Edit</a>
+                        {% endif %}
                     </td>
                 </tr>
                 {% endfor %}

+ 2 - 11
templates/index.html

@@ -1,7 +1,7 @@
 {% extends 'layout.html' %}
 {% block content %}
 <div class="row justify-content-center mt-5">
-    <div class="col-sm-12 col-md-8 col-lg-6">
+    <div class="col-sm-12 col-md-6 col-lg-4">
         <div class="card shadow">
             <div class="card-body">
                 {% if context.reset_url_error == True %}
@@ -11,16 +11,8 @@
                 {% else %}
                     {% if context.reset == False %}
                         <p class="lead">
-                            ILS passwords expire every 90 days. Be sure to complete this entire process to ensure your password is reset correctly.
+                            Provide your {{ context.domain }} user account to start the password reset process.
                         </p>
-                        <ol>
-                            <li class="mb-3">Provide your ILS account username.</li>
-                            <li class="mb-3">Click on the "Start ILS Password Reset" button to be directed to the Lynx Terminal web page.</li>
-                            <li>Log into the {{ context.domain }} terminal web page using your current credentials.</li>
-                            <li class="mb-3">Once logged in, click on the link to reset your password.</li>
-                            <li class="mb-3">Complete the required form to complete the password reset process.
-                                <br><b>Note:</b> <i>domain/user name</i> field needs to be in the following format: <div class="text-center"><code style="display:block; padding-top:10px; font-size:1.25em;">{{ context.domain }}/username</code></div></li>
-                        </ol>
                         <div class="text-center">
                             <form action="/" method="post">
                                 {% if context.error %}
@@ -29,7 +21,6 @@
                                     </div>
                                 {% endif %}
 
-
                                 <div class="mb-3 text-center mt-2">
                                     <input type="text" class="form-control" id="username" name="username" placeholder="ILS user account" required>
                                 </div>

+ 1 - 1
templates/layout.html

@@ -11,7 +11,7 @@
 <div class="container">
     <div class="row mt-5 context-justify-center">
         <div class="col-12 text-center">
-            <h1>ILS Password Reset Tool</h1>
+            <h1>ILS Password Reset Tool - TEST</h1>
         </div>
     </div>
     {% block content %}{% endblock %}

+ 21 - 2
templates/schedule.html

@@ -7,9 +7,24 @@
         </div>
     </div>
 {% endif %}
+
+{% if context.suspend_setting == "false" %}
+<div class="alert alert-warning" role="alert">
+  The scheduler is currently running. To change the Password Reset Interval, you must first disable the scheduler. <a href="{{ url_for('disable_scheduler') }}">Click here to disable the scheduler.</a>
+</div>
+{% else %}
+<div class="alert alert-primary" role="alert">
+  The scheduler is currently disabled. <a href="{{ url_for('enable_scheduler') }}">Click here to enable the scheduler.</a>
+</div>
+{% endif %}
+
 <div class="row">
     <div class="col">
-        <a href="#!" data-bs-toggle="modal" data-bs-target="#add-schedule" class="btn btn-primary float-end me-2"><i class="ri-add-line"></i>Add Schedule</a>
+        {% if context.suspend_setting == "false" %}
+            <a href="#!" class="disabled btn btn-primary float-end me-2"><i class="ri-add-line"></i>Add Schedule</a>
+        {% else %}
+            <a href="#!" data-bs-toggle="modal" data-bs-target="#add-schedule" class="btn btn-primary float-end me-2"><i class="ri-add-line"></i>Add Schedule</a>
+        {% endif %}
         <a href="{{ url_for('scheduled_emails') }}" class="btn btn-dark float-end me-2"><i class="ri-time-line"></i> Scheduled Reminders</a>
         <h3><i class="ri-time-line"></i> Schedule</h3>
         <p class="lead">The following schedule rules will schedule and send email reminders to staff.</p>
@@ -29,7 +44,11 @@
                 <tr>
                     <td>Send email reminder {{ schedule.interval }} day{% if schedule.interval > "1" %}s{% endif %} before password expires.</td>
                     <td class="text-end">
-                        <a href="#!" data-bs-toggle="modal" data-bs-target="#setting-{{ loop.index0 }}" class="btn btn-danger">Delete</a>
+                        {% if context.suspend_setting == "false" %}
+                            <a href="#!" class="disabled btn btn-danger">Delete</a>
+                        {% else %}
+                            <a href="#!" data-bs-toggle="modal" data-bs-target="#setting-{{ loop.index0 }}" class="btn btn-danger">Delete</a>
+                        {% endif %}
                     </td>
                 </tr>
                 {% endfor %}

+ 20 - 1
templates/settings.html

@@ -12,6 +12,17 @@
         <h3><i class="ri-settings-5-line"></i> Settings</h3>
     </div>
 </div>
+
+{% if context.suspend_setting == "false" %}
+<div class="alert alert-warning" role="alert">
+  The scheduler is currently running. To change the Password Reset Interval, you must first disable the scheduler. <a href="{{ url_for('disable_scheduler') }}">Click here to disable the scheduler.</a>
+</div>
+{% else %}
+<div class="alert alert-primary" role="alert">
+  The scheduler is currently disabled. <a href="{{ url_for('enable_scheduler') }}">Click here to enable the scheduler.</a>
+</div>
+{% endif %}
+
 <div class="row">
     <div class="col">
         <table class="table table-flush">
@@ -38,7 +49,15 @@
                         <td>{{ setting.value }}</td>
                     {% endif %}
                     <td>
-                        <a href="#!" data-bs-toggle="modal" data-bs-target="#setting-{{ loop.index0 }}" class="btn btn-primary">Edit</a>
+                        {% if setting.name == 'Password Reset Interval' %}
+                            {% if context.suspend_setting == "false" %}
+                                <a href="#!" class="disabled btn btn-primary">Edit</a>
+                            {% else %}
+                                <a href="#!" data-bs-toggle="modal" data-bs-target="#setting-{{ loop.index0 }}" class="btn btn-primary">Edit</a>
+                            {% endif %}
+                        {% else %}
+                            <a href="#!" data-bs-toggle="modal" data-bs-target="#setting-{{ loop.index0 }}" class="btn btn-primary">Edit</a>
+                        {% endif %}
                     </td>
                 </tr>
                 {% endfor %}