From c9460a5e4966ab961263cea4669aa9fb04edfb2e Mon Sep 17 00:00:00 2001 From: a-sansara Date: Mon, 17 Sep 2012 17:34:08 +0200 Subject: [PATCH] cli search --- impra/cli.py | 18 ++++-- impra/core.py | 158 +++++++++++++++++++++++++++--------------------- impra/crypt.py | 33 ++++++---- impra/imap.py | 19 +++--- impra/util.py | 146 ++++++-------------------------------------- imprastorage.py | 34 +---------- 6 files changed, 155 insertions(+), 253 deletions(-) diff --git a/impra/cli.py b/impra/cli.py index 107dea3..1cf0dff 100644 --- a/impra/cli.py +++ b/impra/cli.py @@ -49,7 +49,7 @@ transfert process is transparent. Just vizualize locally the index of stored files and simply select files to download or upload. ImpraStorage automatically launch the parts to download, then merge parts in the appropriate way to rebuild the original file. Inversely, a file -to upload is splitt -in several parts with addition of noise data), and +to upload is split (in several parts with addition of noise data), and ImpraStorage randomly upload each parts then update the index. """ @@ -250,9 +250,12 @@ you can remove index but all presents files on the box %s will be unrecoverable if uid == None : uid = 'EMPTY' if date == None : date = '' if impst.index != None: - impst.index.print(True,'-'*120+'\n -- INDEX(`'+uid+'`) boxname :`'+impst.rootBox+'` '+date+'\n'+'-'*120) + impst.index.print('-'*120+'\n -- INDEX(`'+uid+'`) boxname :`'+impst.rootBox+'` '+date+'\n'+'-'*120) #encData = impst.index.impraEncrypt(impst.index.toString()) - #~ dd = """coucou mon joli coeur :*:* je s""" + #~ dd = """coucou mon joli coeur :*:* je sais que je te saoule avec ça mais bon putain tu va te planter ou merde""" + #~ dd = """01234567890123456789012345678901234567890123456789#""" + #~ + #~ #~ kg = crypt.KeyGen(256) #~ print('-- key --') #~ print(kg.key) @@ -260,7 +263,7 @@ you can remove index but all presents files on the box %s will be unrecoverable #~ print(kg.mark) #~ km = crypt.Kirmah(kg.key, kg.mark) #~ encData = km.encrypt(dd,'.index',22) - #~ print('*'+encData+'*') + #~ #print('*'+encData+'*') #~ decData = km.decrypt(encData,'.index',22) #~ print('*'+decData+'*') @@ -277,8 +280,11 @@ you can remove index but all presents files on the box %s will be unrecoverable else: print(o.get_by_id+' a is not valid id') elif o.search : - print(o.search) - + label = impst.index.searchByPattern(o.search) + if label==None: + print(' -- no match found for pattern `%s` --' % o.search) + else: + impst.index.print('-'*120+'\n -- SEARCH: `'+o.search+'` -- found '+str(len(label))+' results --\n'+'-'*120,label) elif o.remove : print(o.remove) diff --git a/impra/core.py b/impra/core.py index 814b4f0..a145247 100644 --- a/impra/core.py +++ b/impra/core.py @@ -37,16 +37,17 @@ from email.mime.base import MIMEBase from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText from email.utils import formatdate +from json import dump as jdump, load as jload, dumps as jdumps, loads as jloads from math import ceil, floor from mmap import mmap from os import remove, urandom, sep from os.path import abspath, dirname, join, realpath, basename, getsize, splitext -from re import split as regsplit +from re import split as regsplit, match as regmatch, compile as regcompile, search as regsearch from impra.imap import ImapHelper, ImapConfig -from impra.util import __CALLER__, RuTime, formatBytes, randomFrom, bstr, quote_escape, stack, run, file_exists, get_file_content +from impra.util import __CALLER__, RuTime, formatBytes, randomFrom, bstr, quote_escape, stack, run, file_exists, get_file_content, DEBUG, DEBUG_ALL, DEBUG_LEVEL, DEBUG_NOTICE, DEBUG_WARN from impra.crypt import Kirmah, ConfigKey, Noiser, Randomiz, hash_sha256 -DEBUG = True + # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -59,10 +60,9 @@ class FSplitter : """""" self.ck = ck self.wkdir = wkdir - self.DIR_CACHE = self.wkdir+sep+'cache'+sep - self.DIR_INBOX = self.wkdir+sep+'inbox'+sep - self.DIR_OUTBOX = self.wkdir+sep+'outbox'+sep - self.DIR_DEPLOY = self.wkdir+sep+'deploy'+sep + self.DIR_INBOX = join(self.wkdir,'inbox')+sep + self.DIR_OUTBOX = join(self.wkdir,'outbox')+sep + self.DIR_DEPLOY = join(self.wkdir,'deploy')+sep def addFile(self, fromPath, label, fixCount = False): """""" @@ -70,8 +70,8 @@ class FSplitter : fsize = getsize(fromPath) count = ceil(fsize/self.ck.psize) minp, maxp = 52, 62 - if fsize < 4800000 : minp, maxp = 8, 12 - elif fsize < 22200000 : minp, maxp = 12, 22 + if fsize < 4800000 : minp, maxp = 8, 16 + elif fsize < 22200000 : minp, maxp = 16, 22 elif fsize < 48000000 : minp, maxp = 22, 32 elif fsize < 222000000 : minp, maxp = 32, 42 if not fixCount : @@ -91,7 +91,7 @@ class FSplitter : m = mmap(f.fileno(), 0) p = 0 psize = ceil(getsize(fromPath)/hlst['head'][1]) - print(str(psize)) + print(formatBytes(psize)+' '+str(len(hlst['data']))+' parts') while m.tell() < m.size(): self._splitPart(m,p,psize,hlst['data'][p]) p += 1 @@ -217,30 +217,16 @@ class ImpraIndex: `mark` : str appropriate mark to check correct key `encdata` : str - initial content of the index encrypted with rsa + initial content of the index encrypted with Kirmah Algorythm + and representing a dic index as json string """ self.km = Kirmah(key, mark) self.dic = {} self.id = id - if encdata =='' : data = encdata - else : data = self.decrypt(encdata) - data = data.replace(self.QUOTE_REPL, '\'') - ld = regsplit('\n?\r? ?'+self.SEP_CATEGORY+' ?\n\r??',data) - l = regsplit(self.SEP_ITEM,ld[0]) - for row in l: - d = regsplit(self.SEP_TOKEN,row) - del d[7:] - # key : count, hash, ext, usr, cat - if len(d)>5 and d!='': - self.dic[d[1]] = d - if len(ld)>1: - l = regsplit(self.SEP_ITEM,ld[1].lstrip('\n\r')) - for row in l: - d = regsplit(' ?= ?',row,1) - if len(d)> 1 and len(d[0]) > 3 : - self.dic[d[0].lstrip('\n\r')] = d[1] - else: - for k in dicCategory : + if encdata =='' : self.dic = {} + else : self.dic = self.decrypt(encdata) + for k in dicCategory : + if not self.SEP_KEY_INTERN+k in self.dic: self.dic[self.SEP_KEY_INTERN+k] = dicCategory[k] def add(self,key, label, count, ext='', usr='', cat=''): @@ -253,6 +239,22 @@ class ImpraIndex: else : print(label+' already exist') + def addUser(self, nameFrom, hashName): + """""" + if not self.SEP_KEY_INTERN+'users' in self.dic: + self.dic[self.SEP_KEY_INTERN+'users'] = {} + if not hashName in self.dic[self.SEP_KEY_INTERN+'users']: + self.dic[self.SEP_KEY_INTERN+'users'][hashName] = nameFrom + + def getUser(self, hashName): + """""" + usrName = 'Anonymous' + if not str(self.SEP_KEY_INTERN+'users') in self.dic: + self.dic[self.SEP_KEY_INTERN+'users'] = {} + elif hashName in self.dic[self.SEP_KEY_INTERN+'users']: + usrName = self.dic[self.SEP_KEY_INTERN+'users'][hashName] + return usrName + def rem(self,label): """Remove the selected label from the index""" self.dic.pop(label, None) @@ -263,50 +265,63 @@ class ImpraIndex: def searchById(self,sid): """Search the corresponding label in the index""" - rt = RuTime(eval(__CALLER__())) + rt = RuTime(eval(__CALLER__(sid))) l = None - r = [v for i, v in enumerate(self.dic) if self.dic[v][6] == str(sid)] - if len(r)>0: l = r[0] + r = [v for i, v in enumerate(self.dic) if not v.startswith(self.SEP_KEY_INTERN) and self.dic[v][6] == int(sid)] + if len(r)==1: l = r[0] + rt.stop() + return l + + def searchByPattern(self,pattern): + """""" + rt = RuTime(eval(__CALLER__(pattern))) + l = None + r = [ v for i,v in enumerate(self.dic) if not v.startswith(self.SEP_KEY_INTERN) and regsearch(pattern,self.dic[v][1]) is not None ] + l = [self.dic[k][6] for k in r] rt.stop() return l - def toString(self, withoutCatg=False, idFirst=False): + def toString(self,matchIds): """Make a string representation of the index as it was store on the server""" - data = cdata = '' - for k in sorted(self.dic): + data = '' + r = [k for i, k in enumerate(self.dic) if not k.startswith(self.SEP_KEY_INTERN)] + for k in r : v = self.dic.get(k) k = k.lstrip('\n\r') - if k[0]==self.SEP_KEY_INTERN and len(k)>1: - cdata += k+'='+v+self.SEP_ITEM - else : - if not idFirst : - for i in v: - data += str(i)+self.SEP_TOKEN - else : + if not k[0]==self.SEP_KEY_INTERN and len(k)>1: + if matchIds==None or v[6] in matchIds: data += str(v[6]).rjust(1+ceil(len(str(v[6]))/10),' ')+' ' - data += str(v[0])[0:42]+'... ' - data += str(v[1]).ljust(30,' ')+' ' - for i in v[2:-1]: - data += str(i)+' ' - data = data.rstrip(self.SEP_TOKEN)+self.SEP_ITEM - if not withoutCatg : - data += self.SEP_CATEGORY+'\n'+cdata + data += str(v[0])[0:12]+'... ' + data += str(v[1]).ljust(42,' ')+' ' + data += str(v[2]).rjust(2,'0')+' ' + data += str(v[3]).ljust(5,' ')+' ' + data += self.getUser(str(v[4])).ljust(15,' ')+' ' + data += str(v[5])+' ' + #~ elif len(k)>1: + #~ print(k,'=',v) + data = data+self.SEP_ITEM return data; def encrypt(self): """""" - return self.km.encrypt(self.toString().replace('\'', self.QUOTE_REPL),'.index',22) + #~ print('encrypting index :') + jdata = jdumps(self.dic) + #~ print(jdata) + return self.km.encrypt(jdata,'.index',22) def decrypt(self,data): """""" - if data!='': data = self.km.decrypt(data,'.index',22) + #~ print('decrypting index : ') + jdata = self.km.decrypt(data,'.index',22) + #~ print(jdata) + data = jloads(jdata) return data - def print(self,withoutCatg=False, header=''): + def print(self,header='', matchIds=None): """Print index content as formated bloc""" - data = self.toString(withoutCatg,True).split(';') + data = self.toString(matchIds).split(self.SEP_ITEM) print(header) - print('id'+' '*2+'hash'+' '*43+'label'+' '*26+'part'+' '*2+'type'+' '*3+'from'+' '*11+'category') + print('id'+' '*2+'hash'+' '*13+'label'+' '*40+'part'+' '*2+'type'+' '*2+'owner'+' '*12+'category') print('-'*120) for row in data: if row.rstrip('\n') != '': print(row) @@ -366,25 +381,27 @@ class ImpraStorage: def getIndex(self): """""" - rt = RuTime(eval(__CALLER__())) + from impra.util import DEBUG, DEBUG_LEVEL, DEBUG_WARN, DEBUG_INFO + rt = RuTime(eval(__CALLER__()),DEBUG_INFO) index = None encData = '' uid = self.conf.get('uid' ,'index') date = self.conf.get('date','index') nid = self.conf.get('nid' ,'index') if nid==None : nid = 0 - if uid !=None : print(uid+' - '+date+' - ['+(str(nid))+']') self._getIdIndex() if self.idx : # getFromFile if uid != None and int(self.idx) == int(uid) and file_exists(self.pathInd): encData = get_file_content(self.pathInd) - print('cache') + print(' index in cache') else: encData = self._getCryptIndex() with open(self.pathInd, mode='w', encoding='utf-8') as o: o.write(encData) - index = ImpraIndex(self.conf.get('key','keys'),self.conf.get('mark','keys'), encData, {'catg':self.conf.get('types','catg')}, int(nid)) + usrName = self.conf.get('name','infos') + usrHash = self.mb.getHashName(usrName) + index = ImpraIndex(self.conf.get('key','keys'),self.conf.get('mark','keys'), encData, {'catg':self.conf.get('types','catg'), 'users':{ ('%s' % self.mb.getHashName('all')) : 'all', ('%s' % usrHash) : usrName}}, int(nid)) rt.stop() return index @@ -397,14 +414,14 @@ class ImpraStorage: def saveIndex(self): """""" - global DEBUG - rt = RuTime(eval(__CALLER__())) + from impra.util import DEBUG, DEBUG_LEVEL, DEBUG_NOTICE, DEBUG_WARN, DEBUG_INFO + rt = RuTime(eval(__CALLER__()),DEBUG_INFO) if self.idx != None : self.ih.delete(self.idx, True) for i in self.delids : self.ih.delete(i, True) encData = self.index.encrypt() msgIndex = self.mb.buildIndex(encData) - if DEBUG: print(msgIndex.as_string()) + if DEBUG and DEBUG_LEVEL <= DEBUG_NOTICE : print(msgIndex.as_string()) ids = self.ih.send(msgIndex.as_string(), self.rootBox) date = self.ih.headerField('date', ids[1], True) self.conf.set('uid',ids[1],'index') @@ -417,8 +434,8 @@ class ImpraStorage: def addFile(self, path, label, usr='all', catg=''): """""" - global DEBUG - rt = RuTime(eval(__CALLER__('"%s","%s","%s"' % (path[:13]+'...',label,usr)))) + from impra.util import DEBUG, DEBUG_LEVEL, DEBUG_NOTICE, DEBUG_WARN, DEBUG_INFO + rt = RuTime(eval(__CALLER__('"%s","%s","%s"' % (path[:13]+'...',label,usr))),DEBUG_INFO) #~ hlst = self.fsplit.addFile(path,label) #~ self.fsplit.deployFile(hlst,True) @@ -426,11 +443,13 @@ class ImpraStorage: try: if self.index.search(label)==None : hlst = self.fsplit.addFile(path,label) - if DEBUG : + if DEBUG and DEBUG_LEVEL <= DEBUG_NOTICE : print(hlst['head']) for v in hlst['data']: print(v) - nameFrom = self.conf.ini.get('name',self.conf.profile+'.infos') + nameFrom = self.conf.get('name','infos') + self.index.addUser(nameFrom, self.mb.getHashName(nameFrom)) + for row in hlst['data'] : msg = self.mb.build(nameFrom,usr,hlst['head'][2],self.fsplit.DIR_OUTBOX+row[1]+'.ipr') self.ih.send(msg.as_string(), self.rootBox) @@ -446,8 +465,9 @@ class ImpraStorage: def getFile(self,label): """""" - global DEBUG - rt = RuTime(eval(__CALLER__('"%s"' % label))) + from impra.util import DEBUG, DEBUG_LEVEL, DEBUG_NOTICE, DEBUG_WARN, DEBUG_INFO + + rt = RuTime(eval(__CALLER__('"%s"' % label)),DEBUG_INFO) if label==None : print(str(label)+' unexist') else : @@ -463,7 +483,7 @@ class ImpraStorage: if to == self.mb.getHashName('all')+'@'+self.mb.DOMAIN_NAME or to == self.mb.getHashName(self.conf.ini.get('name',self.conf.profile+'.infos'))+'@'+self.mb.DOMAIN_NAME : for mid in ids : self.ih.downloadAttachment(mid,self.fsplit.DIR_INBOX) - if DEBUG : + if DEBUG and DEBUG_LEVEL <= DEBUG_NOTICE : print(hlst['head']) for v in hlst['data']: print(v) diff --git a/impra/crypt.py b/impra/crypt.py index a5f8eb9..e28364d 100644 --- a/impra/crypt.py +++ b/impra/crypt.py @@ -26,7 +26,7 @@ # You should have received a copy of the GNU General Public License # along with ImpraStorage. If not, see . -from impra.util import RuTime, __CALLER__, stack +from impra.util import RuTime, __CALLER__, stack, DEBUG from base64 import urlsafe_b64encode, b64decode from binascii import b2a_base64, a2b_base64 from hashlib import sha256 @@ -219,19 +219,21 @@ class Kirmah: dataEnc = '' psize = ceil(len(data)/cpart) cp = 0 - for row in hlst['data']: + #~ print(row) + #~ print('ns:%i - dataLength:%i - dataEncLength:%i - ne:%i' % (row[2],len(data), len(dataEnc), row[3])) + #~ print(data[cp*psize:cp*psize+psize]) dataEnc += self.ck.noiser.getNoise(row[2],True)+data[cp*psize:cp*psize+psize]+self.ck.noiser.getNoise(row[3],True) cp += 1 dataEnc = str(b2a_base64(bytes(dataEnc,'utf-8')),'utf-8') - rt.stop() + #~ dataEnc = self.subenc(odata) with open('./.KirmahENC', mode='w') as o: o.write(dataEnc) - + rt.stop() return dataEnc - + def decrypt(self, data, label, cpart): """""" rt = RuTime(eval(__CALLER__())) @@ -244,24 +246,31 @@ class Kirmah: rsz += row[2]+row[3] psize = ceil((len(data)-rsz)/cpart) - for row in hlst['data']: si = ni + row[2] ei = si + psize + #~ print(row) + #~ print('si:%i - ei:%i - datalength:%i - dataDeclength:%i' % (si,ei,len(data),len(dataDec))) if cp == cpart-1 : - ei = -row[3] - if si > len(data)+ei : + ei = -row[3] + if not si > len(data)+ei : pass + ### to delete #si = len(data)+ei + #~ print('si:%i - ei:%i' % (si,ei)) + else : + #~ print('si: - ei:%i' % (len(data)+ei-si)) dataDec=dataDec[:len(data)+ei-si] break - si = len(data)+ei + #~ print(data[si:ei]) dataDec += data[si:ei] ni = ei + row[3] cp += 1 dataDec = self.subdec(dataDec) - with open('./.KirmahDEC', mode='w') as o: - o.write(dataDec) - rt.stop() + #~ dataDec = self.subdec(data) + + with open('./.KirmahDEC', mode='w') as o: + o.write(dataDec) + rt.stop() return dataDec # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/impra/imap.py b/impra/imap.py index 042f88c..a225f03 100755 --- a/impra/imap.py +++ b/impra/imap.py @@ -298,20 +298,23 @@ class ImapHelper: def deleteBin(self): """""" + from impra.util import DEBUG_NOTICE, DEBUG, DEBUG_LEVEL rt = RuTime(eval(__CALLER__())) self.srv.select(self.BOX_BIN) ids = self.search('ALL',True) if len(ids) > 0 and ids[0]!='' and ids[0]!=None: #print(str(ids[0],'utf-8').split()) - for mid in ids: - print('deleting msg '+str(mid)) + for mid in ids: #~ uid = bytes(mid) #~ print(type(mid)) #~ print(mid) #status, resp = self.srv.store(mid, '+FLAGS', '\\Deleted') status, resp = self.srv.uid('store', mid, '+FLAGS', '\\Deleted' ) - print(status) - print(resp) + + if DEBUG and DEBUG_LEVEL <= DEBUG_NOTICE: + print('deleting msg '+str(mid)) + print(status) + print(resp) self.srv.expunge() self.srv.select(self.rootBox) rt.stop() @@ -331,12 +334,13 @@ class ImapHelper: def downloadAttachment(self, msg, toDir='./'): """""" - rt = RuTime(eval(__CALLER__('%i' % int(msg)))) + from impra.util import DEBUG, DEBUG_LEVEL, DEBUG_NOTICE, DEBUG_INFO + rt = RuTime(eval(__CALLER__('%i' % int(msg))),DEBUG_INFO) if not isinstance(msg, Message) : msg = self.email(msg) for part in msg.walk(): filename = part.get_filename() - if filename != None : print(filename) + if filename != None and DEBUG and DEBUG_LEVEL <= DEBUG_NOTICE : print(filename) if part.get_content_maintype() == 'multipart' or not filename : continue fp = open(join(toDir, filename), 'wb') #print(part.get_payload(decode=True)[::-1]) @@ -346,7 +350,8 @@ class ImapHelper: def send(self, msg, box='INBOX'): """""" - rt = RuTime(eval(__CALLER__())) + from impra.util import DEBUG_INFO + rt = RuTime(eval(__CALLER__()),DEBUG_INFO) mid = None date = Time2Internaldate(time()) status, resp = self.srv.append(box, '\Draft', date, bytes(msg,'utf-8')) diff --git a/impra/util.py b/impra/util.py index b075c7a..a7e31f6 100755 --- a/impra/util.py +++ b/impra/util.py @@ -41,7 +41,13 @@ from inspect import stack from subprocess import PIPE, Popen from sys import stderr, executable as pyexec +DEBUG_ALL = 0 +DEBUG_WARN = 1 +DEBUG_NOTICE = 2 +DEBUG_INFO = 3 +DEBUG = True +DEBUG_LEVEL = DEBUG_INFO # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # ~~ methods ~~ @@ -149,93 +155,43 @@ def __CALLER__(args=''): eval(__CALLER('"%s","%s"' % (arg1,arg2))) :Returns: `str` - """ + """ + global DEBUG_LEVEL, DEBUG, DEBUG_WARN #~ print(inspect.stack()[1][3]) #~ print(print(args)) #~ print('-----') #~ print(inspect.stack()) #~ print('---------------') - val = "self.__class__.__name__+'.%s' % stack()[1][3]+'("+quote_escape(args)+") l:'+str(stack()[1][2])" + val = "self.__class__.__name__+'.%s' % stack()[1][3]+'("+quote_escape(args)+") " + if DEBUG and DEBUG_LEVEL<=DEBUG_WARN : val += "l:'+str(stack()[1][2])" + else: val += "'" return val -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -# ~~ class Noiser ~~ - -class Noiser: - """""" - - KEY_LEN = 256 - """""" - - def __init__(self, key, part=0): - """""" - - #~ if len(key)!=self.KEY_LEN : - #~ raise Exception('Invalid Pass length') - #~ else : - self.key = key - self.build(part) - - def build(self, part): - """""" - if not part < self.KEY_LEN-1 : raise Exception('part exceed limit') - else : - self.part, v = part, 0 - v = int(ceil((self.key[22]+v)/4.20583)) - self.lns = int(ceil(v/2))-self.key[self.part]+self.key[7] - self.lne = int(v-self.lns-self.key[self.part+2]-self.key[44]/2.1934) - - def getNoise(self, l): - """""" - return urandom(l) - - -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -# ~~ class Randomiz ~~ - -class Randomiz: - """""" - - def __init__(self,count,chl=None): - """""" - if chl ==None : self.lst = list(range(0,count)) - else: self.lst = chl - self.count = len(self.lst) - - def new(self,count=None, chl=None): - """""" - if count : self.count = count - self.__init__(self.count,chl) - - def get(self,single=True): - """""" - pos = choice(self.lst) - if single: del self.lst[self.lst.index(pos)] - return pos - - # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # ~~ class RuTime ~~ class RuTime: """Give basics time stats""" - def __init__(self,label): + def __init__(self,label,lvl=DEBUG_NOTICE): """Initialize duration with appropriate label""" - self.label = label + from impra.util import DEBUG, DEBUG_LEVEL, DEBUG_INFO + self.debug = DEBUG and DEBUG_LEVEL <= lvl + self.debugStart = self.debug and lvl < DEBUG_INFO + self.lvl = lvl + self.label = label self._start() def _start(self): - from impra.core import DEBUG - if DEBUG :print(' ==> '+self.label) + + if self.debugStart :print(' ==> '+self.label) self.sc = time() def stop(self): """Stop duration and print basics stats duration on console""" - from impra.core import DEBUG self.ec = time() - if DEBUG:self._stats() + if self.debug: self._stats() def _stats(self): print(' <== '+self.label+(' [%.9f s]' % (self.ec - self.sc))) @@ -340,68 +296,6 @@ class IniFile: class BadKeysException(BaseException): pass -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -# ~~ class Rsa ~~ - -class Rsa: - """""" - - def __init__(self, prvKey=None, pubKey=None, dpath='./', forceKeyGen=False): - """""" - self.cpath = join(dirname(dirname(realpath(__file__))),'desurveil','scripts')+sep - self.prvKey = prvKey - self.pubKey = pubKey - self.dpath = realpath(dpath)+sep - if prvKey == None or pubKey==None : self.key(forceKeyGen) - - def key(self,force=False): - """""" - cmd = self.cpath+'desurveil key -a '+self.dpath+'.impra_id_rsa -l '+self.dpath+'.impra_id_rsa.pub' - try : - with open(self.dpath+'.impra_id_rsa','rt') as f: pass - if force:d = popen(cmd).read() - except IOError as e: - d = popen(pyexec+' '+cmd).read() - #print(pyexec+' '+cmd) - self.prvKey = get_file_content(self.dpath+'.impra_id_rsa') - self.pubKey = get_file_content(self.dpath+'.impra_id_rsa.pub') - #~ print('pubKey : \n'+self.pubKey) - #~ print('prvKey : \n'+self.prvKey) - - def encrypt(self,data): - """""" - key = '' - #if self.pubKey != None : key = ' -CI "'+self.pubKey+'"' - if self.pubKey != None : key = ' -C "'+self.dpath+'.impra_id_rsa.pub"' - with open(self.dpath+'.tmpdecd', mode='w', encoding='utf-8') as o: - o.write(data) - cmd = self.cpath+'desurveil encrypt "'+self.dpath+'.tmpdecd'+'" '+key - #print(pyexec+' '+cmd) - rs = run(pyexec+' '+cmd) - if rs[0]==1: - print(rs) - raise BadKeysException('bad key to encrypt') - else : - encData = str(rs[1],'utf-8') - return encData - - def decrypt(self,data): - """""" - key = '' - #if self.prvKey != None : key = ' -CI "'+self.prvKey+'"' - if self.prvKey != None : key = ' -C "'+self.dpath+'.impra_id_rsa"' - with open(self.dpath+'.tmpencd', mode='w', encoding='utf-8') as o: - o.write(data) - cmd = self.cpath+'desurveil decrypt "'+self.dpath+'.tmpencd'+'" '+key - #print(pyexec+' '+cmd) - rs = run(pyexec+' '+cmd) - if rs[0]==1: - print(rs) - raise BadKeysException('bad key to decrypt') - else : - decData = str(rs[1],'utf-8') - return decData - # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # ~~ class StrIterator ~~ diff --git a/imprastorage.py b/imprastorage.py index 04aee75..e6a5ce6 100755 --- a/imprastorage.py +++ b/imprastorage.py @@ -27,44 +27,12 @@ # along with ImpraStorage. If not, see . from impra.core import ImpraConf, ImpraStorage -from impra.util import IniFile, Rsa, RuTime, get_file_path +from impra.util import IniFile, RuTime, get_file_path from impra.cli import Cli - if __name__ == '__main__': Cli(get_file_path(__file__ )) - #~ rt = RuTime(__name__+'()') - #~ conf = ImpraConf(IniFile('./impra.ini')) - #~ rsa = Rsa(conf.ini.get('prvKey',conf.profile+'.keys'),conf.ini.get('pubKey',conf.profile+'.keys')) - #~ impst = ImpraStorage(rsa, conf) -#~ - #~ print('\n -- INDEX DATA -- ') - #~ impst.index.print() - #~ print('-- LIST BOX --') - #~ lb = impst.ih.listBox('/') - #~ print(lb) -#~ - #~ #print('-- DELETE BIN --') - #~ #impst.ih.deleteBin() -#~ - #~ filePath = '/media/Data/dev/big_toph3.jpg' -#~ - #~ lab = 'Meuf\'bonne aussi4' -#~ - #~ print('\n -- ADD FILE -- ') - #~ impst.addFile(filePath,lab,conf.ini.get('name',conf.profile+'.infos'),'images') -#~ - #~ print('\n -- GET FILE -- ') - #~ impst.getFile(lab) -#~ - #~ print('\n -- INDEX DATA -- ') - #~ impst.index.print() - #~ - #~ print('\n -- CLEAN -- ') - #~ impst.clean() -#~ - #~ rt.stop() #python -O -m compileall impra/*.py