Example #1
0
 def __init__(self):
     self.receiver = Receiver()
     self.snapshot_usuario = SnapshotMemento()
     self.snapshot_produto = SnapshotMemento()
     self.snapshot_aluguel = SnapshotMemento()
     self.usuarios = {}
     self.produtos = {}
     self.alugueis = {}
     self.prox_usuario = 0
     self.prox_produto = 0
     self.prox_aluguel = 0
Example #2
0
class AuthOAUTH(Strategy):
  def __init__(self):
    self.receiver = Receiver()
    self.lista_usuarios = []


  def entrar(self, login, senha):
    """ Mock de Autenticação por OAUTH """
    try:
      hash_da_senha = f'{login}{senha}'
      if hash_da_senha == 'adminadmin':
        oauth_cookie = True
        self.receiver.notificar_todos("autenticado com sucesso usando oauth")
        self.receiver.notificar_todos("deslogado com sucesso")
        return oauth_cookie
      else:
        raise Exception('TOKEN OAUTH INVALIDO')
    except Exception as e:
      self.receiver.notificar_todos(e)

  def sair(self):
    try:
      oauth_cookie = False
      return oauth_cookie
    except Exception as e:
      self.receiver.notificar_todos(e)
Example #3
0
class CommandInvoker():
    def __init__(self):
        self.__fila_comandos = []
        self.receiver = Receiver()

    def enfileirar(self, comando):
        '''Adiciona um Comando na fila '''
        self.__fila_comandos.append(comando)

    def executar_fila(self):
        ''' Executa tudo que está na fila e zera a fila '''
        for comando in self.__fila_comandos:
            self.receiver.notificar_todos(f"Executando {comando}")
            comando.execute()

        self.__fila_comandos = []

    def executar_imediatamente(self, comando):
        self.receiver.notificar_todos(f"Executando {comando}")
        comando.execute()
Example #4
0
class CommandInterface(object):
    def __init__(self, core):
        self.core = core
        self.invoker = CommandInvoker()
        self.receiver = Receiver()

    def add(self, texto):
        try:
            if texto[0] == "CRIARUSUARIO":
                self.invoker.enfileirar(
                    CriarUsuarioCommand(self.core, texto[1], texto[2],
                                        texto[3], texto[4]))
            elif texto[0] == "EXCLUIRUSUARIO":
                self.invoker.enfileirar(
                    ExcluirUsuarioCommand(self.core, texto[1]))
            elif texto[0] == "CRIARPRODUTO":
                self.invoker.enfileirar(
                    CriarProdutoCommand(self.core, texto[1], texto[2],
                                        texto[3], texto[4]))
            elif texto[0] == "EXCLUIRPRODUTO":
                self.invoker.enfileirar(
                    ExcluirProdutoCommand(self.core, texto[1]))
            elif texto[0] == "CRIARALUGUEL":
                self.invoker.enfileirar(
                    CriarAluguelCommand(self.core, texto[1], texto[2],
                                        texto[3]))
            elif texto[0] == "EXCLUIRALUGUEL":
                self.invoker.enfileirar(
                    ExcluirAluguelCommand(self.core, texto[1]))
            elif texto[0] == "ENTRAR":
                self.invoker.enfileirar(
                    EntrarCommand(self.core, texto[1], texto[2]))
            elif texto[0] == "SAIR":
                self.invoker.enfileirar(SairCommand(self.core))
            elif texto[0] == "DESFAZER":
                self.invoker.enfileirar(DesfazerCommand(self.core))
        except:
            self.receiver.notificar_todos(f"Erro Executando  {texto}")

    def rodar(self):
        self.invoker.executar_fila()
Example #5
0
class AuthPassword(Strategy):
  def __init__(self):
    self.receiver = Receiver()

  def entrar(self, login, senha):
    """ Mock de Autenticação por senha """
    try:
      if login == 'admin' and senha == 'admin':
        magic_cookie = True
        self.receiver.notificar_todos("autenticado com sucesso usando senha")
        return magic_cookie
      else:
        raise Exception('Usuario / Senha Invalido')
    except Exception as e:
      self.receiver.notificar_todos(e)

  def sair(self):
    try:
      magic_cookie = False
      self.receiver.notificar_todos("deslogado com sucesso")
      return magic_cookie
    except Exception as e:
      self.receiver.notificar_todos(e)
