rmails 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (332) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +20 -0
  3. data/Gemfile +24 -0
  4. data/Gemfile.lock +167 -0
  5. data/LICENSE.txt +20 -0
  6. data/README.markdown +9 -0
  7. data/Rakefile +31 -0
  8. data/Rakefile1 +9 -0
  9. data/Vagrantfile +51 -0
  10. data/app/assets/images/arrow_bottom.gif +0 -0
  11. data/app/assets/images/arrow_right.gif +0 -0
  12. data/app/assets/images/at-sign.png +0 -0
  13. data/app/assets/images/checkerboard.gif +0 -0
  14. data/app/assets/images/glyphicons-halflings-white.png +0 -0
  15. data/app/assets/images/glyphicons-halflings.png +0 -0
  16. data/app/assets/images/icon_draft.gif +0 -0
  17. data/app/assets/images/icon_layout.gif +0 -0
  18. data/app/assets/images/icon_move.gif +0 -0
  19. data/app/assets/images/icon_regular.gif +0 -0
  20. data/app/assets/images/icon_snippet.gif +0 -0
  21. data/app/assets/images/nav_arrow.png +0 -0
  22. data/app/assets/images/x.png +0 -0
  23. data/app/assets/javascripts/application.coffee.erb +27 -0
  24. data/app/assets/javascripts/canjs/can.construct.proxy.js +60 -0
  25. data/app/assets/javascripts/canjs/can.construct.super.js +44 -0
  26. data/app/assets/javascripts/canjs/can.control.plugin.js +245 -0
  27. data/app/assets/javascripts/canjs/can.control.view.js +88 -0
  28. data/app/assets/javascripts/canjs/can.dojo.js +3669 -0
  29. data/app/assets/javascripts/canjs/can.dojo.min.js +66 -0
  30. data/app/assets/javascripts/canjs/can.fixture.js +1020 -0
  31. data/app/assets/javascripts/canjs/can.jquery.js +2995 -0
  32. data/app/assets/javascripts/canjs/can.jquery.min.js +52 -0
  33. data/app/assets/javascripts/canjs/can.mootools.js +3462 -0
  34. data/app/assets/javascripts/canjs/can.mootools.min.js +63 -0
  35. data/app/assets/javascripts/canjs/can.observe.attributes.js +293 -0
  36. data/app/assets/javascripts/canjs/can.observe.backup.js +368 -0
  37. data/app/assets/javascripts/canjs/can.observe.delegate.js +359 -0
  38. data/app/assets/javascripts/canjs/can.observe.setter.js +58 -0
  39. data/app/assets/javascripts/canjs/can.observe.validations.js +374 -0
  40. data/app/assets/javascripts/canjs/can.view.modifiers.js +292 -0
  41. data/app/assets/javascripts/canjs/can.yui.js +3530 -0
  42. data/app/assets/javascripts/canjs/can.yui.min.js +65 -0
  43. data/app/assets/javascripts/canjs/can.zepto.js +3426 -0
  44. data/app/assets/javascripts/canjs/can.zepto.min.js +62 -0
  45. data/app/assets/javascripts/controls/admins.coffee.erb +105 -0
  46. data/app/assets/javascripts/controls/aliases.coffee.erb +91 -0
  47. data/app/assets/javascripts/controls/domains.coffee.erb +115 -0
  48. data/app/assets/javascripts/controls/settings.coffee.erb +47 -0
  49. data/app/assets/javascripts/controls/users.coffee.erb +94 -0
  50. data/app/assets/javascripts/lib/facebox.js +311 -0
  51. data/app/assets/javascripts/lib/html5.js +2 -0
  52. data/app/assets/javascripts/lib/jquery.js +9301 -0
  53. data/app/assets/javascripts/lib/jquery_formparams.js +108 -0
  54. data/app/assets/javascripts/lib/jquery_input_hint.js +20 -0
  55. data/app/assets/javascripts/lib/jquery_paginate.js +120 -0
  56. data/app/assets/javascripts/lib/jquery_ui_custom.js +6 -0
  57. data/app/assets/javascripts/lib/json2.js +487 -0
  58. data/app/assets/javascripts/lib/utils.coffee.erb +48 -0
  59. data/app/assets/javascripts/models/admin.coffee.erb +42 -0
  60. data/app/assets/javascripts/models/alias.coffee.erb +28 -0
  61. data/app/assets/javascripts/models/domain.coffee.erb +39 -0
  62. data/app/assets/javascripts/models/property.coffee.erb +18 -0
  63. data/app/assets/javascripts/models/user.coffee.erb +29 -0
  64. data/app/assets/stylesheets/application.sass +156 -0
  65. data/app/assets/stylesheets/base.css.sass +243 -0
  66. data/app/assets/stylesheets/facebox.css +80 -0
  67. data/app/assets/stylesheets/lib/bootstrap.css +9 -0
  68. data/app/assets/stylesheets/twitter/bootstrap-responsive.scss +1 -0
  69. data/app/assets/stylesheets/twitter/bootstrap.scss +63 -0
  70. data/app/assets/stylesheets/twitter/bootstrap/_accordion.scss +34 -0
  71. data/app/assets/stylesheets/twitter/bootstrap/_alerts.scss +79 -0
  72. data/app/assets/stylesheets/twitter/bootstrap/_breadcrumbs.scss +24 -0
  73. data/app/assets/stylesheets/twitter/bootstrap/_button-groups.scss +229 -0
  74. data/app/assets/stylesheets/twitter/bootstrap/_buttons.scss +228 -0
  75. data/app/assets/stylesheets/twitter/bootstrap/_carousel.scss +158 -0
  76. data/app/assets/stylesheets/twitter/bootstrap/_close.scss +32 -0
  77. data/app/assets/stylesheets/twitter/bootstrap/_code.scss +61 -0
  78. data/app/assets/stylesheets/twitter/bootstrap/_component-animations.scss +22 -0
  79. data/app/assets/stylesheets/twitter/bootstrap/_dropdowns.scss +237 -0
  80. data/app/assets/stylesheets/twitter/bootstrap/_forms.scss +689 -0
  81. data/app/assets/stylesheets/twitter/bootstrap/_grid.scss +21 -0
  82. data/app/assets/stylesheets/twitter/bootstrap/_hero-unit.scss +25 -0
  83. data/app/assets/stylesheets/twitter/bootstrap/_labels-badges.scss +83 -0
  84. data/app/assets/stylesheets/twitter/bootstrap/_layouts.scss +16 -0
  85. data/app/assets/stylesheets/twitter/bootstrap/_media.scss +55 -0
  86. data/app/assets/stylesheets/twitter/bootstrap/_mixins.scss +690 -0
  87. data/app/assets/stylesheets/twitter/bootstrap/_modals.scss +95 -0
  88. data/app/assets/stylesheets/twitter/bootstrap/_navbar.scss +497 -0
  89. data/app/assets/stylesheets/twitter/bootstrap/_navs.scss +409 -0
  90. data/app/assets/stylesheets/twitter/bootstrap/_pager.scss +43 -0
  91. data/app/assets/stylesheets/twitter/bootstrap/_pagination.scss +123 -0
  92. data/app/assets/stylesheets/twitter/bootstrap/_popovers.scss +133 -0
  93. data/app/assets/stylesheets/twitter/bootstrap/_progress-bars.scss +122 -0
  94. data/app/assets/stylesheets/twitter/bootstrap/_reset.scss +216 -0
  95. data/app/assets/stylesheets/twitter/bootstrap/_responsive-1200px-min.scss +28 -0
  96. data/app/assets/stylesheets/twitter/bootstrap/_responsive-767px-max.scss +193 -0
  97. data/app/assets/stylesheets/twitter/bootstrap/_responsive-768px-979px.scss +19 -0
  98. data/app/assets/stylesheets/twitter/bootstrap/_responsive-navbar.scss +189 -0
  99. data/app/assets/stylesheets/twitter/bootstrap/_responsive-utilities.scss +74 -0
  100. data/app/assets/stylesheets/twitter/bootstrap/_scaffolding.scss +53 -0
  101. data/app/assets/stylesheets/twitter/bootstrap/_sprites.scss +197 -0
  102. data/app/assets/stylesheets/twitter/bootstrap/_tables.scss +235 -0
  103. data/app/assets/stylesheets/twitter/bootstrap/_thumbnails.scss +53 -0
  104. data/app/assets/stylesheets/twitter/bootstrap/_tooltip.scss +70 -0
  105. data/app/assets/stylesheets/twitter/bootstrap/_type.scss +247 -0
  106. data/app/assets/stylesheets/twitter/bootstrap/_utilities.scss +45 -0
  107. data/app/assets/stylesheets/twitter/bootstrap/_variables.scss +301 -0
  108. data/app/assets/stylesheets/twitter/bootstrap/_wells.scss +29 -0
  109. data/app/assets/stylesheets/twitter/bootstrap/responsive.scss +48 -0
  110. data/app/controllers/admin_users_controller.rb +62 -0
  111. data/app/controllers/aliases_controller.rb +35 -0
  112. data/app/controllers/application_controller.rb +20 -0
  113. data/app/controllers/domains_controller.rb +48 -0
  114. data/app/controllers/server_controller.rb +28 -0
  115. data/app/controllers/users_controller.rb +35 -0
  116. data/app/helpers/admin_users_helper.rb +11 -0
  117. data/app/helpers/application_helper.rb +2 -0
  118. data/app/helpers/domains_helper.rb +25 -0
  119. data/app/helpers/server_helper.rb +30 -0
  120. data/app/mailers/.gitkeep +0 -0
  121. data/app/models/.gitkeep +0 -0
  122. data/app/models/admin_user.rb +54 -0
  123. data/app/models/certificate_manager.rb +46 -0
  124. data/app/models/property.rb +103 -0
  125. data/app/models/property/awstats.rb +15 -0
  126. data/app/models/property/dovecot.rb +61 -0
  127. data/app/models/property/dspam.rb +45 -0
  128. data/app/models/property/nginx.rb +47 -0
  129. data/app/models/property/postfix.rb +64 -0
  130. data/app/models/property_value_validator.rb +41 -0
  131. data/app/models/system_manager.rb +88 -0
  132. data/app/models/virtual_alias.rb +13 -0
  133. data/app/models/virtual_domain.rb +15 -0
  134. data/app/models/virtual_user.rb +51 -0
  135. data/app/views/admin_users/_form.html.haml +21 -0
  136. data/app/views/admin_users/first.html.haml +12 -0
  137. data/app/views/admin_users/index.html.haml +61 -0
  138. data/app/views/aliases/_form.html.haml +11 -0
  139. data/app/views/aliases/_list.html.haml +0 -0
  140. data/app/views/devise/confirmations/new.html.haml +9 -0
  141. data/app/views/devise/mailer/confirmation_instructions.html.haml +4 -0
  142. data/app/views/devise/mailer/reset_password_instructions.html.haml +6 -0
  143. data/app/views/devise/mailer/unlock_instructions.html.haml +5 -0
  144. data/app/views/devise/passwords/edit.html.haml +14 -0
  145. data/app/views/devise/passwords/new.html.haml +12 -0
  146. data/app/views/devise/registrations/edit.html.haml +18 -0
  147. data/app/views/devise/registrations/new.html.haml +10 -0
  148. data/app/views/devise/sessions/new.html.haml +16 -0
  149. data/app/views/devise/shared/_links.haml +17 -0
  150. data/app/views/devise/unlocks/new.html.haml +11 -0
  151. data/app/views/domains/_fields.html.haml +0 -0
  152. data/app/views/domains/_form.html.haml +7 -0
  153. data/app/views/domains/index.html.haml +133 -0
  154. data/app/views/domains/show.html.haml +1 -0
  155. data/app/views/layouts/_nav.html.haml +3 -0
  156. data/app/views/layouts/application.html.haml +29 -0
  157. data/app/views/server/_certificates.html.haml +10 -0
  158. data/app/views/server/_dovecot.html.haml +27 -0
  159. data/app/views/server/_dspam.html.haml +9 -0
  160. data/app/views/server/_postfix_info.html.haml +5 -0
  161. data/app/views/server/_postfix_test.html.haml +5 -0
  162. data/app/views/server/_status.html.haml +11 -0
  163. data/app/views/server/index.html.haml +36 -0
  164. data/app/views/users/_form.html.haml +11 -0
  165. data/app/views/users/_list.html.haml +0 -0
  166. data/bin/rmails +43 -0
  167. data/config.ru +4 -0
  168. data/config/application.rb +62 -0
  169. data/config/boot.rb +6 -0
  170. data/config/environment.rb +5 -0
  171. data/config/environments/development.rb +37 -0
  172. data/config/environments/production.rb +67 -0
  173. data/config/environments/test.rb +37 -0
  174. data/config/initializers/backtrace_silencers.rb +7 -0
  175. data/config/initializers/devise.rb +240 -0
  176. data/config/initializers/devise_encryptable.rb +37 -0
  177. data/config/initializers/devise_models.rb +86 -0
  178. data/config/initializers/inflections.rb +15 -0
  179. data/config/initializers/mime_types.rb +5 -0
  180. data/config/initializers/secret_token.rb +7 -0
  181. data/config/initializers/session_store.rb +8 -0
  182. data/config/initializers/simple_form.rb +142 -0
  183. data/config/initializers/simple_form_bootstrap.rb +45 -0
  184. data/config/initializers/wrap_parameters.rb +14 -0
  185. data/config/locales/cz.yml +45 -0
  186. data/config/locales/devise.cz.yml +47 -0
  187. data/config/locales/devise.en.yml +60 -0
  188. data/config/locales/en.yml +5 -0
  189. data/config/locales/server/cz.yml +14 -0
  190. data/config/locales/server/en.yml +7 -0
  191. data/config/locales/server/help/dovecot/cz.yml +21 -0
  192. data/config/locales/server/help/dovecot/en.yml +18 -0
  193. data/config/locales/server/help/dspam/cz.yml +10 -0
  194. data/config/locales/server/help/dspam/en.yml +4 -0
  195. data/config/locales/server/key/dovecot/cz.yml +23 -0
  196. data/config/locales/server/key/dovecot/en.yml +20 -0
  197. data/config/locales/server/key/dspam/cz.yml +10 -0
  198. data/config/locales/server/key/dspam/en.yml +4 -0
  199. data/config/locales/simple_form.en.yml +26 -0
  200. data/config/locales/views/admin_users/cz.yml +25 -0
  201. data/config/locales/views/admin_users/en.yml +5 -0
  202. data/config/locales/views/aliases/cz.yml +17 -0
  203. data/config/locales/views/aliases/en.yml +1 -0
  204. data/config/locales/views/devise/cz.yml +26 -0
  205. data/config/locales/views/devise/en.yml +13 -0
  206. data/config/locales/views/domains/cz.yml +15 -0
  207. data/config/locales/views/domains/en.yml +15 -0
  208. data/config/locales/views/server/cz.yml +19 -0
  209. data/config/locales/views/server/en.yml +3 -0
  210. data/config/locales/views/users/cz.yml +18 -0
  211. data/config/locales/views/users/en.yml +1 -0
  212. data/config/routes.rb +80 -0
  213. data/db/migrate/20121112201233_virtual_domain.rb +11 -0
  214. data/db/migrate/20121112201247_virtual_alias.rb +10 -0
  215. data/db/migrate/20121112201341_virtual_user.rb +34 -0
  216. data/db/migrate/20121112201359_create_admin_user.rb +30 -0
  217. data/db/migrate/20121112201411_server_configuration.rb +13 -0
  218. data/db/migrate/20130304083938_join_domains_users.rb +12 -0
  219. data/db/migrate/20130311214040_create_versions.rb +18 -0
  220. data/db/seeds.rb +45 -0
  221. data/lib/devise-encryptable.rb +1 -0
  222. data/lib/rmails.rb +5 -0
  223. data/lib/rmails/installer.rb +37 -0
  224. data/lib/rmails/version.rb +3 -0
  225. data/lib/tasks/.gitkeep +0 -0
  226. data/lib/templates/haml/scaffold/_form.html.haml +10 -0
  227. data/locals +0 -0
  228. data/log/.gitkeep +0 -0
  229. data/public/404.html +26 -0
  230. data/public/422.html +26 -0
  231. data/public/500.html +25 -0
  232. data/public/favicon.ico +0 -0
  233. data/public/fonts/London.eot +0 -0
  234. data/public/fonts/London.otf +0 -0
  235. data/public/fonts/London.woff +0 -0
  236. data/public/fonts/LondonBold.otf +0 -0
  237. data/public/robots.txt +5 -0
  238. data/rmails.gemspec +35 -0
  239. data/script/prepflog.pl +576 -0
  240. data/script/rails +6 -0
  241. data/system/config/automateit_env.rb +16 -0
  242. data/system/config/fields.yml +48 -0
  243. data/system/config/tags.yml +39 -0
  244. data/system/dist/README_AutomateIt_dist.txt +20 -0
  245. data/system/dist/amavis/spamassassin.cf.erb +85 -0
  246. data/system/dist/amavis/user.erb +33 -0
  247. data/system/dist/awstats/awstats.mail.conf.erb +41 -0
  248. data/system/dist/awstats/prepflog.pl +576 -0
  249. data/system/dist/dovecot/dovecot-sql.conf.ext.erb +14 -0
  250. data/system/dist/dovecot/dovecot.conf.erb +297 -0
  251. data/system/dist/dovecot/old_dovecot.conf.erb +63 -0
  252. data/system/dist/dspam/conf.erb +96 -0
  253. data/system/dist/dspam/pgsql.conf +33 -0
  254. data/system/dist/nginx/awstats.erb +17 -0
  255. data/system/dist/nginx/rmails.erb +40 -0
  256. data/system/dist/postfix/email2email.cf.erb +5 -0
  257. data/system/dist/postfix/main.cf.erb +118 -0
  258. data/system/dist/postfix/master.cf.erb +74 -0
  259. data/system/dist/postfix/sasl.conf.erb +3 -0
  260. data/system/dist/postfix/sender_login_maps.cf.erb +5 -0
  261. data/system/dist/postfix/virtual_alias_maps.cf.erb +5 -0
  262. data/system/dist/postfix/virtual_mailbox_domains.cf.erb +5 -0
  263. data/system/dist/postfix/virtual_mailbox_maps.cf.erb +5 -0
  264. data/system/dist/postgresql/postgresql.conf.erb +54 -0
  265. data/system/dist/rmails/Gemfile.1 +8 -0
  266. data/system/dist/rmails/Gemfile.2 +24 -0
  267. data/system/dist/rmails/database.yml.erb +15 -0
  268. data/system/dist/sudoers +37 -0
  269. data/system/lib/README_AutomateIt_lib.txt +22 -0
  270. data/system/lib/dkim_key.rb +9 -0
  271. data/system/lib/smtpd_key.rb +39 -0
  272. data/system/lib/ssl.rb +23 -0
  273. data/system/recipes/01_prepare_server.rb +84 -0
  274. data/system/recipes/02_setup_database.rb +65 -0
  275. data/system/recipes/03_setup_postfix.rb +124 -0
  276. data/system/recipes/04_setup_dovecot.rb +78 -0
  277. data/system/recipes/05_setup_nginx.rb +29 -0
  278. data/system/recipes/06_setup_dspam.rb +24 -0
  279. data/system/recipes/07_setup_amavis.rb +16 -0
  280. data/system/recipes/08_setup_spamassassin.rb +22 -0
  281. data/system/recipes/09_setup_awstats.rb +49 -0
  282. data/system/recipes/XX_start_services.rb +5 -0
  283. data/test/fixtures/.gitkeep +0 -0
  284. data/test/functional/.gitkeep +0 -0
  285. data/test/functional/aliases_controller_test.rb +7 -0
  286. data/test/functional/domains_controller_test.rb +7 -0
  287. data/test/functional/users_controller_test.rb +7 -0
  288. data/test/integration/.gitkeep +0 -0
  289. data/test/performance/browsing_test.rb +12 -0
  290. data/test/test_helper.rb +13 -0
  291. data/test/unit/.gitkeep +0 -0
  292. data/test/unit/helpers/aliases_helper_test.rb +4 -0
  293. data/test/unit/helpers/domains_helper_test.rb +4 -0
  294. data/test/unit/helpers/users_helper_test.rb +4 -0
  295. data/vendor/assets/javascripts/.gitkeep +0 -0
  296. data/vendor/assets/javascripts/canjs/can.construct.proxy.js +60 -0
  297. data/vendor/assets/javascripts/canjs/can.construct.super.js +44 -0
  298. data/vendor/assets/javascripts/canjs/can.control.plugin.js +245 -0
  299. data/vendor/assets/javascripts/canjs/can.control.view.js +88 -0
  300. data/vendor/assets/javascripts/canjs/can.dojo.js +3669 -0
  301. data/vendor/assets/javascripts/canjs/can.dojo.min.js +66 -0
  302. data/vendor/assets/javascripts/canjs/can.fixture.js +1020 -0
  303. data/vendor/assets/javascripts/canjs/can.jquery.js +2995 -0
  304. data/vendor/assets/javascripts/canjs/can.jquery.min.js +52 -0
  305. data/vendor/assets/javascripts/canjs/can.mootools.js +3462 -0
  306. data/vendor/assets/javascripts/canjs/can.mootools.min.js +63 -0
  307. data/vendor/assets/javascripts/canjs/can.observe.attributes.js +293 -0
  308. data/vendor/assets/javascripts/canjs/can.observe.backup.js +368 -0
  309. data/vendor/assets/javascripts/canjs/can.observe.delegate.js +359 -0
  310. data/vendor/assets/javascripts/canjs/can.observe.setter.js +58 -0
  311. data/vendor/assets/javascripts/canjs/can.observe.validations.js +374 -0
  312. data/vendor/assets/javascripts/canjs/can.view.modifiers.js +292 -0
  313. data/vendor/assets/javascripts/canjs/can.yui.js +3530 -0
  314. data/vendor/assets/javascripts/canjs/can.yui.min.js +65 -0
  315. data/vendor/assets/javascripts/canjs/can.zepto.js +3426 -0
  316. data/vendor/assets/javascripts/canjs/can.zepto.min.js +62 -0
  317. data/vendor/assets/javascripts/twitter/bootstrap-affix.js +104 -0
  318. data/vendor/assets/javascripts/twitter/bootstrap-alert.js +90 -0
  319. data/vendor/assets/javascripts/twitter/bootstrap-button.js +96 -0
  320. data/vendor/assets/javascripts/twitter/bootstrap-carousel.js +176 -0
  321. data/vendor/assets/javascripts/twitter/bootstrap-collapse.js +158 -0
  322. data/vendor/assets/javascripts/twitter/bootstrap-dropdown.js +150 -0
  323. data/vendor/assets/javascripts/twitter/bootstrap-modal.js +239 -0
  324. data/vendor/assets/javascripts/twitter/bootstrap-popover.js +103 -0
  325. data/vendor/assets/javascripts/twitter/bootstrap-scrollspy.js +151 -0
  326. data/vendor/assets/javascripts/twitter/bootstrap-tab.js +135 -0
  327. data/vendor/assets/javascripts/twitter/bootstrap-tooltip.js +275 -0
  328. data/vendor/assets/javascripts/twitter/bootstrap-transition.js +60 -0
  329. data/vendor/assets/javascripts/twitter/bootstrap-typeahead.js +300 -0
  330. data/vendor/assets/javascripts/twitter/my/bootstrap-typeahead.js +311 -0
  331. data/vendor/assets/stylesheets/.gitkeep +0 -0
  332. metadata +470 -0
