(self, params, **kwargs)
| 462 | return edit_parser |
| 463 | |
| 464 | def execute(self, params, **kwargs): |
| 465 | name = kwargs['record'] if 'record' in kwargs else None |
| 466 | if not name: |
| 467 | self.get_parser().print_help() |
| 468 | return |
| 469 | |
| 470 | record_uid = None |
| 471 | if name in params.record_cache: |
| 472 | record_uid = name |
| 473 | else: |
| 474 | rs = try_resolve_path(params, name) |
| 475 | if rs is not None: |
| 476 | folder, name = rs |
| 477 | if folder is not None and name is not None: |
| 478 | folder_uid = folder.uid or '' |
| 479 | if folder_uid in params.subfolder_record_cache: |
| 480 | for uid in params.subfolder_record_cache[folder_uid]: |
| 481 | r = api.get_record(params, uid) |
| 482 | if r.title.lower() == name.lower(): |
| 483 | record_uid = uid |
| 484 | break |
| 485 | |
| 486 | if record_uid is None: |
| 487 | raise CommandError('edit', 'Enter name or uid of existing record') |
| 488 | |
| 489 | rt_name = '' |
| 490 | options = kwargs.get('option') or [] |
| 491 | options = [] if options == [None] else options |
| 492 | rv = params.record_cache[record_uid].get('version') if params.record_cache and record_uid in params.record_cache else None |
| 493 | if rv > 2: |
| 494 | # convert any v2 options into corresponding v3 options for v3 type=login|general |
| 495 | rt_data = params.record_cache[record_uid].get('data_unencrypted') |
| 496 | rt_name = recordv3.RecordV3.get_record_type_name(rt_data) |
| 497 | if rt_name in ("login", "general"): |
| 498 | errors = self.convert_legacy_options(kwargs=kwargs) |
| 499 | if errors: |
| 500 | logging.error(bcolors.FAIL + 'Conflict between record type and legacy options: ' + errors + bcolors.ENDC) |
| 501 | return |
| 502 | options = kwargs.get('option') or options |
| 503 | |
| 504 | has_v3_options = bool(kwargs.get('data') or kwargs.get('data_file') or options) |
| 505 | has_v2_options = bool(kwargs.get('legacy') or kwargs.get('title') or kwargs.get('login') or kwargs.get('password') or kwargs.get('url') or kwargs.get('notes') or kwargs.get('custom')) |
| 506 | if has_v2_options and has_v3_options: |
| 507 | logging.error(bcolors.FAIL + 'Use either legacy arguments only (--pass, --login --url, --notes, --custom) or record type options only (type=login title=MyRecord etc.) see. https://github.com/Keeper-Security/Commander/blob/master/record-types.md' + bcolors.ENDC) |
| 508 | return |
| 509 | |
| 510 | # v2 record: when --legacy flag is set or a legacy option (--login, --pass, --url, --notes, --custom) |
| 511 | # v2 record: when no v3 option set - neither -v3d nor -v3f is set |
| 512 | # v3 record: when no --legacy flag and no legacy options (--title, --login, --pass, --url, --notes, --custom) |
| 513 | # NB! v3 record needs at least one of: -v3d or -v3f or -o to be set |
| 514 | is_v2 = bool(kwargs.get('legacy')) |
| 515 | # 2021-06-02 Legacy/v2 record is created only with -v2|--legacy option otherwise create v3 type=login from legacy options |
| 516 | # is_v2 = is_v2 or bool(kwargs.get('title') or kwargs.get('login') or kwargs.get('password') or kwargs.get('url') or kwargs.get('notes') or kwargs.get('custom')) |
| 517 | # is_v2 = is_v2 or not bool(kwargs.get('data') or kwargs.get('data_file') or kwargs.get('option') or kwargs.get('generate')) |
| 518 | # 2021-06-08 --legacy option is ignored - use record version and v3_enabled flag |
| 519 | v3_enabled = params.settings.get('record_types_enabled') if params.settings and isinstance(params.settings.get('record_types_enabled'), bool) else False |
| 520 | if is_v2: |
| 521 | if rv and rv in (3, 4): |
nothing calls this directly
no test coverage detected