| 366 | print(' {0:>23s} {1}'.format(entry['record_uid'], name)) |
| 367 | |
| 368 | def execute(self, params, **kwargs): |
| 369 | uid = kwargs.get('uid') |
| 370 | if not uid: |
| 371 | raise CommandError('get', 'UID parameter is required') |
| 372 | |
| 373 | raise_if_unsafe_get_lookup_token(uid) |
| 374 | |
| 375 | fmt = kwargs.get('format') or 'detail' |
| 376 | |
| 377 | # First try to interpret as UID |
| 378 | direct_match = False |
| 379 | |
| 380 | if api.is_shared_folder(params, uid): |
| 381 | admins = api.get_share_admins_for_shared_folder(params, uid) |
| 382 | sf = api.get_shared_folder(params, uid) |
| 383 | cached_sf = params.shared_folder_cache.get(uid) or {} |
| 384 | owner_username = cached_sf.get('owner_username') |
| 385 | owner_account_uid = cached_sf.get('owner_account_uid') |
| 386 | if fmt == 'json': |
| 387 | path = get_folder_path(params, sf.shared_folder_uid, delimiter=os.sep) if sf.shared_folder_uid else '' |
| 388 | sf_node = params.folder_cache.get(sf.shared_folder_uid) if sf.shared_folder_uid else None |
| 389 | parent_uid = sf_node.parent_uid if sf_node and sf_node.parent_uid else None |
| 390 | sfo = { |
| 391 | "folder_uid": sf.shared_folder_uid, |
| 392 | "type": "classic_folder", |
| 393 | "name": sf.name, |
| 394 | "path": path, |
| 395 | "parent_uid": parent_uid, |
| 396 | "folder": { |
| 397 | "uid": parent_uid, |
| 398 | "path": get_folder_path(params, parent_uid) if parent_uid else "/" |
| 399 | }, |
| 400 | "manage_users": sf.default_manage_users, |
| 401 | "manage_records": sf.default_manage_records, |
| 402 | "can_edit": sf.default_can_edit, |
| 403 | "can_share": sf.default_can_share |
| 404 | } |
| 405 | if sf.records: |
| 406 | records_list = [] |
| 407 | for r in sf.records: |
| 408 | rec_entry = { |
| 409 | 'record_uid': r['record_uid'], |
| 410 | 'can_edit': r['can_edit'], |
| 411 | 'can_share': r['can_share'] |
| 412 | } |
| 413 | rec = vault.KeeperRecord.load(params, r['record_uid']) |
| 414 | if rec: |
| 415 | rec_entry['record_name'] = rec.title |
| 416 | records_list.append(rec_entry) |
| 417 | sfo['records'] = records_list |
| 418 | def _format_expiration(expiration_value): |
| 419 | if expiration_value is None or expiration_value <= 0: |
| 420 | return 'never' |
| 421 | return datetime.datetime.fromtimestamp(expiration_value // 1000).isoformat() |
| 422 | if sf.users: |
| 423 | sfo['users'] = [{ |
| 424 | 'username': u['username'], |
| 425 | 'user_id': u.get('account_uid'), |