Du kannst nicht mehr als 25 Themen auswählen Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

657 Zeilen
29 KiB

  1. # -*- coding: utf-8 -*-
  2. # Copyright 2016 Mir Calculate. http://www.calculate-linux.org
  3. #
  4. # Licensed under the Apache License, Version 2.0 (the "License");
  5. # you may not use this file except in compliance with the License.
  6. # You may obtain a copy of the License at
  7. #
  8. # http://www.apache.org/licenses/LICENSE-2.0
  9. #
  10. # Unless required by applicable law or agreed to in writing, software
  11. # distributed under the License is distributed on an "AS IS" BASIS,
  12. # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. # See the License for the specific language governing permissions and
  14. # limitations under the License.
  15. import sys
  16. from calculate.lib.datavars import VariableError, DataVarsError
  17. from calculate.core.server.func import WsdlBase, CustomButton
  18. from .unix import Unix, UnixError
  19. from calculate.ldap.ldap import LdapError
  20. from calculate.unix.variables.action import Actions
  21. from calculate.server.server import Server
  22. from calculate.server.variables.action import Actions as ServerActions
  23. from utils.cl_unix_setup import ClUnixSetupAction
  24. from utils.cl_unix_useradd import ClUnixUseraddAction
  25. from utils.cl_unix_usermod import ClUnixUsermodAction
  26. from utils.cl_unix_userdel import ClUnixUserdelAction
  27. from utils.cl_unix_passwd import ClUnixPasswdAction
  28. from utils.cl_unix_groupadd import ClUnixGroupaddAction
  29. from utils.cl_unix_groupmod import ClUnixGroupmodAction
  30. from utils.cl_unix_groupdel import ClUnixGroupdelAction
  31. from utils.cl_unix_groupshow import ClUnixGroupshowAction
  32. from utils.cl_unix_usershow import ClUnixUsershowAction
  33. from calculate.ldap.ldap import Ldap
  34. _ = lambda x: x
  35. from calculate.lib.cl_lang import setLocalTranslate, getLazyLocalTranslate
  36. setLocalTranslate('cl_unix3', sys.modules[__name__])
  37. __ = getLazyLocalTranslate(_)
  38. class Wsdl(WsdlBase):
  39. methods = [
  40. #
  41. # Настроить службу
  42. #
  43. {
  44. # идентификатор метода
  45. 'method_name': Unix.Method.Setup,
  46. # категория метода
  47. 'category': __('Setup Server'),
  48. # заголовок метода
  49. 'title': __("Unix Accounts"),
  50. # иконка для графической консоли
  51. 'image': 'calculate-unix-setup,preferences-system-login,ooo-base,'
  52. 'office-database',
  53. # метод присутствует в графической консоли
  54. 'gui': True,
  55. # консольная команда
  56. 'command': 'cl-unix-setup',
  57. # права для запуска метода
  58. 'rights': ['unix'],
  59. # объект содержащий модули для действия
  60. 'logic': {'Unix': Unix,
  61. 'Server': Server},
  62. # описание действия
  63. 'action': ClUnixSetupAction,
  64. # объект переменных
  65. 'datavars': "unix",
  66. 'native_error': (
  67. VariableError, DataVarsError, LdapError, UnixError),
  68. # значения по умолчанию для переменных этого метода
  69. 'setvars': {'cl_action!': ServerActions.Setup,
  70. 'server.cl_server_name': Unix.service_name,
  71. 'cl_unix_action': Actions.Setup,
  72. 'cl_autoupdate_set': 'on'
  73. # 'cl_dispatch_conf_default': "usenew"
  74. },
  75. # описание груп (список лямбда функций)
  76. 'groups': [
  77. lambda group: group(
  78. _("Unix Accounts"),
  79. brief=(
  80. 'ldap.ld_base_dn',
  81. 'server.sr_ldap_set',
  82. 'server.sr_unix_set',
  83. ),
  84. expert=('cl_unix_pw_generate_set',
  85. 'cl_unix_remove_set',
  86. 'cl_verbose_set',),
  87. hide=(),
  88. custom_buttons=[
  89. CustomButton.run_method(
  90. Unix.Method.Setup, "but0", _("Remove"),
  91. CustomButton.Behavior.setvalue(
  92. 'cl_unix_remove_set', 'on'),
  93. lambda Get: Get('server.sr_unix_set') == 'on'),
  94. CustomButton.next_button("but1")
  95. ]
  96. ),
  97. ],
  98. 'depends': [Ldap.Method.Setup],
  99. 'brief': {'next': __("Run"),
  100. 'name': __("Setup Accounts Server"), }
  101. },
  102. #
  103. # Добавить пользователя
  104. #
  105. {
  106. # идентификатор метода
  107. 'method_name': Unix.Method.UserAdd,
  108. # заголовок метода
  109. 'title': __("Add User"),
  110. # иконка для графической консоли
  111. 'image': None,
  112. # метод присутствует в графической консоли
  113. 'gui': True,
  114. # консольная команда
  115. 'command': 'cl-unix-useradd',
  116. # права для запуска метода
  117. 'rights': ['unix'],
  118. # объект содержащий модули для действия
  119. 'logic': {'Unix': Unix,
  120. 'Server': Server},
  121. # описание действия
  122. 'action': ClUnixUseraddAction,
  123. # объект переменных
  124. 'datavars': "unix",
  125. 'native_error': (
  126. VariableError, DataVarsError, LdapError, UnixError),
  127. # значения по умолчанию для переменных этого метода
  128. 'setvars': {'cl_action!': ServerActions.Setup,
  129. 'server.cl_server_name': Unix.service_name,
  130. 'cl_unix_action': Actions.UserAdd,
  131. 'cl_autoupdate_set': 'on',
  132. 'ldap.cl_ldap_bind_dn!': '{ld_unix_bind_dn}',
  133. 'ldap.cl_ldap_bind_pw!': '{ld_unix_pw}',
  134. # 'cl_dispatch_conf_default': "usenew"
  135. },
  136. # описание груп (список лямбда функций)
  137. 'groups': [
  138. lambda group: group(
  139. _("User"),
  140. brief=('ur_unix_login',),
  141. normal=(
  142. 'ur_unix_login',
  143. 'ur_unix_pw',
  144. 'ur_unix_comment',
  145. 'ur_unix_primary_group',
  146. 'ur_unix_groups',
  147. ),
  148. expert=(
  149. 'ur_unix_uid',
  150. 'ur_unix_home_path',
  151. 'ur_unix_shell',
  152. 'ur_unix_create_home_set',
  153. 'ur_unix_visible_set',
  154. 'ur_unix_skel',
  155. ),
  156. next_label=_("Run")
  157. ),
  158. ],
  159. 'depends': [Unix.Method.Setup],
  160. },
  161. #
  162. # Добавить группу
  163. #
  164. {
  165. # идентификатор метода
  166. 'method_name': Unix.Method.GroupAdd,
  167. # заголовок метода
  168. 'title': __("Add Group"),
  169. # иконка для графической консоли
  170. 'image': None,
  171. # метод присутствует в графической консоли
  172. 'gui': True,
  173. # консольная команда
  174. 'command': 'cl-unix-groupadd',
  175. # права для запуска метода
  176. 'rights': ['unix'],
  177. # объект содержащий модули для действия
  178. 'logic': {'Unix': Unix,
  179. 'Server': Server},
  180. # описание действия
  181. 'action': ClUnixGroupaddAction,
  182. # объект переменных
  183. 'datavars': "unix",
  184. 'native_error': (
  185. VariableError, DataVarsError, LdapError, UnixError),
  186. # значения по умолчанию для переменных этого метода
  187. 'setvars': {'cl_action!': ServerActions.Setup,
  188. 'server.cl_server_name': Unix.service_name,
  189. 'cl_unix_action': Actions.GroupAdd,
  190. 'cl_autoupdate_set': 'on',
  191. 'ldap.cl_ldap_bind_dn!': '{ld_unix_bind_dn}',
  192. 'ldap.cl_ldap_bind_pw!': '{ld_unix_pw}',
  193. # 'cl_dispatch_conf_default': "usenew"
  194. },
  195. # описание груп (список лямбда функций)
  196. 'groups': [
  197. lambda group: group(
  198. _("Add New Group"),
  199. brief=(),
  200. hide=('ur_unix_base_dir',),
  201. normal=(
  202. 'ur_unix_group_name',
  203. 'ur_unix_group_id',
  204. 'ur_unix_group_comment',
  205. ),
  206. expert=(),
  207. next_label=_("Run")
  208. ),
  209. ],
  210. 'depends': [Unix.Method.Setup],
  211. },
  212. #
  213. # Изменить параметры группы
  214. #
  215. {
  216. # идентификатор метода
  217. 'method_name': Unix.Method.GroupMod,
  218. # заголовок метода
  219. 'title': __("Modify Group"),
  220. # иконка для графической консоли
  221. 'image': None,
  222. # метод присутствует в графической консоли
  223. 'gui': True,
  224. # консольная команда
  225. 'command': 'cl-unix-groupmod',
  226. # права для запуска метода
  227. 'rights': ['unix'],
  228. # объект содержащий модули для действия
  229. 'logic': {'Unix': Unix,
  230. 'Server': Server},
  231. # описание действия
  232. 'action': ClUnixGroupmodAction,
  233. # объект переменных
  234. 'datavars': "unix",
  235. 'native_error': (
  236. VariableError, DataVarsError, LdapError, UnixError),
  237. # значения по умолчанию для переменных этого метода
  238. 'setvars': {'cl_action!': ServerActions.Setup,
  239. 'server.cl_server_name': Unix.service_name,
  240. 'cl_unix_action': Actions.GroupMod,
  241. 'cl_autoupdate_set': 'on',
  242. 'ldap.cl_ldap_bind_dn!': '{ld_unix_bind_dn}',
  243. 'ldap.cl_ldap_bind_pw!': '{ld_unix_pw}',
  244. # 'cl_dispatch_conf_default': "usenew"
  245. },
  246. # описание груп (список лямбда функций)
  247. 'groups': [
  248. lambda group: group(
  249. _("Group"),
  250. brief=('ur_unix_group_name_exists',),
  251. normal=(
  252. 'ur_unix_group_name_exists',
  253. 'ur_unix_group_newname',
  254. 'ur_unix_group_id',
  255. 'ur_unix_group_comment',
  256. 'ur_unix_group_users_replace',
  257. ),
  258. hide=('ur_unix_group_users_replace',),
  259. expert=(
  260. 'ur_unix_group_users_add',
  261. 'ur_unix_group_users_del',
  262. ),
  263. custom_buttons=[
  264. CustomButton.run_method(
  265. Unix.Method.GroupShow, 'but0', _("Back")),
  266. CustomButton.run_method(
  267. Unix.Method.GroupDel, 'but1', _("Delete"),
  268. CustomButton.Behavior.linkerror(
  269. source='ur_unix_group_name_exists',
  270. target='ur_unix_group_newname')),
  271. CustomButton.run_method(
  272. Unix.Method.GroupMod, 'but2', _("Modify")),
  273. ]
  274. ),
  275. ],
  276. 'invalidators': {
  277. 'ur_unix_group_name_exists': (
  278. 'ur_unix_group_id',
  279. 'ur_unix_group_comment',
  280. 'ur_unix_group_newname',
  281. 'ur_unix_group_users_replace',
  282. 'ur_unix_group_users_add',
  283. 'ur_unix_group_users_del',)
  284. },
  285. 'depends': [Unix.Method.Setup],
  286. },
  287. #
  288. # Удалить группу
  289. #
  290. {
  291. # идентификатор метода
  292. 'method_name': Unix.Method.GroupDel,
  293. # заголовок метода
  294. 'title': __("Delete Group"),
  295. # иконка для графической консоли
  296. 'image': None,
  297. # метод присутствует в графической консоли
  298. 'gui': True,
  299. # консольная команда
  300. 'command': 'cl-unix-groupdel',
  301. # права для запуска метода
  302. 'rights': ['unix'],
  303. # объект содержащий модули для действия
  304. 'logic': {'Unix': Unix,
  305. 'Server': Server},
  306. # описание действия
  307. 'action': ClUnixGroupdelAction,
  308. # объект переменных
  309. 'datavars': "unix",
  310. 'native_error': (
  311. VariableError, DataVarsError, LdapError, UnixError),
  312. # значения по умолчанию для переменных этого метода
  313. 'setvars': {'cl_action!': ServerActions.Setup,
  314. 'server.cl_server_name': Unix.service_name,
  315. 'cl_unix_action': Actions.GroupDel,
  316. 'cl_autoupdate_set': 'on',
  317. 'ldap.cl_ldap_bind_dn!': '{ld_unix_bind_dn}',
  318. 'ldap.cl_ldap_bind_pw!': '{ld_unix_pw}',
  319. # 'cl_dispatch_conf_default': "usenew"
  320. },
  321. # описание груп (список лямбда функций)
  322. 'groups': [
  323. lambda group: group(
  324. _("Group"),
  325. brief=(),
  326. normal=(
  327. 'ur_unix_group_name_exists',
  328. ),
  329. next_label=_("Run")
  330. ),
  331. ],
  332. 'depends': [Unix.Method.Setup]
  333. },
  334. #
  335. # Изменить параметры пользователя
  336. #
  337. {
  338. # идентификатор метода
  339. 'method_name': Unix.Method.UserMod,
  340. # заголовок метода
  341. 'title': __("Modify User"),
  342. # иконка для графической консоли
  343. 'image': None,
  344. # метод присутствует в графической консоли
  345. 'gui': True,
  346. # консольная команда
  347. 'command': 'cl-unix-usermod',
  348. # права для запуска метода
  349. 'rights': ['unix'],
  350. # объект содержащий модули для действия
  351. 'logic': {'Unix': Unix,
  352. 'Server': Server},
  353. # описание действия
  354. 'action': ClUnixUsermodAction,
  355. # объект переменных
  356. 'datavars': "unix",
  357. 'native_error': (
  358. VariableError, DataVarsError, LdapError, UnixError),
  359. # значения по умолчанию для переменных этого метода
  360. 'setvars': {'cl_action!': ServerActions.Setup,
  361. 'server.cl_server_name': Unix.service_name,
  362. 'cl_unix_action': Actions.UserMod,
  363. 'cl_autoupdate_set': 'on',
  364. 'ldap.cl_ldap_bind_dn!': '{ld_unix_bind_dn}',
  365. 'ldap.cl_ldap_bind_pw!': '{ld_unix_pw}',
  366. # 'cl_dispatch_conf_default': "usenew"
  367. },
  368. # описание груп (список лямбда функций)
  369. 'groups': [
  370. lambda group: group(
  371. _("User"),
  372. normal=(
  373. 'ur_unix_login_exists',
  374. 'ur_unix_pw',
  375. 'ur_unix_primary_group',
  376. 'ur_unix_comment',
  377. 'ur_unix_groups',
  378. ),
  379. expert=(
  380. 'ur_unix_groups_add',
  381. 'ur_unix_groups_del',
  382. 'ur_unix_lock_set',
  383. 'ur_unix_pw_delete_set',
  384. 'ur_unix_visible_set',
  385. 'ur_unix_home_path',
  386. 'ur_unix_home_path_move',
  387. 'ur_unix_shell',
  388. ),
  389. custom_buttons=[
  390. CustomButton.run_method(Unix.Method.UserShow,
  391. 'but0', _("Back")),
  392. CustomButton.run_method(Unix.Method.UserDel,
  393. 'but1', _("Delete")),
  394. CustomButton.run_method(Unix.Method.UserMod,
  395. 'but2', _("Modify"))
  396. ],
  397. next_label=_("Run")
  398. ),
  399. ],
  400. 'invalidators': {
  401. 'ur_unix_login_exists': (
  402. 'ur_unix_primary_group',
  403. 'ur_unix_comment',
  404. 'ur_unix_groups',
  405. 'ur_unix_visible_set',
  406. 'ur_unix_lock_set',
  407. 'ur_unix_groups_add',
  408. 'ur_unix_groups_del',
  409. 'ur_unix_home_path',
  410. 'ur_unix_home_path_move',
  411. 'ur_unix_shell',
  412. 'ur_unix_pw_delete_set',
  413. )
  414. },
  415. 'depends': [Unix.Method.Setup]
  416. },
  417. #
  418. # Удалить пользователя
  419. #
  420. {
  421. # идентификатор метода
  422. 'method_name': Unix.Method.UserDel,
  423. # заголовок метода
  424. 'title': __("Delete User"),
  425. # иконка для графической консоли
  426. 'image': None,
  427. # метод присутствует в графической консоли
  428. 'gui': True,
  429. # консольная команда
  430. 'command': 'cl-unix-userdel',
  431. # права для запуска метода
  432. 'rights': ['unix'],
  433. # объект содержащий модули для действия
  434. 'logic': {'Unix': Unix,
  435. 'Server': Server},
  436. # описание действия
  437. 'action': ClUnixUserdelAction,
  438. # объект переменных
  439. 'datavars': "unix",
  440. 'native_error': (
  441. VariableError, DataVarsError, LdapError, UnixError),
  442. # значения по умолчанию для переменных этого метода
  443. 'setvars': {'cl_action!': ServerActions.Setup,
  444. 'server.cl_server_name': Unix.service_name,
  445. 'cl_unix_action': Actions.UserDel,
  446. 'cl_autoupdate_set': 'on',
  447. 'ldap.cl_ldap_bind_dn!': '{ld_unix_bind_dn}',
  448. 'ldap.cl_ldap_bind_pw!': '{ld_unix_pw}',
  449. # 'cl_dispatch_conf_default': "usenew"
  450. },
  451. # описание груп (список лямбда функций)
  452. 'groups': [
  453. lambda group: group(
  454. _("User"),
  455. brief=(),
  456. normal=(
  457. 'ur_unix_login_exists',
  458. ),
  459. next_label=_("Run")
  460. ),
  461. ],
  462. 'depends': [Unix.Method.Setup]
  463. },
  464. #
  465. # Сменить пароль пользователю
  466. #
  467. {
  468. # идентификатор метода
  469. 'method_name': Unix.Method.Passwd,
  470. # заголовок метода
  471. 'title': __("Password Modification"),
  472. # иконка для графической консоли
  473. 'image': None,
  474. # метод присутствует в графической консоли
  475. 'gui': False,
  476. # консольная команда
  477. 'command': 'cl-unix-passwd',
  478. # права для запуска метода
  479. 'rights': ['unix'],
  480. # объект содержащий модули для действия
  481. 'logic': {'Unix': Unix,
  482. 'Server': Server},
  483. # описание действия
  484. 'action': ClUnixPasswdAction,
  485. # объект переменных
  486. 'datavars': "unix",
  487. 'native_error': (
  488. VariableError, DataVarsError, LdapError, UnixError),
  489. # значения по умолчанию для переменных этого метода
  490. 'setvars': {'cl_action!': ServerActions.Setup,
  491. 'server.cl_server_name': Unix.service_name,
  492. 'cl_unix_action': Actions.Passwd,
  493. 'cl_autoupdate_set': 'on',
  494. 'ldap.cl_ldap_bind_dn!': '{ld_unix_bind_dn}',
  495. 'ldap.cl_ldap_bind_pw!': '{ld_unix_pw}',
  496. # 'cl_dispatch_conf_default': "usenew"
  497. },
  498. # описание груп (список лямбда функций)
  499. 'groups': [
  500. lambda group: group(
  501. _("User"),
  502. brief=(),
  503. normal=(
  504. 'ur_unix_login_exists',
  505. 'ur_unix_pw',
  506. 'ur_unix_pw_delete_set',
  507. 'ur_unix_lock_set'
  508. ),
  509. next_label=_("Run")
  510. ),
  511. ],
  512. 'depends': [Unix.Method.Setup]
  513. },
  514. #
  515. # Просмотр групп
  516. #
  517. {
  518. # идентификатор метода
  519. 'method_name': Unix.Method.GroupShow,
  520. # категория метода
  521. 'category': __('Accounts Server'),
  522. # заголовок метода
  523. 'title': __("Unix Groups"),
  524. # иконка для графической консоли
  525. 'image': 'calculate-unix-groupshow,group,system-users',
  526. # метод присутствует в графической консоли
  527. 'gui': lambda Get: Get('server.sr_unix_set') == 'on',
  528. # консольная команда
  529. 'command': 'cl-unix-groupshow',
  530. # права для запуска метода
  531. 'rights': ['unix'],
  532. # объект содержащий модули для действия
  533. 'logic': {'Unix': Unix,
  534. 'Server': Server},
  535. # описание действия
  536. 'action': ClUnixGroupshowAction,
  537. # объект переменных
  538. 'datavars': "unix",
  539. 'native_error': (
  540. VariableError, DataVarsError, LdapError, UnixError),
  541. # значения по умолчанию для переменных этого метода
  542. 'setvars': {'cl_action!': ServerActions.Setup,
  543. 'server.cl_server_name': Unix.service_name,
  544. 'cl_unix_action': Actions.GroupShow,
  545. 'cl_autoupdate_set': 'on',
  546. 'core.cl_page_max!': '{ur_unix_group_count}',
  547. 'ldap.cl_ldap_bind_dn!': '{ld_unix_bind_dn}',
  548. 'ldap.cl_ldap_bind_pw!': '{ld_unix_pw}',
  549. # 'cl_dispatch_conf_default': "usenew"
  550. },
  551. # описание груп (список лямбда функций)
  552. 'groups': [
  553. lambda group: group(
  554. _("Groups"),
  555. brief=(),
  556. next_label=_("Show"),
  557. normal=(
  558. 'ur_unix_group_show',
  559. 'core.cl_page_count', 'core.cl_page_offset',
  560. ),
  561. expert=(
  562. 'cl_unix_group_filter_name',
  563. 'cl_unix_group_filter_id',
  564. 'cl_unix_group_filter_comment',
  565. 'cl_unix_group_filter_users',
  566. 'cl_unix_group_fields',
  567. ),
  568. custom_buttons=[
  569. CustomButton.open_method(Unix.Method.GroupAdd,
  570. 'but0', _("Add Group")),
  571. CustomButton.run_method(Unix.Method.GroupShow,
  572. 'but1', _("Show"))
  573. ]
  574. ),
  575. ],
  576. 'depends': [Unix.Method.Setup]
  577. },
  578. #
  579. # Просмотр пользователей
  580. #
  581. {
  582. # идентификатор метода
  583. 'method_name': Unix.Method.UserShow,
  584. # категория метода
  585. 'category': __('Accounts Server'),
  586. # заголовок метода
  587. 'title': __("Unix Users"),
  588. # иконка для графической консоли
  589. 'image': 'calculate-unix-usershow,user,stock_person,system-users',
  590. # метод присутствует в графической консоли
  591. 'gui': lambda Get: Get('server.sr_unix_set') == 'on',
  592. # консольная команда
  593. 'command': 'cl-unix-usershow',
  594. # права для запуска метода
  595. 'rights': ['unix'],
  596. # объект содержащий модули для действия
  597. 'logic': {'Unix': Unix,
  598. 'Server': Server},
  599. # описание действия
  600. 'action': ClUnixUsershowAction,
  601. # объект переменных
  602. 'datavars': "unix",
  603. 'native_error': (
  604. VariableError, DataVarsError, LdapError, UnixError),
  605. # значения по умолчанию для переменных этого метода
  606. 'setvars': {'cl_action!': ServerActions.Setup,
  607. 'server.cl_server_name': Unix.service_name,
  608. 'cl_unix_action': Actions.UserShow,
  609. 'cl_autoupdate_set': 'on',
  610. 'core.cl_page_max!': '{ur_unix_user_count}',
  611. 'ldap.cl_ldap_bind_dn!': '{ld_unix_bind_dn}',
  612. 'ldap.cl_ldap_bind_pw!': '{ld_unix_pw}',
  613. # 'cl_dispatch_conf_default': "usenew"
  614. },
  615. # описание груп (список лямбда функций)
  616. 'groups': [
  617. lambda group: group(
  618. _("Users"),
  619. brief=(),
  620. next_label=_("Show"),
  621. normal=(
  622. 'ur_unix_user_show',
  623. 'core.cl_page_count', 'core.cl_page_offset',
  624. ),
  625. expert=(
  626. 'cl_unix_user_filter_login',
  627. 'cl_unix_user_filter_pw_set',
  628. 'cl_unix_user_filter_comment',
  629. 'cl_unix_user_filter_uid',
  630. 'cl_unix_user_filter_gid',
  631. 'cl_unix_user_filter_groups',
  632. 'cl_unix_user_filter_home_path',
  633. 'cl_unix_user_filter_shell',
  634. 'cl_unix_user_filter_visible_set',
  635. 'cl_unix_user_filter_lock_set',
  636. 'cl_unix_user_fields',
  637. ),
  638. custom_buttons=[
  639. CustomButton.open_method(Unix.Method.UserAdd,
  640. 'but0', _("Add User")),
  641. CustomButton.run_method(Unix.Method.UserShow,
  642. 'but1', _("Show")),
  643. ]
  644. ),
  645. ],
  646. 'depends': [Unix.Method.Setup]
  647. },
  648. ]