def add_schedule_rule(): if request.method == 'GET': # Get the list of plug_sockets so that we can populate the dropdown db_session = get_db_session() try: plug_sockets = db_session.query(db_plugSocket).all() finally: db_session.close() return render_template('add_schedule_rule.html', plug_sockets=plug_sockets) elif request.method == 'POST': device_id = request.form['device_id'] on_time_str = request.form['on_time'] off_time_str = request.form['off_time'] # convert times to Python Time objects on_time = datetime.strptime(on_time_str, "%H:%M").time() off_time = datetime.strptime(off_time_str, "%H:%M").time() # populate the string mask of days to run days = "" days = days + ("1" if 'run_mon' in request.form.keys() and request.form['run_mon'] == "on" else "0") days = days + ("1" if 'run_tue' in request.form.keys() and request.form['run_tue'] == "on" else "0") days = days + ("1" if 'run_wed' in request.form.keys() and request.form['run_wed'] == "on" else "0") days = days + ("1" if 'run_thu' in request.form.keys() and request.form['run_thu'] == "on" else "0") days = days + ("1" if 'run_fri' in request.form.keys() and request.form['run_fri'] == "on" else "0") days = days + ("1" if 'run_sat' in request.form.keys() and request.form['run_sat'] == "on" else "0") days = days + ("1" if 'run_sun' in request.form.keys() and request.form['run_sun'] == "on" else "0") db_session = get_db_session() try: # new_user = db_user(username=username, pwd_hash=pwd_hash, is_admin=is_admin) new_schedule_rule = db_scheduleRule(device_id=device_id, on_time=on_time, off_time=off_time, days=days) db_session.add(new_schedule_rule) db_session.commit() finally: db_session.close() flash('Rule added') return redirect(url_for('index'))
def run_schedule(last_run_time, logger): current_time = datetime.datetime.now().time() db_session = get_db_session() try: jobs_switch_on = db_session.query( db_scheduleRule.on_time, db_plugSocket.host_id, db_plugSocket.plug_id).join(db_plugSocket).filter( db_scheduleRule.on_time <= current_time, db_scheduleRule.on_time >= last_run_time).all() jobs_switch_off = db_session.query( db_scheduleRule.on_time, db_plugSocket.host_id, db_plugSocket.plug_id).join(db_plugSocket).filter( db_scheduleRule.off_time <= current_time, db_scheduleRule.off_time >= last_run_time).all() logger.warn('Switching on: ' + str(jobs_switch_on)) logger.warn('Switching off: ' + str(jobs_switch_off)) finally: db_session.close() for job in jobs_switch_on: msg_worker('N', job.host_id, job.plug_id) print("Switching on plug " + job.plug_id + ' on host ' + job.host_id + '.') for job in jobs_switch_off: msg_worker('F', job.host_id, job.plug_id) print("Switching off plug " + job.plug_id + ' on host ' + job.host_id + '.')
def add_user(): if request.method == 'GET': return render_template('add_user.html') elif request.method == 'POST': username = request.form['username'] password = request.form['password'] if "is_admin" in request.form.keys( ) and request.form['is_admin'] == "on": is_admin = 1 else: is_admin = 0 db_session = get_db_session() try: pwd_hash = pwd_context.encrypt(password) new_user = db_user(username=username, pwd_hash=pwd_hash, is_admin=is_admin) db_session.add(new_user) db_session.commit() finally: db_session.close() flash('User added') return redirect(url_for('admin'))
def admin(): db_session = get_db_session() try: users = db_session.query(db_user).all() finally: db_session.close() return render_template("admin.html", users=users)
def delete_user(): user_id = request.form['user_id'] # Delete the selected user from the database. db_session = get_db_session() try: db_session.query(db_user).filter(db_user.id == user_id).delete() db_session.commit() finally: db_session.close() flash("User deleted") return redirect(url_for('admin'))
def index(): # Guarantee the database connection is closed db_session = get_db_session() try: query = db_session.query(db_plugSocket).all() schedule_rules = db_session.query( db_scheduleRule, db_plugSocket).join(db_plugSocket).all() finally: db_session.close() return render_template('index.html', query=query, schedule_rules=schedule_rules)
def delete_schedule_rule(): schedule_rule_id = request.form['schedule_rule_id'] # Delete the selected user from the database. db_session = get_db_session() try: db_session.query(db_scheduleRule).filter( db_scheduleRule.id == schedule_rule_id).delete() db_session.commit() finally: db_session.close() flash("Schedule rule deleted") return redirect(url_for('index'))
def verify_credentials(username, password): # Returns 0 for bad credentials, 1 for standard user, 2 for admin # We need to guarantee closure of the database. db_session = get_db_session() try: user = db_session.query(db_user).filter( db_user.username == username).first() finally: db_session.close() if user is not None and pwd_context.verify(password, user.pwd_hash): if user.is_admin == 1: return 2 return 1 else: return 0
def rename_device_process(): plug_socket_id = session['tmp_plug_socket_id_to_change'] name = request.form['name'] db_session = get_db_session() try: plug_socket = db_session.query(db_plugSocket).filter( db_plugSocket.id == plug_socket_id).first() plug_socket.name = name db_session.commit() finally: session['tmp_plug_socket_id_to_change'] = None db_session.close() flash("Name updated") return redirect(url_for('index'))
def toggle_admin(): user_id = request.form['user_id'] db_session = get_db_session() try: user = db_session.query(db_user).filter(db_user.id == user_id).first() if user.is_admin == 0: user.is_admin = 1 else: user.is_admin = 0 db_session.commit() finally: db_session.close() flash("Admin status toggled") return redirect(url_for('admin'))
def admin_change_password_process(): if request.form['password'] == request.form['password2']: user_id = session['tmp_user_id_to_change'] password = request.form['password'] db_session = get_db_session() try: pwd_hash = pwd_context.encrypt(password) user = db_session.query(db_user).filter( db_user.id == user_id).first() user.pwd_hash = pwd_hash db_session.commit() finally: session['tmp_user_id_to_change'] = None db_session.close() # No need to check current password as this is an admin feature flash("Password changed") return redirect(url_for('admin')) else: flash("Passwords do not match") return redirect(url_for('admin_change_password'))
def toggle(): host = request.form['host'] plug = request.form['plug'] response = {} # Connect to the scheduling_daemon here db_session = get_db_session() try: query = db_session.query(db_plugSocket, db_host).filter( db_plugSocket.host_id == host, db_plugSocket.plug_id == plug).join(db_host).first() if query.db_plugSocket.status == 0 and query.db_plugSocket.status is not None: # Turn it on worker_response = msg_worker('N', host, plug) if worker_response[0]: response['status'] = 'Success' response[ 'content'] = 'Toggled plug ' + plug + ' on host ' + host + '.' else: response['status'] = 'Failure' response['content'] = worker_response[1] else: # If anything else, just turn it off to be safe worker_response = msg_worker('F', host, plug) if worker_response[0]: response['status'] = 'Success' response[ 'content'] = 'Toggled plug ' + plug + ' on host ' + host + '.' else: response['status'] = 'Failure' response['content'] = worker_response[1] finally: db_session.close return json.dumps(response)