Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
title = (bcolors.FAIL + ' SKIP ' + bcolors.ENDC +
'Shared Folder Record Share permission(s). Not permitted')
dump_report_data(table, headers, title=title)
logging.info('')
logging.info('')
if len(direct_shares_update) > 0:
if not kwargs.get('force'):
last_record_uid = ''
table = []
for i, cmd in enumerate(direct_shares_update):
record_uid = cmd['record_uid']
row = [i + 1, '', '']
if record_uid != last_record_uid:
last_record_uid = record_uid
rec = api.get_record(params, record_uid)
row[1] = record_uid
row[2] = rec.title[:32]
row.append(cmd['to_username'])
if change_edit:
row.append((bcolors.BOLD + ' ' + ('Y' if should_have else 'N') + bcolors.ENDC)
if 'editable' in cmd else '')
if change_share:
row.append((bcolors.BOLD + ' ' + ('Y' if should_have else 'N') + bcolors.ENDC)
if 'shareable' in cmd else '')
table.append(row)
headers = ['#', 'Record UID', 'Title', 'Email']
if change_edit:
headers.append('Can Edit')
if change_share:
headers.append('Can Share')
logging.info("Rotating with plugin %s", plugin_name)
success = plugin.rotate(record, new_password)
if success:
logging.debug("Password rotation is successful for \"%s\".", plugin_name)
else:
logging.warning("Password rotation failed for \"%s\".", plugin_name)
return False
else:
return False
else:
logging.error('Record is not marked for password rotation (i.e. \'cmdr:plugin\' custom field).\n'
'Add custom field \'cmdr:plugin\'=\'noop\' to enable password rotation for this record')
return False
if api.update_record(params, record):
new_record = api.get_record(params, record_uid)
logging.info('Rotation successful for record_uid=%s, revision=%d', new_record.record_uid, new_record.revision)
return True
return False
regex = re.compile(fnmatch.translate(pattern)).match
folders = []
records = []
if show_folders:
for uid in folder.subfolders:
f = params.folder_cache[uid]
if any(filter(lambda x: regex(x) is not None, FolderListCommand.folder_match_strings(f))) if regex is not None else True:
folders.append(f)
if show_records:
folder_uid = folder.uid or ''
if folder_uid in params.subfolder_record_cache:
for uid in params.subfolder_record_cache[folder_uid]:
r = api.get_record(params, uid)
if any(filter(lambda x: regex(x) is not None, FolderListCommand.record_match_strings(r))) if regex is not None else True:
records.append(r)
if len(folders) == 0 and len(records) == 0:
if pattern:
logging.error("ls: %s: No such folder or record", pattern)
else:
if show_detail:
if len(folders) > 0:
display.formatted_folders(folders)
if len(records) > 0:
if len(records) < 5:
api.get_record_shares(params, [x.record_uid for x in records])
display.formatted_records(records, folder=folder.uid)
else:
names = []
if not name:
self.get_parser().print_help()
return
record_uid = None
if name in params.record_cache:
record_uid = name
else:
rs = try_resolve_path(params, name)
if rs is not None:
folder, name = rs
if folder is not None and name is not None:
folder_uid = folder.uid or ''
if folder_uid in params.subfolder_record_cache:
for uid in params.subfolder_record_cache[folder_uid]:
r = api.get_record(params, uid)
if r.title.lower() == name.lower():
record_uid = uid
break
if record_uid is None:
logging.error('Enter name or uid of existing record')
return
public_keys = {}
rq = {
'command': 'public_keys',
'key_owners': emails
}
rs = api.communicate(params, rq)
if 'public_keys' in rs:
for pk in rs['public_keys']:
def prepare_record_add(params, records):
record_hash = {}
for r_uid in params.record_cache:
rec = api.get_record(params, r_uid)
h = hashlib.md5()
hs = '{0}|{1}|{2}'.format(rec.title or '', rec.login or '', rec.password or '')
h.update(hs.encode())
record_hash[h.hexdigest()] = r_uid
record_adds = []
for rec in records:
h = hashlib.md5()
hs = '{0}|{1}|{2}'.format(rec.title or '', rec.login or '', rec.password or '')
h.update(hs.encode())
rec_hash = h.hexdigest()
record_uid = record_hash.get(rec_hash)
if record_uid is None:
record_key = os.urandom(32)
record_uid = api.generate_record_uid()
rs = try_resolve_path(params, name)
if rs is not None:
folder, name = rs
if folder is not None and name is not None:
folder_uid = folder.uid or ''
if folder_uid in params.subfolder_record_cache:
for uid in params.subfolder_record_cache[folder_uid]:
r = api.get_record(params, uid)
if r.title.lower() == name.lower():
record_uid = uid
break
if record_uid is None:
logging.warning('Enter name or uid of existing record')
return
record = api.get_record(params, record_uid)
changed = False
if kwargs.get('title') is not None:
title = kwargs['title']
if title:
record.title = title
changed = True
else:
logging.warning('Record title cannot be empty.')
if kwargs.get('login') is not None:
record.login = kwargs['login']
changed = True
if kwargs.get('password') is not None:
record.password = kwargs['password']
changed = True
else:
def find_endpoints(params):
# type: (KeeperParams) -> None
if RecordRotateCommand.LastRevision < params.revision:
RecordRotateCommand.LastRevision = params.revision
RecordRotateCommand.Endpoints.clear()
for record_uid in params.record_cache:
record = api.get_record(params, record_uid)
if record.custom_fields:
endpoints = {} # type: {str, str}
endpoints_desc = {}
for field in record.custom_fields:
if 'name' in field:
field_name = field['name']
m = rotate_pattern.match(field_name)
if m and 'value' in field:
endpoints[field_name] = field['value']
else:
m = rotate_desc_pattern.match(field_name)
if m:
endpoints_desc[m[1]] = field.get('value') or ''
if endpoints:
paths = []
for folder_uid in find_folders(params, record_uid):