| rev | line source | 
| bsw@730 | 1 -- ======================================================================== | 
| bsw@813 | 2 -- MANDATORY (MUST BE CAREFULLY CHECKED AND PROPERLY SET!) | 
| bsw@730 | 3 -- ======================================================================== | 
| bsw@525 | 4 | 
| bsw@813 | 5 -- Name of this instance, defaults to name of config file | 
| bsw@813 | 6 -- ------------------------------------------------------------------------ | 
| bsw@813 | 7 config.instance_name = "Instance name" | 
| bsw@813 | 8 | 
| bsw@813 | 9 | 
| bsw@731 | 10 -- Information about service provider (HTML) | 
| bsw@730 | 11 -- ------------------------------------------------------------------------ | 
| bsw/jbe@0 | 12 config.app_service_provider = "Snake Oil<br/>10000 Berlin<br/>Germany" | 
| bsw/jbe@0 | 13 | 
| bsw@813 | 14 | 
| bsw@1045 | 15 -- A HTML formatted text the user has to accept while registering | 
| bsw@730 | 16 -- ------------------------------------------------------------------------ | 
| bsw@1045 | 17 config.use_terms = "<h1>Terms of Use</h1><p>Insert terms here</p>" | 
| bsw@88 | 18 | 
| bsw@813 | 19 | 
| bsw@729 | 20 -- Checkbox(es) the user has to accept while registering | 
| bsw@730 | 21 -- ------------------------------------------------------------------------ | 
| bsw@1222 | 22 --[[ | 
| bsw@79 | 23 config.use_terms_checkboxes = { | 
| bsw@79 | 24   { | 
| jbe@232 | 25     name = "terms_of_use_v1", | 
| jbe@232 | 26     html = "I accept the terms of use.", | 
| jbe@232 | 27     not_accepted_error = "You have to accept the terms of use to be able to register." | 
| bsw@734 | 28   }, | 
| bsw@1222 | 29   { | 
| bsw@1222 | 30     name = "extra_terms_of_use_v1", | 
| bsw@1222 | 31     html = "I accept the extra terms of use.", | 
| bsw@1222 | 32     not_accepted_error = "You have to accept the extra terms of use to be able to register." | 
| bsw@1222 | 33   } | 
| bsw@79 | 34 } | 
| bsw@1222 | 35 --]] | 
| bsw@735 | 36 | 
| bsw@813 | 37 -- Absolute base url of application | 
| bsw@813 | 38 -- ------------------------------------------------------------------------ | 
| bsw@813 | 39 config.absolute_base_url = "http://example.com/" | 
| bsw@1222 | 40 config.localhost = false | 
| bsw@813 | 41 | 
| bsw@813 | 42 | 
| bsw@813 | 43 -- Connection information for the LiquidFeedback database | 
| bsw@813 | 44 -- ------------------------------------------------------------------------ | 
| bsw@813 | 45 config.database = { engine='postgresql', dbname='liquid_feedback' } | 
| bsw@813 | 46 | 
| bsw@813 | 47 | 
| bsw@735 | 48 -- Location of the rocketwiki binaries | 
| bsw@735 | 49 -- ------------------------------------------------------------------------ | 
| bsw@1045 | 50 config.enforce_formatting_engine = "markdown2" | 
| bsw@1045 | 51 config.formatting_engines = { | 
| bsw@1045 | 52   { id = "markdown2", | 
| bsw@1045 | 53     name = "python-markdown2", | 
| bsw@1045 | 54     executable = "markdown2", | 
| bsw@1052 | 55     args = {'-s', 'escape', '-x', 'nofollow,wiki-tables'}, | 
| bsw@1045 | 56     remove_images = true | 
| bsw@1045 | 57   }, | 
| bsw@1170 | 58 --  { id = "markdown_py", | 
| bsw@1170 | 59 --    name = "Python Markdown", | 
| bsw@1170 | 60 --    executable = "markdown_py", | 
| bsw@1170 | 61 --    args = {'-s', 'escape', '-x', 'extra', '-x', 'nl2br', '-x', 'sane_lists'}, | 
| bsw@1170 | 62 --    remove_images = true | 
| bsw@1170 | 63 --  }, | 
| bsw@1170 | 64 --  { id = "rocketwiki", | 
| bsw@1170 | 65 --    name = "RocketWiki", | 
| bsw@1170 | 66 --    executable = "/opt/rocketwiki-lqfb/rocketwiki-lqfb" | 
| bsw@1170 | 67 --  }, | 
| bsw@1170 | 68 --  { id = "compat", | 
| bsw@1170 | 69 --    name = "Traditional WIKI syntax", | 
| bsw@1170 | 70 --    executable = "/opt/rocketwiki-lqfb/rocketwiki-lqfb-compat" | 
| bsw@1170 | 71 --  }, | 
| bsw@735 | 72 } | 
| bsw@79 | 73 | 
| bsw/jbe@6 | 74 | 
| bsw@813 | 75 -- Public access level | 
| bsw@734 | 76 -- ------------------------------------------------------------------------ | 
| bsw@813 | 77 -- Available options: | 
| bsw@813 | 78 -- "none" | 
| bsw@813 | 79 --     -> Closed user group, no public access at all | 
| bsw@813 | 80 --        (except login/registration/password reset) | 
| bsw@813 | 81 -- "anonymous" | 
| bsw@813 | 82 --     -> Shows only initiative/suggestions texts and aggregated | 
| bsw@813 | 83 --        supporter/voter counts | 
| bsw@813 | 84 -- "authors_pseudonymous" | 
| bsw@813 | 85 --     -> Like anonymous, but shows screen names of authors | 
| bsw@813 | 86 -- "all_pseudonymous" | 
| bsw@813 | 87 --     -> Show everything a member can see, except profile pages | 
| bsw@813 | 88 -- "everything" | 
| bsw@813 | 89 --     -> Show everything a member can see, including profile pages | 
| bsw@813 | 90 -- ------------------------------------------------------------------------ | 
| bsw/jbe@1309 | 91 config.public_access = "authors_pseudonymous" | 
| bsw@734 | 92 | 
| bsw@737 | 93 | 
| bsw@732 | 94 | 
| bsw@737 | 95 -- ======================================================================== | 
| bsw@737 | 96 -- OPTIONAL | 
| bsw@737 | 97 -- Remove leading -- to use a option | 
| bsw@737 | 98 -- ======================================================================== | 
| bsw@731 | 99 | 
| bsw@1071 | 100 -- Disable registration | 
| bsw@1071 | 101 -- ------------------------------------------------------------------------ | 
| bsw@1071 | 102 -- Available options: | 
| bsw@1071 | 103 -- false: registration is enabled (default) | 
| bsw@1071 | 104 -- true: registration is disabled | 
| bsw@1071 | 105 -- ------------------------------------------------------------------------ | 
| bsw@1071 | 106 -- config.disable_registration = true | 
| bsw@1071 | 107 | 
| bsw@1170 | 108 | 
| bsw@729 | 109 -- List of enabled languages, defaults to available languages | 
| bsw@730 | 110 -- ------------------------------------------------------------------------ | 
| bsw@1129 | 111 -- config.enabled_languages = { 'en', 'de', 'eo', 'el', 'hu', 'it', 'ka', 'nl', 'zh-Hans', 'zh-TW' } | 
| bsw@2 | 112 | 
| bsw@1170 | 113 | 
| bsw@729 | 114 -- Default language, defaults to "en" | 
| bsw@730 | 115 -- ------------------------------------------------------------------------ | 
| bsw@729 | 116 -- config.default_lang = "en" | 
| poelzi@163 | 117 | 
| bsw@1170 | 118 | 
| bsw@734 | 119 -- after how long is a user considered inactive and the trustee will see warning, | 
| bsw@734 | 120 -- notation is according to postgresql intervals, default: no warning at all | 
| bsw@730 | 121 -- ------------------------------------------------------------------------ | 
| bsw@729 | 122 -- config.delegation_warning_time = '6 months' | 
| bsw/jbe@6 | 123 | 
| bsw@1170 | 124 | 
| bsw@988 | 125 -- after which time a user is advised (_soft) or forced (_hard) to check | 
| bsw@988 | 126 -- unit and area delegations. default: no check at all | 
| bsw@988 | 127 -- ------------------------------------------------------------------------ | 
| bsw@988 | 128 -- config.check_delegations_interval_hard = "6 months" | 
| bsw@988 | 129 -- config.check_delegations_interval_soft = "3 months" | 
| bsw@988 | 130 | 
| bsw@1170 | 131 | 
| bsw@988 | 132 -- default option when checking delegations | 
| bsw@988 | 133 -- available options: "confirm", "revoke" and "none", default: "confirm" | 
| bsw@988 | 134 -- ------------------------------------------------------------------------ | 
| bsw@988 | 135 -- config.check_delegations_default = "confirm" | 
| bsw@988 | 136 | 
| bsw@1170 | 137 | 
| bsw@734 | 138 -- Prefix of all automatic mails, defaults to "[Liquid Feedback] " | 
| bsw@730 | 139 -- ------------------------------------------------------------------------ | 
| bsw@729 | 140 -- config.mail_subject_prefix = "[LiquidFeedback] " | 
| bsw@734 | 141 | 
| bsw@1170 | 142 | 
| bsw@734 | 143 -- Sender of all automatic mails, defaults to system defaults | 
| bsw@734 | 144 -- ------------------------------------------------------------------------ | 
| bsw@839 | 145 -- config.mail_envelope_from = "liquidfeedback@example.com" | 
| bsw@839 | 146 -- config.mail_from = { name = "LiquidFeedback", address = "liquidfeedback@example.com" } | 
| bsw@839 | 147 -- config.mail_reply_to = { name = "Support", address = "support@example.com" } | 
| bsw/jbe@6 | 148 | 
| bsw@1170 | 149 | 
| bsw@1250 | 150 -- Template for digest emails | 
| bsw@1250 | 151 -- #{name} will be replaced by member screen name | 
| bsw@1250 | 152 -- #{digest} will be replaced with the digest content | 
| bsw@1250 | 153 -- ------------------------------------------------------------------------ | 
| bsw@1250 | 154 -- config.notification_digest_template = [[ | 
| bsw@1250 | 155 -- Hello #{name}, | 
| bsw@1250 | 156 -- | 
| bsw@1250 | 157 -- this is your personal digest. | 
| bsw@1250 | 158 -- | 
| bsw@1250 | 159 -- #{digest} | 
| bsw@1250 | 160 -- ]] | 
| bsw@1250 | 161 | 
| bsw@1250 | 162 | 
| bsw@905 | 163 -- Configuration of password hashing algorithm (defaults to "crypt_sha512") | 
| bsw@905 | 164 -- ------------------------------------------------------------------------ | 
| bsw@905 | 165 -- config.password_hash_algorithm = "crypt_sha512" | 
| bsw@1206 | 166 -- config.password_hash_algorithm = "crypt_sha256" | 
| bsw@905 | 167 -- config.password_hash_algorithm = "crypt_md5" | 
| bsw@905 | 168 | 
| bsw@1170 | 169 | 
| bsw@905 | 170 -- Number of rounds for crypt_sha* algorithms, minimum and maximum | 
| bsw@905 | 171 -- (defaults to minimum 10000 and maximum 20000) | 
| bsw@905 | 172 -- ------------------------------------------------------------------------ | 
| bsw@905 | 173 -- config.password_hash_min_rounds = 10000 | 
| bsw@905 | 174 -- config.password_hash_max_rounds = 20000 | 
| bsw@905 | 175 | 
| bsw@905 | 176 | 
| bsw@729 | 177 -- Supply custom url for avatar/photo delivery | 
| bsw@730 | 178 -- ------------------------------------------------------------------------ | 
| bsw@729 | 179 -- config.fastpath_url_func = nil | 
| bsw@51 | 180 | 
| bsw@1170 | 181 | 
| bsw@729 | 182 -- Local directory for database dumps offered for download | 
| bsw@730 | 183 -- ------------------------------------------------------------------------ | 
| bsw@729 | 184 -- config.download_dir = nil | 
| bsw@51 | 185 | 
| bsw@1170 | 186 | 
| bsw@729 | 187 -- Special use terms for database dump download | 
| bsw@730 | 188 -- ------------------------------------------------------------------------ | 
| bsw@729 | 189 -- config.download_use_terms = "=== Download use terms ===\n" | 
| bsw/jbe@52 | 190 | 
| bsw@1170 | 191 | 
| bsw@734 | 192 -- Use custom image conversion, defaults to ImageMagick's convert | 
| bsw@730 | 193 -- ------------------------------------------------------------------------ | 
| bsw@729 | 194 --config.member_image_content_type = "image/jpeg" | 
| bsw@729 | 195 --config.member_image_convert_func = { | 
| bsw@729 | 196 --  avatar = function(data) return extos.pfilter(data, "convert", "jpeg:-", "-thumbnail",   "48x48", "jpeg:-") end, | 
| bsw@729 | 197 --  photo =  function(data) return extos.pfilter(data, "convert", "jpeg:-", "-thumbnail", "240x240", "jpeg:-") end | 
| bsw@729 | 198 --} | 
| bsw@51 | 199 | 
| bsw@1170 | 200 | 
| bsw@1045 | 201 -- Display a html formatted public message of the day | 
| bsw@837 | 202 -- ------------------------------------------------------------------------ | 
| bsw@1045 | 203 -- config.motd_public = "<h1>Message of the day (public)</h1><p>The MOTD is formatted with HTML</p>" | 
| bsw@1045 | 204 | 
| bsw@1170 | 205 | 
| bsw@1045 | 206 -- Display a html formatted internal message of the day | 
| bsw@1045 | 207 -- ------------------------------------------------------------------------ | 
| bsw@1045 | 208 -- config.motd_intern = "<h1>Message of the day (intern)</h1><p>The MOTD is formatted with HTML</p>" | 
| bsw@837 | 209 | 
| bsw@1170 | 210 | 
| bsw@734 | 211 -- Integration of Etherpad, disabled by default | 
| bsw@730 | 212 -- ------------------------------------------------------------------------ | 
| bsw@729 | 213 --config.etherpad = { | 
| bsw@729 | 214 --  base_url = "http://example.com:9001/", | 
| bsw@729 | 215 --  api_base = "http://localhost:9001/", | 
| bsw@729 | 216 --  api_key = "mysecretapikey", | 
| bsw@729 | 217 --  group_id = "mygroupname", | 
| bsw@729 | 218 --  cookie_path = "/" | 
| bsw@729 | 219 --} | 
| bsw@51 | 220 | 
| bsw@1170 | 221 | 
| bsw@961 | 222 -- Free timings | 
| bsw@961 | 223 -- ------------------------------------------------------------------------ | 
| bsw@961 | 224 -- This example expects a date string entered in the free timing field | 
| bsw@961 | 225 -- by the user creating a poll, interpreting it as target date for then | 
| bsw@961 | 226 -- poll and splits the remaining time at the ratio of 4:1:2 | 
| bsw@961 | 227 -- Please note, polling policies never have an admission phase | 
| bsw@961 | 228 -- The available_func is optional, if not set any target date is allowed | 
| bsw@961 | 229 | 
| bsw@1222 | 230 --[[ | 
| bsw@961 | 231 config.free_timing = { | 
| bsw@961 | 232   calculate_func = function(policy, timing_string) | 
| bsw@1166 | 233     local function interval_by_seconds(secs) | 
| bsw@961 | 234       local secs_per_day = 60 * 60 * 24 | 
| bsw@961 | 235       local days | 
| bsw@961 | 236       days = math.floor(secs / secs_per_day) | 
| bsw@961 | 237       secs = secs - days * secs_per_day | 
| bsw@961 | 238       return days .. " days " .. secs .. " seconds" | 
| bsw@961 | 239     end | 
| bsw@961 | 240     local target_date = parse.date(timing_string, atom.date) | 
| bsw@961 | 241     if not target_date then | 
| bsw@961 | 242       return false | 
| bsw@961 | 243     end | 
| bsw@961 | 244     local target_timestamp = target_date.midday | 
| bsw@961 | 245     local now = atom.timestamp:get_current() | 
| bsw@961 | 246     trace.debug(target_timestamp, now) | 
| bsw@961 | 247     local duration = target_timestamp - now | 
| bsw@961 | 248     if duration < 0 then | 
| bsw@961 | 249       return false | 
| bsw@961 | 250     end | 
| bsw@961 | 251     return { | 
| bsw@961 | 252       discussion = interval_by_seconds(duration / 7 * 4), | 
| bsw@961 | 253       verification = interval_by_seconds(duration / 7 * 1), | 
| bsw@961 | 254       voting = interval_by_seconds(duration / 7 * 2) | 
| bsw@961 | 255     } | 
| bsw@961 | 256   end, | 
| bsw@961 | 257   available_func = function(policy) | 
| bsw@961 | 258     return { | 
| bsw@961 | 259       { name = "End of 2013", id = '2013-12-31' }, | 
| bsw@961 | 260       { name = "End of 2014", id = '2014-12-31' }, | 
| bsw@961 | 261       { name = "End of 2015", id = '2015-12-31' } | 
| bsw@961 | 262     } | 
| bsw@961 | 263   end | 
| bsw@961 | 264 } | 
| bsw@1222 | 265 --]] | 
| bsw@1170 | 266 | 
| bsw@1219 | 267 -- Configuration of lf4rcs | 
| bsw@1219 | 268 -- ------------------------------------------------------------------------ | 
| bsw@1222 | 269 -- config.lf4rc = {} | 
| bsw@1219 | 270 | 
| bsw@1219 | 271 -- Example configuration for controlling a Git repository | 
| bsw@1222 | 272 --[[ | 
| bsw@1219 | 273 config.lf4rcs.git = { | 
| bsw@1219 | 274 | 
| bsw@1219 | 275   render_draft_reference = function(url, draft) | 
| bsw@1219 | 276     if not draft.external_reference then return end | 
| bsw@1219 | 277     ui.tag{ content = _"Changeset:" } | 
| bsw@1219 | 278     slot.put(" ") | 
| bsw@1219 | 279     ui.link{ | 
| bsw@1219 | 280       text = draft.external_reference, | 
| bsw@1219 | 281       external = url .. ";a=commit;h=" .. draft.external_reference | 
| bsw@1219 | 282     } | 
| bsw@1219 | 283   end, | 
| bsw@1219 | 284 | 
| bsw@1219 | 285   get_remote_user = function() | 
| bsw@1219 | 286     return os.getenv("REMOTE_USER") | 
| bsw@1219 | 287   end, | 
| bsw@1219 | 288 | 
| bsw@1219 | 289   get_branches = function(path, exec) | 
| bsw@1219 | 290     local branches = {} | 
| bsw@1219 | 291     for line in io.lines() do | 
| bsw@1219 | 292       local oldrev, newrev, branch = string.match(line, "([^ ]+) ([^ ]+) refs/heads/(.+)") | 
| bsw@1219 | 293       if not branch then | 
| bsw@1219 | 294         return nil, "unexpected format from git hook environment" | 
| bsw@1219 | 295       end | 
| bsw@1219 | 296       branches[branch] = { newrev } | 
| bsw@1219 | 297     end | 
| bsw@1219 | 298     return branches | 
| bsw@1219 | 299   end, | 
| bsw@1219 | 300 | 
| bsw@1219 | 301   commit = function(path, exec, branch, target_node_id, close_message, merge_message) | 
| bsw@1219 | 302     if merge_message then | 
| jbe@1221 | 303       exec("git", "-C", path, "checkout", "-f", "master") | 
| bsw@1219 | 304       exec("git", "-C", path, "merge", target_node_id, "-m", merge_message) | 
| bsw@1219 | 305       exec("git", "-C", path, "push", "origin", "master") | 
| bsw@1219 | 306     end | 
| bsw@1219 | 307   end | 
| bsw@1219 | 308 | 
| bsw@1219 | 309 } | 
| bsw@1219 | 310 | 
| bsw@1219 | 311 -- Example configuration for controlling a Mercurial repository | 
| bsw@1219 | 312 config.lf4rcs.hg = { | 
| bsw@1219 | 313 | 
| bsw@1219 | 314   working_branch_name = "work", | 
| bsw@1219 | 315 | 
| bsw@1219 | 316   render_draft_reference = function(url, draft) | 
| bsw@1219 | 317     if not draft.external_reference then return end | 
| bsw@1219 | 318     ui.tag{ content = _"Changeset graph:" } | 
| bsw@1219 | 319     slot.put(" ") | 
| bsw@1219 | 320     ui.link{ | 
| bsw@1219 | 321       text = draft.external_reference, | 
| bsw@1219 | 322       external = url .. "/graph/" .. draft.external_reference | 
| bsw@1219 | 323     } | 
| bsw@1219 | 324   end, | 
| bsw@1219 | 325 | 
| bsw@1219 | 326   get_remote_user = function() | 
| bsw@1219 | 327     return os.getenv("REMOTE_USER") | 
| bsw@1219 | 328   end, | 
| bsw@1219 | 329 | 
| bsw@1219 | 330   get_branches = function(path, exec) | 
| bsw@1219 | 331     local first_node_id = os.getenv("HG_NODE") | 
| bsw@1219 | 332     if not first_node_id then | 
| bsw@1219 | 333       return nil, "internal error, no first node ID available" | 
| bsw@1219 | 334     end | 
| bsw@1219 | 335     local hg_log = exec( | 
| bsw@1219 | 336       "hg", "log", "-R", path, "-r", first_node_id .. ":", "--template", "{branches}\n" | 
| bsw@1219 | 337     ) | 
| bsw@1219 | 338     local branches = {} | 
| bsw@1219 | 339     for branch in hg_log:gmatch("(.-)\n") do | 
| bsw@1219 | 340       if branch == "" then branch = "default" end | 
| bsw@1219 | 341       if not branches[branch] then | 
| bsw@1219 | 342         branches[branch] = {} | 
| bsw@1219 | 343         local head_lines = exec( | 
| bsw@1219 | 344           "hg", "heads", "-R", path, "--template", "{node}\n", branch | 
| bsw@1219 | 345         ) | 
| bsw@1219 | 346         for node_id in string.gmatch(head_lines, "[^\n]+") do | 
| bsw@1219 | 347           table.insert(branches[branch], node_id) | 
| bsw@1219 | 348         end | 
| bsw@1219 | 349       end | 
| bsw@1219 | 350     end | 
| bsw@1219 | 351     return branches | 
| bsw@1219 | 352   end, | 
| bsw@1219 | 353 | 
| bsw@1219 | 354   extra_checks = function(path, exec) | 
| bsw@1219 | 355     local result = exec("hg", "heads", "-t", "-c") | 
| bsw@1219 | 356     for branch in string.gmatch(result, "[^\n]+") do | 
| bsw@1219 | 357       if branch == lf4rcs.config.hg.working_branch_name then | 
| bsw@1219 | 358         return nil, "open head found for branch " .. lf4rcs.config.hg.working_branch_name | 
| bsw@1219 | 359       end | 
| bsw@1219 | 360     end | 
| bsw@1219 | 361     return true | 
| bsw@1219 | 362   end, | 
| bsw@1219 | 363 | 
| bsw@1219 | 364   commit = function(path, exec, branch, target_node_id, close_message, merge_message) | 
| bsw@1219 | 365     exec("hg", "up", "-R", path, "-C", "-r", target_node_id) | 
| bsw@1219 | 366     exec("hg", "commit", "-R", path, "--close-branch", "-m", close_message) | 
| bsw@1219 | 367     if merge_message then | 
| bsw@1219 | 368       exec("hg", "up", "-R", path, "-C", "-r", "default") | 
| bsw@1219 | 369       exec("hg", "merge", "-R", path, "-r", "tip") | 
| bsw@1219 | 370       exec("hg", "commit", "-R", path, "-m", merge_message) | 
| bsw@1219 | 371     end | 
| bsw@1219 | 372   end | 
| bsw@1219 | 373 | 
| bsw@1219 | 374 } | 
| bsw@1219 | 375 | 
| bsw@1235 | 376 -- Grace period after creating an initiative for pushing changes during verification phase | 
| bsw@1235 | 377 -- disabled by default (nil), use PostgreSQL interval notation | 
| bsw@1235 | 378 -- config.lf4rcs.push_grace_period = nil | 
| bsw@1235 | 379 | 
| bsw@1219 | 380 lf4rcs.init() | 
| bsw@1222 | 381 --]] | 
| bsw@1219 | 382 | 
| bsw@1209 | 383 -- External references | 
| bsw@1209 | 384 -- ------------------------------------------------------------------------ | 
| bsw@1209 | 385 -- Rendering of external references | 
| bsw@1209 | 386 | 
| bsw@1209 | 387 --[[ | 
| bsw@1209 | 388 config.render_external_reference = { | 
| bsw@1209 | 389   draft = function(draft, wrapper) | 
| bsw@1209 | 390     wrapper(function() | 
| bsw@1209 | 391       ui.tag{ content = draft.external_reference) | 
| bsw@1209 | 392     end) | 
| bsw@1209 | 393   end, | 
| bsw@1209 | 394   initiative = function(initiative, wrapper) | 
| bsw@1209 | 395     wrapper(function() | 
| bsw@1209 | 396       ui.tag{ content = initiative.external_reference) | 
| bsw@1209 | 397     end) | 
| bsw@1209 | 398   end | 
| bsw@1209 | 399 end | 
| bsw@1209 | 400 --]] | 
| bsw@1209 | 401 | 
| bsw@1106 | 402 -- Admin logger | 
| bsw@1106 | 403 -- ------------------------------------------------------------------------ | 
| bsw@1106 | 404 -- Logging administrative activities | 
| bsw@1106 | 405 -- disabled by default | 
| bsw@1106 | 406 | 
| bsw@1106 | 407 --[[ | 
| bsw@1106 | 408 config.admin_logger = function(params) | 
| bsw@1106 | 409 | 
| bsw@1106 | 410   local adminid = app.session.member_id | 
| bsw@1106 | 411   local adminname = app.session.member.name | 
| bsw@1107 | 412   local url = params._webmcp_path | 
| bsw@1106 | 413 | 
| bsw@1106 | 414   -- do something (e.g. calling 'logger' via extos.pfilter) | 
| bsw@1106 | 415 | 
| bsw@1106 | 416 end | 
| bsw@1106 | 417 --]] | 
| bsw@1106 | 418 | 
| bsw@1106 | 419 | 
| bsw@1170 | 420 -- Network interface to bind to | 
| bsw@1170 | 421 -- ------------------------------------------------------------------------ | 
| bsw@1170 | 422 -- Available options: | 
| bsw@1170 | 423 -- true: bind to localhost (default) | 
| bsw@1170 | 424 -- false: bind to all interface | 
| bsw@1170 | 425 -- ------------------------------------------------------------------------ | 
| bsw@1170 | 426 -- config.localhost = true | 
| bsw@1170 | 427 | 
| bsw@1170 | 428 | 
| bsw@1170 | 429 -- Network port to bind to | 
| bsw@1170 | 430 -- ------------------------------------------------------------------------ | 
| bsw@1170 | 431 -- config.port = 8080 | 
| bsw@1170 | 432 | 
| bsw@1170 | 433 | 
| bsw@1170 | 434 -- Serving content via IPV6 | 
| bsw@1170 | 435 -- ------------------------------------------------------------------------ | 
| bsw@1170 | 436 -- Available options: | 
| bsw@1170 | 437 -- nil or false: do not serve via IPv6 (default) | 
| bsw@1170 | 438 -- true: serve via IPv6 | 
| bsw@1170 | 439 -- ------------------------------------------------------------------------ | 
| bsw@1170 | 440 -- config.ipv6 = false | 
| bsw@1170 | 441 | 
| bsw@1170 | 442 | 
| bsw@1170 | 443 -- Application server fork configuration | 
| bsw@1170 | 444 -- ------------------------------------------------------------------------ | 
| bsw@1170 | 445 -- config.fork = { | 
| bsw@1170 | 446 --   pre = 2,            -- desired number of spare (idle) processes | 
| bsw@1170 | 447 --   min = 4,            -- minimum number of processes | 
| bsw@1170 | 448 --   max = 128,          -- maximum number of processes (hard limit) | 
| bsw@1170 | 449 --   delay = 0.125,      -- delay (seconds) between creation of spare processes | 
| bsw@1170 | 450 --   error_delay = 2,    -- delay (seconds) before retry of failed process creation | 
| bsw@1170 | 451 --   exit_delay = 2,     -- delay (seconds) between destruction of excessive spare processes | 
| bsw@1170 | 452 --   idle_timeout = 900, -- idle time (seconds) after a fork gets terminated (0 for no timeout) | 
| bsw@1170 | 453 --   memory_limit = 0,   -- maximum memory consumption (bytes) before process gets terminated | 
| bsw@1170 | 454 --   min_requests = 50,  -- minimum count of requests handled before fork is terminated | 
| bsw@1170 | 455 --   max_requests = 100  -- maximum count of requests handled before fork is terminated | 
| bsw@1170 | 456 -- } | 
| bsw@1170 | 457 | 
| bsw@1170 | 458 | 
| bsw@1170 | 459 -- HTTP server options | 
| bsw@1170 | 460 -- ------------------------------------------------------------------------ | 
| bsw@1170 | 461 -- http_options = { | 
| bsw@1170 | 462 --   static_headers            = {}            -- string or table of static headers to be returned with every request | 
| bsw@1170 | 463 --   request_header_size_limit = 1024*1024,    -- maximum size of request body sent by client | 
| bsw@1170 | 464 --   request_body_size_limit   = 64*1024*1024, -- maximum size of request body sent by client | 
| jbe@1198 | 465 --   idle_timeout              = 65,           -- maximum time until receiving the first byte of the request headera | 
| jbe@1198 | 466 --   stall_timeout             = 60,           -- maximum time a client connection may be stalled | 
| jbe@1198 | 467 --   request_header_timeout    = 120,          -- maximum time until receiving the remaining bytes of the request header | 
| jbe@1198 | 468 --   response_timeout          = 3600,         -- time in which request body and response must be sent | 
| bsw@1170 | 469 --   maximum_input_chunk_size  = 16384         -- tweaks behavior of request-body parser | 
| bsw@1170 | 470 --   minimum_output_chunk_size = 1024          -- chunk size for chunked-transfer-encoding | 
| bsw@1170 | 471 -- } | 
| bsw@1170 | 472 | 
| bsw@1170 | 473 | 
| bsw@729 | 474 -- WebMCP accelerator | 
| jbe@1223 | 475 -- ------------------------------------------------------------------------ | 
| jbe@1223 | 476 -- uncomment the following line to use C implementations of chosen | 
| jbe@1223 | 477 -- functions: | 
| bsw@730 | 478 -- ------------------------------------------------------------------------ | 
| bsw@729 | 479 -- require 'webmcp_accelerator' | 
| jbe@1223 | 480 | 
| bsw/jbe@0 | 481 | 
| bsw@868 | 482 -- Trace debug | 
| bsw@1222 | 483 -- ------------------------------------------------------------------------ | 
| bsw@868 | 484 -- uncomment the following line to enable debug trace | 
| jbe@1223 | 485 -- ------------------------------------------------------------------------ | 
| bsw/jbe@1309 | 486 config.enable_debug_trace = true | 
| bsw/jbe@1309 | 487 | 
| bsw/jbe@1309 | 488 | 
| bsw/jbe@1309 | 489 config.fork = { | 
| bsw/jbe@1309 | 490   pre =1, min = 1, max = 1, max_requests = 1, min_requests = 1 | 
| bsw/jbe@1309 | 491 } | 
| bsw/jbe@1309 | 492 | 
| bsw/jbe@1309 | 493 config.localhost = true | 
| bsw/jbe@0 | 494 | 
| bsw/jbe@1309 | 495 config.oauth2 = { | 
| bsw/jbe@1309 | 496   available_scopes = { | 
| bsw/jbe@1309 | 497     { scope = "read", name = { de = "Lesen", en = "Read data" } }, | 
| bsw/jbe@1309 | 498     { scope = "write", name = { de = "Schreiben", en = "Write data" } }, | 
| bsw/jbe@1309 | 499     { scope = "privA", name = { de = "Beispielprivileg A", en = "Example privilege A" } }, | 
| bsw/jbe@1309 | 500     { scope = "privB", name = { de = "Beispielprivileg B", en = "Example privilege B" } } | 
| bsw/jbe@1309 | 501   }, | 
| bsw/jbe@1309 | 502   authorization_code_lifetime = 5 * 60, | 
| bsw/jbe@1309 | 503   refresh_token_lifetime = 60 * 60 * 24 * 30 * 3, | 
| bsw/jbe@1309 | 504   refresh_pause = 60, | 
| bsw/jbe@1309 | 505   refresh_grace_period = 60, | 
| bsw/jbe@1309 | 506   access_token_lifetime = 60 * 60, | 
| bsw/jbe@1309 | 507   -- NOTE for init.lua : check for refresh_pause >= refresh_grace_period | 
| bsw/jbe@1309 | 508   endpoint_magic = "liquidfeedback_client_redirection_endpoint" | 
| bsw/jbe@1309 | 509 } | 
| bsw/jbe@1309 | 510 |