コード例 #1
0
ファイル: client.py プロジェクト: Catofes/ImoutoPassword
 def __init__(self):
     self.config = Config()
     self.daemon = StaticDaemon()
コード例 #2
0
ファイル: client.py プロジェクト: Catofes/ImoutoPassword
class Client:
    def __init__(self):
        self.config = Config()
        self.daemon = StaticDaemon()

    def color_print(self, input_color, mes):
        if input_color == 'r':
            fore = 31
        elif input_color == 'g':
            fore = 32
        elif input_color == 'b':
            fore = 36
        elif input_color == 'y':
            fore = 33
        else:
            fore = 37
        input_color = "\x1B[%d;%dm" % (1, fore)
        return "%s%s\x1B[0m" % (input_color, mes)

    def color_keyword(self, value, keyword=""):
        split = re.split(keyword, value)
        result = ""
        for i in range(0, len(split) - 1):
            result += split[i]
            result += self.color_print('r', keyword)
        result += split[len(split) - 1]
        return result

    def add_space(self, value, length=0):
        value += " " * length
        return value

    def to_text(self, table, origin_table):
        line_number = len(origin_table)
        if line_number <= 1:
            return
        column_number = len(origin_table[0])
        column_width = [0 for i in range(0, column_number)]
        for line in origin_table:
            for i in range(0, column_number):
                if column_width[i] < len(str(line[i])):
                    column_width[i] = len(str(line[i]))
        for i in range(0, line_number):
            for j in range(0, column_number):
                print(self.add_space(str(table[i][j]), column_width[j] - len(str(origin_table[i][j]))) + "\t", end="")
            print("\n", end="")

    def print_password(self, passwords, keyword="", show_key=True):
        table = []
        origin_table = []
        if show_key:
            table.append(["Id", "Mark", "Password", "Version", "Intro", "URL"])
            origin_table.append(["Id", "Mark", "Password", "Version", "Intro", "URL"])
            for password in passwords:
                table.append(
                    [password[0].id, self.color_keyword(password[0].mark, keyword), password[1], password[0].version,
                     self.color_keyword(password[0].intro, keyword), self.color_keyword(password[0].url, keyword)])
                origin_table.append(
                    [password[0].id, password[0].mark, password[1], password[0].version, password[0].intro,
                     password[0].url])
        else:
            table.append(["Id", "Mark", "Version", "Intro", "URL"])
            origin_table.append(["Id", "Mark", "Version", "Intro", "URL"])
            for password in passwords:
                table.append([password[0].id, self.color_keyword(password[0].mark, keyword), password[0].version,
                              self.color_keyword(password[0].intro, keyword),
                              self.color_keyword(password[0].url, keyword)])
                origin_table.append(
                    [password[0].id, password[0].mark, password[0].version, password[0].intro, password[0].url])
        self.to_text(table, origin_table)

    def do(self, args):
        if args.operate == "add" or args.operate == "a":
            password = Password()
            password.mark = str(args.mark)
            if args.url:
                password.url = str(args.url)
            if args.intro:
                password.intro = str(args.intro)
            if args.release:
                password.version = int(args.release)
            if args.length:
                password.length = int(args.length)
            if args.type:
                password.type = args.type
            if args.no_password or self.config.get("option", "add_without_mpw") == "1":
                self.daemon.add(password)
                return
            master_password = getpass.getpass("Please input your master password:"******"option", "mpw_check") == "1":
                if self.daemon.check_master_password(master_password) != 1:
                    print("Master Password Error. Please check or set your master password.")
                    return
            pw_id = self.daemon.add(password)
            result = self.daemon.get(master_password, [pw_id])
            self.print_password(result)
            return
        if args.operate == "del" or args.operate == "d":
            self.daemon.remove(args.id)
            return
        if args.operate == "ls" or args.operate == "l":
            if not args.mark:
                keyword = ""
            else:
                keyword = args.mark
            passwords = self.daemon.search(keyword)
            passwords = self.daemon.get("", [value.id for value in passwords])
            self.print_password(passwords, keyword, False)
            return
        if args.operate == "get" or args.operate == "g":
            master_password = getpass.getpass("Please input your master password:"******"option", "mpw_check") == "1":
                if self.daemon.check_master_password(master_password) != 1:
                    print("Master Password Error. Please check or set your master password.")
                    return
            if not args.mark:
                keyword = ""
            else:
                keyword = args.mark
            passwords = self.daemon.search(keyword)
            passwords = self.daemon.get(master_password, [value.id for value in passwords])
            self.print_password(passwords, keyword, True)
            return
        if not args.operate:
            if args.set_master_password:
                master_password = getpass.getpass("Please input your master password:"******"Please retype your master password:"******"Password didn't match. Please try again.")
                    return
                self.daemon.generate_master_password_check(master_password)
            return