File: authz_core_config.rb

package info (click to toggle)
puppet-module-puppetlabs-apache 12.2.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,664 kB
  • sloc: ruby: 275; sh: 32; makefile: 2
file content (78 lines) | stat: -rw-r--r-- 1,971 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
# frozen_string_literal: true

# @summary
#   Function to generate the authz_core configuration directives.
#
Puppet::Functions.create_function(:'apache::authz_core_config') do
  # @param config
  #   The input as JSON format.
  #
  # @return
  #   Returns the authz_core config directives in array.
  #
  # @example
  #
  #    arg = {
  #      require_all => {
  #       'require_any' => {
  #         'require' => ['user superadmin'],
  #         'require_all' => {
  #           'require' => ['group admins'],
  #         },
  #        },
  #       'require_none' => {
  #         'require' => ['group temps']
  #       }
  #      }
  #    }
  #
  #    apache::bool2httpd(arg)
  #    returns :
  #    [
  #      "  <RequireAll>",
  #      "    <RequireAny>",
  #      "      Require user superadmin",
  #      "      <RequireAll>",
  #      "        Require group admins",
  #      "        Require ldap-group \"cn=Administrators,o=Airius\"",
  #      "      </RequireAll>",
  #      "    </RequireAny>",
  #      "    <RequireNone>",
  #      "      Require group temps",
  #      "      Require ldap-group \"cn=Temporary Employees,o=Airius\"",
  #      "    </RequireNone>",
  #      "  </RequireAll>"
  #    ]
  #
  dispatch :authz_core_config do
    param 'Hash', :config
    return_type 'Array'
  end

  private

  def build_directive(value)
    value.split('_').map(&:capitalize).join
  end

  def authz_core_config(config, count = 1)
    result_string = []
    config.map do |key, value|
      directive = build_directive(key)
      if value.is_a?(Hash)
        result_string << spacing("<#{directive}>", count)
        result_string << authz_core_config(value, count + 1)
        result_string << spacing("</#{directive}>", count)
      else
        value.map do |v|
          result_string << spacing("#{directive} #{v}", count)
        end
      end
    end
    result_string.flatten
  end

  def spacing(string, count)
    ('  ' * count) + string
  end
end