def _build_from_blank(self, filename, password): if self._blank_kdb_file and os.path.isfile(self._blank_kdb_file): kdb = PyKeePass(self._blank_kdb_file, self._blank_kdb_file_password) kdb.filename = filename kdb.password = password kdb.keyfile = None else: kdb = create_database(filename, password) self.__tmd_kdb = kdb
def init_database(args): """Create database""" # from pykeepass.pykeepass import PyKeePass # ----- setup config ----- c = ConfigParser() if os.path.exists(args.config): c.read(args.config) if args.name is None: database_name = editable_input("Database name (no spaces)", "passhole") else: database_name = args.name if database_name in c.sections(): log.error( red("There is already a database named ") + bold(database_name) + red(" in ") + bold(args.config)) sys.exit(1) else: c.add_section(database_name) if not os.path.exists(args.config): c.set(database_name, 'default', 'True') # ----- database prompt ----- if args.name is None: database_path = editable_input("Desired database path", default_database.format(database_name)) else: database_path = args.database.format(database_name) # quit if database already exists if os.path.exists(database_path): log.error(red("Found database at ") + bold(database_path)) sys.exit(1) else: c.set(database_name, 'database', database_path) # ----- password prompt ----- if args.name is None: use_password = boolean_input("Password protect database?") if use_password: password = getpass(green('Password: '******'Confirm: ')) if not password == password_confirm: log.error(red("Passwords do not match")) sys.exit(1) else: password = None c.set(database_name, 'no-password', 'True') else: password = args.password if password is None: c.set(database_name, 'no-password', 'True') # ----- keyfile prompt ----- if args.name is None: use_keyfile = boolean_input("Use a keyfile?") if use_keyfile: keyfile = editable_input("Desired keyfile path", default_keyfile.format(database_name)) else: keyfile = None else: keyfile = args.keyfile # ----- create keyfile/database/config ----- # create keyfile if keyfile is not None: keyfile = realpath(expanduser(keyfile)) log.debug("Looking for keyfile at {}".format(keyfile)) if os.path.exists(keyfile): print("Found existing keyfile at {} Exiting".format( bold(keyfile))) sys.exit(1) print("Creating keyfile at " + bold(keyfile)) os.makedirs(dirname(keyfile), exist_ok=True) c.set(database_name, 'keyfile', keyfile) with open(keyfile, 'w') as f: log.debug("keyfile contents {}".format(keyfile_contents)) f.write(keyfile_contents.format( b64encode(os.urandom(32)).decode())) database_path = realpath(expanduser(database_path)) # create database print("Creating database at {}".format(bold(database_path))) os.makedirs(dirname(database_path), exist_ok=True) shutil.copy(template_database_file, database_path) from pykeepass import PyKeePass kp = PyKeePass(database_path, password='******') kp.password = password kp.keyfile = keyfile kp.save() config = realpath(expanduser(args.config)) # create config print("Creating config at {}".format(bold(config))) os.makedirs(dirname(config), exist_ok=True) with open(config, 'w') as f: c.write(f)