functions.create_user
1from dictionary.sql import check_user_query 2from dictionary.vars import to_remove_list 3from functions.query_executor import QueryExecutor 4from functions.validate_document import Documents 5from functions.login import Login 6from time import sleep 7import streamlit as st 8import bcrypt 9 10 11class CreateUser: 12 """ 13 Classe com métodos para a criação de usuários. 14 """ 15 16 def hash_password(self, password: str) -> bytes: 17 """ 18 19 Parameters 20 ---------- 21 password : str 22 A senha a ser encriptada. 23 24 Returns 25 ------- 26 bytes 27 A senha encriptada. 28 """ 29 30 salt = bcrypt.gensalt() 31 return bcrypt.hashpw(password.encode('utf-8'), salt) 32 33 def is_login_valid(self, login: str): 34 """ 35 Realiza a validação do nome do login escolhido pelo usuário. 36 37 Parameters 38 ---------- 39 login : str 40 O nome do login escolhido pelo usuário. 41 42 Returns 43 ------- 44 bool 45 Se o nome de login é ou não válido. 46 """ 47 if login != "": 48 has_upper = any(c.isupper() for c in login) 49 has_digit = any(c.isdigit() for c in login) 50 has_special = any(not c.isalnum() for c in login) 51 if " " in login or has_upper or has_digit or has_special: 52 st.error(body="O login '{}' é inválido.".format(login)) 53 return False 54 else: 55 st.success(body="O login '{}' é válido.".format(login)) 56 return True 57 else: 58 st.error(body="O login '{}' é inválido.".format(login)) 59 return False 60 61 def is_password_valid(self, password: str): 62 """ 63 Realiza a validação da senha escolhida pelo usuário. 64 65 Parameters 66 ---------- 67 password : str 68 A senha escolhida pelo usuário. 69 70 Returns 71 ------- 72 bool 73 Se a senha escolhida é ou não válida. 74 """ 75 76 has_upper = any(c.isupper() for c in password) 77 has_digit = any(c.isdigit() for c in password) 78 has_special = any(not c.isalnum() for c in password) 79 if " " in password or has_upper == False or has_digit == False or has_special == False or len(password) < 8: 80 st.error(body="A senha informada é inválida.".format(password)) 81 return False 82 else: 83 st.success(body="A senha informada é válida.".format(password)) 84 return True 85 86 def main_menu(self): 87 """ 88 Menu principal da criação de usuário. 89 """ 90 logged_user, logged_user_password = Login().get_user_data(return_option="user_doc_name") 91 92 query_executor = QueryExecutor() 93 document = Documents() 94 95 check_user_quantity = query_executor.simple_consult_brute_query( 96 check_user_query) 97 check_user_quantity = query_executor.treat_simple_result( 98 check_user_quantity, to_remove_list) 99 check_user_quantity = int(check_user_quantity) 100 101 if check_user_quantity == 0: 102 col1, col2, col3 = st.columns(3) 103 with col1: 104 st.header(body=":floppy_disk: Cadastro de usuário") 105 st.divider() 106 107 col4, col5, col6 = st.columns(3) 108 109 with col6: 110 data_validator_expander = st.expander( 111 label="Validação dos dados", expanded=True) 112 113 if check_user_quantity == 0: 114 115 with col6: 116 with data_validator_expander: 117 st.warning( 118 body="Nenhum usuário cadastrado. Cadastre o primeiro usuário.") 119 120 with col4: 121 with st.expander(label="Dados de login", expanded=True): 122 user_login = st.text_input(label="Login de usuário", max_chars=25, help="O login deve conter apenas letras minúsculas, sem espaços.",) 123 user_password = st.text_input(label="Senha de usuário", max_chars=100, help="A senha deve conter ao mínimo 8 caracteres, 1 letra maiúscula, 1 minúscula e 1 caractere especial, sem espaços.", type="password", key="user_password") 124 confirm_user_password = st.text_input(label="Confirmação de senha", max_chars=100, help="Deve ser a mesma informada no campo acima.", type="password", key="confirm_user_password") 125 126 confirm_values = st.checkbox(label="Confirmar dados") 127 128 sex_options = {"Masculino": "M", "Feminino": "F"} 129 130 with col5: 131 with st.expander(label="Dados do usuário", expanded=True): 132 user_name = st.text_input(label="Nome de usuário", max_chars=100, help="Informe aqui seu nome completo.",) 133 user_document = st.text_input(label="Documento do usuário", help="Informe seu CPF neste campo.") 134 user_sex = st.selectbox(label="Sexo do usuário", options=sex_options.keys()) 135 136 insert_new_user_button = st.button(label=":floppy_disk: Cadastrar novo usuário") 137 138 if insert_new_user_button: 139 user_sex = sex_options[user_sex] 140 if confirm_values == True: 141 with st.spinner(text="Aguarde..."): 142 sleep(2.5) 143 with col6: 144 with data_validator_expander: 145 is_document_valid = document.validate_owner_document(user_document) 146 valid_login = self.is_login_valid(user_login) 147 valid_password = self.is_password_valid(user_password) 148 149 if user_login != "" and user_password != "" and confirm_user_password != "" and (user_password == confirm_user_password) and user_name != "" and is_document_valid == True and valid_login == True and valid_password == True: 150 151 hashed_password = self.hash_password(user_password) 152 153 if check_user_quantity == 0: 154 insert_new_user_query = """INSERT INTO usuarios (login, senha, nome, documento_usuario, sexo) VALUES (%s, %s, %s, %s, %s)""" 155 new_user_values = (user_login, hashed_password, user_name, user_document, user_sex) 156 query_executor.insert_query(insert_new_user_query, new_user_values, "Novo usuário cadastrado com sucesso!", "Erro ao cadastrar novo usuário:") 157 158 log_query = '''INSERT INTO seguranca.logs_atividades (usuario_log, tipo_log, conteudo_log) VALUES ( %s, %s, %s);''' 159 log_values = (user_login, "Registro", "O usuário foi cadastrado no sistema.") 160 query_executor.insert_query(log_query, log_values, "Log gravado.", "Erro ao gravar log:") 161 162 with st.spinner(text="Recarregando..."): 163 sleep(2.5) 164 st.rerun() 165 166 elif check_user_quantity >= 1: 167 168 with col6: 169 check_if_user_document_exists_query = """SELECT COUNT(id_usuario) FROM usuarios WHERE cpf = {};""".format(user_document) 170 check_if_user_exists = query_executor.simple_consult_query(check_if_user_document_exists_query) 171 check_if_user_exists = query_executor.treat_simple_result(check_if_user_exists, to_remove_list) 172 check_if_user_exists = int(check_if_user_exists) 173 174 if check_if_user_exists == 0: 175 insert_new_user_query = """INSERT INTO usuarios (login, senha, nome, cpf, sexo) VALUES (%s, %s, %s, %s, %s)""" 176 new_user_values = (user_login, hashed_password, user_name, user_document, user_sex) 177 query_executor.insert_query(insert_new_user_query, new_user_values, "Novo usuário cadastrado com sucesso!", "Erro ao cadastrar novo usuário:") 178 179 log_query = '''INSERT INTO seguranca.logs_atividades (usuario_log, tipo_log, conteudo_log) VALUES ( %s, %s, %s);''' 180 log_values = (logged_user, "Registro", "Cadastrou o usuário {} associado ao documento {} no sistema.".format(user_name, user_document)) 181 query_executor.insert_query(log_query, log_values, "Log gravado.", "Erro ao gravar log:") 182 183 sleep(2) 184 elif check_if_user_exists >= 1: 185 with data_validator_expander: 186 st.error("Já existe um usuário cadastrado associado ao documento {}.".format(user_document)) 187 188 elif user_login == "" or user_password == "" or user_name == "" or is_document_valid == False or valid_login == False or valid_password == False or confirm_user_password == "" or (user_password != confirm_user_password): 189 with col6: 190 if user_login == "": 191 with data_validator_expander: 192 st.error("O login não foi preenchido.") 193 if user_password == "": 194 with data_validator_expander: 195 st.error("A senha não foi preenchida.") 196 if user_name == "": 197 with data_validator_expander: 198 st.error("O nome não foi preenchido.") 199 if confirm_user_password == "": 200 with data_validator_expander: 201 st.error("A confirmação da senha não foi preenchida.") 202 if user_password != confirm_user_password and (user_password != "" and confirm_user_password != ""): 203 with data_validator_expander: 204 st.error("As senhas informadas não coincidem.") 205 206 elif confirm_values == False: 207 with col6: 208 with data_validator_expander: 209 st.warning(body="Revise os dados e confirme-os antes de prosseguir.")
class
CreateUser:
12class CreateUser: 13 """ 14 Classe com métodos para a criação de usuários. 15 """ 16 17 def hash_password(self, password: str) -> bytes: 18 """ 19 20 Parameters 21 ---------- 22 password : str 23 A senha a ser encriptada. 24 25 Returns 26 ------- 27 bytes 28 A senha encriptada. 29 """ 30 31 salt = bcrypt.gensalt() 32 return bcrypt.hashpw(password.encode('utf-8'), salt) 33 34 def is_login_valid(self, login: str): 35 """ 36 Realiza a validação do nome do login escolhido pelo usuário. 37 38 Parameters 39 ---------- 40 login : str 41 O nome do login escolhido pelo usuário. 42 43 Returns 44 ------- 45 bool 46 Se o nome de login é ou não válido. 47 """ 48 if login != "": 49 has_upper = any(c.isupper() for c in login) 50 has_digit = any(c.isdigit() for c in login) 51 has_special = any(not c.isalnum() for c in login) 52 if " " in login or has_upper or has_digit or has_special: 53 st.error(body="O login '{}' é inválido.".format(login)) 54 return False 55 else: 56 st.success(body="O login '{}' é válido.".format(login)) 57 return True 58 else: 59 st.error(body="O login '{}' é inválido.".format(login)) 60 return False 61 62 def is_password_valid(self, password: str): 63 """ 64 Realiza a validação da senha escolhida pelo usuário. 65 66 Parameters 67 ---------- 68 password : str 69 A senha escolhida pelo usuário. 70 71 Returns 72 ------- 73 bool 74 Se a senha escolhida é ou não válida. 75 """ 76 77 has_upper = any(c.isupper() for c in password) 78 has_digit = any(c.isdigit() for c in password) 79 has_special = any(not c.isalnum() for c in password) 80 if " " in password or has_upper == False or has_digit == False or has_special == False or len(password) < 8: 81 st.error(body="A senha informada é inválida.".format(password)) 82 return False 83 else: 84 st.success(body="A senha informada é válida.".format(password)) 85 return True 86 87 def main_menu(self): 88 """ 89 Menu principal da criação de usuário. 90 """ 91 logged_user, logged_user_password = Login().get_user_data(return_option="user_doc_name") 92 93 query_executor = QueryExecutor() 94 document = Documents() 95 96 check_user_quantity = query_executor.simple_consult_brute_query( 97 check_user_query) 98 check_user_quantity = query_executor.treat_simple_result( 99 check_user_quantity, to_remove_list) 100 check_user_quantity = int(check_user_quantity) 101 102 if check_user_quantity == 0: 103 col1, col2, col3 = st.columns(3) 104 with col1: 105 st.header(body=":floppy_disk: Cadastro de usuário") 106 st.divider() 107 108 col4, col5, col6 = st.columns(3) 109 110 with col6: 111 data_validator_expander = st.expander( 112 label="Validação dos dados", expanded=True) 113 114 if check_user_quantity == 0: 115 116 with col6: 117 with data_validator_expander: 118 st.warning( 119 body="Nenhum usuário cadastrado. Cadastre o primeiro usuário.") 120 121 with col4: 122 with st.expander(label="Dados de login", expanded=True): 123 user_login = st.text_input(label="Login de usuário", max_chars=25, help="O login deve conter apenas letras minúsculas, sem espaços.",) 124 user_password = st.text_input(label="Senha de usuário", max_chars=100, help="A senha deve conter ao mínimo 8 caracteres, 1 letra maiúscula, 1 minúscula e 1 caractere especial, sem espaços.", type="password", key="user_password") 125 confirm_user_password = st.text_input(label="Confirmação de senha", max_chars=100, help="Deve ser a mesma informada no campo acima.", type="password", key="confirm_user_password") 126 127 confirm_values = st.checkbox(label="Confirmar dados") 128 129 sex_options = {"Masculino": "M", "Feminino": "F"} 130 131 with col5: 132 with st.expander(label="Dados do usuário", expanded=True): 133 user_name = st.text_input(label="Nome de usuário", max_chars=100, help="Informe aqui seu nome completo.",) 134 user_document = st.text_input(label="Documento do usuário", help="Informe seu CPF neste campo.") 135 user_sex = st.selectbox(label="Sexo do usuário", options=sex_options.keys()) 136 137 insert_new_user_button = st.button(label=":floppy_disk: Cadastrar novo usuário") 138 139 if insert_new_user_button: 140 user_sex = sex_options[user_sex] 141 if confirm_values == True: 142 with st.spinner(text="Aguarde..."): 143 sleep(2.5) 144 with col6: 145 with data_validator_expander: 146 is_document_valid = document.validate_owner_document(user_document) 147 valid_login = self.is_login_valid(user_login) 148 valid_password = self.is_password_valid(user_password) 149 150 if user_login != "" and user_password != "" and confirm_user_password != "" and (user_password == confirm_user_password) and user_name != "" and is_document_valid == True and valid_login == True and valid_password == True: 151 152 hashed_password = self.hash_password(user_password) 153 154 if check_user_quantity == 0: 155 insert_new_user_query = """INSERT INTO usuarios (login, senha, nome, documento_usuario, sexo) VALUES (%s, %s, %s, %s, %s)""" 156 new_user_values = (user_login, hashed_password, user_name, user_document, user_sex) 157 query_executor.insert_query(insert_new_user_query, new_user_values, "Novo usuário cadastrado com sucesso!", "Erro ao cadastrar novo usuário:") 158 159 log_query = '''INSERT INTO seguranca.logs_atividades (usuario_log, tipo_log, conteudo_log) VALUES ( %s, %s, %s);''' 160 log_values = (user_login, "Registro", "O usuário foi cadastrado no sistema.") 161 query_executor.insert_query(log_query, log_values, "Log gravado.", "Erro ao gravar log:") 162 163 with st.spinner(text="Recarregando..."): 164 sleep(2.5) 165 st.rerun() 166 167 elif check_user_quantity >= 1: 168 169 with col6: 170 check_if_user_document_exists_query = """SELECT COUNT(id_usuario) FROM usuarios WHERE cpf = {};""".format(user_document) 171 check_if_user_exists = query_executor.simple_consult_query(check_if_user_document_exists_query) 172 check_if_user_exists = query_executor.treat_simple_result(check_if_user_exists, to_remove_list) 173 check_if_user_exists = int(check_if_user_exists) 174 175 if check_if_user_exists == 0: 176 insert_new_user_query = """INSERT INTO usuarios (login, senha, nome, cpf, sexo) VALUES (%s, %s, %s, %s, %s)""" 177 new_user_values = (user_login, hashed_password, user_name, user_document, user_sex) 178 query_executor.insert_query(insert_new_user_query, new_user_values, "Novo usuário cadastrado com sucesso!", "Erro ao cadastrar novo usuário:") 179 180 log_query = '''INSERT INTO seguranca.logs_atividades (usuario_log, tipo_log, conteudo_log) VALUES ( %s, %s, %s);''' 181 log_values = (logged_user, "Registro", "Cadastrou o usuário {} associado ao documento {} no sistema.".format(user_name, user_document)) 182 query_executor.insert_query(log_query, log_values, "Log gravado.", "Erro ao gravar log:") 183 184 sleep(2) 185 elif check_if_user_exists >= 1: 186 with data_validator_expander: 187 st.error("Já existe um usuário cadastrado associado ao documento {}.".format(user_document)) 188 189 elif user_login == "" or user_password == "" or user_name == "" or is_document_valid == False or valid_login == False or valid_password == False or confirm_user_password == "" or (user_password != confirm_user_password): 190 with col6: 191 if user_login == "": 192 with data_validator_expander: 193 st.error("O login não foi preenchido.") 194 if user_password == "": 195 with data_validator_expander: 196 st.error("A senha não foi preenchida.") 197 if user_name == "": 198 with data_validator_expander: 199 st.error("O nome não foi preenchido.") 200 if confirm_user_password == "": 201 with data_validator_expander: 202 st.error("A confirmação da senha não foi preenchida.") 203 if user_password != confirm_user_password and (user_password != "" and confirm_user_password != ""): 204 with data_validator_expander: 205 st.error("As senhas informadas não coincidem.") 206 207 elif confirm_values == False: 208 with col6: 209 with data_validator_expander: 210 st.warning(body="Revise os dados e confirme-os antes de prosseguir.")
Classe com métodos para a criação de usuários.
def
hash_password(self, password: str) -> bytes:
17 def hash_password(self, password: str) -> bytes: 18 """ 19 20 Parameters 21 ---------- 22 password : str 23 A senha a ser encriptada. 24 25 Returns 26 ------- 27 bytes 28 A senha encriptada. 29 """ 30 31 salt = bcrypt.gensalt() 32 return bcrypt.hashpw(password.encode('utf-8'), salt)
Parameters
- password (str): A senha a ser encriptada.
Returns
- bytes: A senha encriptada.
def
is_login_valid(self, login: str):
34 def is_login_valid(self, login: str): 35 """ 36 Realiza a validação do nome do login escolhido pelo usuário. 37 38 Parameters 39 ---------- 40 login : str 41 O nome do login escolhido pelo usuário. 42 43 Returns 44 ------- 45 bool 46 Se o nome de login é ou não válido. 47 """ 48 if login != "": 49 has_upper = any(c.isupper() for c in login) 50 has_digit = any(c.isdigit() for c in login) 51 has_special = any(not c.isalnum() for c in login) 52 if " " in login or has_upper or has_digit or has_special: 53 st.error(body="O login '{}' é inválido.".format(login)) 54 return False 55 else: 56 st.success(body="O login '{}' é válido.".format(login)) 57 return True 58 else: 59 st.error(body="O login '{}' é inválido.".format(login)) 60 return False
Realiza a validação do nome do login escolhido pelo usuário.
Parameters
- login (str): O nome do login escolhido pelo usuário.
Returns
- bool: Se o nome de login é ou não válido.
def
is_password_valid(self, password: str):
62 def is_password_valid(self, password: str): 63 """ 64 Realiza a validação da senha escolhida pelo usuário. 65 66 Parameters 67 ---------- 68 password : str 69 A senha escolhida pelo usuário. 70 71 Returns 72 ------- 73 bool 74 Se a senha escolhida é ou não válida. 75 """ 76 77 has_upper = any(c.isupper() for c in password) 78 has_digit = any(c.isdigit() for c in password) 79 has_special = any(not c.isalnum() for c in password) 80 if " " in password or has_upper == False or has_digit == False or has_special == False or len(password) < 8: 81 st.error(body="A senha informada é inválida.".format(password)) 82 return False 83 else: 84 st.success(body="A senha informada é válida.".format(password)) 85 return True
Realiza a validação da senha escolhida pelo usuário.
Parameters
- password (str): A senha escolhida pelo usuário.
Returns
- bool: Se a senha escolhida é ou não válida.