Subversion Repositories pub

Compare Revisions

Ignore whitespace Rev 122 → Rev 123

/relevation/branches/0.2/relevation.py/relevation
31,16 → 31,20
def usage(channel):
def p(s):
channel.write(s)
p('%s {-f passwordfile} {-p password | -0} search [search2] [search3]\n')
p('%s {-f passwordfile} {-p password | -0} search [search2] [...]\n' % sys.argv[0])
p('\nOptions:\n')
p(' -f <FILE>, --file=<FILE> Revelation password file\n')
p(' -p <PASS>, --password=<PASS> Master password\n')
p(' -s <SEARCH>, --search=<SEARCH> Search for string\n')
p(' -i, --case-insensitive Case insensitive search [default]\n')
p(' -c, --case-sensitive Case sensitive search\n')
p(' -a, --ask Interactively ask for password.\n')
p(' Note it will be displayed in clear as you\n')
p(' type it.\n')
p(' -0, --stdin Read password from standard input\n')
p(' -h, --help Print help (this message).\n')
p(' --version Print the program\'s version information.\n')
p('\n')
p(' -f <FILE>, --file=<FILE> Revelation password file\n')
p(' -p <PASS>, --password=<PASS> Master password\n')
p(' -s <STRING>, --search=<STRING> Search for string\n')
p(' -i, --case-insensitive Case insensitive search [default]\n')
p(' -c, --case-sensitive Case sensitive search\n')
p(' -0, --stdin Read password from standard input\n')
# p(' -a, --ask Ask password interactively\n')
p('\n')
 
def search(xmldata, search, caseInsensitive=True):
doc = libxml2.parseDoc(xmldata)
55,8 → 59,8
res = ctxt.xpathEval(xpath)
print '-> Search "%s": ' % search,
if not len(res):
print 'No matches'
sys.exit(2)
print 'No results'
sys.exit(80)
print '%d matches' % len(res)
tagnames ={ 'generic-url': 'Url:',
'generic-username': 'Username:',
85,12 → 89,15
idv = tagnames[idv]
print idv,chld.content
print ''
# for chld in x.children
sys.stderr.write('<- (end of %d results for "%s")\n\n' % ( len(res), search ))
# / for chld in x.children
nr = len(res)
plural = ''
if nr > 1:
plural = 's'
sys.stderr.write('<- (end of %d result%s for "%s")\n\n' % ( nr, plural, search ))
doc.freeDoc()
ctxt.xpathFreeContext()
 
 
def main():
datafile = None
password = None
99,9 → 106,10
 
sys.stderr.write('Relevation v%s, (c) 2011 Toni Corvera\n\n' % __version__)
try:
ops, args = getopt.getopt(sys.argv[1:], 'f:p:s:0ci',
ops, args = getopt.getopt(sys.argv[1:], 'f:p:s:0ciah',
[ 'file=', 'password=', 'search=', 'stdin',
'case-sensitive', 'case-insensitive' ])
'case-sensitive', 'case-insensitive', 'ask',
'help', 'version' ])
except getopt.GetoptError, err:
print str(err)
usage(sys.stderr)
109,15 → 117,27
if args:
searches = args
 
if ( '-h', '' ) in ops or ( '--help', '' ) in ops:
usage(sys.stdout)
sys.exit(os.EX_OK)
if ( '--version', '' ) in ops:
release=''
if not RELEASE:
release=' [DEBUG]'
print 'Relevation version %s%s' % ( __version__, release )
print 'Python version %s' % sys.version
sys.exit(os.EX_OK)
 
for opt, arg in ops:
if opt in ( '-f', '--file' ):
datafile = arg
elif opt in ( '-p', '--password' ):
password = arg
elif opt in ( '-0', '--stdin' ):
sys.stderr.write('Getting password from stdin\n')
p = sys.stdin.readline()
p = p[:-1]
elif opt in ( '-a', '--ask', '-0', '--stdin' ):
if opt in ( '-a', '--ask' ):
sys.stderr.write('File password: ')
password = sys.stdin.readline()
password = password[:-1]
elif opt in ( '-s', '--search' ):
searches.append(arg)
elif opt in ( '-i', '--case-insensitive' ):
125,9 → 145,14
elif opt in ( '-c', '--case-sensitive' ):
caseInsensitive = False
else:
sys.stderr.write('Unhandled option: %s\n' % opt)
assert False, "internal error parsing options"
if not datafile or not password:
usage(sys.stderr)
if not datafile:
sys.stderr.write('Input password filename is required\n')
if not password:
sys.stderr.write('Password is required\n')
sys.exit(os.EX_USAGE)
# Encrypted data
try: