def admin_busca(): logs = Logs() busca = request.args.get('search[value]') busca = '%' + busca + '%' inicio = int(request.args.get('start')) fim = int(request.args.get('length')) draw = int(request.args.get('draw')) resultados = logs.search(busca, inicio, fim) total = logs.total() filtrado = logs.count(busca) return data_tables_response(draw, total, filtrado, resultados)
def cadastrar(): # Cadastro via ajax usuario = Usuario() usuario.nivel = Roles.usuario.value populate_from_request(usuario) if not Usuario.valid_pass(request.form['senha']): return json_response(message='A senha deve ter pelo menos 6 dígitos', data=[]), 400 if usuario.login_exists(usuario.cpf, 0): return json_response(message='O CPF já está em uso, utilize outro', data=[]), 400 usuario.senha = Usuario.hash(request.form['senha']) usuario.data_cadastro = datetime.datetime.now().strftime( "%Y-%m-%d %H:%M:%S") identifier = usuario.insert() if identifier > 0: Logs(0, usuario.identifier, usuario.nome + '(' + usuario.cpf + ')' + ' fez o cadastro', 'usuario', usuario.identifier, datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")).insert() return json_response(message='Cadastrado realizado!', data=[usuario], redirect=url_for('usuarios.entrar')), 201 else: return json_response(message='Não foi possível cadastrar sua conta', data=[]), 400
def admin_editar(identifier: int): """ Edição de notícias """ noticia = Noticia() noticia.select(identifier) auth = Auth() if noticia.identifier > 0: if auth.is_allowed('edita.noticia', noticia): populate_from_request(noticia) noticia.data_atualizacao = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") if noticia.update(): imagens = get_uploaded_images() atual = ImagemNoticia() atuais = atual.select_by_parent(noticia.identifier) count = len(atuais) for imagem in imagens: imagem.noticia_id = noticia.identifier imagem.data_cadastro = noticia.data_atualizacao imagem.ordem = count imagem.insert() count = count + 1 Logs(0, auth.user.identifier, auth.user.nome + '(' + auth.user.cpf + ')' + ' editou a notícia ' + noticia.titulo + ' [Cód. ' + noticia.identifier.__str__() + ']', 'noticia', noticia.identifier, datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")).insert() return json_response(message='Notícia atualizada!', data=[noticia], redirect=url_for('noticias.admin_edicao', identifier=noticia.identifier)) else: return json_response(message='Não foi possível editar a notícia', data=[]), 400 else: return json_response(message='Você não tem permissão para realizar esta ação', data=[]), 403 else: return json_response(message='Notícia não encontrada', data=[]), 404
def admin_remover(identifier: int): usuario = Usuario() usuario.select(identifier) auth = Auth() if usuario.identifier > 0: if auth.is_allowed('remove.usuario', usuario): if usuario.delete(): Logs( 0, auth.user.identifier, auth.user.nome + '(' + auth.user.cpf + ')' + ' removeu o usuário ' + usuario.nome + ' (' + usuario.cpf + ')', 'usuario', usuario.identifier, datetime.datetime.now().strftime( "%Y-%m-%d %H:%M:%S")).insert() return json_response(message='Usuário removido!', data=[], redirect=url_for('usuarios.admin_lista')) else: return json_response( message='Não foi possível remover o usuário', data=[]), 400 else: return json_response( message='Você não tem permissão para realizar esta ação', data=[]), 403 else: return json_response(message='Usuário não encontrado', data=[]), 404
def admin_editar(identifier: int): """ Edição de avisos """ aviso = Aviso() aviso.select(identifier) auth = Auth() if aviso.identifier > 0: if auth.is_allowed('edita.aviso', aviso): populate_from_request(aviso) aviso.data_atualizacao = datetime.datetime.now().strftime( "%Y-%m-%d %H:%M:%S") if aviso.update(): Logs( 0, auth.user.identifier, auth.user.nome + '(' + auth.user.cpf + ')' + ' editou o aviso ' + aviso.titulo + ' [Cód. ' + aviso.identifier.__str__() + ']', 'aviso', aviso.identifier, datetime.datetime.now().strftime( "%Y-%m-%d %H:%M:%S")).insert() return json_response(message='Aviso atualizado!', data=[aviso]) else: return json_response(message='Não foi possível editar o aviso', data=[]), 400 else: return json_response( message='Você não tem permissão para realizar esta ação', data=[]), 403 else: return json_response(message='Aviso não encontrado', data=[]), 404
def admin_cadastrar(): """ Cadastro de usuários """ auth = Auth() if auth.is_allowed('cadastra.usuario'): usuario = Usuario() populate_from_request(usuario) if not Usuario.valid_pass(request.form['senha']): return json_response( message='A senha deve ter pelo menos 6 dígitos', data=[]), 400 if usuario.login_exists(usuario.cpf, 0): return json_response(message='O CPF já está em uso, utilize outro', data=[]), 400 usuario.senha = Usuario.hash(request.form['senha']) usuario.data_cadastro = datetime.datetime.now().strftime( "%Y-%m-%d %H:%M:%S") if usuario.insert(): Logs( 0, auth.user.identifier, auth.user.nome + '(' + auth.user.cpf + ')' + ' cadastrou o usuário ' + usuario.nome + ' (' + usuario.cpf + ')', 'usuario', usuario.identifier, datetime.datetime.now().strftime( "%Y-%m-%d %H:%M:%S")).insert() return json_response(message='Usuário cadastrado', data=[usuario], redirect=url_for('usuarios.admin_lista')) else: return json_response( message='Não foi possível cadastrar o usuário', data=[]), 400 else: return json_response( message='Você não tem permissão para realizar esta ação', data=[]), 403
def admin_cadastrar(): """ Cadastro de anúncios """ auth = Auth() if auth.is_allowed('cadastra.anuncio'): anuncio = Anuncio() populate_from_request(anuncio) anuncio.data_cadastro = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") anuncio.usuario_id = auth.user.identifier # Apenas usuários que podem editar os anúncios já ficam aprovados anuncio.aprovado = auth.is_allowed('edita.anuncio') if anuncio.insert(): imagens = get_uploaded_images() order = 0 for imagem in imagens: imagem.anuncio_id = anuncio.identifier imagem.data_cadastro = anuncio.data_cadastro imagem.ordem = order imagem.insert() order = order + 1 Logs(0, auth.user.identifier, auth.user.nome + '(' + auth.user.cpf + ')' + ' cadastrou o anúncio ' + anuncio.titulo + ' [Cód. ' + anuncio.identifier.__str__() + ']', 'anuncio', anuncio.identifier, datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")).insert() return json_response(message='Anúncio cadastrado', data=[anuncio], redirect=url_for('anuncios.admin_edicao', identifier=anuncio.identifier)) else: return json_response(message='Não foi possível cadastrar o anúncio', data=[]), 400 else: return json_response(message='Você não tem permissão para realizar esta ação', data=[]), 403
def admin_editar(identifier: int): """ Edição de anúncios """ anuncio = Anuncio() anuncio.select(identifier) auth = Auth() if anuncio.identifier > 0: if auth.is_allowed('edita.anuncio', anuncio): populate_from_request(anuncio) anuncio.data_atualizacao = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") if anuncio.update(): imagens = get_uploaded_images() atual = ImagemAnuncio() atuais = atual.select_by_parent(anuncio.identifier) count = len(atuais) for imagem in imagens: imagem.anuncio_id = anuncio.identifier imagem.data_cadastro = anuncio.data_atualizacao imagem.ordem = count imagem.insert() count = count + 1 Logs(0, auth.user.identifier, auth.user.nome + '(' + auth.user.cpf + ')' + ' editou o anúncio ' + anuncio.titulo + ' [Cód. ' + anuncio.identifier.__str__() + ']', 'anuncio', anuncio.identifier, datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")).insert() return json_response(message='Anúncio atualizado!', data=[anuncio], redirect=url_for('anuncios.admin_edicao', identifier=anuncio.identifier)) else: return json_response(message='Não foi possível editar o anúncio', data=[]), 400 else: return json_response(message='Você não tem permissão para realizar esta ação', data=[]), 403 else: return json_response(message='Anúncio não encontrado', data=[]), 404
def admin_editar(identifier: int): """ Edição de banner """ banner = Banner() banner.select(identifier) auth = Auth() if banner.identifier > 0: if auth.is_allowed('edita.universidade', banner): populate_from_request(banner) banner.data_atualizacao = datetime.datetime.now().strftime( "%Y-%m-%d %H:%M:%S") if banner.update(): Logs( 0, auth.user.identifier, auth.user.nome + '(' + auth.user.cpf + ')' + ' editou um banner [Cód. ' + banner.identifier.__str__() + ']', 'banner', banner.identifier, datetime.datetime.now().strftime( "%Y-%m-%d %H:%M:%S")).insert() return json_response(message='Banner atualizado!', data=[banner], redirect=url_for('banner.admin_lista')) else: return json_response( message='Não foi possível editar o banner', data=[]), 400 else: return json_response( message='Você não tem permissão para realizar esta ação', data=[]), 403 else: return json_response(message='Banner não encontrado', data=[]), 404
def admin_cadastrar(): """ Cadastro de banner """ auth = Auth() banner = Banner() banners = banner.all() if auth.is_allowed('edita.universidade') and len(banners) < 10: populate_from_request(banner) banner.data_cadastro = datetime.datetime.now().strftime( "%Y-%m-%d %H:%M:%S") banner.usuario_id = auth.user.identifier banner.ordem = len(banners) if banner.insert(): Logs( 0, auth.user.identifier, auth.user.nome + '(' + auth.user.cpf + ')' + ' cadastrou um banner [Cód. ' + banner.identifier.__str__() + ']', 'banner', banner.identifier, datetime.datetime.now().strftime( "%Y-%m-%d %H:%M:%S")).insert() return json_response(message='Banner cadastrado!', data=[banner], redirect=url_for('banner.admin_lista')) else: return json_response(message='Não foi possível cadastrar o banner', data=[]), 400 else: return json_response( message='Você não tem permissão para realizar esta ação', data=[]), 403
def admin_remover(identifier: int): banner = Banner() banner.select(identifier) auth = Auth() if banner.identifier > 0: if auth.is_allowed('edita.universidade', banner): if banner.delete(): Logs( 0, auth.user.identifier, auth.user.nome + '(' + auth.user.cpf + ')' + ' removeu o banner [Cód. ' + banner.identifier.__str__() + ']', 'banner', banner.identifier, datetime.datetime.now().strftime( "%Y-%m-%d %H:%M:%S")).insert() return json_response(message='Banner removido!', data=[], redirect=url_for('banner.admin_lista')) else: return json_response( message='Não foi possível remover o banner', data=[]), 400 else: return json_response( message='Você não tem permissão para realizar esta ação', data=[]), 403 else: return json_response(message='Banner não encontrado', data=[]), 404
def admin_cadastrar(): """ Cadastro de notícias """ auth = Auth() if auth.is_allowed('cadastra.noticia'): noticia = Noticia() populate_from_request(noticia) noticia.data_cadastro = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") noticia.usuario_id = auth.user.identifier if noticia.insert(): imagens = get_uploaded_images() order = 0 for imagem in imagens: imagem.noticia_id = noticia.identifier imagem.data_cadastro = noticia.data_cadastro imagem.ordem = order imagem.insert() order = order + 1 Logs(0, auth.user.identifier, auth.user.nome + '(' + auth.user.cpf + ')' + ' cadastrou a notícia ' + noticia.titulo + ' [Cód. ' + noticia.identifier.__str__() + ']', 'noticia', noticia.identifier, datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")).insert() return json_response(message='Notícia cadastrada', data=[noticia], redirect=url_for('noticias.admin_lista')) else: return json_response(message='Não foi possível cadastrar a notícia', data=[]), 400 else: return json_response(message='Você não tem permissão para realizar esta ação', data=[]), 403
def admin_cadastrar(): """ Cadastro de avisos """ auth = Auth() if auth.is_allowed('cadastra.aviso'): aviso = Aviso() populate_from_request(aviso) aviso.data_cadastro = datetime.datetime.now().strftime( "%Y-%m-%d %H:%M:%S") aviso.usuario_id = auth.user.identifier if aviso.insert(): Logs( 0, auth.user.identifier, auth.user.nome + '(' + auth.user.cpf + ')' + ' cadastrou o aviso ' + aviso.titulo + ' [Cód. ' + aviso.identifier.__str__() + ']', 'aviso', aviso.identifier, datetime.datetime.now().strftime( "%Y-%m-%d %H:%M:%S")).insert() return json_response(message='Aviso cadastrado!', data=[aviso], redirect=url_for('avisos.admin_lista')) else: return json_response(message='Não foi possível cadastrar o aviso', data=[]), 400 else: return json_response( message='Você não tem permissão para realizar esta ação', data=[]), 403
def admin_remover(identifier: int): aviso = Aviso() aviso.select(identifier) auth = Auth() if aviso.identifier > 0: if auth.is_allowed('remove.aviso', aviso): if aviso.delete(): Logs( 0, auth.user.identifier, auth.user.nome + '(' + auth.user.cpf + ')' + ' removeu o aviso ' + aviso.titulo + ' [Cód. ' + aviso.identifier.__str__() + ']', 'aviso', aviso.identifier, datetime.datetime.now().strftime( "%Y-%m-%d %H:%M:%S")).insert() return json_response(message='Aviso removido!', data=[], redirect=url_for('avisos.admin_lista')) else: return json_response( message='Não foi possível remover o aviso', data=[]), 400 else: return json_response( message='Você não tem permissão para realizar esta ação', data=[]), 403 else: return json_response(message='Aviso não encontrado', data=[]), 404
def admin_editar(): """ Edição de universidade """ universidade = Universidade() universidade.select(1) auth = Auth() if auth.is_allowed('edita.universidade'): populate_from_request(universidade) universidade.data_atualizacao = datetime.datetime.now().strftime( "%Y-%m-%d %H:%M:%S") if universidade.update(): Logs( 0, auth.user.identifier, auth.user.nome + '(' + auth.user.cpf + ')' + ' editou os dados da universidade ' + universidade.nome + ' [Cód. ' + universidade.identifier.__str__() + ']', 'universidade', universidade.identifier, datetime.datetime.now().strftime( "%Y-%m-%d %H:%M:%S")).insert() return json_response( message='Dados da universidade atualizados!', data=[universidade], redirect=url_for('universidade.admin_universidade')) else: return json_response( message='Não foi possível editar a universidade', data=[]), 400 else: return json_response( message='Você não tem permissão para realizar esta ação', data=[]), 403
def admin_editar(identifier: int): """ Edição de usuários """ usuario = Usuario() usuario.select(identifier) auth = Auth() if usuario.identifier > 0: if auth.is_allowed('edita.usuario', usuario): populate_from_request(usuario) # Apenas usuários que podem editar qualquer usuário (e não apenas si mesmo) podem alterar o nível de perm. if auth.is_allowed('edita.usuario') and 'nivel' in request.form: usuario.nivel = int(request.form['nivel']) # Se estiver alterando o próprio perfil, solicita senha if auth.user.identifier == usuario.identifier: if 'antiga' not in request.form or len( request.form['antiga']) == 0: return json_response(message='Informe sua senha atual', data=[]), 400 elif not Usuario.check_hash(request.form['antiga'], usuario.senha): return json_response(message='Senha atual incorreta', data=[]), 400 if usuario.login_exists(usuario.cpf, usuario.identifier): return json_response( message='O CPF já está em uso, utilize outro', data=[]), 400 # Altera senha apenas se for enviado um valor novo if 'senha' in request.form and len(request.form['senha']) > 0: if not Usuario.valid_pass(request.form['senha']): return json_response( message='A senha deve ter pelo menos 6 dígitos', data=[]), 400 else: usuario.senha = Usuario.hash(request.form['senha']) usuario.update_password() usuario.data_atualizacao = datetime.datetime.now().strftime( "%Y-%m-%d %H:%M:%S") if usuario.update(): Logs( 0, auth.user.identifier, auth.user.nome + '(' + auth.user.cpf + ')' + ' editou o usuário ' + usuario.nome + ' (' + usuario.cpf + ')', 'usuario', usuario.identifier, datetime.datetime.now().strftime( "%Y-%m-%d %H:%M:%S")).insert() return json_response(message='Usuário atualizado!', data=[usuario]) else: return json_response( message='Não foi possível editar o usuário', data=[]), 400 else: return json_response( message='Você não tem permissão para realizar esta ação', data=[]), 403 else: return json_response(message='Usuário não encontrado', data=[]), 404
def migrate_database(): print('Aguarde...') # Cria tabelas Usuario.create_table() Aviso.create_table() Noticia.create_table() ImagemNoticia.create_table() Anuncio.create_table() ImagemAnuncio.create_table() Universidade.create_table() Banner.create_table() Logs.create_table() # Adiciona usuários e dados da universidade Usuario.insert_dummy() Universidade.insert_dummy() Banner.insert_dummy() Aviso.insert_dummy() Noticia.insert_dummy() Anuncio.insert_dummy() print('Dados inseridos!')
def login(): cpf = request.form.get('login') senha = request.form.get('senha') usuario = Usuario() usuario.select_by_login(cpf) if usuario.identifier > 0 and Usuario.check_hash(senha, usuario.senha): usuario.permanent = True session['user'] = usuario.serialize() session['time'] = time.time() Logs(0, usuario.identifier, usuario.nome + ' (' + usuario.cpf + ')' + ' entrou no sistema', 'usuario', usuario.identifier, datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")).insert() return redirect(url_for('home.admin_home')) return redirect(url_for('usuarios.entrar', erro=1))
def admin_remover(identifier: int): noticia = Noticia() noticia.select(identifier) auth = Auth() if noticia.identifier > 0: if auth.is_allowed('remove.noticia', noticia): if noticia.delete(): Logs(0, auth.user.identifier, auth.user.nome + '(' + auth.user.cpf + ')' + ' removeu a notícia ' + noticia.titulo + ' [Cód. ' + noticia.identifier.__str__() + ']', 'noticia', noticia.identifier, datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")).insert() return json_response(message='Notícia removida!', data=[], redirect=url_for('noticias.admin_lista')) else: return json_response(message='Não foi possível remover a notícia', data=[]), 400 else: return json_response(message='Você não tem permissão para realizar esta ação', data=[]), 403 else: return json_response(message='Notícia não encontrada', data=[]), 404
def admin_imagem_remover(identifier: int): imagem = ImagemNoticia() imagem.select(identifier) auth = Auth() if imagem.identifier > 0: if auth.is_allowed('edita.noticia', imagem.get_parent()): if imagem.delete(): noticia = imagem.get_parent() Logs(0, auth.user.identifier, auth.user.nome + '(' + auth.user.cpf + ')' + ' removeu uma imagem da notícia ' + noticia.titulo + ' [Cód. ' + noticia.identifier.__str__() + ']', 'noticia', noticia.identifier, datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")).insert() return json_response(message='Imagem removida!', data=[], redirect=url_for('noticias.admin_edicao', identifier=imagem.noticia_id)) else: return json_response(message='Não foi possível remover a imagem', data=[]), 400 else: return json_response(message='Você não tem permissão para realizar esta ação', data=[]), 403 else: return json_response(message='Imagem não encontrada', data=[]), 404
def admin_imagem_ordem(): auth = Auth() if auth.is_allowed('edita.universidade'): ordem = request.form['ordem'] lista = ordem.split(',') imagem = Banner() count = 0 for item in lista: imagem.select(item) imagem.ordem = count imagem.update() count = count + 1 Logs( 0, auth.user.identifier, auth.user.nome + '(' + auth.user.cpf + ')' + ' alterou a ordem dos banners', 'banner', 0, datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")).insert() return json_response(message='Ordem atualizada!', data=[]) else: return json_response( message='Você não tem permissão para realizar esta ação', data=[]), 403
def admin_imagem_ordem(identifier: int): noticia = Noticia() noticia.select(identifier) auth = Auth() if noticia.identifier > 0: if Auth().is_allowed('edita.noticia', noticia): ordem = request.form['ordem'] lista = ordem.split(',') imagem = ImagemNoticia() count = 0 for item in lista: imagem.select(item) imagem.ordem = count imagem.update() count = count + 1 Logs(0, auth.user.identifier, auth.user.nome + '(' + auth.user.cpf + ')' + ' alterou a ordem das imagens da notícia' + noticia.titulo + ' [Cód. ' + noticia.identifier.__str__() + ']', 'noticia', noticia.identifier, datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")).insert() return json_response(message='Ordem atualizada!', data=[]) else: return json_response(message='Você não tem permissão para realizar esta ação', data=[]), 403 else: return json_response(message='Notícia não encontrado', data=[]), 404