def processa(ses, args):
    assert ses != None and sessao.aberta(ses)

    id_ses = args['id_sessao']
    ses_exit = sessao.busca_por_identificador(id_ses)

    # Se for fechar a sessao ativa, feito logout
    if ses == ses_exit:
        sessao.fecha(ses)
        ses_nova = None
        pag = html_pag_principal.gera(ses_nova, None)
    # caso nao seja a sessao ativa, somente fecha e retorna para pagina de sessoes
    else:
        sessao.fecha(ses)
        ses_nova = None
        pag = html_pag_principal.gera(ses_nova, None)

    return pag, ses_nova
def processa(ses, args):
    if ses == None or not sessao.aberta(ses):
        # Isto nunca deveria acontecer, mas em todo caso:
        pag = html_pag_mensagem_de_erro.gera(
            ses, "Precisa entrar no site antes de sair")
        ses_nova = ses
    else:
        sessao.fecha(ses)
        ses_nova = None
        pag = html_pag_principal.gera(ses_nova, None)
    return pag, ses_nova
Exemplo n.º 3
0
def processa(ses, args):
  
  # Obtem usuário e carrinho de compras:
  assert ses != None # Comando não deveria ser acessível a usuário não logado. 
  usr_ses = sessao.obtem_usuario(ses)
  assert usr_ses != None # Paranóia.

  admin = usuario.obtem_atributo(usr_ses, 'administrador')
  assert not admin # Admnistrador não deveria ter acesso a este cmd.
  
  #Obtem a poltrona a comprar:
  id_pol = args['id_poltrona'] if 'id_poltrona' in args else None
  assert id_pol != None #  Paranóia (formulário ou botão deve fornecer)
  pol = poltrona.busca_por_identificador(id_pol)
  assert pol != None # Paranóia.

  # Obtém carrinho do usuário:
  carr = sessao.obtem_carrinho(ses)
  assert carr != None # Todo cliente comum deve ter carrinho.
  id_carr = compra.obtem_identificador(carr)

  try:
    if not poltrona.pode_comprar(usr, pol, carr):
      # Não deveria acontecer, mas em todo caso:
      raise ErroAtrib("Esta poltrona não está disponível") 
    
    # Muda a poltrona para comprada
    poltrona.muda_atributos(pol, { 'id_compra': id_carr })

    # Mostra o carrinho do usuário com a poltrona comprada:
    pag = html_pag_compra.gera(ses, cpr, excluir, None)
  except ErroAtrib as ex:
    erros = ex.args[0]
    # Se o trecho da poltrona estiver disponível, mostra o trecho para outra compra:
    id_trc = poltrona.obtem_atributo(pol, 'id_trecho')
    assert id_trc != None # Paranoia.
    trc = trecho.busca_por_identificador(id_trc)
    assert trc != None # Paranoia.
    if trecho.verificar_disponibilidade(trc) and trecho_eh_compativel(cpr, trc):
      # Usuário pode comprar outra poltrona deste trecho:
      pag = html_pag_trecho.gera(ses, trc, None, erros)
    else:
      # Usuário não pode comprar nenuma poltrona neste trecho.
      # Volte para a página principal.
      # !!! Deveria buscar e mostrar roteiros de mesma origem e destino !!!
      pag = html_pag_principal.gera(ses, erros)
  return pag
Exemplo n.º 4
0
def processa(ses, dados):
  ses_nova = ses # Caso o login falhe.

  if ses != None:
    # Não deveria acontecer, mas por via das dúvidas:
    pag = html_pag_mensagem_de_erro.gera(ses, "Favor sair da sessão corrente primeiro")
  else:
    erro_email = None # Email não especificado ou não cadastrado.
    erro_senha = None # Senha não especificada ou inválida.

    if 'senha' not in dados:
      erro_senha = "campo 'senha' é obrigatório"
      senha = None
    else:
      senha = dados['senha'] 

    if 'email' not in dados:
      erro_email = "campo 'email' é obrigatório"
      email = None
    else:
      email = dados['email']

    usr = None
    if email != None and senha != None:
      # Obtem o usuário pelo email:
      id_usuario = usuario.busca_por_email(email)
      if id_usuario == None:
        erro_email = "Usuário " + email + " não está cadastrado"
      else:
        usr = usuario.busca_por_identificador(id_usuario)
        assert usr != None
        atrs_usr = usuario.obtem_atributos(usr)
        if atrs_usr["senha"] != senha:
          erro_senha = "Senha incorreta"
          usr = None

    if usr != None:
      cookie = secrets.token_urlsafe(32)
      carrinho = define_carrinho(usr, id_usuario)
      ses_nova = sessao.cria(usr, cookie, carrinho)
      pag = html_pag_principal.gera(ses_nova, None)
    else:
      erros = [ erro_email, erro_senha ]
      pag = html_pag_mensagem_de_erro.gera(None, erros)

  return pag, ses_nova
