<model>
    <mount>//OPNsense/captiveportal</mount>
    <description>
        Captive portal application model
    </description>
    <items>
        <zones>
            <zone type="ArrayField">
                <enabled type="BooleanField">
                    <default>1</default>
                    <Required>Y</Required>
                </enabled>
                <zoneid type="AutoNumberField">
                    <MinimumValue>0</MinimumValue>
                    <MaximumValue>19</MaximumValue>
                    <ValidationMessage>Maximum number of zones reached</ValidationMessage>
                    <Required>Y</Required>
                </zoneid>
                <interfaces type="InterfaceField">
                    <Required>Y</Required>
                    <multiple>Y</multiple>
                    <default>lan</default>
                    <filters>
                        <enable>/^(?!0).*$/</enable>
                        <ipaddr>/^((?!dhcp).)*$/</ipaddr>
                    </filters>
                </interfaces>
                <authservers type="AuthenticationServerField">
                    <Required>N</Required>
                    <multiple>Y</multiple>
                    <default>Local Database</default>
                </authservers>
                <idletimeout type="IntegerField">
                    <Required>Y</Required>
                    <Default>0</Default>
                    <MinimumValue>0</MinimumValue>
                    <MaximumValue>10080</MaximumValue>
                    <ValidationMessage>Idle timeout must be between 0(no timeout) and 10080 (a week)</ValidationMessage>
                </idletimeout>
                <hardtimeout type="IntegerField">
                    <Required>Y</Required>
                    <Default>0</Default>
                    <MinimumValue>0</MinimumValue>
                    <MaximumValue>10080</MaximumValue>
                    <ValidationMessage>Hard timeout must be between 0(no timeout) and 10080 (a week)</ValidationMessage>
                </hardtimeout>
                <concurrentlogins type="BooleanField">
                    <Required>Y</Required>
                    <default>1</default>
                </concurrentlogins>
                <certificate type="CertificateField">
                    <Required>N</Required>
                    <ValidationMessage>Please select a valid certificate from the list</ValidationMessage>
                </certificate>
                <servername type="TextField">
                    <Required>N</Required>
                    <mask>/^([0-9a-zA-Z.,_\-]){0,1024}$/u</mask>
                    <ValidationMessage>Please enter a valid servername, ip address or leave this option blank</ValidationMessage>
                </servername>
                <allowedAddresses type="CSVListField">
                    <Required>N</Required>
                    <mask>/^([\/0-9.,])*/u</mask>
                    <ValidationMessage>Please enter valid addresses</ValidationMessage>
                </allowedAddresses>
                <allowedMACAddresses type="CSVListField">
                    <Required>N</Required>
                    <ChangeCase>lower</ChangeCase>
                    <mask>/^((([0-9a-fA-F]{2}:){5}([0-9a-fA-F]{2})([,]){0,1}))*/u</mask>
                    <ValidationMessage>Please enter valid mac addresses</ValidationMessage>
                </allowedMACAddresses>
                <template type="ModelRelationField">
                    <Model>
                        <template>
                            <source>OPNsense.Captiveportal.Captiveportal</source>
                            <items>templates.template</items>
                            <display>name</display>
                        </template>
                    </Model>
                    <ValidationMessage>Related template not found</ValidationMessage>
                    <Required>N</Required>
                </template>
                <description type="TextField">
                    <Required>Y</Required>
                    <mask>/^([\t\n\v\f\r 0-9a-zA-Z.,_\x{00A0}-\x{FFFF}]){1,255}$/u</mask>
                    <ValidationMessage>Description should be a string between 1 and 255 characters</ValidationMessage>
                </description>
            </zone>
        </zones>
        <templates>
            <template type="ArrayField">
                <fileid type="TextField">
                    <Required>Y</Required>
                    <mask>/[0-9a-zA-Z\-]{1,255}/u</mask>
                    <ValidationMessage>Fileid should be an internally generated unique number</ValidationMessage>
                </fileid>
                <name type="TextField">
                    <Required>Y</Required>
                    <mask>/^([\t\n\v\f\r 0-9a-zA-Z.,_\x{00A0}-\x{FFFF}]){1,255}$/u</mask>
                    <ValidationMessage>Template name should be a string between 1 and 255 characters</ValidationMessage>
                </name>
                <content type="TextField">
                    <Required>Y</Required>
                    <mask>/[0-9a-zA-Z\+\=\/]{20,}/u</mask>
                    <ValidationMessage>File content should be in (base64 encoded) zip format</ValidationMessage>
                </content>
            </template>
        </templates>
    </items>
</model>