@@ -0,0 +1,22 @@
1
+ #-----------------------------------------------------------------------
2
+ #
3
+ # == LIB
4
+ #
5
+ # This is your AutomateIt project's "lib" directory. You can put custom
6
+ # plugins and convenience methods into this directory.
7
+ #
8
+ # For example, create a convenience method for geteting the time by
9
+ # creating a "lib/now.rb" file with the following contents:
10
+ #
11
+ # def now
12
+ # DateTime.now
13
+ # end
14
+ #
15
+ # This will provide a "now" method that's available to your recipes,
16
+ # interactive shell or embedded interpreter.
17
+ #
18
+ # Libraries are loaded every time an AutomateIt interpreter is started.
19
+ # It loads all "*.rb" files in this directory, and all "init.rb" files
20
+ # in subdirectories of this directory.
21
+ #
22
+ #-----------------------------------------------------------------------
@@ -0,0 +1,9 @@
1
+ def generate_dkim_key(domain, keyname=domain)
2
+ sh("opendkim-genkey -r -d #{keyname} -D /etc/ssl/dkim")
3
+ chown 'opendkim', 'opendkim', "/etc/ssl/dkim/#{keyname}.private"
4
+
5
+ key_table = "default._domainkey.#{keyname} #{domain}:default:/etc/ssl/dkim/#{keyname}.private"
6
+ signing_table = "#{domain} default._domainkey.#{keyname}"
7
+
8
+ return key_table, signing_table
9
+ end
@@ -0,0 +1,39 @@
1
+ def generate_smtpd_key(domain)
2
+ #pass = passwords.first||SecureRandom.base64(56)
3
+ #edit :file => pass_file = mktemp do
4
+ # append pass
5
+ #end
6
+
7
+ # create cert. request
8
+ #sh "openssl req -new -key #{key} -out smtpd.csr -passin file:#{pass_file} -subj /C=/ST=/L=/O=/OU=/CN=#{domain}/emailAddress="
9
+ # create a self signed key
10
+ #sh "openssl x509 -req -days 365 -in smtpd.csr -signkey #{key} -out /etc/ssl/certs/smtpd.pem -passin file:#{pass_file}"
11
+ # remove the password from the private certificate
12
+ #sh "openssl rsa -in #{key} -out /etc/ssl/private/smtpd.pem -passin file:#{pass_file}"
13
+
14
+ sh "openssl req -new -newkey rsa:4096 -x509 -days 3650 -nodes -out /etc/ssl/certs/smtpd.pem -keyout /etc/ssl/private/smtpd.pem -subj /C=/ST=/L=/O=/OU=/CN=#{domain}/emailAddress=#{lookup('dovecot#postmaster')}"
15
+
16
+ chperm '/etc/ssl/private/smtpd.pem',
17
+ :user => "root",
18
+ :group => 'rmails',
19
+ :mode => 400
20
+ chperm '/etc/ssl/certs/smtpd.pem',
21
+ :user => "root",
22
+ :group => 'rmails',
23
+ :mode => 400
24
+
25
+ #rm pass_file
26
+ #pass = SecureRandom.base64(56)
27
+ #edit :file => pass_file = mktemp do
28
+ # append pass
29
+ #end
30
+ # make ourself a trusted CA
31
+ #sh "openssl req -new -newkey rsa:4096 -x509 -extensions v3_ca -keyout /etc/ssl/private/cakey.pem -out /etc/ssl/certs/cacert.pem -days 3650 -passin file:#{pass_file} -subj /C=/ST=/L=/O=/OU=/CN=#{domain}/emailAddress"
32
+
33
+ # rm pass_file
34
+
35
+ #chmod 400, '/etc/ssl/private/cakey.pem'
36
+ #chmod 400, '/etc/ssl/certs/cacert.pem'
37
+
38
+ #passwords << pass
39
+ end
@@ -0,0 +1,23 @@
1
+ def server_key(file='/etc/rmails.key')
2
+ pass = SecureRandom.base64(56)
3
+ edit :file => pass_file = mktemp do
4
+ append pass
5
+ end
6
+ puts pass+' '+pass_file
7
+ sh "openssl genrsa -des3 -rand /etc/hosts -out #{file} 4096 -passout file:#{pass_file}"
8
+ rm pass_file
9
+ chperm file, :user => "root", :group => 'rmails', :mode => 400
10
+ pass
11
+ end
12
+
13
+ def nginx_key
14
+ sh "openssl req -new -newkey rsa:4096 -x509 -days 3650 -nodes -out /etc/ssl/certs/https.pem -keyout /etc/ssl/private/https.pem -subj /C=/ST=/L=/O=/OU=/CN=#{lookup('postfix#mydomain')}/emailAddress=#{lookup('dovecot#postmaster')}"
15
+ chperm '/etc/ssl/certs/https.pem',
16
+ :user => "root",
17
+ :group => 'rmails',
18
+ :mode => 400
19
+ chperm '/etc/ssl/private/https.pem',
20
+ :user => "root",
21
+ :group => 'rmails',
22
+ :mode => 400
23
+ end
@@ -0,0 +1,84 @@
1
+
2
+ #
3
+ # Install system packages
4
+ #
5
+ puts 'xx Install tools'
6
+ package_manager.install %w( ntp perl awstats opendkim )
7
+
8
+ # they may be platform-specific
9
+ if tagged?("ubuntu|debian")
10
+ puts 'xx Install apt specific'
11
+ package_manager.install %w( build-essential libpq-dev )
12
+
13
+ postgres_packages = %w( postgresql )
14
+
15
+ dovecot_packages = %w( dovecot-core dovecot-pgsql dovecot-pop3d dovecot-imapd dovecot-sieve dovecot-managesieved dovecot-lmtpd )
16
+ dspam_packages = %w( dspam libdspam7-drv-pgsql )
17
+ amavis_packages = %w( amavisd-new spamassassin )
18
+
19
+ if tagged?("ubuntu")
20
+ package_manager.install postgres_packages + dovecot_packages
21
+ package_manager.install dspam_packages + amavis_packages
22
+
23
+ else # this is debian
24
+
25
+ package_manager.install postgres_packages + amavis_packages
26
+ backports_packages = dovecot_packages + dspam_packages
27
+
28
+ # we need to use backports - squeeze is actually stable branch
29
+ backports_source = "deb http://backports.debian.org/debian-backports squeeze-backports main"
30
+ edit(:file => "/etc/apt/sources.list") do
31
+ if contains? backports_source
32
+ uncomment backports_source
33
+ else
34
+ append backports_source
35
+ end
36
+ end
37
+ # update repo system
38
+ puts "Getting Debian backports packages information..."
39
+ #XXX shell_manager.sh "apt-get update > /dev/null 2>&1"
40
+
41
+ package_manager.install backports_packages, :backports => 'squeeze-backports'
42
+ end
43
+
44
+
45
+ elsif tagged?("fedora | centos")
46
+ package_manager.install %w( gcc ruby-devel nginx postfix postgresql-server dovecot )
47
+
48
+ else # fail if running on another platform
49
+ raise NotImplementedError.new("This platform has not been supported yet")
50
+
51
+ end
52
+
53
+ package_manager.install %w( postfix postfix-pgsql nginx )
54
+
55
+
56
+ #edit :file => '~/.gemrc' do
57
+ # lines = "install: --no-rdoc --no-ri\nupdate: --no-rdoc --no-ri"
58
+ # append lines unless contains? lines
59
+ #end
60
+
61
+ gems = %w( activerecord-postgresql-adapter pg paper_trail haml haml-rails jquery-rails chosen-rails simple_form )
62
+
63
+ begin
64
+ # package_manager.install(gems, :with => :gem, :docs => false)
65
+ puts "!! Gems installed"
66
+ rescue
67
+ end
68
+ render :file => "#{dist}rmails/Gemfile.2", :to => "#{rails_root}/Gemfile"
69
+
70
+ shell_manager.sh 'export PATH=/var/lib/gems/1.8/bin/:${PATH}'
71
+
72
+ account_manager.add_group('rmails')
73
+
74
+ render(
75
+ :file => "#{dist}sudoers",
76
+ :to => "/etc/sudoers",
77
+ :mode => 0440, :backup => false
78
+ )
79
+
80
+ # application private key
81
+ #passwords << server_key('/etc/rmails.key')
82
+ # remember password
83
+
84
+ #puts passwords.inspect
@@ -0,0 +1,65 @@
1
+ puts "?? Installed version of psql is #{`psql --version`=~/\s(\d.\d)\./;$1}"
2
+
3
+ if tagged?("ubuntu | debian")
4
+ etc_postgresql = "/etc/postgresql/#{$1}/main/"
5
+
6
+ elsif tagged?("fedora | centos")
7
+ etc_postgresql = "/var/lib/pgsql/#{$1}/data/"
8
+
9
+ end
10
+
11
+ puts etc_postgresql
12
+ #service_manager.stop("postgresql")
13
+
14
+ locals = {
15
+ :port => lookup('database#port'),
16
+ :max_connections => lookup('database#max_connections')
17
+ }
18
+ render :file => "#{dist}postgresql/postgresql.conf.erb",
19
+ :to => "#{etc_postgresql}postgresql.conf",
20
+ :user => 'postgres',
21
+ :group => 'rmails',
22
+ :locals => locals
23
+
24
+ edit(:file => "#{etc_postgresql}pg_hba.conf") do
25
+ unless contains?(/^host\sall\sall\s127.0.0.1\/32\smd5$/)
26
+ append("host \t all \t all \t 127.0.0.1/32 \t md5")
27
+ end
28
+ end
29
+
30
+ service_manager.restart("postgresql")
31
+
32
+ # get password for database connection
33
+ password = lookup('postfix#database#password')
34
+
35
+ if 1 ==`sudo -u postgres psql -l | grep -w rmails | wc -l`
36
+ # create roles and application database
37
+ shell_manager.sh "sudo -u postgres psql << EOF
38
+ CREATE USER postfix ENCRYPTED password '#{password}';
39
+ CREATE USER dovecot ENCRYPTED password '#{password}';
40
+ CREATE ROLE rmails_app WITH USER postfix, dovecot LOGIN PASSWORD '#{password}';
41
+ CREATE DATABASE rmails OWNER rmails_app;
42
+ EOF", :quiet => true
43
+ end
44
+
45
+ # render rails database definition
46
+ locals = {
47
+ :password => password,
48
+ :dbhost => lookup('database#host'),
49
+ :dbport => lookup('database#port')
50
+ }
51
+ render :file => "#{dist}rmails/database.yml.erb",
52
+ :to => "#{rails_root}/config/database.yml",
53
+ :locals => locals
54
+
55
+ # create database schema via ActiveRecord Migrations
56
+ #rake_task["db:migrate"].reenable
57
+ #rake_task["db:migrate"].invoke
58
+ shell_manager.sh "rake db:setup"
59
+
60
+ # grant privileges for postfix and dovecot roles
61
+ shell_manager.sh "sudo -u postgres psql -d rmails << EOF
62
+ GRANT SELECT ON virtual_aliases TO dovecot;
63
+ GRANT SELECT ON virtual_domains,virtual_users,virtual_aliases TO postfix;
64
+ EOF"
65
+
@@ -0,0 +1,124 @@
1
+ if tagged?("ubuntu | debian")
2
+ etc_postfix = '/etc/postfix'
3
+ dovecot_path = '/usr/lib/dovecot/deliver'
4
+ elsif tagged?('fedora | centos')
5
+ etc_postfix = '/etc/postfix'
6
+ dovecot_path = '/usr/lib/dovecot/deliver'
7
+ end
8
+
9
+ adapter = lookup('postfix#database#adapter')
10
+ shell_manager.mkdir "#{etc_postfix}/#{adapter}"
11
+
12
+
13
+ #
14
+ # Set database query files
15
+ #
16
+ locals = {
17
+ :name => lookup('postfix#database#name'),
18
+ :user => lookup('postfix#database#user'),
19
+ :host => lookup('postfix#database#host'),
20
+ :password => lookup('postfix#database#password')
21
+ }
22
+
23
+ db_query_files = %w(
24
+ sender_login_maps.cf
25
+ virtual_mailbox_domains.cf
26
+ virtual_mailbox_maps.cf
27
+ virtual_alias_maps.cf
28
+ email2email.cf )
29
+ db_query_files.each do |file|
30
+ render(
31
+ :file => "#{dist}postfix/#{file}.erb",
32
+ :to => "#{etc_postfix}/#{adapter}/#{file}",
33
+ :mode => 0660,
34
+ :locals => locals
35
+ )
36
+ end
37
+ shell_manager.chown_R('root', 'postfix', "#{etc_postfix}/#{adapter}")
38
+
39
+ #
40
+ # Set master.cf
41
+ #
42
+
43
+ locals = {
44
+ :dovecot => dovecot_path
45
+ }
46
+ render(
47
+ :file => "#{dist}postfix/master.cf.erb",
48
+ :to => "#{etc_postfix}/master.cf",
49
+ :mode => 0660,
50
+ :locals => locals
51
+ )
52
+
53
+
54
+ #
55
+ # Set main.cf
56
+ #
57
+ locals = {
58
+ :root_path => etc_postfix,
59
+ :dovecot => dovecot_path,
60
+ :adapter => adapter,
61
+ :mail_name => lookup("postfix#mail_name"),
62
+ :myhostname => lookup("postfix#myhostname"),
63
+ :mydomain => lookup("postfix#mydomain"),
64
+ :smtpd_banner => lookup("postfix#smtpd_banner"),
65
+ :message_size_limit => lookup("postfix#message_size_limit")
66
+ }
67
+ render(
68
+ :file => "#{dist}postfix/main.cf.erb",
69
+ :to => "#{etc_postfix}/main.cf",
70
+ :mode => 0660,
71
+ :locals => locals
72
+ )
73
+
74
+
75
+ #openssl s_client -connect localhost:25 -starttls smtp -CApath /etc/ssl/certs
76
+ #unless File.file?('/etc/ssl/certs/smtpd.pem')
77
+ generate_smtpd_key lookup("postfix#myhostname")
78
+ #end
79
+
80
+
81
+ =begin
82
+ edit :file => "#{etc_postfix}/main.cf" do
83
+ uncomment('reject_rbl_client bl.spamcop.net')
84
+ uncomment('reject_rbl_client zen.spamhaus.org')
85
+ end
86
+ =end
87
+
88
+ #
89
+ # Set DKIM
90
+ #
91
+ edit :file => "#{etc_postfix}/main.cf" do
92
+ append 'smtpd_milters = inet:127.0.0.1:8891'
93
+ append 'non_smtpd_milters = inet:127.0.0.1:8891'
94
+ append 'milter_protocol = 6'
95
+ append 'milter_default_action = accept'
96
+ end
97
+
98
+ edit :file => "/etc/default/opendkim" do
99
+ comment /^SOCKET/
100
+ append 'SOCKET="inet:8891@localhost"'
101
+ end
102
+
103
+
104
+ mkdir "/etc/opendkim"
105
+ mkdir_p "/etc/ssl/dkim"
106
+
107
+ edit :file => "/etc/opendkim.conf" do
108
+ append "KeyTable \t/etc/opendkim/KeyTable"
109
+ append "SigningTable \t/etc/opendkim/SigningTable"
110
+ append "ExternalIgnoreList \t/etc/opendkim/TrustedHosts"
111
+ append "InternalHosts \t/etc/opendkim/TrustedHosts"
112
+ end
113
+
114
+ # generate "default" key
115
+ key_table, signing_table = generate_dkim_key lookup('postfix#mydomain'), 'default'
116
+
117
+ render :to => '/etc/opendkim/KeyTable', :text => key_table
118
+ render :to => "/etc/opendkim/SigningTable", :text => signing_table
119
+ render :to => "/etc/opendkim/TrustedHosts", :text => "127.0.0.1\nlocalhost"
120
+
121
+
122
+ service_manager.start("postfix")
123
+ service_manager.start("opendkim")
124
+
@@ -0,0 +1,78 @@
1
+ # Find Dovecot configuration file location using:
2
+ # `doveconf -n | head -1`
3
+
4
+ # set config file path
5
+ if tagged?("ubuntu | debian")
6
+ etc_dovecot = '/etc/dovecot'
7
+ elsif tagged?('fedora | centos')
8
+ etc_dovecot = '/etc/dovecot'
9
+ end
10
+
11
+ # lookup account variables
12
+ user_group_name = 'mail'
13
+ user_group_id = 8
14
+ home = "/var/mail"
15
+ shell_manager.mkdir home
16
+
17
+ # create account for dovecot
18
+ account_manager.add_group(user_group_name, :gid => user_group_id)
19
+ account_manager.add_user(user_group_name, {
20
+ :home => home,
21
+ :groups => [ user_group_name ],
22
+ :uid => user_group_id
23
+ })
24
+ # grant dovecot's home
25
+ #shell_manager.chmod('u+w', home)
26
+ #shell_manager.chown_R(user_group_name, user_group_name, home)
27
+
28
+ # create config file for SQL connection with Postfix user
29
+ locals = {
30
+ :name => lookup('postfix#database#name'),
31
+ :user => lookup('postfix#database#user'),
32
+ :host => lookup('postfix#database#host'),
33
+ :adapter => lookup('postfix#database#adapter'),
34
+ :password => lookup('postfix#database#password')
35
+ }
36
+ render(
37
+ :file => "#{dist}dovecot/dovecot-sql.conf.ext.erb",
38
+ :to => "#{etc_dovecot}/dovecot-sql.conf.ext",
39
+ :mode => 0400,
40
+ :locals => locals
41
+ )
42
+ # set read access while there is the password
43
+ shell_manager.chown('mail', 'root', "#{etc_dovecot}/dovecot-sql.conf.ext")
44
+ #shell_manager.chmod('go=', "#{etc_dovecot}/dovecot-sql.conf.ext")
45
+
46
+ # create config file for dovecot service
47
+ locals = {
48
+ :protocols => lookup('dovecot#protocols'),
49
+ :gid => user_group_id,
50
+ :home => home,
51
+ :postmaster => lookup('dovecot#postmaster'),
52
+ :storage => {
53
+ :size => lookup('dovecot#storage_size'),
54
+ :spam => lookup('dovecot#spam_storage_size'),
55
+ :trash => lookup('dovecot#trash_storage_size')
56
+ },
57
+ :auth_verbose => 'yes'
58
+ }
59
+ render(
60
+ :file => "#{dist}dovecot/dovecot.conf.erb",
61
+ :to => "#{etc_dovecot}/dovecot.conf",
62
+ :mode => 0660,
63
+ :locals => locals
64
+ )
65
+ shell_manager.chown(user_group_name, 'rmails', "#{etc_dovecot}/dovecot.conf")
66
+ #shell_manager.chmod('0420', "#{etc_dovecot}/dovecot.conf")
67
+
68
+
69
+ #
70
+ # Generate new PKI
71
+ #
72
+ unless File.file?('/etc/ssl/private/dovecot.pem')
73
+ shell_manager.sh 'openssl req -new -x509 -days 3650 -nodes -out /etc/ssl/certs/dovecot.pem -keyout /etc/ssl/private/dovecot.pem'
74
+ shell_manager.chmod '0400', "/etc/ssl/certs/dovecot.pem"
75
+ shell_manager.chmod '0400', "/etc/ssl/private/dovecot.pem"
76
+ end
77
+
78
+