Beispiel #1
0
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'))
Beispiel #2
0
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 +
              '.')
Beispiel #3
0
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'))
Beispiel #4
0
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)
Beispiel #5
0
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'))
Beispiel #6
0
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)
Beispiel #7
0
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'))
Beispiel #8
0
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
Beispiel #9
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'))
Beispiel #10
0
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'))
Beispiel #11
0
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'))
Beispiel #12
0
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)