Example #6
0
 def __init__(self):
     self.__fila_comandos = []
     self.receiver = Receiver()
Example #7
0
class LocalController(ControlAbstract, Singleton):
    def __init__(self):
        self.receiver = Receiver()
        self.snapshot_usuario = SnapshotMemento()
        self.snapshot_produto = SnapshotMemento()
        self.snapshot_aluguel = SnapshotMemento()
        self.usuarios = {}
        self.produtos = {}
        self.alugueis = {}
        self.prox_usuario = 0
        self.prox_produto = 0
        self.prox_aluguel = 0

    def inicializar_sistema(self):
        ## no caso do controlador local, única necessidade é carregar o arquivo
        self.carregar_arquivo('sari/storage/usuario.bin',
                              'sari/storage/produto.bin',
                              'sari/storage/aluguel.bin')

    def notificar_admin(self):
        self.receiver.notificar_todos(
            "SISTEMA SARI INICIADO - MODO ARMAZENAMENTO LOCAL")

    def finalizar_sistema(self):
        self.salvar_arquivo('sari/storage/usuario.bin',
                            'sari/storage/produto.bin',
                            'sari/storage/aluguel.bin')

    def notificar_admin_final(self):
        self.receiver.notificar_todos(
            "SISTEMA SARI FINALIZADO - MODO ARMAZENAMENTO LOCAL")

    def carregar_arquivo(self, a_usuarios, a_produtos, a_alugueis):
        with open(a_usuarios, 'rb') as a_usuarios:
            self.usuarios = pickle.load(a_usuarios)
        with open(a_produtos, 'rb') as a_produtos:
            self.produtos = pickle.load(a_produtos)
        with open(a_alugueis, 'rb') as a_alugueis:
            self.alugueis = pickle.load(a_alugueis)
        self.prox_usuario = len(self.usuarios)
        self.prox_produto = len(self.produtos)
        self.prox_aluguel = len(self.alugueis)

    def salvar_arquivo(self, a_usuarios, a_produtos, a_alugueis):
        with open(a_usuarios, 'wb') as a_usuarios:
            pickle.dump(self.usuarios, a_usuarios)
        with open(a_produtos, 'wb') as a_produtos:
            pickle.dump(self.produtos, a_produtos)
        with open(a_alugueis, 'wb') as a_alugueis:
            pickle.dump(self.alugueis, a_alugueis)

    def criar_usuario(self, nome, email, senha, bio):
        id_usuario = self.prox_usuario
        self.prox_usuario += 1

        usr = Usuario(id_usuario, email, nome, senha, bio)
        self.usuarios[id_usuario] = usr
        self.receiver.notificar_todos(
            f"ID: {id_usuario} Usuario {nome} Criado")

    def excluir_usuario(self, email):
        try:
            for key, value in self.usuarios.items():
                if value.email == email:
                    self.usuarios.pop(key)
        except:
            self.receiver.notificar_todos(f'Usuario {email} não encontrado')

    def criar_produto(self, id_dono, nome, preco, descricao):
        id_produto = self.prox_produto
        self.prox_produto += 1

        prod = Produto(id_produto, id_dono, nome, preco, descricao)
        self.produtos[id_produto] = prod
        self.receiver.notificar_todos(f'PRODUTO {id_produto}: {nome} CRIADO')

    def excluir_produto(self, id_produto):
        try:
            if id_produto in self.produtos.keys():
                self.usuarios.pop(id_produto)
        except:
            self.receiver.notificar_todos(
                f'Produto {id_produto} não encontrado')

    def criar_aluguel(self, id_produto, id_alugador, data_aluguel):
        id_trans = self.prox_aluguel
        self.prox_aluguel += 1
        alg = Aluguel(id_trans, id_produto, id_alugador, data_aluguel)
        self.alugueis[id_trans] = alg
        self.receiver.notificar_todos(
            f'ALUGUEL {id_trans} {id_alugador} CRIADO')

    def excluir_aluguel(self, id_trans):
        try:
            if id_trans in self.alugueis.keys():
                self.alugueis.pop(id_trans)
        except:
            self.receiver.notificar_todos(f'Aluguel {id_trans} não encontrado')

    def criar_memento(self):
        self.snapshot_usuario.criar_snapshot(self.usuarios)
        self.snapshot_produto.criar_snapshot(self.produtos)
        self.snapshot_aluguel.criar_snapshot(self.alugueis)
        self.receiver.notificar_todos(f'(Memento) Snapshot Criado')

    def restaurar_estado(self):
        self.snapshot_usuario.restaurar_ultimo_snapshot()
        self.snapshot_produto.restaurar_ultimo_snapshot()
        self.snapshot_aluguel.restaurar_ultimo_snapshot()
        self.receiver.notificar_todos(f'(Memento) Desfeita Ultima Alteração')
