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

Class ThycoticHandler

examples/thycotic_import.py:9–213  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

7
8
9class ThycoticHandler(xml.sax.handler.ContentHandler):
10 def __init__(self):
11 super().__init__()
12 self.stack = []
13 self.templates = {}
14 self.secrets = []
15 self.folders = []
16 self.template = None # type: Optional[dict]
17 self.secret = None # type: Optional[dict]
18 self.folder = None # type: Optional[dict]
19
20 def startElement(self, name, attrs):
21 if len(self.stack) == 0 and name != 'ImportFile':
22 raise Exception('Invalid Thycotic Secret Server XML Export File')
23
24 if len(self.stack) == 2:
25 if self.stack[1] == 'SecretTemplates':
26 if name == 'secrettype':
27 if self.template is not None:
28 logging.info('Secret template has not been saved')
29 self.template = {'name': '', 'fields': {}, 'field': None}
30
31 elif self.stack[1] == 'Secrets':
32 if name == 'Secret':
33 if self.secret is not None:
34 logging.info('Secret has not been saved')
35 self.secret = {'name': '', 'template': '', 'folder': '', 'totp_code': '', 'items': {}, 'item': None}
36
37 elif self.stack[1] == 'Folders':
38 if name == 'Folder':
39 if self.folder is not None:
40 logging.info('Folder has not been saved')
41 self.folder = {'name': '', 'path': '', 'permissions': [], 'permission': None, 'shared': False}
42
43 elif len(self.stack) == 4:
44 if name == 'field' and self.stack[1] == 'SecretTemplates' and self.stack[2] == 'secrettype' and self.stack[3] == 'fields':
45 if self.template:
46 if self.template['field']:
47 logging.warning('Secret template: field has not been saved')
48 self.template['field'] = {'field_name': '', 'slug': '', 'slug_type': ''}
49 else:
50 logging.warning('Secret template: field has not been created')
51
52 elif name == 'SecretItem' and self.stack[1] == 'Secrets' and self.stack[2] == 'Secret' and self.stack[3] == 'SecretItems':
53 if self.secret:
54 if self.secret['item']:
55 logging.warning('Secret: item has not been saved')
56 self.secret['item'] = {'field_name': '', 'slug': '', 'value': ''}
57 else:
58 logging.warning('Secret: item has not been created')
59
60 elif name == 'Permission' and self.stack[1] == 'Folders' and self.stack[2] == 'Folder' and self.stack[3] == 'Permissions':
61 if self.folder:
62 if self.folder['permission']:
63 logging.warning('Folder: permission has not been saved')
64 self.folder['permission'] = {'group_name': '', 'user_name': '', 'secret_role': '', 'folder_role': ''}
65 else:
66 logging.warning('Folder: permission has not been created')

Callers 1

thycotic_import.pyFile · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected