From 75b21f4bc0d56652859006d791d56893b1b00785 Mon Sep 17 00:00:00 2001 From: Tube <7u83@mail.ru> Date: Sat, 4 Nov 2023 22:09:52 +0100 Subject: [PATCH] Roundcube configure oprion added --- roundcube.cf | 127 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 127 insertions(+) diff --git a/roundcube.cf b/roundcube.cf index 37fe3d7..24ca622 100644 --- a/roundcube.cf +++ b/roundcube.cf @@ -38,6 +38,8 @@ vars: "dltype" string => "wget"; "dlsrc" string => "https://github.com/roundcube/roundcubemail/releases/download/$(cfg[version])/$(tgzname)"; + "config_file" string => "$(install_sub_dir)/config/config.inc.php"; + reports: # dlbyversion:: # "dl by version"; @@ -143,3 +145,128 @@ methods: "$(dst)","roundcube_tgz_file",'{}'); } + + +bundle edit_line roundcube_values(tab, sectionName) +{ + vars: + "index" slist => getindices("$(tab)[$(sectionName)]"); + + # Be careful if the index string contains funny chars + "cindex[$(index)]" string => canonify("$(index)"); + + classes: + "edit_$(cindex[$(index)])" not => strcmp("$($(tab)[$(sectionName)][$(index)])","dontchange"), + comment => "Create conditions to make changes"; + + field_edits: + + # If the line is there, but commented out, first uncomment it +# "#+\s*$(index)\s*=.*" +# select_region => INI_section(escape("$(sectionName)")), + # edit_field => col("\s*=\s*","1","$(index)","set"), + # if => "edit_$(cindex[$(index)])"; + + # match a line starting like the key something + "\s*$(index)\s*=.*" + edit_field => col("\s*=\s*","2","$($(tab)[$(sectionName)][$(index)])","set"), + select_region => INI_section(escape("$(sectionName)")), + classes => results("bundle", "set_variable_values_ini_not_$(cindex[$(index)])"), + if => "edit_$(cindex[$(index)])"; + + delete_lines: + "!include.*"; + + insert_lines: + "[$(sectionName)]" + location => start, + comment => "Insert lines"; + + "$(index)=$($(tab)[$(sectionName)][$(index)])" + select_region => INI_section(escape("$(sectionName)")), + if => "!(set_variable_values_ini_not_$(cindex[$(index)])_kept|set_variable_values_ini_not_$(cindex[$(index)])_repaired).edit_$(cindex[$(index)])"; + +} + + +bundle edit_line rc_line_based(v) +{ +vars: + "i" slist => getindices("$(v)"); + + # Escape the value (had a problem with special characters and regex's) + "ev[$(i)]" string => escape("$($(v)[$(i)])"); + +vars: + "exx" string => "^\s*\$config\s*\['$(i)'\s*]\s*=\s*(?!33).*$"; + +replace_patterns: + "^\s*\$config\s*\['$(i)'\s*]\s*=\s*(?!$($(v)[$(i)]);$).*" + comment => "Correct the value '$(i)'", + #replace_with => value("$config['$(i)']=$($(v)[$(i)])"), + replace_with => value("$config['$(i)']=$($(v)[$(i)]);"), + classes => results("bundle", "replace_attempted_$(i)"); + +reports: + + insert_lines: + # If the line doesn't exist, or there is more than one occurrence + # of the LHS commented out, insert a new line and try to place it + # after the commented LHS (keep new line with old comments) + # "$(i)$(sep)$($(v)[$(i)])" + # comment => "Insert the value, marker '$(i)' exists", + # location => after("^$(cp)($(i)$(bp).*|$(i))$"), + # if => "replace_attempted_$(ci[$(i)])_reached.multiple_comments_$(ci[$(i)])"; + + # If the line doesn't exist and there are no occurrences + # of the LHS commented out, insert a new line at the eof +# "$(i)$(sep)$($(v)[$(i)])" + # comment => "Insert the value, marker '$(i)' doesn't exist", + # if => "replace_attempted_$(ci[$(i)])_reached.!multiple_comments_$(ci[$(i)]).!exists_$(ci[$(i)])"; + + reports: + verbose_mode|EXTRA:: + "$(this.bundle): Line for '$(i)' exists" if => "exists_$(ci[$(i)])"; + "$(this.bundle): Line for '$(i)' does not exist" if => "!exists_$(ci[$(i)])"; +} + + + +bundle agent configure_roundcube(cfg) +{ + +vars: + + "settings[db_dsnw]" string => "'mysql://$(cfg[db_user]):$(cfg[db_pass])@$(cfg[db_host])/$(cfg[db_name])'"; + "settings[language]" string => "'us_EN'"; + + + "idx" slist => getindices(@(cfg[settings])); + "settings[$(idx)]" string => "$(cfg[settings][$(idx)])"; + + +methods: + "any" usebundle => mysql_table_exists(@(cfg),"users"); + +files: + "$(roundcube.config_file)" +#create => "true", + perms => m("644"), + copy_from => seed_cp("$(def.wmde_lib)/templates/roundcube-config.inc.php.mustache"), + handle => "roundcube_config_created"; + + "$(roundcube.config_file)" + edit_line => rc_line_based("$(this.bundle).settings"), + handle => "roundcube_config_edited", + depends_on => {"roundcube_config_created"}; + +commands: + "!mysql_$(cfg[db_name])_users_exists":: + "cd $(roundcube.install_sub_dir) && bin/initdb.sh --dir SQL" + depends_on => {"roundcube_config_edited"}, + contain => wmde_cmd_useshell; + + + +reports: +}