forked from davidnemec/bitwarden-to-keepass
-
Notifications
You must be signed in to change notification settings - Fork 0
/
item.py
83 lines (59 loc) · 2.16 KB
/
item.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
from enum import IntEnum
from urllib.parse import urlsplit, parse_qsl
class ItemType(IntEnum):
LOGIN = 1
SECURE_NOTE = 2
CARD = 3
IDENTITY = 4
class CustomFieldType(IntEnum):
TEXT = 0
HIDDEN = 1
BOOLEAN = 2
class Item:
def __init__(self, item):
self.item = item
def get_id(self) -> str:
return self.item['id']
def get_name(self) -> str:
return self.item['name']
def get_folder_id(self) -> str:
return self.item['folderId']
def get_username(self) -> str:
if 'login' not in self.item:
return ''
return self.item['login']['username'] if self.item['login']['username'] else ''
def get_password(self) -> str:
if 'login' not in self.item:
return ''
return self.item['login']['password'] if self.item['login']['password'] else ''
def get_notes(self):
return self.item['notes']
def get_uris(self):
if 'login' not in self.item or 'uris' not in self.item['login']:
return []
for uri in self.item['login']['uris']:
uri['uri'] = uri['uri'] if uri['uri'] is not None else ''
return self.item['login']['uris']
def get_custom_fields(self):
if 'fields' not in self.item:
return []
for field in self.item['fields']:
field['name'] = field['name'] if field['name'] is not None else ''
field['value'] = field['value'] if field['value'] is not None else ''
field['type'] = CustomFieldType(field['type'])
return self.item['fields']
def get_attachments(self):
if 'attachments' not in self.item:
return []
return self.item['attachments']
def get_totp(self):
if 'login' not in self.item:
return None, None
if not self.item['login']['totp']:
return None, None
params = urlsplit(self.item['login']['totp']).query
params = dict(parse_qsl(params))
period = params.get('period', 30)
digits = params.get('digits', 6)
secret = params.get('secret', self.item['login']['totp'])
return secret, f'{period};{digits}'