コード例 #1
0
ファイル: __init__.py プロジェクト: FriwiDev/pycroft
def host_delete(host_id):
    host = Host.q.get(host_id)

    if host is None:
        flash(u"Host existiert nicht.", 'error')
        abort(404)

    form = FlaskForm()

    owner = host.owner

    if form.is_submitted():
        _, success = web_execute(lib_host.host_delete,
                                 "Host erfolgreich gelöscht.", host,
                                 current_user)

        if success:
            session.session.commit()

            return redirect(
                url_for('user.user_show', user_id=owner.id, _anchor='hosts'))

    form_args = {
        'form': form,
        'cancel_to': url_for('user.user_show', user_id=owner.id),
        'submit_text': 'Löschen',
        'actions_offset': 0
    }

    return render_template('generic_form.html',
                           page_title="Host löschen",
                           form_args=form_args,
                           form=form)
コード例 #2
0
ファイル: __init__.py プロジェクト: FriwiDev/pycroft
def interface_edit(interface_id):
    interface = Interface.q.get(interface_id)

    if interface is None:
        flash(u"Interface existiert nicht.", 'error')
        abort(404)

    subnets = get_subnets_for_room(interface.host.room)

    current_ips = list(ip.address for ip in interface.ips)

    form = InterfaceForm(obj=interface)

    unused_ips = [ip for ips in get_unused_ips(subnets).values() for ip in ips]

    form.ips.choices = [(str(ip), str(ip)) for ip in current_ips + unused_ips]

    unique_mac_error = None

    if not form.is_submitted():
        form.ips.process_data(ip for ip in current_ips)
    else:
        if form.mac.data != interface.mac:
            unique_mac_error = validate_unique_mac(form, form.mac)

            if unique_mac_error:
                form.validate()

                form.mac.errors.append(unique_mac_error)

    if not unique_mac_error and form.validate_on_submit():
        ips = set([IPv4Address(ip) for ip in form.ips.data])

        _, success = web_execute(lib_host.interface_edit,
                                 "Interface erfolgreich bearbeitet.",
                                 interface, form.name.data, form.mac.data, ips,
                                 current_user)

        if success:
            session.session.commit()

            return redirect(
                url_for('user.user_show',
                        user_id=interface.host.owner_id,
                        _anchor='hosts'))

    form_args = {
        'form': form,
        'cancel_to': url_for('user.user_show', user_id=interface.host.owner_id)
    }

    return render_template('generic_form.html',
                           page_title="Interface editieren",
                           form_args=form_args)
コード例 #3
0
ファイル: __init__.py プロジェクト: FriwiDev/pycroft
def interface_create(host_id):
    host = Host.q.get(host_id)

    if host is None:
        flash(u"Host existiert nicht.", 'error')
        abort(404)

    subnets = get_subnets_for_room(host.room)

    form = InterfaceForm()

    unused_ips = [ip for ips in get_unused_ips(subnets).values() for ip in ips]

    form.ips.choices = [(str(ip), str(ip)) for ip in unused_ips]

    unique_mac_error = None

    if not form.is_submitted():
        form.ips.process_data([next(iter(unused_ips), None)])
    else:
        unique_mac_error = validate_unique_mac(form, form.mac)

        if unique_mac_error:
            form.validate()

            form.mac.errors.append(unique_mac_error)

    if not unique_mac_error and form.validate_on_submit():
        ips = set([IPv4Address(ip) for ip in form.ips.data])

        _, success = web_execute(lib_host.interface_create,
                                 "Interface erfolgreich erstellt.", host,
                                 form.name.data, form.mac.data, ips,
                                 current_user)

        if success:
            session.session.commit()

            return redirect(
                url_for('user.user_show',
                        user_id=host.owner.id,
                        _anchor='hosts'))

    form_args = {
        'form': form,
        'cancel_to': url_for('user.user_show', user_id=host.owner.id)
    }

    return render_template('generic_form.html',
                           page_title="Interface erstellen",
                           form_args=form_args)
