#!/usr/bin/env python3 # -*- coding: utf-8 -*- # vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4 try: import kopano except ImportError: import zarafa as kopano from MAPI.Util import * import binascii def opt_args(): parser = kopano.parser('skpcf') parser.add_option("--user", dest="user", action="store", help="Username") parser.add_option("--public", dest="public", action="store_true", help="Show public folders") parser.add_option("--delete", dest="delete", action="store", help="Delete folder based on entryid") parser.add_option("--extend", dest="extend", action="store_true", help="show more values") return parser.parse_args() def printprop(typename, item): if typename == 'PT_MV_BINARY': listItem = [] for i in item: listItem.append(str(binascii.hexlify(i)).upper()) return listItem if typename == 'PT_OBJECT': return None if typename == 'PT_BINARY': return str(binascii.hexlify(item)).upper() if typename == 'PT_UNICODE': try: return item.encode('utf-8').decode() except: return item else: return item def printmapiprops(folder): props = [] for prop in folder.props(): if hex(prop.proptag) == "0x10130102L": props.append([prop.id_, prop.idname, hex(prop.proptag), prop.typename, printprop(prop.typename, prop.value), prop.value]) else: props.append([prop.id_, prop.idname, hex(prop.proptag), prop.typename, printprop(prop.typename, prop.value)]) return props def main(): options, args = opt_args() if not options.user and not options.public: print('Please use\n' \ '%s --user or\n' \ '%s --public' % (sys.argv[0], sys.argv[0])) sys.exit(1) if options.user: user = kopano.server(options).user(options.user) store = user.store name = user.name if options.public: name = 'Public' store = kopano.server(options).public_store if not options.delete: print('Store:', name.encode('utf-8').decode()) print('{:50} {:50} {:50}'.format('Folder name', 'Parent folder', 'Entryid')) for folder in store.root.folders(): print('{:50} {:50} {:50}'.format(folder.name.encode('utf8').decode(), folder.parent.name.encode('utf8').decode(), folder.entryid)) if options.extend: props = printmapiprops(folder) f = open('%s-%s.prop' % (folder.name, folder.entryid), 'w') for prop in props: f.write('{0:5} {1:37} {2:8} {3:10} {4:1}\n'.format(prop[0], prop[1], prop[2], prop[3], prop[4])) f.close() else: print('Not in yet') if __name__ == "__main__": main()