Server IP : 172.67.216.182 / Your IP : 162.158.88.5 Web Server : Apache System : Linux krdc-ubuntu-s-2vcpu-4gb-amd-blr1-01.localdomain 5.15.0-142-generic #152-Ubuntu SMP Mon May 19 10:54:31 UTC 2025 x86_64 User : www ( 1000) PHP Version : 7.4.33 Disable Function : passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /usr/share/rspamd/lualib/rspamadm/ |
Upload File : |
local opts local known_attrs = { data = 1, example = 1, type = 1, required = 1, default = 1, } local argparse = require "argparse" local ansicolors = require "ansicolors" local parser = argparse() :name "rspamadm confighelp" :description "Shows help for the specified configuration options" :help_description_margin(32) parser:argument "path":args "*" :description('Optional config paths') parser:flag "--no-color" :description "Disable coloured output" parser:flag "--short" :description "Show only option names" parser:flag "--no-examples" :description "Do not show examples (implied by --short)" local function maybe_print_color(key) if not opts['no-color'] then return ansicolors.white .. key .. ansicolors.reset else return key end end local function sort_values(tbl) local res = {} for k, v in pairs(tbl) do table.insert(res, { key = k, value = v }) end -- Sort order local order = { options = 1, dns = 2, upstream = 3, logging = 4, metric = 5, composite = 6, classifier = 7, modules = 8, lua = 9, worker = 10, workers = 11, } table.sort(res, function(a, b) local oa = order[a['key']] local ob = order[b['key']] if oa and ob then return oa < ob elseif oa then return -1 < 0 elseif ob then return 1 < 0 else return a['key'] < b['key'] end end) return res end local function print_help(key, value, tabs) print(string.format('%sConfiguration element: %s', tabs, maybe_print_color(key))) if not opts['short'] then if value['data'] then local nv = string.match(value['data'], '^#%s*(.*)%s*$') or value.data print(string.format('%s\tDescription: %s', tabs, nv)) end if type(value['type']) == 'string' then print(string.format('%s\tType: %s', tabs, value['type'])) end if type(value['required']) == 'boolean' then if value['required'] then print(string.format('%s\tRequired: %s', tabs, maybe_print_color(tostring(value['required'])))) else print(string.format('%s\tRequired: %s', tabs, tostring(value['required']))) end end if value['default'] then print(string.format('%s\tDefault: %s', tabs, value['default'])) end if not opts['no-examples'] and value['example'] then local nv = string.match(value['example'], '^%s*(.*[^%s])%s*$') or value.example print(string.format('%s\tExample:\n%s', tabs, nv)) end if value.type and value.type == 'object' then print('') end end local sorted = sort_values(value) for _, v in ipairs(sorted) do if not known_attrs[v['key']] then -- We need to go deeper print_help(v['key'], v['value'], tabs .. '\t') end end end return function(args, res) opts = parser:parse(args) local sorted = sort_values(res) for _, v in ipairs(sorted) do print_help(v['key'], v['value'], '') print('') end end