コード例 #4
0
def move(user_id):
    user = get_user_or_404(user_id)
    form = UserMoveForm()

    refill_form_data = False
    if form.validate_on_submit():
        if user.room == Room.q.filter_by(
                number=form.room_number.data,
                level=form.level.data,
                building_id=form.building.data.id).one():
            flash(u"Nutzer muss in anderes Zimmer umgezogen werden!", "error")
            refill_form_data = True
        else:
            when = session.utcnow() if form.now.data else datetime.combine(
                form.when.data, utc.time_min())

            _, success = web_execute(lib.user.move,
                                     None,
                                     user=user,
                                     building_id=form.building.data.id,
                                     level=form.level.data,
                                     room_number=form.room_number.data,
                                     processor=current_user,
                                     when=when)

            if success:
                session.session.commit()

                if when > session.utcnow():
                    flash(u'Der Umzug wurde vorgemerkt.', 'success')
                else:
                    flash(u'Benutzer umgezogen', 'success')
                    sheet = lib.user.store_user_sheet(
                        user, '********', generation_purpose='user moved')
                    session.session.commit()

                    flask_session['user_sheet'] = sheet.id

                return redirect(url_for('.user_show', user_id=user.id))

    if not form.is_submitted() or refill_form_data:
        if user.room is not None:
            refill_room_data(form, user.room)

    return render_template('user/user_move.html', user_id=user_id, form=form)
コード例 #5
0
def move_in(user_id):
    form = UserMoveInForm()
    user = get_user_or_404(user_id)

    if user.room is not None:
        flash("Nutzer {} ist nicht ausgezogen!".format(user_id), 'error')
        abort(404)

    if form.validate_on_submit():
        when = session.utcnow() if form.now.data else datetime.combine(
            form.when.data, utc.time_min())

        _, success = web_execute(
            lib.user.move_in,
            None,
            user=user,
            building_id=form.building.data.id,
            level=form.level.data,
            room_number=form.room_number.data,
            mac=form.mac.data,
            birthdate=form.birthdate.data,
            begin_membership=form.begin_membership.data,
            processor=current_user,
            when=when,
        )

        if success:
            session.session.commit()

            if when > session.utcnow():
                flash("Der Einzug wurde vorgemerkt.", 'success')
            else:
                flash("Benutzer eingezogen.", 'success')

            return redirect(url_for('.user_show', user_id=user_id))

    if not form.is_submitted():
        form.birthdate.data = user.birthdate
        form.begin_membership.data = True

    return render_template('user/user_move_in.html',
                           form=form,
                           user_id=user_id)
コード例 #6
0
def move_out(user_id):
    form = UserMoveOutForm()
    user = get_user_or_404(user_id)

    if not user.room:
        flash("Nutzer {} ist aktuell nirgends eingezogen!".format(user_id),
              'error')
        abort(404)

    if form.validate_on_submit():
        when = session.utcnow() if form.now.data else datetime.combine(
            form.when.data, utc.time_min())

        _, success = web_execute(
            lib.user.move_out,
            None,
            user=user,
            comment=form.comment.data,
            processor=current_user,
            when=session.utcnow() if form.now.data else datetime.combine(
                form.when.data, utc.time_min()),
            end_membership=form.end_membership.data)

        if success:
            session.session.commit()

            if when > session.utcnow():
                flash("Der Auszug wurde vorgemerkt.", "success")
            else:
                flash(u'Benutzer ausgezogen.', 'success')

            return redirect(url_for('.user_show', user_id=user.id))

    if not form.is_submitted():
        form.end_membership.data = True

    return render_template('user/user_move_out.html',
                           form=form,
                           user_id=user_id)
コード例 #7
0
def host_edit(host_id):
    host = Host.q.get(host_id)

    if host is None:
        flash(u"Host existiert nicht.", 'error')
        abort(404)

    form = HostForm(obj=host)

    if not form.is_submitted():
        refill_room_data(form, host.room)

    if form.validate_on_submit():
        room = Room.q.filter_by(number=form.room_number.data,
                                level=form.level.data,
                                building=form.building.data).one()

        owner = User.q.filter_by(id=form.owner_id.data).one()

        _, success = web_execute(lib_host.host_edit,
                                 "Host erfolgreich bearbeitet.",
                                 host, owner, room, form.name.data,
                                 current_user)

        if success:
            session.session.commit()

            return redirect(url_for('user.user_show', user_id=owner.id,
                                    _anchor='hosts'))

    form_args = {
        'form': form,
        'cancel_to': url_for('user.user_show', user_id=host.owner.id)
    }

    return render_template('generic_form.html',
                           page_title="Host editieren",
                           form_args=form_args,
                           form=form)