Example #8
0
 def __init__(self):
   self.receiver = Receiver()
   self.lista_usuarios = []
Example #9
0
 def __init__(self):
     self.receiver = Receiver()
     self._db, self._cursor = None, None
Example #10
0
class MariaDBController(ControlAbstract, Singleton):
    def __init__(self):
        self.receiver = Receiver()
        self._db, self._cursor = None, None

    def _reload(self):
        """Recarrega a conexão com a db e renova o db e o cursor """
        self.db = mariadb.connect(**DATABASE_CONFIG)
        self.cursor = self._db.cursor()
        self.cursor.execute("USE sari;")

    def inicializar_sistema(self):
        self._reload()

    def notificar_admin(self):
        self.receiver.notificar_todos(
            "SISTEMA SARI INICIADO - MODO BANCO DE DADOS")

    def finalizar_sistema(self):
        self.db.close()

    def notificar_admin_final(self):
        self.receiver.notificar_todos(
            "SISTEMA SARI FINALIZADO - MODO BANCO DE DADOS")

    @db_write
    def criar_usuario(self, nome, email, senha, bio):
        try:
            self._cursor.execute(DB_PROCURAR_USUARIO_POR_EMAIL, (email, ))
            user = self._cursor.fetchall()
            user = list(*zip(*zip(*user)))
            if user: raise Exception('Usuario Já Existe')

            check_value(nome, min=2, max=64)
            check_value(email, regex=r'[A-Za-z0-9@.]+$')
            check_value(senha, regex=r'[A-Za-z0-9@.\+\-\*_\-\,]+$')
            check_value(bio, max=256, regex=False)

            self._cursor.execute(DB_CRIAR_USUARIO, (
                nome,
                email,
                senha,
                bio,
            ))
            self.receiver.notificar_todos(
                f"DB: Usuário Adicionado: {nome} {email} {senha} {bio}")

        except Exception as e:
            self.receiver.notificar_todos(e)

    @db_write
    def excluir_usuario(self, email):
        try:
            self._cursor.execute(DB_PROCURAR_USUARIO_POR_EMAIL, (email, ))
            user = self._cursor.fetchall()
            user = list(*zip(*zip(*user)))
            if user:
                self._cursor.execute(DB_EXCLUIR_USUARIO_POR_EMAIL, (email, ))
                self.receiver.notificar_todos(f"DB: Usuário Excluido: {email}")
            else:
                raise Exception("Usuario Não Existe")
        except Exception as e:
            self.receiver.notificar_todos(e)

    @db_write
    def criar_produto(self, id_dono, nome, preco, descricao):
        try:
            check_value(id_dono, min=1, regex=r'[0-9]+$')
            check_value(nome)
            check_value(preco, regex=r'[A-Za-z0-9\@\.\$]+$')
            check_value(descricao, max=256, regex=False)

            self._cursor.execute(DB_PROCURAR_USUARIO_POR_ID, (id_dono, ))
            dono_existe = self._cursor.fetchall()
            self.receiver.notificar_todos(dono_existe)

            if dono_existe:
                self._cursor.execute(DB_CRIAR_PRODUTO, (
                    id_dono,
                    nome,
                    preco,
                    descricao,
                ))
                self.receiver.notificar_todos(
                    f"DB: PRODUTO Adicionado: {nome} {preco} {descricao} {id_dono}"
                )
            else:
                raise Exception('Usuario Não Existe')

        except Exception as e:
            self.receiver.notificar_todos(e)

    def excluir_produto(self):
        pass

    def criar_aluguel(self):
        pass

    def excluir_aluguel(self):
        pass
Example #11
0
 def __init__(self, core):
     self.core = core
     self.invoker = CommandInvoker()
     self.receiver = Receiver()
Example #12
0
 def __init__(self):
   self.receiver = Receiver()