Browse Source

improved namespace config support

Xabier de Zuazo 11 years ago
parent
commit
51955efcab
2 changed files with 58 additions and 17 deletions
  1. 25 2
      attributes/namespaces.rb
  2. 33 15
      libraries/conf.rb

+ 25 - 2
attributes/namespaces.rb

@@ -11,12 +11,35 @@ default['dovecot']['namespaces'] = [
 #     'separator' => '/',
 #     'prefix' => '',
 #     'location' => 'maildir:~/Maildir',
-#   },
-#   {
+#   }, {
 #     'name' => 'inbox',
 #     'separator' => '/',
 #     'prefix' => '',
 #     'inbox' => 'yes',
+#     'inbox' => true,
+#     'mailboxes' => {
+#       'Drafts' => {
+#         'special_use' => '\Drafts',
+#       },
+#       'Junk' => {
+#         'special_use' => '\Junk',
+#       },
+#       'Trash' => {
+#         'special_use' => '\Trash',
+#       },
+#       'Sent' => {
+#         'special_use' => '\Sent',
+#       },
+#       'Sent Messages' => {
+#         'special_use' => '\Sent',
+#       },
+#       'virtual/All' => {
+#         'special_use' => '\All',
+#       },
+#       'virtual/Flagged' => {
+#         'special_use' => '\All',
+#       },
+#     },
 #   },
 ]
 

+ 33 - 15
libraries/conf.rb

@@ -4,6 +4,14 @@ require 'erubis'
 module Dovecot
   module Conf
 
+    def self.name(str)
+      if str =~ /\s/
+        "\"#{str}\""
+      else
+        str
+      end
+    end
+
     def self.value(v, default = nil)
       if v.nil?
         default.to_s
@@ -39,7 +47,7 @@ module Dovecot
       template =
 '<% confs = @conf.kind_of?(Array)? @conf : [ @conf ]
     confs.each do |conf| -%>
-<%=   @type %> {
+<%=   @Dovecot_Conf.name(@type) %> {
   <%  unless conf.has_key?("driver") -%>
   driver = <%=   @driver %>
   <%  end -%>
@@ -83,14 +91,25 @@ module Dovecot
     def self.namespace(ns)
 
       template =
-'namespace <%= @ns["name"] %> {
-<%   @ns.sort.each do |key, value|
-       if key != "name"
+'namespace <%= @Dovecot_Conf.name(@ns["name"]) %> {
+  <% if @ns["mailboxes"].kind_of?(Array) or @ns["mailboxes"].kind_of?(Hash)
+       mailboxes = @ns["mailboxes"].kind_of?(Array) ? @ns["mailboxes"] : [ @ns["mailboxes"] ]
+       mailboxes.each do |mailbox|
+         mailbox.sort.each do |key, values|
   -%>
-  <%=    key %> = <%= @Dovecot_Conf.value(value) %>
-  <%   end
-     end
--%>
+  mailbox <%= @Dovecot_Conf.name(key) %> {
+  <%       values.sort.each do |key, value| -%>
+    <%=      key %> = <%= @Dovecot_Conf.value(value) %>
+  <%       end -%>
+  }
+  <%     end -%>
+  <%   end -%>
+  <% end -%>
+  <% @ns.sort.each do |key, value|
+       next if key == "mailboxes"
+  -%>
+  <%=  key %> = <%= @Dovecot_Conf.value(value) %>
+  <% end -%>
 }'
 
       eruby = Erubis::Eruby.new(template)
@@ -103,7 +122,7 @@ module Dovecot
     def self.protocol(name, conf)
 
       template =
-'protocol <%= @name %> {
+'protocol <%= @Dovecot_Conf.name(@name) %> {
   <% @conf.sort.each do |key, value| -%>
   <%=  key %> = <%= @Dovecot_Conf.value(value) %>
   <% end -%>
@@ -120,7 +139,7 @@ module Dovecot
     def self.service(name, conf)
 
       template =
-'service <%= @name %> {
+'service <%= @Dovecot_Conf.name(@name) %> {
   <% if @conf["listeners"].kind_of?(Array) or @conf["listeners"].kind_of?(Hash)
       listeners = @conf["listeners"].kind_of?(Array) ? @conf["listeners"] : [ @conf["listeners"] ]
       listeners.each do |listener|
@@ -128,7 +147,7 @@ module Dovecot
           service_proto = service.split(":")[0]
           service_name = service.split(":")[1]
   -%>
-  <%=     service_proto %>_listener <%= service_name %> {
+  <%=     service_proto %>_listener <%= @Dovecot_Conf.name(service_name) %> {
   <%        values.sort.each do |key, value|-%>
     <%=       key %> = <%= @Dovecot_Conf.value(value) %>
   <%        end -%>
@@ -137,10 +156,9 @@ module Dovecot
   <%   end -%>
   <% end -%>
   <% @conf.sort.each do |key, value|
-       if key != "listeners"
+       next if key == "listeners"
   -%>
-  <%=    key %> = <%= @Dovecot_Conf.value(value) %>
-  <%   end -%>
+  <%=  key %> = <%= @Dovecot_Conf.value(value) %>
   <% end -%>
 }'
 
@@ -159,7 +177,7 @@ module Dovecot
 <%     @map.sort.each do |k, v|
          if v.kind_of?(Hash)
 -%>
-  <%=      k %> {
+  <%=      @Dovecot_Conf.name(k) %> {
 <%
            v.sort.each do |k2, v2|
 -%>