# Copyright (C) 2020-2024 Soleta Networks # # This program is free software: you can redistribute it and/or modify it under # the terms of the GNU Affero General Public License as published by the # Free Software Foundation; either version 3 of the License, or # (at your option) any later version. from wtforms import ( Form, SubmitField, HiddenField, SelectField, BooleanField, IntegerField, StringField, RadioField, FormField, FieldList, DecimalField, TextAreaField, SelectMultipleField ) from wtforms.validators import InputRequired from flask_wtf import FlaskForm from flask_babel import lazy_gettext as _l from flask_babel import _ class GenericForm(FlaskForm): ips = HiddenField() ids = HiddenField() server = HiddenField() submit = SubmitField(label=_l('Submit')) class WOLForm(FlaskForm): ips = HiddenField() wol_type = SelectField(label=_l('Type'), choices=[('broadcast', 'Broadcast'), ('unicast', 'Unicast')]) submit = SubmitField(label=_l('Submit')) class PartitionForm(FlaskForm): partition = IntegerField(label=_l('Partition'), render_kw={'readonly': True}, default=1) part_type = SelectField(label=_l('Type'), validators=[InputRequired()], choices=[('LINUX', 'Linux'), ('NTFS', 'NTFS'), ('CACHE', 'CACHE'), ('EFI', 'EFI'), ('DATA', 'DATA'), ('LINUX-SWAP', 'LINUX-SWAP'), ('EXTENDED', 'EXTENDED'), ('FAT32', 'FAT32'), ('LINUX-LVM', 'LINUX-LVM'), ('LINUX-RAID', 'LINUX-RAID'), ('WIN-RECOV', 'WIN-RECOV'), ('HNTFS', 'HNTFS'), ('HFAT32', 'HFAT32'), ('HNTFS-WINRE', 'HNTFS-WINRE'), ('EMPTY', 'Empty')], default='EMPTY') fs = SelectField(label=_l('Filesystem'), validators=[InputRequired()], choices=[('EXT4', 'EXT4'), ('NTFS', 'NTFS'), ('CACHE', 'CACHE'), ('LINUX-SWAP', 'LINUX-SWAP'), ('FAT32', 'FAT32'), ('EMPTY', 'Empty')], default='EMPTY') size = IntegerField(label=_l('Size (KB)'), validators=[InputRequired()],) class SelectClientForm(FlaskForm): ips = HiddenField() selected_client = SelectField(label=_l('Select one client as reference to ' 'define the partition scheme')) submit = SubmitField(label=_l('Select')) class SetupForm(FlaskForm): ips = HiddenField() disk = SelectField(label='Disk', validate_choice=False) disk_type = SelectField(label=_l('Type'), choices=[('MSDOS', 'MBR'), ('GPT', 'GPT')]) partitions = FieldList(FormField(PartitionForm), min_entries=1, max_entries=16) class HardwareForm(FlaskForm): ips = HiddenField() refresh = SubmitField(label=_l('Refresh')) class SoftwareForm(FlaskForm): ips = HiddenField() os = SelectField(label=_l('Partition'), choices=[]) view = SubmitField(label=_l('View')) update = SubmitField(label=_l('Update')) class SessionForm(FlaskForm): ips = HiddenField() os = RadioField(label=_l('Session'), choices=[]) class CacheImage(FlaskForm): selected = BooleanField() image_name = HiddenField() clients = HiddenField() class CacheForm(FlaskForm): ips = HiddenField() images = FieldList(FormField(CacheImage)) class ImageRestoreForm(FlaskForm): ips = HiddenField() partition = SelectField(label=_l('Partition'), choices=[]) image = SelectField(label=_l('Image'), choices=[]) method = SelectField(label=_l('Method'), choices=[('TIPTORRENT', 'TIPTORRENT'), ('UNICAST', 'UNICAST'), ('UNICAST-DIRECT', 'UNICAST-DIRECT')]) restore = SubmitField(label=_l('Restore')) class ImageFetchForm(FlaskForm): ips = HiddenField() image = SelectField(label=_l('Image'), choices=[]) method = SelectField(label=_l('Method'), choices=[('TIPTORRENT', 'TIPTORRENT'), ('UNICAST', 'UNICAST')]) submit = SubmitField(label=_l('Submit')) class RepoForm(FlaskForm): server = HiddenField() repo_id = HiddenField() name = StringField(label=_l('Name')) addr = FieldList( StringField(label=_l('Address')), label=_l('Addresses'), ) submit = SubmitField(label=_l('Submit')) class FolderForm(FlaskForm): folder_id = HiddenField() server = HiddenField() room = HiddenField() center = HiddenField() name = StringField(label=_l('Name')) submit = SubmitField(label=_l('Submit')) class ClientDetailsForm(FlaskForm): server = HiddenField() client_id = HiddenField() name = StringField(label=_l('Name'), validators=[InputRequired()]) ip = StringField(label=_l('IP'), validators=[InputRequired()]) mac = StringField(label=_l('MAC'), validators=[InputRequired()]) serial_number = StringField(label=_l('Serial Number')) livedir = SelectField(label=_l('ogLive'), choices=[('ogLive', 'Default'),]) remote = BooleanField(label=_l('Remote')) maintenance = BooleanField(label=_l('Maintenance')) repo = SelectField(label=_l('Repository'), validate_choice=False) room = SelectField(label=_l('Room'), validate_choice=False) folder_id = HiddenField() boot = SelectField(label=_l('Boot Mode'), validate_choice=False) submit = SubmitField(label=_l('Submit')) class ClientMoveForm(FlaskForm): ips = HiddenField() scopes = SelectField(label=_l('Scopes'), validate_choice=False) submit = SubmitField(label=_l('Submit')) class RunScriptForm(FlaskForm): ips = HiddenField() script = SelectField(label=_l('Script'), choices=[], validators=[InputRequired()], validate_choice=False) arguments = StringField(label=_l('Arguments')) submit = SubmitField(label=_l('Submit')) class RunCmdForm(FlaskForm): ips = HiddenField() command = StringField(label=_l('Command')) submit = SubmitField(label=_l('Submit')) class ImportClientsForm(FlaskForm): server = HiddenField() room = SelectField(label=_l('Room')) repo = SelectField(label=_l('Repository')) client_conf = TextAreaField(label=_l('Client configuration')) import_btn = SubmitField(label=_l('Import')) class BootModeForm(FlaskForm): ips = HiddenField() boot = SelectField(label=_l('Boot mode')) ok = SubmitField(label=_l('Submit')) class OgliveForm(FlaskForm): ips = HiddenField() oglive = SelectField(label=_l('ogLive')) ok = SubmitField(label=_l('Submit')) class SetRepoForm(FlaskForm): ips = HiddenField() repo = SelectField(label=_l('Repository')) ok = SubmitField(label=_l('Submit')) class ImageCreateForm(FlaskForm): ip = HiddenField() os = SelectField(label=_l('Partition'), choices=[]) name = StringField(label=_l('Image name'), validators=[InputRequired()]) description = StringField(label=_l('Description')) repository = SelectField(label=_l('Repository'), choices=[], validators=[InputRequired()]) create = SubmitField(label=_l('Create')) class ImageUpdateForm(FlaskForm): ip = HiddenField() os = SelectField(label=_l('Partition'), choices=[]) image = SelectField(label=_l('Image'), choices=[]) backup = BooleanField(label=_l('Backup')) update = SubmitField(label=_l('Update')) class CenterForm(FlaskForm): server = SelectField(label=_l('Server'), validators=[InputRequired()]) center = HiddenField() name = StringField(label=_l('Center name'), validators=[InputRequired()]) comment = StringField(label=_l('Comment')) submit = SubmitField(label=_l('Submit')) class DeleteCenterForm(FlaskForm): server = HiddenField() center = HiddenField() submit = SubmitField(label=_l('Submit')) class RoomForm(FlaskForm): server = HiddenField() room = HiddenField() center = SelectField(label=_l('Center'), validators=[InputRequired()]) name = StringField(label=_l('Room name'), validators=[InputRequired()]) netmask = StringField(label=_l('Netmask'), validators=[InputRequired()]) gateway = StringField(label=_l('Gateway'), validators=[InputRequired()]) folder_id = HiddenField() submit = SubmitField(label=_l('Submit')) class DeleteRoomForm(FlaskForm): server = HiddenField() room = HiddenField() submit = SubmitField(label=_l('Submit')) class ImageDetailsForm(FlaskForm): name = StringField(label=_l('Name')) description = StringField(label=_l('Description')) size = DecimalField(label=_l('Size (MiB)')) datasize = DecimalField(label=_l('Datasize (MiB)')) modified = StringField(label=_l('Last update')) permissions = StringField(label=_l('Permissions')) software_id = StringField(label=_l('Software id')) checksum = StringField(label=_l('Checksum')) scopes = SelectMultipleField( label=_l('Allowed scopes'), description=_l('No scope selection gives full access'), ) class ImageConfigForm(FlaskForm): image_id = HiddenField() server = HiddenField() name = HiddenField() scopes = SelectMultipleField( label=_l('Allowed scopes'), description=_l('No scope selection gives full access'), ) submit = SubmitField(label=_l('Submit')) class ServerForm(FlaskForm): name = StringField(label=_l('Name'), validators=[InputRequired()]) ip = StringField(label=_l('IP'), validators=[InputRequired()]) port = StringField(label=_l('Port'), validators=[InputRequired()]) api_token = StringField(label=_l('API token'), validators=[InputRequired()]) submit = SubmitField(label=_l('Submit')) class ServerConfigurationForm(FlaskForm): server_addr = HiddenField() addr = FieldList( StringField(label=_l('Address')), label=_l('Addresses'), ) submit = SubmitField(label=_l('Submit')) class DeleteRepositoryForm(FlaskForm): repository = SelectField(label=_l('Repository'), validators=[InputRequired()]) submit = SubmitField(label=_l('Submit'))