net/haproxy: allow to add groups as userlists, refs #1796

This commit is contained in:
Frank Wall
2020-07-26 23:23:07 +02:00
parent 903e64c448
commit d7be04b57e
3 changed files with 42 additions and 12 deletions
@@ -24,4 +24,10 @@
<allownew>true</allownew>
<hint>Type username or choose from list.</hint>
</field>
<field>
<id>group.add_userlist</id>
<label>Add userlist</label>
<type>checkbox</type>
<help>Usually HAproxy userlists are created automatically in a context sensitive way. This option adds this group as userlist, so that it can be referenced in rules/conditions. All special and non-alphanumeric characters will be removed from the userlist name.</help>
</field>
</form>
@@ -1,6 +1,6 @@
<model>
<mount>//OPNsense/HAProxy</mount>
<version>2.8.0</version>
<version>2.9.0</version>
<description>the HAProxy load balancer</description>
<items>
<general>
@@ -2219,6 +2219,10 @@
<Multiple>Y</Multiple>
<Required>N</Required>
</members>
<add_userlist type="BooleanField">
<default>0</default>
<Required>N</Required>
</add_userlist>
</group>
</groups>
<users>
@@ -729,7 +729,7 @@
{% endif %}
{% endfor %}
{% else %}
# WARNING: UserlistAddUsers called with empty user data
# NOTE: UserlistAddUsers called with empty user data
{% endif %}
{# # process all group members #}
{% if linkedGroupData is defined %}
@@ -758,20 +758,32 @@
{% endif %}
{% endfor %}
{% else %}
# WARNING: UserlistAddUsers called with empty group data
# NOTE: UserlistAddUsers called with empty group data
{% endif %}
{%- endmacro %}
{# Macro expects a backend or frontend object. #}
{% macro AddUserlist(proxy) -%}
{% if proxy is defined %}
{% if (proxy.enabled|default("") == '1' and proxy.mode|default("") == 'http' and proxy.basicAuthEnabled|default("") == '1') %}
{# Macro expects a backend/frontend (type 1) or group object (type 2). #}
{% macro AddUserlist(type,object) -%}
{% if (type == '1' and object is defined) %}
{# # frontend/backend object #}
{% if (object.enabled|default("") == '1' and object.mode|default("") == 'http' and object.basicAuthEnabled|default("") == '1') %}
{# # call macro to generate list of unique users #}
{% set userlist_result = UserlistAddUsers(proxy.basicAuthUsers,proxy.basicAuthGroups) %}
{% set userlist_result = UserlistAddUsers(object.basicAuthUsers,object.basicAuthGroups) %}
{# # check result, skip when empty #}
{% if (userlist_result is defined and userlist_result|default("") != "" )%}
userlist list_{{proxy.id}}
# Origin: {{proxy.name}}
userlist list_{{object.id}}
# Origin: {{object.name}}
{{userlist_result}}
{% endif %}
{% endif %}
{% elif (type == '2' and object is defined) %}
{# # group object #}
{% if (object.enabled|default("") == '1' and object.add_userlist|default("") == '1') %}
{# # call macro to generate list of unique users #}
{% set userlist_result = UserlistAddUsers(object.members) %}
{# # check result, skip when empty #}
{% if (userlist_result is defined and userlist_result|default("") != "" ) %}
userlist {{object.name | regex_replace ("[^A-Za-z0-9]","")}}
{{userlist_result}}
{% endif %}
{% endif %}
@@ -951,17 +963,25 @@ userlist acl_{{acl.id}}
{% endfor %}
{% endif %}
{% if helpers.exists('OPNsense.HAProxy.groups') %}
# userlists generated from groups
{% for group in helpers.toList('OPNsense.HAProxy.groups.group') %}
{# # call macro to generate userlist #}
{{ AddUserlist('2',group) -}}
{% endfor %}
{% endif %}
# autogenerated entries for config in backends/frontends
{% if helpers.exists('OPNsense.HAProxy.frontends') %}
{% for frontend in helpers.toList('OPNsense.HAProxy.frontends.frontend') %}
{# # call macro to generate userlist #}
{{ AddUserlist(frontend) -}}
{{ AddUserlist('1',frontend) -}}
{% endfor %}
{% endif %}
{% if helpers.exists('OPNsense.HAProxy.backends') %}
{% for backend in helpers.toList('OPNsense.HAProxy.backends.backend') %}
{# # call macro to generate userlist #}
{{ AddUserlist(backend) -}}
{{ AddUserlist('1',backend) -}}
{% endfor %}
{% endif %}