コード例 #8
0
ファイル: __init__.py プロジェクト: FriwiDev/pycroft
def host_create():
    user = get_user_or_404(request.args.get('user_id', None))

    form = HostForm(owner_id=user.id)

    if not form.is_submitted():
        refill_room_data(form, user.room)

    if form.validate_on_submit():
        room = Room.q.filter_by(number=form.room_number.data,
                                level=form.level.data,
                                building=form.building.data).one()

        owner = User.q.filter_by(id=form.owner_id.data).one()

        host, success = web_execute(lib_host.host_create,
                                    "Host erfolgreich erstellt.", owner, room,
                                    form.name.data, current_user)

        if success:
            session.session.commit()

            return redirect(
                url_for('.interface_create',
                        user_id=host.owner_id,
                        host_id=host.id,
                        _anchor='hosts'))

    form_args = {
        'form': form,
        'cancel_to': url_for('user.user_show', user_id=user.id)
    }

    return render_template('generic_form.html',
                           page_title="Host erstellen",
                           form_args=form_args,
                           form=form)
コード例 #9
0
def transaction_confirm_all():
    form = FlaskForm()

    if form.is_submitted():
        _, success = web_execute(lib.finance.transaction_confirm_all,
                                 "Alle Transaktionen wurden bestätigt.",
                                 current_user)

        session.commit()

        return redirect(url_for('.transactions_unconfirmed'))

    form_args = {
        'form': form,
        'cancel_to': url_for('.transactions_unconfirmed'),
        'submit_text': 'Alle Bestätigen',
        'actions_offset': 0
    }

    return render_template(
        'generic_form.html',
        page_title="Alle Transaktionen (älter als 1h) bestätigen",
        form_args=form_args,
        form=form)
コード例 #10
0
def create():
    form = UserCreateForm(property_groups=[config.member_group])

    if form.is_submitted():
        unique_name_error = validate_unique_name(form, form.name)
        unique_email_error = validate_unique_email(form, form.email)
        unique_mac_error = validate_unique_mac(form, form.mac)

    if form.validate_on_submit() and not (
            unique_name_error or unique_email_error or unique_mac_error):

        room: Room = get_room(building_id=form.building.data.id,
                              level=form.level.data,
                              room_number=form.room_number.data)
        if not room:
            flash("Raum scheint nicht zu existieren…", 'error')
            return
        result, success = web_execute(
            lib.user.create_user,
            None,
            name=form.name.data,
            login=form.login.data,
            processor=current_user,
            email=form.email.data,
            birthdate=form.birthdate.data,
            groups=form.property_groups.data,
            address=room.address,
        )

        if success:
            (new_user, plain_password) = result

            # We only have to check if building is present, as the presence
            # of the other fields depends on building
            if form.building.data is not None:
                _, success = web_execute(lib.user.move_in,
                                         None,
                                         user=new_user,
                                         building_id=form.building.data.id,
                                         level=form.level.data,
                                         room_number=form.room_number.data,
                                         mac=form.mac.data,
                                         processor=current_user,
                                         host_annex=form.annex.data)

            if success:
                sheet = lib.user.store_user_sheet(new_user, plain_password)
                session.session.commit()

                flask_session['user_sheet'] = sheet.id
                flash(
                    Markup(
                        u'Benutzer angelegt. <a href="{}" target="_blank">Nutzerdatenblatt</a> verfügbar!'
                        .format(url_for('.user_sheet'))), 'success')

                return redirect(url_for('.user_show', user_id=new_user.id))

    if form.is_submitted():
        if unique_name_error:
            form.name.errors.append(unique_name_error)

        if unique_email_error:
            form.email.errors.append(unique_email_error)

        if unique_mac_error:
            form.mac.errors.append(unique_mac_error)

    return render_template('user/user_create.html', form=form)