clamav.js 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338
  1. 'use strict';
  2. 'require form';
  3. 'require fs';
  4. // 'require rpc';
  5. 'require uci';
  6. 'require view';
  7. return view.extend({
  8. load: function() {
  9. },
  10. render: function() {
  11. let m, s, o;
  12. m = new form.Map('clamav', _('ClamAV'), _('Configuration'));
  13. // Section
  14. s = m.section(form.TypedSection, 'clamav', _('Settings'));
  15. s.anonymous = true;
  16. s.addremove = false;
  17. // Advanced Tab
  18. s.tab('tab_advanced', _('Settings'));
  19. // s.tab('tab_logs', _('Log'));
  20. // clamd_config_file
  21. o = s.taboption('tab_advanced', form.Value, 'clamd_config_file', _('clamd config file'));
  22. o.datatype = 'string';
  23. o.value('/etc/clamav/clamd.conf');
  24. o.placeholder = '/etc/clamav/clamd.conf';
  25. /*
  26. // LogFile
  27. o = s.taboption('tab_advanced', form.Value, 'LogFile', _('Logfile'));
  28. o.value('/tmp/clamav.log');
  29. o.placeholder = '/tmp/clamav.log';
  30. // LogFileMaxSize
  31. o = s.taboption('tab_advanced', form.Value, 'LogFileMaxSize', _('Max size of log file'));
  32. o.value('512K', _('512K'));
  33. o.value('1M', _('1M'));
  34. o.value('2M', _('2M'));
  35. o.placeholder = '1M';
  36. // LogRotate
  37. o = s.taboption('tab_advanced', form.ListValue, 'LogRotate', _('Add header'));
  38. o.value('false', _('No'));
  39. o.value('true', _('Yes'));
  40. */
  41. // LogTime
  42. o = s.taboption('tab_advanced', form.ListValue, 'LogTime', _('Log time with each message'));
  43. o.value('no', _('No'));
  44. o.value('yes', _('Yes'));
  45. o.placeholder = 'no';
  46. // LogVerbose
  47. o = s.taboption('tab_advanced', form.ListValue, 'LogVerbose', _('Enable verbose logging'));
  48. o.value('no', _('No'));
  49. o.value('yes', _('Yes'));
  50. o.placeholder = 'no';
  51. // Debug
  52. o = s.taboption('tab_advanced', form.ListValue, 'Debug', _('Debug logging'));
  53. o.value('false', _('No'));
  54. o.value('true', _('Yes'));
  55. o.placeholder = 'true';
  56. // LogSyslog
  57. o = s.taboption('tab_advanced', form.ListValue, 'LogSyslog', _('Log to syslog'));
  58. o.value('false', _('No'));
  59. o.value('true', _('Yes'));
  60. o.placeholder = 'true';
  61. // LogFacility
  62. o = s.taboption('tab_advanced', form.ListValue, 'LogFacility', _('Syslog facility'));
  63. o.value('LOG_KERN');
  64. o.value('LOG_USER');
  65. o.value('LOG_MAIL');
  66. o.value('LOG_DAEMON');
  67. o.value('LOG_AUTH');
  68. o.value('LOG_LPR');
  69. o.value('LOG_NEWS');
  70. o.value('LOG_UUCP');
  71. o.value('LOG_CRON');
  72. o.value('LOG_LOCAL0');
  73. o.value('LOG_LOCAL1');
  74. o.value('LOG_LOCAL2');
  75. o.value('LOG_LOCAL3');
  76. o.value('LOG_LOCAL4');
  77. o.value('LOG_LOCAL5');
  78. o.value('LOG_LOCAL6');
  79. o.value('LOG_LOCAL7');
  80. // cannot do o.depends - it removes the option if dep condition is not met, thereby causing a startup error
  81. // o.depends('LogSyslog', 'true');
  82. // ExtendedDetectionInfo
  83. o = s.taboption('tab_advanced', form.ListValue, 'ExtendedDetectionInfo', _('Log additional infection info'));
  84. o.value('no', _('No'));
  85. o.value('yes', _('Yes'));
  86. o.placeholder = 'no';
  87. // OfficialDatabaseOnly
  88. o = s.taboption('tab_advanced', form.ListValue, 'OfficialDatabaseOnly', _('Use official database only'));
  89. o.value('no', _('No'));
  90. o.value('yes', _('Yes'));
  91. o.placeholder = 'no';
  92. // MaxDirectoryRecursion
  93. o = s.taboption('tab_advanced', form.Value, 'MaxDirectoryRecursion', _('Max directory scan depth'));
  94. o.value('15');
  95. o.value('20');
  96. o.placeholder = '15';
  97. // FollowDirectorySymlinks
  98. o = s.taboption('tab_advanced', form.ListValue, 'FollowDirectorySymlinks', _('Follow directory symlinks'));
  99. o.value('no', _('No'));
  100. o.value('yes', _('Yes'));
  101. o.placeholder = 'no';
  102. // FollowFileSymlinks
  103. o = s.taboption('tab_advanced', form.ListValue, 'FollowFileSymlinks', _('Follow file symlinks'));
  104. o.value('no', _('No'));
  105. o.value('yes', _('Yes'));
  106. o.placeholder = 'no';
  107. // DetectPUA
  108. o = s.taboption('tab_advanced', form.ListValue, 'DetectPUA', _('Detect possibly unwanted apps'));
  109. o.value('no', _('No'));
  110. o.value('yes', _('Yes'));
  111. o.placeholder = 'no';
  112. // ScanPE
  113. o = s.taboption('tab_advanced', form.ListValue, 'ScanPE', _('Scan portable executables'));
  114. o.value('no', _('No'));
  115. o.value('yes', _('Yes'));
  116. o.placeholder = 'yes';
  117. // ScanELF
  118. o = s.taboption('tab_advanced', form.ListValue, 'ScanELF', _('Scan ELF files'));
  119. o.value('no', _('No'));
  120. o.value('yes', _('Yes'));
  121. o.placeholder = 'yes';
  122. // DetectBrokenExecutables
  123. o = s.taboption('tab_advanced', form.ListValue, 'DetectBrokenExecutables', _('Detect broken executables'));
  124. o.value('no', _('No'));
  125. o.value('yes', _('Yes'));
  126. o.placeholder = 'no';
  127. // AlertBrokenExecutables
  128. o = s.taboption('tab_advanced', form.ListValue, 'AlertBrokenExecutables', _('Alert on broken executables'));
  129. o.value('no', _('No'));
  130. o.value('yes', _('Yes'));
  131. o.placeholder = 'no';
  132. // ScanOLE2
  133. o = s.taboption('tab_advanced', form.ListValue, 'ScanOLE2', _('Scan MS Office and .msi files'));
  134. o.value('no', _('No'));
  135. o.value('yes', _('Yes'));
  136. o.placeholder = 'yes';
  137. // ScanPDF
  138. o = s.taboption('tab_advanced', form.ListValue, 'ScanPDF', _('Scan pdf files'));
  139. o.value('no', _('No'));
  140. o.value('yes', _('Yes'));
  141. o.placeholder = 'yes';
  142. // ScanSWF
  143. o = s.taboption('tab_advanced', form.ListValue, 'ScanSWF', _('Scan swf files'));
  144. o.value('no', _('No'));
  145. o.value('yes', _('Yes'));
  146. o.placeholder = 'yes';
  147. // ScanMail
  148. o = s.taboption('tab_advanced', form.ListValue, 'ScanMail', _('Scan emails'));
  149. o.value('no', _('No'));
  150. o.value('yes', _('Yes'));
  151. o.placeholder = 'yes';
  152. // ScanPartialMessages
  153. o = s.taboption('tab_advanced', form.ListValue, 'ScanPartialMessages', _('Scan RFC1341 messages split over many emails'));
  154. o.value('no', _('No'));
  155. o.value('yes', _('Yes'));
  156. o.placeholder = 'no';
  157. // ScanArchive
  158. o = s.taboption('tab_advanced', form.ListValue, 'ScanArchive', _('Scan archives'));
  159. o.value('no', _('No'));
  160. o.value('yes', _('Yes'));
  161. o.placeholder = 'yes';
  162. // ArchiveBlockEncrypted
  163. o = s.taboption('tab_advanced', form.ListValue, 'ArchiveBlockEncrypted', _('Block encrypted archives'));
  164. o.value('no', _('No'));
  165. o.value('yes', _('Yes'));
  166. o.placeholder = 'no';
  167. // AlertEncrypted
  168. o = s.taboption('tab_advanced', form.ListValue, 'AlertEncrypted', _('Alert on encrypted archives'));
  169. o.value('no', _('No'));
  170. o.value('yes', _('Yes'));
  171. o.placeholder = 'yes';
  172. // StreamMinPort
  173. o = s.taboption('tab_advanced', form.Value, 'StreamMinPort', _('Port range, lowest port'));
  174. o.datatype = 'portrange';
  175. o.value('1024');
  176. o.placeholder = '1024';
  177. // StreamMaxPort
  178. o = s.taboption('tab_advanced', form.Value, 'StreamMaxPort', _('Port range, highest port'));
  179. o.datatype = 'portrange';
  180. o.value('2048');
  181. o.placeholder = '2048';
  182. // ReadTimeout
  183. o = s.taboption('tab_advanced', form.ListValue, 'ReadTimeout', _('Read timeout'));
  184. o.value('30');
  185. o.placeholder = '30';
  186. // CommandReadTimeout
  187. o = s.taboption('tab_advanced', form.ListValue, 'CommandReadTimeout', _('Command read timeout'));
  188. o.value('5');
  189. o.placeholder = '5';
  190. // MaxThreads
  191. o = s.taboption('tab_advanced', form.Value, 'MaxThreads', _('Max number of threads'));
  192. o.datatype = 'and(uinteger,min(1))';
  193. o.value('10');
  194. o.value('20');
  195. o.placeholder = '10';
  196. // SelfCheck
  197. o = s.taboption('tab_advanced', form.Value, 'SelfCheck', _('Database check every N sec'));
  198. o.datatype = 'and(uinteger,min(1))';
  199. o.value('600');
  200. o.placeholder = '600';
  201. // MaxFileSize
  202. o = s.taboption('tab_advanced', form.Value, 'MaxFileSize', _('Max size of scanned file'));
  203. o.datatype = 'string';
  204. o.value('512K', _('512K'));
  205. o.value('1M', _('1M'));
  206. o.value('2M', _('2M'));
  207. o.value('50M', _('50M'));
  208. o.value('150M', _('150M'));
  209. o.placeholder = '150M';
  210. // TCPAddr
  211. o = s.taboption('tab_advanced', form.Value, 'TCPAddr', _('TCP listen address'));
  212. o.datatype = 'string';
  213. o.value('localhost');
  214. o.value('127.0.0.1');
  215. o.placeholder = '127.0.0.1';
  216. // TCPSocket
  217. o = s.taboption('tab_advanced', form.Value, 'TCPSocket', _('TCP listen port'));
  218. o.datatype = 'string';
  219. o.value('3310');
  220. o.placeholder = '3310';
  221. // User
  222. o = s.taboption('tab_advanced', form.Value, 'User', _('User'));
  223. o.datatype = 'string';
  224. o.value('nobody');
  225. o.placeholder = 'nobody';
  226. // ExitOnOOM
  227. o = s.taboption('tab_advanced', form.ListValue, 'ExitOnOOM', _('Exit when Out Of Memory'));
  228. o.datatype = 'string';
  229. o.value('no', _('No'));
  230. o.value('yes', _('Yes'));
  231. o.placeholder = 'yes';
  232. // DisableCertCheck
  233. o = s.taboption('tab_advanced', form.ListValue, 'DisableCertCheck', _('Disable certificate checks'));
  234. o.datatype = 'string';
  235. o.value('no', _('No'));
  236. o.value('yes', _('Yes'));
  237. o.placeholder = 'no';
  238. // DatabaseDirectory
  239. o = s.taboption('tab_advanced', form.Value, 'DatabaseDirectory', _('Database directory'));
  240. o.datatype = 'string';
  241. o.value('/usr/share/clamav');
  242. o.placeholder = '/usr/share/clamav';
  243. // TemporaryDirectory
  244. o = s.taboption('tab_advanced', form.Value, 'TemporaryDirectory', _('Temporary directory'));
  245. o.datatype = 'string';
  246. o.value('/tmp');
  247. o.placeholder = '/tmp';
  248. // LocalSocket
  249. o = s.taboption('tab_advanced', form.Value, 'LocalSocket', _('Local socket'));
  250. o.datatype = 'string';
  251. o.value('/var/run/clamav/clamd.sock');
  252. o.placeholder = '/var/run/clamav/clamd.sock';
  253. /*
  254. // Logs Tab
  255. var logfile = s.taboption('tab_logs', form.TextValue, 'clamav_logfile', '');
  256. logfile.wrap = 'off';
  257. logfile.rows = 50;
  258. logfile.monospace = true;
  259. logfile.editable = false;
  260. logfile.cfgvalue = function() {
  261. const logfilename = uci.get('clamav', 'clamav', 'LogFile')
  262. return fs.read(logfilename)
  263. .then(function(data) {
  264. return data || '';
  265. });
  266. };
  267. logfile.write = function() {
  268. };
  269. */
  270. return m.render();
  271. },
  272. // handleSaveApply: function(ev) {
  273. // this.super('handleSaveApply', [ev]);
  274. // return Promise.all([
  275. // rpc.declare({
  276. // object: 'luci',
  277. // method: 'setInitAction',
  278. // params: [ 'name', 'action' ],
  279. // expect: { result: false }
  280. // })('clamav', 'reload'),
  281. // ]);
  282. // }
  283. });