2026-02-17 08:42:33 +00:00
from flask_wtf import FlaskForm
from flask_wtf . file import FileAllowed , FileRequired
2026-02-19 16:42:57 +00:00
from wtforms import StringField , PasswordField , SubmitField , BooleanField , FileField , RadioField
from wtforms . validators import DataRequired , ValidationError , Length
2026-02-17 08:42:33 +00:00
from flask_babel import lazy_gettext as _l
2026-02-19 16:42:57 +00:00
import re
def hostname_check ( form , field ) :
regex = re . compile ( " [a-zA-Z0-9-_]+ " )
matches = re . fullmatch ( regex , field . data )
if not matches :
raise ValidationError ( _l ( ' Only dashes, underscores, letters and numbers allowed ' ) )
2026-02-17 08:42:33 +00:00
class LoginForm ( FlaskForm ) :
username = StringField ( _l ( ' Username ' ) , validators = [ DataRequired ( ) ] )
password = PasswordField ( _l ( ' Password ' ) , validators = [ DataRequired ( ) ] )
submit = SubmitField ( _l ( ' Sign In ' ) )
remember_me = BooleanField ( ' Remember Me ' )
class SettingsForm ( FlaskForm ) :
# Access point settings
2026-02-19 16:42:57 +00:00
ssid = StringField ( _l ( ' SSID ' ) , validators = [ DataRequired ( ) , Length ( 1 , 64 ) , hostname_check ] )
wifi_password = StringField ( _l ( ' WiFi Password ' ) , validators = [ Length ( 0 , 64 ) ] )
2026-02-17 10:23:25 +00:00
enable_access_point = BooleanField ( _l ( ' Enable Access Point ' ) )
2026-02-17 08:42:33 +00:00
# Customisation settings
butterbox_name = StringField ( _l ( ' Butterbox Name ' ) , validators = [ DataRequired ( ) ] )
butterbox_logo = FileField ( ( _l ( ' Butterbox Logo ' ) ) , validators = [ FileAllowed ( [ ' jpg ' , ' png ' , ' svg ' ] , ' Images only! ' ) ] )
# Services settings
2026-02-17 10:23:25 +00:00
enable_file_viewer = BooleanField ( _l ( ' Enable File Viewer ' ) )
enable_map_viewer = BooleanField ( _l ( ' Enable Map Viewer ' ) )
enable_chat = BooleanField ( _l ( ' Enable Chat ' ) )
enable_app_store = BooleanField ( _l ( ' Enable App Store ' ) )
enable_deltachat = BooleanField ( _l ( ' Enable DeltaChat ' ) )
2026-02-19 16:42:57 +00:00
enable_wifi_sharing = BooleanField ( _l ( ' Enable WiFi Sharing ' ) )
2026-02-17 08:42:33 +00:00
# Access Settings
admin_password = PasswordField ( _l ( ' Admin Password ' ) )
2026-02-19 16:42:57 +00:00
root_account_settings = RadioField ( _l ( ' Secure Root Account Method ' ) , choices = [ ( ' lock_root_account ' , ' Lock root account ' ) , ( ' set_root_password ' , ' Set root password ' ) ] , validators = [ DataRequired ( ) ] )
ssh_access_settings = RadioField ( _l ( ' SSH Access Method ' ) , choices = [ ( ' disable_ssh ' , ' Disable SSH ' ) , ( ' enable_ssh_with_root_password ' , ' Enable SSH with root password ' ) , ( ' enable_ssh_with_public_key ' , ' Enable SSH with public key ' ) , ] , validators = [ DataRequired ( ) ] )
lock_root_account = BooleanField ( _l ( ' Lock Root Account ' ) )
butterbox_hostname = StringField ( _l ( ' Butterbox Hostname ' ) , validators = [ DataRequired ( ) , Length ( 1 , 64 ) , hostname_check ] )
2026-02-17 08:42:33 +00:00
submit = SubmitField ( _l ( ' Submit ' ) )
apply_changes = SubmitField ( _l ( ' Apply Changes ' ) )