parent
93c84f7584
commit
1e4f079789
4
setup.py
4
setup.py
|
@ -1,7 +1,7 @@
|
||||||
from setuptools import setup, find_packages
|
from setuptools import setup, find_packages
|
||||||
import sys, os
|
import sys, os
|
||||||
|
|
||||||
version = '0.3'
|
version = '0.4'
|
||||||
|
|
||||||
setup(name='twik',
|
setup(name='twik',
|
||||||
version=version,
|
version=version,
|
||||||
|
@ -13,6 +13,6 @@ setup(name='twik',
|
||||||
license='GPLv3',
|
license='GPLv3',
|
||||||
packages=['twik'],
|
packages=['twik'],
|
||||||
entry_points = {
|
entry_points = {
|
||||||
'console_scripts': ['twik = twik.twik:main'],
|
'console_scripts': ['twik = twik.run:main'],
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
|
@ -0,0 +1,74 @@
|
||||||
|
import unittest
|
||||||
|
from twik import twik
|
||||||
|
|
||||||
|
class SimplisticTest(unittest.TestCase):
|
||||||
|
def setUp(self):
|
||||||
|
self.t = twik.Twik()
|
||||||
|
|
||||||
|
def testPasswordAphanumericAndSpecialChars(self):
|
||||||
|
for chars in range(4, 27):
|
||||||
|
password = self.t.getpassword('tag',
|
||||||
|
'TFCY2AJI-NBPU-V01E-F7CP-PJIZNRKPF25W', 'foobar', chars, 1)
|
||||||
|
if chars == 4:
|
||||||
|
self.assertEqual(password, 'm3/I')
|
||||||
|
if chars == 8:
|
||||||
|
self.assertEqual(password, 'mb/5AsJ9')
|
||||||
|
if chars == 12:
|
||||||
|
self.assertEqual(password, 'mb/5AsJ9Uon7')
|
||||||
|
if chars == 22:
|
||||||
|
self.assertEqual(password, 'mb15As*9Uon7ZzvcsXMjpV')
|
||||||
|
if chars == 26:
|
||||||
|
self.assertEqual(password, 'mb15AsJ9&on7ZzvcsXMjpVLTqQ')
|
||||||
|
|
||||||
|
|
||||||
|
def testPasswordAlphanumeric(self):
|
||||||
|
for chars in range(4, 27):
|
||||||
|
password = self.t.getpassword('tag',
|
||||||
|
'TFCY2AJI-NBPU-V01E-F7CP-PJIZNRKPF25W', 'foobar', chars, 2)
|
||||||
|
if chars == 4:
|
||||||
|
self.assertEqual(password, 'm31I')
|
||||||
|
if chars == 8:
|
||||||
|
self.assertEqual(password, 'mb15AsJ9')
|
||||||
|
if chars == 12:
|
||||||
|
self.assertEqual(password, 'mb15AsJ9Uon7')
|
||||||
|
if chars == 22:
|
||||||
|
self.assertEqual(password, 'mb15AsJ9Uon7ZzvcsXMjpV')
|
||||||
|
if chars == 26:
|
||||||
|
self.assertEqual(password, 'mb15AsJ9Uon7ZzvcsXMjpVLTqQ')
|
||||||
|
|
||||||
|
def testPasswordNumeric(self):
|
||||||
|
for chars in range(4, 27):
|
||||||
|
password = self.t.getpassword('tag',
|
||||||
|
'TFCY2AJI-NBPU-V01E-F7CP-PJIZNRKPF25W', 'foobar', chars, 3)
|
||||||
|
if chars == 4:
|
||||||
|
self.assertEqual(password, '4315')
|
||||||
|
if chars == 8:
|
||||||
|
self.assertEqual(password, '43154099')
|
||||||
|
if chars == 12:
|
||||||
|
self.assertEqual(password, '431540992657')
|
||||||
|
if chars == 22:
|
||||||
|
self.assertEqual(password, '4315409926570734032171')
|
||||||
|
if chars == 26:
|
||||||
|
self.assertEqual(password, '43154099265707340321711986')
|
||||||
|
|
||||||
|
def testSize(self):
|
||||||
|
for chars in range(4, 27):
|
||||||
|
password = self.t.getpassword('tag',
|
||||||
|
'TFCY2AJI-NBPU-V01E-F7CP-PJIZNRKPF25W', 'foobar', chars, 1)
|
||||||
|
self.assertEqual(len(password), chars)
|
||||||
|
|
||||||
|
def testSizeWrong(self):
|
||||||
|
password = self.t.getpassword('tag',
|
||||||
|
'TFCY2AJI-NBPU-V01E-F7CP-PJIZNRKPF25W', 'foobar', 100, 1)
|
||||||
|
self.assertEqual(password, None)
|
||||||
|
def testSize(self):
|
||||||
|
password = self.t.getpassword('tag',
|
||||||
|
'TFCY2AJI-NBPU-V01E-F7CP-PJIZNRKPF25W', 'foobar', 0, 1)
|
||||||
|
self.assertEqual(password, None)
|
||||||
|
|
||||||
|
def tearDown(self):
|
||||||
|
self.t = None
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
unittest.main()
|
||||||
|
|
|
@ -0,0 +1,69 @@
|
||||||
|
#!/usr/bin/env python
|
||||||
|
# -*- coding: utf-8; -*-
|
||||||
|
"""
|
||||||
|
* Copyright 2014 Alexandre Possebom
|
||||||
|
* Copyright 2014 Red Dye No. 2
|
||||||
|
* Copyright (C) 2011-2013 TG Byte Software GmbH
|
||||||
|
* Copyright (C) 2009-2011 Thilo-Alexander Ginkel.
|
||||||
|
* Copyright (C) 2010-2014 Eric Woodruff
|
||||||
|
* Copyright (C) 2006-2010 Steve Cooper
|
||||||
|
|
||||||
|
This file is part of twik.
|
||||||
|
|
||||||
|
Twik is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
Twik is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with Twik. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
"""
|
||||||
|
from util import Util
|
||||||
|
from twik import Twik
|
||||||
|
import getpass
|
||||||
|
import argparse
|
||||||
|
import sys
|
||||||
|
|
||||||
|
def main():
|
||||||
|
"""
|
||||||
|
ALPHANUMERIC_AND_SPECIAL_CHARS=1
|
||||||
|
ALPHANUMERIC=2
|
||||||
|
NUMERIC=3
|
||||||
|
"""
|
||||||
|
parser = argparse.ArgumentParser()
|
||||||
|
parser.add_argument("tag", type=str,
|
||||||
|
help="generate password for a specified tag")
|
||||||
|
parser.add_argument("-c", "--chars", type=int,
|
||||||
|
choices=range(4, 27),
|
||||||
|
metavar="[4-26]",
|
||||||
|
help="length of generated password [4-26]. Default: 12")
|
||||||
|
parser.add_argument("-p", "--profile", type=str, default='Profile',
|
||||||
|
help="profile to use. Default:'Profile'")
|
||||||
|
parser.add_argument("-t", "--passwordtype", type=int, choices=[1, 2, 3],
|
||||||
|
help='''
|
||||||
|
1 for ALPHANUMERIC_AND_SPECIAL_CHAR
|
||||||
|
2 for ALPHANUMERIC
|
||||||
|
3 for NUMERIC
|
||||||
|
Default: 1
|
||||||
|
''')
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
util = Util(args.tag, args.chars, args.passwordtype, args.profile)
|
||||||
|
|
||||||
|
master_key = getpass.getpass(prompt='Master Key: ')
|
||||||
|
|
||||||
|
twik = Twik()
|
||||||
|
password = twik.getpassword(args.tag, util.get_privatekey(), master_key,
|
||||||
|
util.get_chars(), util.get_passord_type())
|
||||||
|
|
||||||
|
print "Your password is %s" % password
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
|
|
||||||
|
# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4
|
40
twik/twik.py
40
twik/twik.py
|
@ -99,44 +99,4 @@ class Twik(object):
|
||||||
password = self.generatehash(mhash, master_key, length, password_type)
|
password = self.generatehash(mhash, master_key, length, password_type)
|
||||||
return password
|
return password
|
||||||
|
|
||||||
def main():
|
|
||||||
"""
|
|
||||||
ALPHANUMERIC_AND_SPECIAL_CHARS=1
|
|
||||||
ALPHANUMERIC=2
|
|
||||||
NUMERIC=3
|
|
||||||
"""
|
|
||||||
parser = argparse.ArgumentParser()
|
|
||||||
parser.add_argument("tag", type=str,
|
|
||||||
help="generate password for a specified tag")
|
|
||||||
parser.add_argument("-c", "--chars", type=int, default=-1,
|
|
||||||
help="length of generated password [4-26]. Default: 12")
|
|
||||||
parser.add_argument("-p", "--profile", type=str, default='Profile',
|
|
||||||
help="profile to use. Default:'Profile'")
|
|
||||||
parser.add_argument("-t", "--passwordtype", type=int, choices=[1, 2, 3],
|
|
||||||
default=-1,
|
|
||||||
help='''
|
|
||||||
1 for ALPHANUMERIC_AND_SPECIAL_CHAR
|
|
||||||
2 for ALPHANUMERIC
|
|
||||||
3 for NUMERIC
|
|
||||||
Default: 1
|
|
||||||
''')
|
|
||||||
args = parser.parse_args()
|
|
||||||
|
|
||||||
if args.chars > 26 or args.chars < 4:
|
|
||||||
print "Invalid password length [4-26]"
|
|
||||||
sys.exit(2)
|
|
||||||
|
|
||||||
util = Util(args.tag, args.chars, args.passwordtype, args.profile)
|
|
||||||
|
|
||||||
master_key = getpass.getpass(prompt='Master Key: ')
|
|
||||||
|
|
||||||
twik = Twik()
|
|
||||||
password = twik.getpassword(args.tag, util.get_privatekey(), master_key,
|
|
||||||
util.get_chars(), util.get_passord_type())
|
|
||||||
|
|
||||||
print "Your password is %s" % password
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
main()
|
|
||||||
|
|
||||||
# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4
|
# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4
|
||||||
|
|
|
@ -87,10 +87,10 @@ class Util(object):
|
||||||
def get_chars(self):
|
def get_chars(self):
|
||||||
config_key = '%s_chars' % self.tag
|
config_key = '%s_chars' % self.tag
|
||||||
|
|
||||||
if self.config.has_option(self.profile, config_key) and self.chars == -1:
|
if self.config.has_option(self.profile, config_key) and self.chars == None:
|
||||||
self.chars = self.config.getint(self.profile, config_key)
|
self.chars = self.config.getint(self.profile, config_key)
|
||||||
else:
|
else:
|
||||||
if self.chars == -1:
|
if self.chars == None:
|
||||||
self.chars = 12
|
self.chars = 12
|
||||||
self.config.set(self.profile, config_key, self.chars)
|
self.config.set(self.profile, config_key, self.chars)
|
||||||
self.writeconfig()
|
self.writeconfig()
|
||||||
|
@ -100,10 +100,10 @@ class Util(object):
|
||||||
def get_passord_type(self):
|
def get_passord_type(self):
|
||||||
config_key = '%s_password_type' % self.tag
|
config_key = '%s_password_type' % self.tag
|
||||||
|
|
||||||
if self.config.has_option(self.profile, config_key) and self.pass_type == -1:
|
if self.config.has_option(self.profile, config_key) and self.pass_type == None:
|
||||||
self.pass_type = self.config.getint(self.profile, config_key)
|
self.pass_type = self.config.getint(self.profile, config_key)
|
||||||
else:
|
else:
|
||||||
if self.pass_type == -1:
|
if self.pass_type == None:
|
||||||
self.pass_type = 1
|
self.pass_type = 1
|
||||||
self.config.set(self.profile, config_key, self.pass_type)
|
self.config.set(self.profile, config_key, self.pass_type)
|
||||||
self.writeconfig()
|
self.writeconfig()
|
||||||
|
|
Loading…
Reference in New Issue