def login_pessoa(self, valor_login, senha, tipo, externo=False): # Login por cpf if (tipo == '0'): metodo_login = "******" # Login por e-mail elif (tipo == '1'): metodo_login = "******" # Login com identificador errado else: print("[Orquestrador.ERRO] Método de login não foi identificado.") raise StatusInternos('SI-7', { "metodo_login": tipo, metodo_login: valor_login, 'senha': senha }) try: if (self.conexao_bd.Pessoas.find({ "$and": [{ metodo_login: valor_login }, { "senha": senha }] }).limit(1).count() > 0): print( "[Orquestrador] " + metodo_login + ": '" + valor_login + "' encontrado na coleção de Pessoas, exibindo documento retornado:" ) dados_pessoa = self.conexao_bd.Pessoas.find( {"$and": [{ metodo_login: valor_login }, { "senha": senha }]}) if externo == False: lista_transc.log_interno_login_usuario( dados_pessoa[0]['_id']) return { 'segredo': str(dados_pessoa[0]['_id']), 'nome_usuario': str(dados_pessoa[0]['nome_completo']) } else: print(str({"dados_pessoa": str(dados_pessoa[0])})) return (dados_pessoa[0]) else: print("[Orquestrador] " + metodo_login + ": '" + valor_login + "' não encontrado na coleção de Pessoas.") raise StatusInternos except Exception as e: print(e) raise StatusInternos('SI-6')
def excluir_dados_pessoa(self, segredo, dados): try: if (self.conexao_bd.Pessoas.find({ "_id": ObjectId(segredo) }).limit(1).count() > 0): print("\n[Orquestrador] Exclusão de dados:\n" + str(dados)) try: self.conexao_bd.Pessoas.update( {"_id": ObjectId(segredo)}, {"$unset": dados}), False, True except Exception as e: print(e) raise Exception( StatusInternos( "SI-8", { "colecao": "Pessoas", "momento": "Excluir dados", "dados excluídos": dados, "segredo": segredo })) else: raise Exception( StatusInternos( "SI-8", { "colecao": "Pessoas", "momento": "Excluir dados", "dados excluídos": dados, "segredo": segredo })) except Exception as e: print(e) raise Exception( StatusInternos( "SI-4", { "colecao": "Pessoas", "momento": "Excluir dados", "dados excluídos": dados }))
def cadastrar_empresa(self, empresa): if self.verificar_cnpj(empresa["cnpj"]): raise StatusInternos("SI-9", {'cnpj': str(empresa["cnpj"])}) else: try: colecao_empresas = self.conexao_bd.Empresas except: raise StatusInternos('SI-4') try: empresa_id = colecao_empresas.insert_one(empresa) print("\n[Orquestrador] empresa cadastrada com sucesso!\n") print("id:" + str(empresa_id.inserted_id)) return (str(empresa_id.inserted_id)) except: raise StatusInternos('SI-10', {'empresa': empresa})
def adicionar_dados_pessoa(self, segredo, dados_novos): try: if (self.conexao_bd.Pessoas.find({ "_id": ObjectId(segredo) }).limit(1).count() > 0): print("\n[Orquestrador] Dados novos:\n" + str(dados_novos)) try: self.conexao_bd.Pessoas.update({"_id": ObjectId(segredo)}, {"$set": dados_novos}) except Exception as e: print(e) raise Exception( StatusInternos( "SI-8", { "colecao": "Pessoas", "momento": "adicionar dados novos", "dados novos": dados_novos, "segredo": segredo })) else: raise Exception( StatusInternos( "SI-8", { "colecao": "Pessoas", "momento": "adicionar dados novos", "dados novos": dados_novos, "segredo": segredo })) except Exception as e: print(e) raise Exception( StatusInternos( "SI-4", { "colecao": "Pessoas", "momento": "adicionar dados novos", "dados novos": dados_novos }))
def cadastrar_projeto(self, projeto): if self.verificar_empresa(projeto["empresa_id"]): try: colecao_projetos = self.conexao_bd.Projetos except: raise StatusInternos('SI-4') try: projeto_id = colecao_projetos.insert_one(projeto) print("\n[Orquestrador] projeto cadastrado com sucesso!\n") print("id:" + str(projeto_id.inserted_id)) return (str(projeto_id.inserted_id)) except: raise StatusInternos('SI-12', {'projeto': projeto}) else: print("[Orquestrador] empresa não cadastrada na coleção Empresas") raise StatusInternos('SI-13')
def cadastrar_pessoa(self, pessoa): if self.verificar_cpf(pessoa["cpf"]): raise StatusInternos('SI-1', {'cpf': str(pessoa["cpf"])}) if self.verificar_email(pessoa["email"]): raise StatusInternos('SI-2', {'email': str(pessoa["email"])}) try: colecao_pessoas = self.conexao_bd.Pessoas except: raise StatusInternos('SI-4') try: # Chamada de função para inserir documento de cadastro pessoa_id = colecao_pessoas.insert_one(pessoa) # Chama função de cadastro do Blockchain print("\n[Orquestrador] pessoa cadastrada com sucesso!\n") print("id:" + str(pessoa_id.inserted_id)) return (str(pessoa_id.inserted_id)) except: raise StatusInternos('SI-3', {'pessoa': pessoa})
def Aceitar_Termos(): print("\n[Requisição-PUT] /Definir permissão do usuário para o projeto:\n" "\n") try: segredo = request.json['segredo'] aceito = request.json['aceito'] if (type(aceito) != bool): raise StatusInternos('SI-XX', {'segredo': segredo}) status = orq.aceite_termos(segredo, aceito) if status != None: json_retorno = RespostasAPI('Permissão definida', { 'segredo': str(segredo), 'dados': status }).JSON return json_retorno else: raise StatusInternos('SI-4', {'segredo': segredo}) except StatusInternos as e: return e.errors
def Gerar_Token(): try: segredo = request.json['segredo'] redirect = request.json['redirect'] projeto_existente = orq.verificar_id_projeto_externos(segredo) if projeto_existente: token = hashlib.sha256( (str(segredo) + str(datetime.now())).encode()).hexdigest() vencimento = datetime.now() + timedelta(minutes=5) orq.armazenar_tokens(segredo, token, vencimento, redirect) return RespostasAPI('Token gerado com sucesso', { 'token': str(token), }).JSON else: raise StatusInternos('SI-21', {'projeto': segredo}) except StatusInternos as e: return e.errors
def Consultar_Por_Pessoa(segredo): print("\n[Requisição-GET] /Consultar dados Projeto por Pessoa:\n" "\n") try: lista_projetos = orq.consulta_projetos_por_pessoa(segredo) if lista_projetos != None: json_retorno = RespostasAPI('Consulta realizada com sucesso', { 'segredo': str(segredo), 'dados': lista_projetos }).JSON return json_retorno else: raise StatusInternos('SI-23', {'pessoa': segredo}) except StatusInternos as e: return e.errors
def Validar_Token(): try: token = request.json['token'] info_token = orq.consulta_info_token(token) vencimento_token = info_token['vencimento'] projeto_token = info_token['id_projeto'] redirect_token = info_token['redirect'] if datetime.now() < vencimento_token: projeto = orq.verificar_id_projeto(projeto_token) json_retorno = RespostasAPI( 'Token válido', { "token": token, "id_projeto": projeto_token, "redirect": redirect_token, "objeto_projeto": projeto }).JSON return json_retorno else: raise StatusInternos('SI-22', {'projeto': projeto_token}) except StatusInternos as e: return e.errors
def Logar_Externo(): try: metodo_entrada = request.json['metodo_entrada'] senha = request.json['senha'] tipo_entrada = request.json['tipo_entrada'] id_projeto = request.json['segredo'] token = request.json['token'] gerar_vinculo = False if 'gera_vinculo' in request.json: gerar_vinculo = True pessoa_logada = orq.login_pessoa(metodo_entrada, senha, tipo_entrada, externo=True) id_pessoa = pessoa_logada['_id'] projeto_pessoa_info = orq.consultar_projeto_pessoa( id_projeto, str(id_pessoa)) projeto_info = orq.verificar_id_projeto(id_projeto) if projeto_info: projeto_required_chaves = projeto_info['requerimentos'] pessoa_req = [] for key in pessoa_logada.keys(): pessoa_req.append(key) projeto_req = [] for key in projeto_required_chaves: projeto_req.append(key['campo']) missed_keys = [] for key in projeto_req: if key not in pessoa_req: missed_keys.append(key) if (len(missed_keys) == 0): if projeto_pessoa_info is None: if gerar_vinculo: criacao_vinculo = datetime.now() redirect_token = orq.consulta_info_token(token) redirect_link = redirect_token['redirect'] cadastro_pp = orq.cadastrar_projeto_pessoa( str(id_projeto), str(id_pessoa), criacao_vinculo, True, criacao_vinculo) json_retorno = RespostasAPI( 'Vínculo Gerado', { "status_requerimento": True, "status_vinculo": True, "segredo": str(cadastro_pp), "redirect": redirect_link, }).JSON else: json_retorno = RespostasAPI('Vínculo Pendente', { "status_requerimento": True, "status_vinculo": False }).JSON else: registro_pp = projeto_pessoa_info['_id'] redirect_token = orq.consulta_info_token(token) redirect_link = redirect_token['redirect'] orq.atualizar_ultimo_login(str(registro_pp), datetime.now()) json_retorno = RespostasAPI( 'Vinculo Ok', { "status_requerimento": True, "status_vinculo": True, "segredo": str(registro_pp), "redirect": redirect_link, }).JSON else: json_retorno = RespostasAPI( 'Vinculo NOK', { "status_requerimento": False, "campos_incompletos": missed_keys, }).JSON return json_retorno else: raise StatusInternos('SI-22') except StatusInternos as e: return e.errors