def setUp(self): self.password_repository = PasswordRepository(test_database_connection()) self.password_service = PasswordService(self.password_repository) self.password_repository.delete_all_passwords() self.user_repository = UserRepository(test_database_connection()) self.user_service = UserService(self.user_repository) self.test_user_one = User("test_user_one", "test_pw1") self.test_user_two = User("test_user_two", "test_pw2") self.user_service.create_user(self.test_user_one) self.user_service.create_user(self.test_user_two)
def __init__(self, root, handle_user_view, user=None): """Konstruktori, luo uuden salasanojen lisäyksestä vastaavan näkymän Args: root: Juurielementti, joka hallitsee nykyistä näkymää handle_user_view: UI-luokan metodi, joka siirtää näkymän UserViewiin user: Kirjautunut käyttäjä, oletusarvoltaan None """ self._root = root self._frame = None self.user = user self._handle_user_view = handle_user_view self._password_service = PasswordService() self._initialize()
class TestPasswordService(unittest.TestCase): def setUp(self): self.password_repository = PasswordRepository(test_database_connection()) self.password_service = PasswordService(self.password_repository) self.password_repository.delete_all_passwords() self.user_repository = UserRepository(test_database_connection()) self.user_service = UserService(self.user_repository) self.test_user_one = User("test_user_one", "test_pw1") self.test_user_two = User("test_user_two", "test_pw2") self.user_service.create_user(self.test_user_one) self.user_service.create_user(self.test_user_two) def test_num_of_users_correct(self): users = self.user_repository.get_all_users() self.assertEqual(len(users), 2) def test_add_new_password(self): user_for_password = self.user_repository.get_single_user(self.test_user_one) password_to_add = Password( "test_username", "test_pw", "test_site", user_for_password.user_id ) added_password = self.password_service.add_new_password(password_to_add) self.assertEqual(added_password.user_id, user_for_password.user_id) self.assertEqual(added_password, password_to_add) def test_get_passwords_by_user(self): user_for_password = self.user_repository.get_single_user(self.test_user_one) for i in range(5): password_to_add = Password( f"test_username{i}", f"test_pw{i}", f"test_site{i}", user_for_password.user_id ) self.password_service.add_new_password(password_to_add) passwords_by_user = self.password_service.get_passwords_by_user(user_for_password) self.assertEqual(len(passwords_by_user), 5) self.assertEqual(passwords_by_user[0].username, "test_username0")
def handle_sign_in(self): """ Handle logging to existing user """ RootView.display_sign_menu(False) logged_in = False while not logged_in: login, password = RootView.get_user_login_password() password = PasswordService.encrypt_password(password) user = self.user_container.get_user(login, password) if user: logged_in = True if isinstance(user, Student): StudentController(user).start() elif isinstance(user, Mentor): MentorController().start() elif isinstance(user, Manager): ManagerController(user).start() elif isinstance(user, Employee): EmployeeController(user).start() elif isinstance(user, User): RootView.display_error_user_singin() else: RootView.display_user_not_exist()
def handle_sign_up(self): """ Handle creating new User """ RootView.display_sign_menu(True) user_created = False while not user_created: login = RootView.create_user_login() password = RootView.create_user_password() hashed_password = PasswordService.encrypt_password(password) if self.user_container.get_user_by_login_or_email(login): RootView.display_user_already_exists() else: phone_number = RootView.create_user_phone_number() email = RootView.create_user_email() name = RootView.add_user_name() self.user_container.add_user( User(login, hashed_password, phone_number, email, name)) RootView.display_user_created(login, phone_number, email, name) user_created = True self.send_user_has_registered_succesfully_email(name, email)
def __init__(self, root, user, handle_login_view, handle_add_password_view): """Käyttäjänäkymästä vastaava käyttöliittymäluokka Args: root: Juurielementti, joka hallitsee nykyistä näkymää user: User-luokan olio handle_login_view: UI-luokan metodi, joka siirtää näkymän LoginViewiin handle_add_password_view: UI-luokan metodi, joka siirtää näkymän AddPasswordViewiin """ self._root = root self._frame = None self.user = user self._password_service = PasswordService() self._handle_login_view = handle_login_view self._handle_add_password_view = handle_add_password_view self._initialize()
def change_password(self, password: str, token: str): """ Method changes password. :param password: str -> user's new password :param token: str -> token needed to auth :return: None """ self.raise_exception_if_user_token_is_not_correct(token) self.user.password = PasswordService.encrypt_password(password) delattr(self.user, 'token') UserContainer.get_instance().save_users_to_file()
def get_user_login_password(): """ Param: none Return: tuple Method take users login and password and return it as a tuple. """ user_login = RootView.get_user_login() user_password = PasswordService.get_password_with_asterisks() login_password = (user_login, user_password) return login_password
def post(self): password_config = get_password_config() user_type = _USER_TYPE_INVEST argument_dict, aes_share_key, aes_nonce = self.get_argument_dict( must_keys=['user_id', 'old_password', 'new_password'], api_type=_USER_TYPE_INVEST, request_type=_REQUEST_TYPE_LOGIN, check_form_token=True) if 'change_method' in password_config and password_config[ 'change_method'] != "": password_check_service = PasswordService( aes_share_key=aes_share_key, aes_nonce=aes_nonce) # 自己的修改密码方法 if hasattr(password_check_service, password_config['change_method']): method_name = password_config['change_method'] tmp_method = eval('password_check_service.' + method_name) r = tmp_method(argument_dict, user_type=user_type) else: r = password_check_service.base_check_method( argument_dict, user_type=user_type) if r['status'] == _PASSWORD_CHECK_TYPE_SUCCESS: return r, aes_share_key, aes_nonce elif r['status'] == _PASSWORD_CHECK_TYPE_REDIRECT: return redirect(r['rediret_url']) else: self.return_error(30211) user_id = argument_dict['user_id'] old_password = argument_dict['old_password'] new_password = argument_dict['new_password'] r = UserBaseService(aes_share_key=aes_share_key, aes_nonce=aes_nonce).\ change_login_password(user_id, old_password, new_password) return r, aes_share_key, aes_nonce
def create_user_password(): """ Arguments: none Return: none Method let to create user his account password and check if it contain requirements. """ incorrect_password = True user_password = '' while incorrect_password: print( ColorfulView.format_string_to_yellow( 'Enter your password(it must contain big, small characters and ' 'digit, it must contain min 6 chars and ' 'it cant be longer than 30 characters): ')) user_password = PasswordService.get_password_with_asterisks() if re.match(r'^(?=.*?\d)(?=.*?[A-Z])(?=.*?[a-z])[A-Za-z\d]{6,30}$', user_password): incorrect_password = False return user_password
class AddPasswordView: """Salasanojen lisäyksestä vastaava käyttöliittymäluokka""" def __init__(self, root, handle_user_view, user=None): """Konstruktori, luo uuden salasanojen lisäyksestä vastaavan näkymän Args: root: Juurielementti, joka hallitsee nykyistä näkymää handle_user_view: UI-luokan metodi, joka siirtää näkymän UserViewiin user: Kirjautunut käyttäjä, oletusarvoltaan None """ self._root = root self._frame = None self.user = user self._handle_user_view = handle_user_view self._password_service = PasswordService() self._initialize() def pack(self): """Pakkaa käyttöliittymän komponentit ennen renderöintiä""" self._frame.pack(fill=constants.X) def destroy(self): """Tuhoaa tämänhetkisen näkymän""" self._frame.destroy() def handle_back_to_user_view(self): """Palauttaa näkymän UserViewiin """ self._handle_user_view(self.user) def handle_add_new_password(self, site, username, password): """Lisää uuden salasanan järjestelmään Args: site: String, sivusto johon salasana sekä käyttäjänimi liittyvät username: String, käyttäjänimi sivustolle password: String, salasana sivustolle """ if not site or not username or not password: return messagebox.showerror('Error', 'No empty fields allowed') user_id = self.user.user_id new_password = Password(username, password, site, user_id) result = self._password_service.add_new_password(new_password) messagebox.showinfo('Info', 'Password added') self.site_entry.delete(0, "end") self.username_entry.delete(0, "end") self.password_entry.delete(0, "end") return result def _initialize(self): """Initialisoi näkymän""" self._frame = ttk.Frame(master=self._root) heading_label = ttk.Label(master=self._frame, text="Add new credentials", font=(None, 20)) site_label = ttk.Label(master=self._frame, text="site", font=(None, 10)) self.site_entry = ttk.Entry(master=self._frame) username_label = ttk.Label(master=self._frame, text="username", font=(None, 10)) self.username_entry = ttk.Entry(master=self._frame) password_label = ttk.Label(master=self._frame, text="password", font=(None, 10)) self.password_entry = ttk.Entry(master=self._frame, show="*") submit_button = ttk.Button( master=self._frame, text="Submit", command=lambda: self.handle_add_new_password( self.site_entry.get(), self.username_entry.get(), self.password_entry.get())) cancel_button = ttk.Button( master=self._frame, text="Cancel", command=lambda: self.handle_back_to_user_view()) heading_label.grid(row=0, column=0, columnspan=2, sticky=constants.W, padx=5, pady=5) site_label.grid(row=1, column=0) self.site_entry.grid(row=1, column=1, sticky=(constants.E, constants.W), padx=2, pady=2, ipady=5) username_label.grid(row=2, column=0) self.username_entry.grid(row=2, column=1, sticky=(constants.E, constants.W), padx=2, pady=2, ipady=5) password_label.grid(row=3, column=0) self.password_entry.grid(row=3, column=1, sticky=(constants.E, constants.W), padx=2, pady=2, ipady=5) submit_button.grid(row=4, column=0, sticky=constants.E, padx=2, pady=5, ipady=5) cancel_button.grid(row=4, column=1, sticky=constants.W, padx=2, pady=5, ipady=5) self._frame.grid_columnconfigure(1, weight=1, minsize=400)
class UserView: def __init__(self, root, user, handle_login_view, handle_add_password_view): """Käyttäjänäkymästä vastaava käyttöliittymäluokka Args: root: Juurielementti, joka hallitsee nykyistä näkymää user: User-luokan olio handle_login_view: UI-luokan metodi, joka siirtää näkymän LoginViewiin handle_add_password_view: UI-luokan metodi, joka siirtää näkymän AddPasswordViewiin """ self._root = root self._frame = None self.user = user self._password_service = PasswordService() self._handle_login_view = handle_login_view self._handle_add_password_view = handle_add_password_view self._initialize() def pack(self): """Pakkaa käyttöliittymän komponentit ennen renderöintiä""" self._frame.pack(fill=constants.X) def destroy(self): """Tuhoaa tämänhetkisen näkymän""" self._frame.destroy() def handle_logout(self): """Kirjaa käyttäjän ulos järjestelmästä""" message_box = tk.messagebox.askquestion( 'Info', f'Log out user {self.user.username}?') if message_box == 'yes': self._handle_login_view() else: return def handle_move_to_add_view(self, user): """Siirtää näkymän AddPasswordViewiin kun nappia painetaan""" self._handle_add_password_view(user) def insert_to_tree(self): """Luo näkymän käyttäjien lisäämille salasanoille""" passwords = self._password_service.get_passwords_by_user(self.user) self.numOfPasswords = 1 self.iid = 0 for x in passwords: self.tree.insert('', 'end', iid=self.iid, text=self.numOfPasswords, values=(x.site, x.username, x.password)) self.iid = self.iid + 1 self.numOfPasswords = self.numOfPasswords + 1 def _initialize(self): """Initialisoi näkymän""" self._frame = ttk.Frame(master=self._root) style = ttk.Style() style.configure('Treeview', rowheight=40) add_password_button = ttk.Button( master=self._frame, text="Add password", command=lambda: self._handle_add_password_view(self.user)) logout_button = ttk.Button(master=self._frame, text="Logout", command=lambda: self.handle_logout()) data_label = ttk.Label(master=self._frame, text="Saved passwords", font=(None, 20)) add_password_button.grid(row=0, column=0, sticky=constants.W, padx=5, pady=5) logout_button.grid(row=0, column=1, sticky=constants.E, padx=5, pady=5) data_label.grid(row=1, column=0, sticky=(constants.E, constants.W), pady=20) self.tree = ttk.Treeview(self._frame, columns=('Site', 'Username', 'Password')) self.tree.heading('#0', text='#') self.tree.heading('#1', text='Site') self.tree.heading('#2', text='Username') self.tree.heading('#3', text="Password") self.tree.column('#0', width=30) self.tree.grid(row=2, columnspan=4, sticky='nsew') self._frame.columnconfigure(0, weight=1, minsize=400) self.insert_to_tree()