Пример #1
0
    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
Пример #2
0
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)