Exemplo n.º 5
0
def processa_comando(tipo, ses, dados):
    """Esta função processa um comando HTTP 'GET', 'POST', ou 'HEAD' recebido pelo
  servidor, com as informações convertidas em um dicionario {dados}.

  A sessão {ses} deve ser a sessão deduzida a partir dos cookies que
  viram com o comando HTTP.

  Esta função devolve a página {pag} a ser enviada ao usuário.  Devolve também
  a sessão {ses_nova} corrente.  Esta sessão pode ser diferente de {ses}, se o
  comando for login ou logout."""

    mostra(0, "dados = " + str(dados) + "")

    mostra_cmd = True  # Deve mostrar os dados do comando no final da página?

    cmd = dados['real_path']
    del dados['real_path']

    # Define página a retornar {pag} e a sessão {ses_nova} para futuros comandos:
    ses_nova = ses  # Geralmente a sessão não muda
    if tipo == 'GET' or tipo == 'POST':
        # Obtem os argumentos do comando:
        if tipo == 'GET':
            # Comando causado por acesso inicial ou botão simples:
            args = dados['query_data']
            del dados[
                'query_data']  # Argumentos do comando "GET", no próprio URL "cmd?n1=v1&n2=v2...".
        elif tipo == 'POST':
            # Comando causado por botão do tipo "submit" dentro de um <form>...</form>:
            args = dados['form_data']
            del dados['form_data']  # Campos do formulário.
        else:
            assert False

        # Remove parenteses e colchetes supérfluos em {args}:
        args = descasca_argumentos(args)

        # Despacha o comando:
        # !!! Completar a lista abaixo com todos os módulos {comando_*.py} que existem. !!!

        sys.stderr.write("!! processa_comando: cmd = %s\n" % cmd)
        sys.stderr.write("!! processa_comando: ses = %s\n" % \
          (sessao.obtem_identificador(ses) if ses != None else "None"))

        # --- comandos gerais ------------------------------------------------

        if cmd == '' or cmd == '/' or cmd == '/principal':
            # Acesso sem comando, ou usuário apertou "Principal" no menu geral.
            pag = html_pag_principal.gera(ses, [])

        elif cmd == '/ver_objeto':
            # Quer ver os atributos de um objeto:
            pag = comando_ver_objeto.processa(ses, args)

        elif cmd == '/solicitar_pag_contato':
            # Quer formulário para mandar mensagens aos administradores:
            pag = comando_solicitar_pag_contato.processa(ses, args)

        elif cmd == '/comando_relatorio_de_trafego':
            # Quer relatório de tráfego nos aeroportos:
            pag = comando_relatorio_de_trafego.processa(ses, args)

        # --- comandos referentes a {Objeto_Usuario} ------------------------

        elif cmd == '/solicitar_pag_cadastrar_usuario':
            # Quer formumlário para cadastrar novo usuário:
            pag = comando_solicitar_pag_cadastrar_usuario.processa(ses, args)

        elif cmd == '/cadastrar_usuario':
            # Preencheu atributos de novo usuário e quer executar a criação:
            pag = comando_cadastrar_usuario.processa(ses, args)

        elif cmd == '/solicitar_pag_alterar_usuario':
            # Quer formulário formulário para alterar atributos de algum usuário:
            pag = comando_solicitar_pag_alterar_usuario.processa(ses, args)

        elif cmd == '/alterar_usuario':
            # Alterou atributos de um usuário e quer executar as alterações:
            pag = comando_alterar_usuario.processa(ses, args)

        elif cmd == '/solicitar_pag_buscar_usuarios':
            # Quer formulário para especificar uma busca na tabela de usuários:
            pag = comando_solicitar_pag_buscar_usuarios.processa(ses, args)

        elif cmd == '/buscar_usuarios':
            # Preencheu formulário de busca de usuários, quer executar a busca:
            pag = comando_buscar_usuarios.processa(ses, args)

        # --- comandos referentes a {Objeto_Trecho} -----------------------

        elif cmd == '/ver_trecho':
            # Quer ver atributos de um trecho:
            pag = comando_ver_trecho.processa(ses, args)

        elif cmd == '/solicitar_pag_acrescentar_trecho':
            # Quer formulário para acrescentar novo trecho:
            pag = comando_solicitar_pag_acrescentar_trecho.processa(ses, args)

        elif cmd == '/solicitar_pag_clonar_trecho':
            # Quer formulário para acreacentar novo trecho, copiando atributos de outro:
            pag = comando_solicitar_pag_clonar_trecho.processa(ses, args)

        elif cmd == '/acrescentar_trecho':
            # Preencheu atributos de um novo trecho e quer criar o mesmo:
            pag = comando_acrescentar_trecho.processa(ses, args)

        elif cmd == '/solicitar_pag_alterar_trecho':
            # Quer formulário para alterar atributos de trecho existente:
            pag = comando_solicitar_pag_alterar_trecho.processa(ses, args)

        elif cmd == '/alterar_trecho':
            # Alterou atributos de um trecho e quer executar as alterações:
            pag = comando_alterar_trecho.processa(ses, args)

        elif cmd == '/encerrar_trecho':
            # Quer marcar um trecho como "encerrado":
            pag = comando_encerrar_trecho.processa(ses, args)

        elif cmd == '/solicitar_pag_buscar_trechos':
            # Quer formulário para especificar uma busca na tabela de trechos:
            pag = comando_solicitar_pag_buscar_trechos.processa(ses, args)

        elif cmd == '/buscar_trechos':
            # Preencheu parâmetros de busca de trechos e quer resultado:
            pag = comando_buscar_trechos.processa(ses, args)

        elif cmd == '/solicitar_pag_ofertas':
            # Quer lista dos trechos que tem poltronas em oferta:
            pag = comando_solicitar_pag_ofertas.processa(ses, args)

        # --- comandos referentes a {Objeto_Poltrona} -----------------------

        elif cmd == '/ver_poltrona':
            # Quer ver atributos de uma poltrona:
            pag = comando_ver_poltrona.processa(ses, args)

        elif cmd == '/solicitar_pag_alterar_poltrona':
            # Quer formulário para alterar atributos de uma poltrona:
            pag = comando_solicitar_pag_alterar_poltrona.processa(ses, args)

        elif cmd == '/alterar_poltrona':
            # Alterou atributos de uma poltrona, quer executar as alterações:
            pag = comando_alterar_poltrona.processa(ses, args)

        elif cmd == '/comprar_poltrona':
            # Quer comprar uma poltrona (um bilhete):
            pag = comando_comprar_poltrona.processa(ses, args)

        elif cmd == '/excluir_poltrona':
            # Quer excluir uma potrona de um pedido de compra:
            pag = comando_excluir_poltrona.processa(ses, args)

        elif cmd == '/ver_poltronas_de_usuario':
            # Quer ver todas as poltronas compradas por um usuário:
            pag = comando_ver_poltronas_de_usuario.processa(ses, args)

        # --- comandos referentes a {Objeto_Compra} -----------------------

        elif cmd == '/ver_compra':
            # Quer ver os atributos de um pedido de compra:
            pag = comando_ver_compra.processa(ses, args)

        elif cmd == '/alterar_compra':
            # Quer formulário para alterar atributos de um pedido de compra
            pag = comando_alterar_compra.processa(ses, args)

        elif cmd == '/alterar_pagamento':
            # Quer formulário para alterar atributos de um pedido de compra
            ## Descomentar linha apos implementar
            #pag = comando_alterar_pagamento.processa(ses, args)
            pag = html_pag_mensagem_de_erro.gera(ses, (
                "** Adicionar atributo forma_pag a compra.py e descomentar implementacao do comando alterar_pagamento"
            ))

        elif cmd == '/solicitar_pag_escolher_pagamento':
            # Quer formulário para escolher a forma de pagamento de uma compra:
            pag = comando_solicitar_pag_escolher_pagamento.processa(ses, args)

        elif cmd == '/ver_carrinho':
            # Quer ver seu carrinho de compras:
            pag = comando_ver_carrinho.processa(ses, args)

        elif cmd == '/definir_carrinho':
            # Quer definir uma outra compra em aberto como carrinho da sessao:
            pag = comando_definir_carrinho.processa(ses, args)

        elif cmd == '/finalizar_compra':
            # Quer finalizar uma compra:
            pag = comando_finalizar_compra.processa(ses, args)

        elif cmd == '/ver_minhas_compras':
            # Quer ver a lista de todas as suas compras:
            pag = comando_ver_minhas_compras.processa(ses, args)

        elif cmd == '/solicitar_pag_buscar_compras':
            # Quer formulário para especificar uma busca na tabela de compras:
            pag = comando_solicitar_pag_buscar_compras.processa(ses, args)

        elif cmd == '/buscar_compras':
            # Preencheu dados de uma busca de compras, quer exxecutar a busca:
            pag = comando_buscar_compras.processa(ses, args)

        # --- comandos referentes a {Objeto_Sessao} -----------------------

        elif cmd == '/solicitar_pag_login':
            # Qer formulário para fazer "login":
            # ATENÇÃO: Este comando só mostra o formulário de login, não muda a sessão ainda.
            pag = comando_solicitar_pag_login.processa(ses, args)

        elif cmd == '/fazer_login':
            # Preencheu o formulário de login e quer entrar (criar nova sessão):
            # ATENÇÃO: devolve também a nova sessão (que pode ser {None} se o login não deu certo).
            pag, ses_nova = comando_fazer_login.processa(ses, args)

        elif cmd == '/fazer_logout':
            # Quer fazer "logout" (fechar a sessão corrente):
            # ATENÇÃO: devolve também a nova sessão (que geralmente vai ser {None}).
            pag, ses_nova = comando_fazer_logout.processa(ses, args)

        elif cmd == '/fechar_sessao':
            # Quer encerrar uma sessão dada:
            pag, ses_nova = comando_fechar_sessao.processa(ses, args)

        elif cmd == '/ver_sessoes':
            # !!! ESCLARECER !!!
            # Quer ver sessões:
            pag = comando_ver_sessoes.processa(ses, args)

        elif cmd == '/ver_sessao':
            pag = comando_ver_sessao.processa(ses, args)

        elif cmd == '/ver_minhas_sessoes':
            # Quer ver sessões:
            pag = comando_ver_minhas_sessoes.processa(ses, args)

        elif cmd == '/enviar_msg_contato':
            # Envia mensagem de contato
            pag = comando_enviar_msg_contato.processa(ses, args)

        # --- comandos referentes a roteiros -----------------------

        elif cmd == '/solicitar_pag_sugerir_roteiros':
            # Quer formulário para especificar uma busca de roteiros:
            pag = comando_solicitar_pag_sugerir_roteiros.processa(ses, args)

        elif cmd == '/sugerir_roteiros':
            # Preencheu formulário de busca e quer fazer a busca:
            pag = comando_sugerir_roteiros.processa(ses, args)

        elif cmd == '/ver_roteiro':
            # Quer ver um roteiro específico:
            pag = comando_ver_roteiro.processa(ses, args)

        elif cmd == '/ver_compras_de_usuario':
            pag = comando_ver_compras_de_usuario.processa(ses, args)

        elif cmd == '/comprar_roteiro':
            # Quer comprar um roteiro específico:
            pag = comando_comprar_roteiro.processa(ses, args)

        # --------------------------------------------------------------

        else:
            # Comando não identificado
            pag = html_pag_mensagem_de_erro.gera(
                ses, ("** comando POST \"%s\" inválido" % cmd))

    elif tipo == 'HEAD':
        # Comando emitido por proxy server:
        # !!! (MAIS TARDE) Tratar este caso !!!
        args = {}.copy()
        pag = html_pag_mensagem_de_erro.gera(
            ses, ("** comando HEAD \"%s\" não implementado" % cmd))
    else:
        # Tipo de comando inválido:
        args = {}.copy()
        pag = html_pag_mensagem_de_erro.gera(
            ses, ("** comando \"%s\" não implementado" % tipo))

    sys.stderr.write("!! processa_comando: pag = %s\n" % pag)

    if mostra_cmd:
        # Acrescenta os dados para depuração:
        pag = re.sub(r'</body>', ("<br/>%s<br/><br/></body>" %
                                  formata_dados_http(cmd, args, dados)), pag)

    return pag, ses_nova