MCPcopy Create free account
hub / github.com/Keeper-Security/Commander / execute

Method execute

keepercommander/commands/recordv3.py:464–688  ·  view source on GitHub ↗
(self, params, **kwargs)

Source from the content-addressed store, hash-verified

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):

Callers

nothing calls this directly

Calls 15

get_parserMethod · 0.95
try_resolve_pathFunction · 0.85
get_password_from_rulesFunction · 0.85
get_recordMethod · 0.80
getMethod · 0.80
get_record_type_nameMethod · 0.80
validate_accessMethod · 0.80
formatMethod · 0.80
__contains__Method · 0.80
enforceMethod · 0.80

Tested by

no test coverage detected