!C99Shell v. 2.0 [PHP 7 Update] [25.02.2019]!

Software: Apache/2.4.18 (Ubuntu). PHP/7.0.33-0ubuntu0.16.04.16 

uname -a: Linux digifus 3.13.0-57-generic #95-Ubuntu SMP Fri Jun 19 09:28:15 UTC 2015 x86_64 

uid=33(www-data) gid=33(www-data) groups=33(www-data) 

Safe-mode: OFF (not secure)

/var/www/gregoryteam_api/flask_restful/   drwxr-xr-x
Free 10.24 GB of 29.4 GB (34.83%)
Home    Back    Forward    UPDIR    Refresh    Search    Buffer    Encoder    Tools    Proc.    FTP brute    Sec.    SQL    PHP-code    Update    Feedback    Self remove    Logout    


Viewing file:     api.py (34.87 KB)      -rw-r--r--
Select action/file-type:
(+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
from flask import Flask, request
from requests import put, get
from flask_restful import reqparse,Resource, Api
from flaskext.mysql import MySQL
from flask_cors import CORS
from flask import jsonify
from flask import send_file,send_from_directory
from json import loads
from PIL import Image
from functools import update_wrapper
from datetime import timedelta
from io import BytesIO
import base64
from werkzeug.datastructures import FileStorage
import sys
import os,time
import werkzeug
from os import walk
import pickle
import json
import datetime
import unicodedata
import socket
from email.MIMEMultipart import MIMEMultipart
import email.utils
from email.mime.text import MIMEText
import smtplib
from flask_mail import Mail
from flask_mail import Message
from smtplib import SMTPException
reload(sys)
sys.setdefaultencoding("utf-8")

#UPLOAD_FOLDER = 'C:/Bitnami/wampstack-5.4.31-0/apache2/htdocs/imagenesGregoryteam/assets/galeria/'
#FOLDER_INICIO = 'C:/Bitnami/wampstack-5.4.31-0/apache2/htdocs/imagenesGregoryteam/assets/fotos_inicio/'
#FOLDER_CONFIG= 'C:/Bitnami/wampstack-5.4.31-0/apache2/htdocs/imagenesGregoryteam/assets/fotos_aplicacion/'
#PUBLICIDAD_FOLDER= 'C:/Bitnami/wampstack-5.4.31-0/apache2/htdocs/imagenesGregoryteam/assets/publicidad/'
#FOLDER_NOTICIAS= 'C:/Bitnami/wampstack-5.4.31-0/apache2/htdocs/imagenesGregoryteam/assets/fotos_aplicacion/noticias/'
PUBLICIDAD_FOLDER= '/var/www/html/imagenesGregoryteam/assets/publicidad/'
UPLOAD_FOLDER = '/var/www/html/imagenesGregoryteam/assets/galeria/'
FOLDER_INICIO = '/var/www/html/imagenesGregoryteam/assets/fotos_inicio/'
FOLDER_CONFIG= '/var/www/html/imagenesGregoryteam/assets/fotos_aplicacion/'
FOLDER_NOTICIAS='/var/www/html/imagenesGregoryteam/assets/fotos_aplicacion/noticias/'
ALLOWED_EXTENSIONS = set(['txt', 'pdf', 'png', 'jpg', 'jpeg', 'gif'])

mysql = MySQL()
app = Flask(__name__)
#configuration flask to Mail
app.config['MAIL_SERVER'] = 'smtp.gmail.com'
app.config['MAIL_PORT'] = 465
app.config['MAIL_USERNAME'] = 'gregoryteamsuport@gmail.com'
app.config['MAIL_PASSWORD'] = 'gregoryteam99'
app.config['MAIL_USE_TLS'] = False
app.config['MAIL_USE_SSL'] = True
app.config['MAIL_DEFAULT_SENDER'] =  'gregoryteamsuport@gmail.com'

mail = Mail(app)

# MySQL configurations
#app.config['MYSQL_DATABASE_USER'] = 'root'
#app.config['MYSQL_DATABASE_PASSWORD'] = '123456'
# config server
app.config['MYSQL_DATABASE_USER'] = 'db_user'
app.config['MYSQL_DATABASE_PASSWORD'] = 'pacman'

app.config['MYSQL_DATABASE_DB'] = 'gregoryteam'
app.config['MYSQL_DATABASE_HOST'] = 'localhost'
app.config['BUNDLE_ERRORS'] = True
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
app.config['FOLDER_INICIO'] = FOLDER_INICIO
app.config['FOLDER_CONFIG'] = FOLDER_CONFIG
app.config['FOLDER_NOTICIAS'] = FOLDER_NOTICIAS
app.config['FOLDER_PUBLICIDAD'] = PUBLICIDAD_FOLDER
mysql.init_app(app)

cors = CORS(app, resources={r"*": {"origins": "*"}})

api = Api(app)

class ReporteAlumnoResource(Resource):
    def get(self):
        try: 
            conn = mysql.connect()
            cursor = conn.cursor()
            cursor.execute("select   YEAR(fecha_registracion), MONTH(fecha_registracion),count(*) from clientes GROUP BY  1,2")
            data = cursor.fetchall()

            items_list=[];
            for item in data:
                i = {
                    'anio':item[0],
                    'mes':item[1],
                    'cantidad':item[2]
                }
                items_list.append(i)

            return {'StatusCode':'200','alumnos':items_list}

        except Exception as e:
            return {'error': str(e)}
class ClienteResource(Resource):
    def get(self):
        try: 
            conn = mysql.connect()
            cursor = conn.cursor()
            cursor.execute("SELECT id_cliente,nombre,localidad,telefono,mail,mensaje,fecha_registracion from clientes order by 7 desc ")
            data = cursor.fetchall()

            items_list=[];
            for item in data:
                i = {
                    'numero':item[0],
                    'nombre':item[1],
                    'localidad':item[2],
                    'telefono':item[3],
                    'mail':item[4],
                    'mensaje':item[5],
                    'fecha':datetime.datetime.strptime(str(item[6]), '%Y-%m-%d %H:%M:%S').strftime('%d/%m/%y'),
                }
                items_list.append(i)

            return {'StatusCode':'200','Clientes':items_list}

        except Exception as e:
            return {'error': str(e)}
    def post(self):
        args = request.get_json(force=True)
        #post modificado con gaby anda bastante bien pero copiar el metodo de post desde el angular
        conn = mysql.connect()
        cursor = conn.cursor()
        insert_query = \
                "INSERT INTO clientes(nombre, localidad, telefono, mail, mensaje) VALUES('%s', '%s', '%s', '%s', '%s')" \
        % ( args['nombre'], args['zona'], args['telefono'], args['mail'],
        args['mensaje'])  
        cursor.execute(insert_query)
        data = cursor.fetchall()
        """route to test email by flask mail."""
        msj = "Nueva alta de usuarios"
        recipients =  ["gregoryteam1@gmail.com"]
        msg_object = Message("NUEVO USUARIO CREADO EN EL SISTEMA GREGORYTEAM", recipients)
        msg_object.html = "<b>NOMBRE:</b> &nbsp;"+ args['nombre']+ " <br> <b>TELEFONO:</b>&nbsp; "+args['telefono'] + "<br> <b>CORREO:</b> &nbsp;" +args['mail'] + "<br> <b>MENSAJE:</b>&nbsp;" + args['mensaje']
  
        #try:
            #mail.send(msg_object)
        #except SMTPException, e:
            #print e
            #pass
        if len(data) is 0:
           conn.commit()
           return {'StatusCode':'200','Message': 'User creation success'}
        else:
           return {'StatusCode':'1000','Message': str(data[0])}
    def put(self):
        data = request.get_json()
        conn = mysql.connect()
        cursor = conn.cursor()
        insert_query = \
                "UPDATE clientes SET nombre='%s', localidad='%s', telefono='%s', mail='%s', mensaje='%s' WHERE id_cliente='%s' " \
        % (data['nombre'], data['zona'], data['telefono'], data['mail'],data['mensaje'],data['numero'])  
        cursor.execute(insert_query)
        data = cursor.fetchall()    
        if len(data) is 0:
           conn.commit()
           return {'StatusCode':'200','Message': 'MODIFICACION EXITOSA'}
        else:
           return {'StatusCode':'1000','Message': str(data[0])}
    def delete(self):
        parser = reqparse.RequestParser()
        parser.add_argument('numero',type=str)
        args = parser.parse_args()
        conn = mysql.connect()
        cursor = conn.cursor()
        insert_query = \
                "DELETE FROM clientes WHERE id_cliente='%s' " \
        % (args['numero'])  
        cursor.execute(insert_query)
        data = cursor.fetchall()    
        if len(data) is 0:
           conn.commit()
           return {'StatusCode':'200','Message': 'BORRADO EXITOSO'}
        else:
           return {'StatusCode':'1000','Message': str(data[0])}
    def options(self):
        print(self);
        return {'Allow' : 'PUT' }, 200, \
        { 'Access-Control-Allow-Origin': '*', \
          'Access-Control-Allow-Methods' : 'PUT,GET,POST' }
                     
class NoticiasResource(Resource):
    def get(self):
        try: 
            conn = mysql.connect()
            cursor = conn.cursor()
            cursor.execute("SELECT a.id_noticias, a.noticia, a.titulo, b.categoria, a.fecha, a.foto,a.fotos2, a.fotos3, a.link from noticias a left join categorias_deportes b on b.id_categoria=a.id_categoria order by a.fecha desc;")
            data = cursor.fetchall()
            items_list=[];

            for item in data:
                i = {
                    'id_noticias':item[0],
                    'noticia':item[1],
                    'titulo':item[2],
                    'categoria':item[3],
                    'fecha':str(item[4]),
                    'foto1': str(item[5]),
                    'foto2': str(item[6]),
                    'foto3': str(item[7]),
                    'encuesta': str(item[8])
                }
                items_list.append(i)

            return jsonify({'StatusCode':'200','Noticias':items_list})

        except Exception as e:
            return {'error': str(e)}
    def post(self):
        parser = reqparse.RequestParser(bundle_errors=True)
        parser.add_argument('noticia', type=str, location='args')
        parser.add_argument('titulo', type=str, location='args')
        parser.add_argument('categoria', type=str, location='args')
        parser.add_argument('encuesta', type=str, location='args')
        parser.add_argument('foto', type=str, location='args')
        parser.add_argument('foto2', type=str, location='args')
        parser.add_argument('foto3', type=str, location='args')
        args = parser.parse_args()
        conn = mysql.connect()
        cursor = conn.cursor()
        insert_query = \
                "INSERT INTO noticias(noticia,titulo,id_categoria,foto,fotos2,fotos3,link) VALUES('%s', '%s', '%s','%s', '%s', '%s','%s')" \
        % (args['noticia'], args['titulo'], args['categoria'],args['foto'], args['foto2'], args['foto3'],args['encuesta'])  
        cursor.execute(insert_query)
        data = cursor.fetchall()    
        if len(data) is 0:
           conn.commit()
           return {'StatusCode':'200','Message': 'Publicidad creada'}
        else:
           return {'StatusCode':'1000','Message': str(data[0])}
    def put(self):
            data = request.get_json()
            conn = mysql.connect()
            cursor = conn.cursor()
            insert_query = \
                    "UPDATE noticias SET noticia='%s', titulo='%s', id_categoria='%s', fecha='%s', foto='%s' ,fotos2='%s' ,fotos3='%s' ,link='%s' WHERE id_noticias='%s' " \
            % (data['noticia'], data['titulo'], data['categoria'], data['fecha'],data['foto'],data['foto2'],data['foto3'],data['encuesta'],data['numero'])  
            cursor.execute(insert_query)
            
            data = cursor.fetchall() 
            
            if len(data) is 0:
               conn.commit()
               return {'StatusCode':'200','Message': 'MODIFICACION EXITOSA'}
            else:
               return {'StatusCode':'1000','Message': str(data[0])}
    def delete(self):
        parser = reqparse.RequestParser()
        parser.add_argument('numero',type=str)
        parser.add_argument('path')
        parser.add_argument('foto') 
        parser.add_argument('foto2')
        parser.add_argument('foto3') 
        args = parser.parse_args()
        conn = mysql.connect()
        cursor = conn.cursor()
        try:
            if (args['foto'] != 'None') and (args['foto'] != '') and (args['foto'] is not None):
                os.remove(args['path'] + args['foto'])
            if args['foto2'] != 'None' and (args['foto2'] != '') and (args['foto2'] is not None):
                os.remove(args['path'] + args['foto2'])
            if args['foto3']  != 'None' and (args['foto3'] != '') and (args['foto3'] is not None):
                os.remove(args['path'] + args['foto3'])
        except Exception as e:
            print {'error': str(e)}
        insert_query = \
                "DELETE FROM noticias WHERE id_noticias='%s' " \
        % (args['numero'])  
        cursor.execute(insert_query)
        data = cursor.fetchall()    
        if len(data) is 0:
           conn.commit()
           return {'StatusCode':'200','Message': 'BORRADO EXITOSO'}
        else:
           return {'StatusCode':'1000','Message': str(data[0])}
    def options(self):
        print(self);
        return {'Allow' : 'PUT' }, 200, \
        { 'Access-Control-Allow-Origin': '*', \
          'Access-Control-Allow-Methods' : 'PUT,GET,POST' }
            
class EnviarMails(Resource):
    def get(self):
            s = smtplib.SMTP(host='smtp-mail.outlook.com', port=587)
            s.starttls()
            s.login('airealman@hotmail.com', 'casimasplus9')
            msg = MIMEMultipart()       # create a message
            # add in the actual person name to the message template
            message = "prueba"
            # setup the parameters of the message
            msg['From']='airealman@hotmail.com'
            msg['To']='matidigi99@gmail.com'
            msg['Subject']="This is TEST"
            # add in the message body
            msg.attach(MIMEText(message, 'plain'))
            try:
                s.sendmail('airealman@hotmail.com','matidigi99@gmail.com',msg)
            finally:
                s.quit()

                
class CronogramaDetaill(Resource):
    def get(self):
        try:
            parser = reqparse.RequestParser(bundle_errors=True)
            parser.add_argument('id', type=str, location='args')
            args = parser.parse_args()
            conn = mysql.connect()
            cursor = conn.cursor()
            cursor.execute("select a.id_cronograma, a.participacion, a.evento, a.lugar, b.categoria, a.fecha_evento, a.fecha_subida, a.link from cronogramas a left join categorias_deportes b on b.id_categoria=a.id_categoria where a.id_cronograma= '%s';" \
        % (args['id'].lstrip(":")))
            data = cursor.fetchall()
            items=[];
            for item in data:
                i = {
                    'id_cronograma':str(item[0]),
                    'participacion':str(item[1]),
                    'evento':str(item[2]),
                    'lugar':str(item[3]),
                    'categoria':item[4],
                    'fecha_evento':str(item[5]),
                    'fecha_subida': str(item[6]),
                    'link': str(item[7])
                }
                items.append(i)

            return jsonify({'StatusCode':'200','DetalleCronograma':items})
        except Exception as e:
            return {'error': str(e)}
            
class AlumnoDetaill(Resource):
    def get(self):
        try:
            parser = reqparse.RequestParser(bundle_errors=True)
            parser.add_argument('id', type=str, location='args')
            args = parser.parse_args()
            conn = mysql.connect()
            cursor = conn.cursor()
            cursor.execute("select id_cliente, nombre, localidad, telefono, mail, mensaje, fecha_registrazion from clientes where id_cliente= '%s';" \
        % (args['id'].lstrip(":")))
            data = cursor.fetchall()
            items=[];
            for item in data:
                i = {
                    'id_cliente':str(item[0]),
                    'nombre':str(item[1]),
                    'localidad':str(item[2]),
                    'telefono':item[3],
                    'mail':str(item[4]),
                    'mensaje': str(item[5]),
                    'fecha_registrazion': str(item[6])
                }
                items.append(i)

            return jsonify({'StatusCode':'200','DetalleAlumno':items})
        except Exception as e:
            return {'error': str(e)}
class NoticiaDetaill(Resource):
    def get(self):
        try:
            parser = reqparse.RequestParser(bundle_errors=True)
            parser.add_argument('id', type=str, location='args')
            args = parser.parse_args()
            conn = mysql.connect()
            cursor = conn.cursor()
            cursor.execute("select a.id_noticias,a.noticia, a.titulo, b.categoria, a.fecha, a.foto, a.fotos2, a.fotos3,a.link  from noticias a left join categorias_deportes b on b.id_categoria=a.id_categoria where id_noticias= '%s';" \
        % (args['id'].lstrip(":")))
            data = cursor.fetchall()
            items=[];
            for item in data:
                i = {
                    'id_noticias':str(item[0]),
                    'noticia':str(item[1]),
                    'titulo':str(item[2]),
                    'categoria':item[3],
                    'encuesta': str(item[8]),
                    'fecha':str(item[4]),
                    'foto1': str(item[5]),
                    'foto2': str(item[6]),
                    'foto3': str(item[7]),
                }
                items.append(i)

            return jsonify({'StatusCode':'200','DetalleNoticia':items})
        except Exception as e:
            return {'error': str(e)}
class ImagenesResource(Resource):
    def get(self):
        try:
            images=[]
            for (path, ficheros, archivos) in walk(app.config['UPLOAD_FOLDER']):
                for archivo in archivos:
                    images.append({'foto':str(archivo),'fecha':  "{}".format(datetime.datetime.strptime(time.ctime(os.path.getctime(os.path.join(path,archivo))),"%a %b %d %H:%M:%S %Y"))  })
            return jsonify({'StatusCode':'200','Imagenes':images})
            #send_from_directory(app.config['UPLOAD_FOLDER'],archivo) 
        except Exception as e:
            return {'error': str(e)}

class ImagenesInicioResource(Resource):
    def get(self):
        try:
            images=[]
            for (path, ficheros, archivos) in walk(FOLDER_INICIO):
                for archivo in archivos:
                    images.append({'foto':str(archivo),'fecha':  "{}".format(datetime.datetime.strptime(time.ctime(os.path.getctime(os.path.join(path,archivo))),"%a %b %d %H:%M:%S %Y"))  })
            return jsonify({'StatusCode':'200','Imagenes':images})
            #send_from_directory(app.config['UPLOAD_FOLDER'],archivo) 
        except Exception as e:
            return {'error': str(e)}
class ImagenesConfigResource(Resource):
    def get(self):
        try:
            images=[]
            for (path, ficheros, archivos) in walk(FOLDER_CONFIG):
                for archivo in archivos:
                    images.append({'foto':str(archivo),'fecha':  "{}".format(datetime.datetime.strptime(time.ctime(os.path.getctime(os.path.join(path,archivo))),"%a %b %d %H:%M:%S %Y"))  })
            return jsonify({'StatusCode':'200','Imagenes':images})
            #send_from_directory(app.config['UPLOAD_FOLDER'],archivo) 
        except Exception as e:
            return {'error': str(e)}
class PublicidadResource(Resource):
    def get(self):
        try: 
            conn = mysql.connect()
            cursor = conn.cursor()
            cursor.execute("SELECT foto_sponsors,link from sponsors where estado='ACTIVO'")
            data = cursor.fetchall()
            items_list=[];

            for item in data:
                i = {
                    'foto':item[0],
                    'link':item[1],
                }
                items_list.append(i)

            return jsonify({'StatusCode':'200','Marcas':items_list})

        except Exception as e:
            return {'error': str(e)}
class PublicidadABMResource(Resource):
    def get(self):
        try: 
            conn = mysql.connect()
            cursor = conn.cursor()
            cursor.execute("SELECT id_sponsors,foto_sponsors,link,estado from sponsors")
            data = cursor.fetchall()
            items_list=[];

            for item in data:
                i = {
                    'id_sponsors':item[0],
                    'foto':item[1],
                    'link':item[2],
                    'estado':item[3]
                }
                items_list.append(i)

            return jsonify({'StatusCode':'200','Marcas':items_list})

        except Exception as e:
            return {'error': str(e)}
    def post(self):
        parser = reqparse.RequestParser(bundle_errors=True)
        parser.add_argument('foto_sponsors', type=str, location='args')
        parser.add_argument('estado', type=str, location='args')
        parser.add_argument('link', type=str, location='args')
        args = parser.parse_args()
        conn = mysql.connect()
        cursor = conn.cursor()
        insert_query = \
                "INSERT INTO sponsors(foto_sponsors, estado, link) VALUES('%s', '%s', '%s')" \
        % (args['foto_sponsors'], args['estado'], args['link'])  
        cursor.execute(insert_query)
        data = cursor.fetchall()    
        if len(data) is 0:
           conn.commit()
           return {'StatusCode':'200','Message': 'Publicidad creada'}
        else:
           return {'StatusCode':'1000','Message': str(data[0])}
    def put(self):
        data = request.get_json()
        conn = mysql.connect()
        cursor = conn.cursor()

        insert_query = \
                "UPDATE sponsors SET foto_sponsors='%s', estado='%s', link='%s' WHERE id_sponsors='%s' " \
        % (data['foto_sponsors'], data['estado'], data['link'],data['numero'])  
        cursor.execute(insert_query)
        data = cursor.fetchall()    
        if len(data) is 0:
           conn.commit()
           return {'StatusCode':'200','Message': 'MODIFICACION EXITOSA'}
        else:
           return {'StatusCode':'1000','Message': str(data[0])}
    def delete(self):
        parser = reqparse.RequestParser()
        parser.add_argument('numero',type=str)
        parser.add_argument('path')
        parser.add_argument('foto')  
        args = parser.parse_args()
        conn = mysql.connect()
        cursor = conn.cursor()
        try:
            if (args['foto'] != 'None') and (args['foto'] != '') and (args['foto'] is not None):
                os.remove(args['path'] + args['foto'])
        except Exception as e:
            print {'error': str(e)}
        insert_query = \
                "DELETE FROM sponsors WHERE id_sponsors='%s' " \
        % (args['numero'])  
        cursor.execute(insert_query)
        data = cursor.fetchall()    
        if len(data) is 0:
           conn.commit()
           return {'StatusCode':'200','Message': 'BORRADO EXITOSO'}
        else:
           return {'StatusCode':'1000','Message': str(data[0])}
    def options(self):
        print(self);
        return {'Allow' : 'PUT' }, 200, \
        { 'Access-Control-Allow-Origin': '*', \
          'Access-Control-Allow-Methods' : 'PUT,GET,POST' }
class BorrarImagen(Resource):
    def get(self):
        parser = reqparse.RequestParser()
        parser.add_argument('nombre')
        parser.add_argument('path')
        args = parser.parse_args()
        data = request.get_json()
        os.remove(args['path'] + args['nombre'])
        # check if file exists or not
        if os.path.exists(args['path']  + args['nombre']) is False:
            return True    
class UploadImagenes(Resource):
    def  post (self):
        parser = reqparse.RequestParser(bundle_errors=True)
        parser.add_argument('imagen', type=werkzeug.datastructures.FileStorage, location='files')
        args = parser.parse_args()
        file=args['imagen']
        try:
            file.save(os.path.join(app.config['UPLOAD_FOLDER'], file.filename))
            img = Image.open(os.path.join(app.config['UPLOAD_FOLDER'], file.filename))
            img.save(os.path.join(app.config['UPLOAD_FOLDER'], file.filename), quality=30, optimize=True)
            return {'StatusCode':'200','Mensaje':'Archivo guardado'}
        except Exception as e:
            return {'error': str(e)}
    def allowed_file(filename):
      return '.' in filename and \
                filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS
                
    def options (self):
        return {'Allow' : 'PUT' }, 200, \
        { 'Access-Control-Allow-Origin': '*', \
          'Access-Control-Allow-Methods' : 'PUT,GET,POST' }
          
class UploadImagenesInicio(Resource):
    def post(self):
        parser = reqparse.RequestParser(bundle_errors=True)
        parser.add_argument('imagen', type=werkzeug.datastructures.FileStorage, location='files')
        args = parser.parse_args()
        file=args['imagen']
        try:
            file.save(os.path.join(app.config['FOLDER_INICIO'], file.filename))
            img = Image.open(os.path.join(app.config['FOLDER_INICIO'], file.filename))
            #img = img.resize((1800,1024))
            #img.save(os.path.join(app.config['FOLDER_INICIO'], file.filename), "JPEG",  quality=30)
            img.save(os.path.join(app.config['FOLDER_INICIO'], file.filename), quality=30, optimize=True)
            return True
        except Exception as e:
            return {'error': str(e)}

    def allowed_file(filename):
      return '.' in filename and \
                filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS
                
    def options (self):
        return {'Allow' : 'PUT' }, 200, \
        { 'Access-Control-Allow-Origin': '*', \
          'Access-Control-Allow-Methods' : 'PUT,GET,POST' }    

class UploadImagenesConfig(Resource):
    def post(self):
        parser = reqparse.RequestParser(bundle_errors=True)
        parser.add_argument('imagen', type=werkzeug.datastructures.FileStorage, location='files')
        args = parser.parse_args()
        file=args['imagen']
        try:
            file.save(os.path.join(app.config['FOLDER_CONFIG'], file.filename))
            img = Image.open(os.path.join(app.config['FOLDER_CONFIG'], file.filename))
            img.save(os.path.join(app.config['FOLDER_CONFIG'], file.filename), quality=30, optimize=True)
            return True
        except Exception as e:
            return {'error': str(e)}
    def allowed_file(filename):
      return '.' in filename and \
                filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS
                
    def options (self):
        return {'Allow' : 'PUT' }, 200, \
        { 'Access-Control-Allow-Origin': '*', \
          'Access-Control-Allow-Methods' : 'PUT,GET,POST' }    
class UploadImagenesNotiFoto(Resource):
    def post(self):
        parser = reqparse.RequestParser(bundle_errors=True)
        parser.add_argument('imagen', type=werkzeug.datastructures.FileStorage, location='files')
        args = parser.parse_args()
        file=args['imagen']
        try:
            file.save(os.path.join(app.config['FOLDER_NOTICIAS'], file.filename))
            img = Image.open(os.path.join(app.config['FOLDER_NOTICIAS'], file.filename))
            img.save(os.path.join(app.config['FOLDER_NOTICIAS'], file.filename), quality=30, optimize=True)
            return {'StatusCode':'200','Mensaje':'Archivo guardado'}
        except Exception as e:
            return {'error': str(e)}
    def allowed_file(filename):
      return '.' in filename and \
                filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS
                
    def options (self):
        return {'Allow' : 'PUT' }, 200, \
        { 'Access-Control-Allow-Origin': '*', \
          'Access-Control-Allow-Methods' : 'PUT,GET,POST' }
          
class UploadImagenesPublicidadFoto(Resource):
    def post(self):
        parser = reqparse.RequestParser(bundle_errors=True)
        parser.add_argument('imagen', type=werkzeug.datastructures.FileStorage, location='files')
        args = parser.parse_args()
        file=args['imagen']
        try:
            file.save(os.path.join(app.config['FOLDER_PUBLICIDAD'], file.filename))
            img = Image.open(os.path.join(app.config['FOLDER_PUBLICIDAD'], file.filename))
            img.save(os.path.join(app.config['FOLDER_PUBLICIDAD'], file.filename), quality=30, optimize=True)
            return {'StatusCode':'200','Mensaje':'Archivo guardado'}
        except Exception as e:
            return {'error': str(e)}
    def allowed_file(filename):
      return '.' in filename and \
                filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS
                
    def options (self):
        return {'Allow' : 'PUT' }, 200, \
        { 'Access-Control-Allow-Origin': '*', \
          'Access-Control-Allow-Methods' : 'PUT,GET,POST' }
          
class CronogramaResource(Resource):
    def get(self):
        try: 
            conn = mysql.connect()
            cursor = conn.cursor()
            cursor.execute("SELECT a.id_cronograma, a.participacion, a.evento, a.lugar, b.categoria, a.fecha_evento, a.fecha_subida, a.link from cronogramas a left join categorias_deportes b on b.id_categoria=a.id_categoria order by 6 asc;")
            data = cursor.fetchall()
            items_list=[];
            for item in data:
                i = {
                    'id_cronograma':item[0],
                    'participacion':item[1], 
                    'evento':item[2],
                    'lugar':item[3],
                    'categoria':item[4], 
                    'fecha_evento':str(item[5]),
                    'fecha_subida':str(item[6]), 
                    'link':str(item[7]),     
                    }
                items_list.append(i)
            return {'StatusCode':'200','Cronograma':items_list}
        except Exception as e:
            return {'error': str(e)}
    def post(self):
        args = request.get_json(force=True)
        conn = mysql.connect()
        cursor = conn.cursor()
        insert_query = \
                "INSERT INTO cronogramas(evento, participacion, lugar, id_categoria, fecha_evento , link ) VALUES('%s', '%s', '%s', '%s', '%s', '%s')" \
        % (args['evento'], args['participacion'], args['lugar'], args['categoria'],
        args['fecha_evento'],args['link'])  
        cursor.execute(insert_query)
        data = cursor.fetchall()    
        if len(data) is 0:
           conn.commit()
           return {'StatusCode':'200','Message': 'Cronograma creado'}
        else:
           return {'StatusCode':'1000','Message': str(data[0])}
    def put(self):
        data = request.get_json()
        conn = mysql.connect()
        cursor = conn.cursor()
        insert_query = \
                "UPDATE cronogramas SET participacion='%s', evento='%s', lugar='%s', id_categoria='%s', fecha_evento='%s' ,link='%s' WHERE id_cronograma='%s' " \
        % (data['participacion'], data['evento'], data['lugar'], data['categoria'],data['fecha_evento'],data['link'],data['numero'])  
        cursor.execute(insert_query)
        data = cursor.fetchall()    
        if len(data) is 0:
           conn.commit()
           return {'StatusCode':'200','Message': 'MODIFICACION EXITOSA'}
        else:
           return {'StatusCode':'1000','Message': str(data[0])}
    def delete(self):
        parser = reqparse.RequestParser()
        parser.add_argument('numero',type=str)
        args = parser.parse_args()
        conn = mysql.connect()
        cursor = conn.cursor()
        insert_query = \
                "DELETE FROM cronogramas WHERE id_cronograma='%s' " \
        % (args['numero'])  
        cursor.execute(insert_query)
        data = cursor.fetchall()    
        if len(data) is 0:
           conn.commit()
           return {'StatusCode':'200','Message': 'BORRADO EXITOSO'}
        else:
           return {'StatusCode':'1000','Message': str(data[0])}
    def options(self):
        print(self);
        return {'Allow' : 'PUT' }, 200, \
        { 'Access-Control-Allow-Origin': '*', \
          'Access-Control-Allow-Methods' : 'PUT,GET,POST' }

class CategoriasResource(Resource):
    def get(self):
        try: 
            conn = mysql.connect()
            cursor = conn.cursor()
            cursor.execute("SELECT id_categoria,categoria from categorias_deportes")
            data = cursor.fetchall()

            items_list=[];
            for item in data:
                i = {
                    'id_categoria':item[0],
                    'categoria':item[1],
                }
                items_list.append(i)

            return {'StatusCode':'200','Categorias':items_list}

        except Exception as e:
            return {'error': str(e)}            
class UsuariosResource(Resource):
    def get(self):
        try: 
            conn = mysql.connect()
            cursor = conn.cursor()
            cursor.execute("SELECT username from tbl_usrs")
            data = cursor.fetchall()

            items_list=[];
            for item in data:
                i = {
                    'username':item[0],
                }
                items_list.append(i)

            return {'StatusCode':'200','Usuarios':items_list}

        except Exception as e:
            return {'error': str(e)}
class StaffResource(Resource):
    def get(self):
        try: 
            conn = mysql.connect()
            cursor = conn.cursor()
            cursor.execute("SELECT nombre,foto from profesores")
            data = cursor.fetchall()
            cursor.execute("select a.nombre,c.medalla  from profesores a left join medallas c on c.id_profesor=a.id_profesor  order by c.fecha asc ")
            dataMedalla = cursor.fetchall()
            cursor.execute("select a.nombre,b.caracteristica from profesores a left join caracteristicas b on b.id_profesor=a.id_profesor  order by a.nombre,b.ordenamiento asc")
            dataCaracteristicas = cursor.fetchall()
            items_list=[];
            medalla_list=[];
            caracteristicas_list=[];
            for item in data:
                medalla_list=[];
                caracteristicas_list=[];
                for item_medalla in dataMedalla:
                    if item_medalla[0] == item[0]:
                      j = {'medalla': self.elimina_tildes(item_medalla[1])}
                      medalla_list.append(j)
                for item_caracteristicas in dataCaracteristicas:
                    if item_caracteristicas[0]==item[0]:
                      m = {'caracteristica':self.elimina_tildes(item_caracteristicas[1])}
                      caracteristicas_list.append(m)  
                i = {
                    'profesor':item[0],
                    'foto':item[1],
                    'Medallas':medalla_list,
                    'Caracteristicas':caracteristicas_list
                }
                items_list.append(i)
 
            return {'StatusCode':'200','Staff':items_list}

        except Exception as e:
            return {'error': str(e)}
    def elimina_tildes(self,s):
         return ''.join((c for c in unicodedata.normalize('NFD', s) if unicodedata.category(c) != 'Mn'))

class UsuarioPagina(Resource):
    def post(self):
        parser = reqparse.RequestParser(bundle_errors=True)
        parser.add_argument('latitud', type=float, location='args')
        parser.add_argument('longitud', type=float, location='args')
        args = parser.parse_args()
        conn = mysql.connect()
        cursor = conn.cursor()
        insert_query = \
                "INSERT INTO localizacion(latitud, longitud) VALUES('%f', '%f')" \
        % (args['latitud'], args['longitud'])  
        cursor.execute(insert_query)
        data = cursor.fetchall()    
        if len(data) is 0:
           conn.commit()
           return {'StatusCode':'200','Message': 'usuario registrado'}
        else:
           return {'StatusCode':'1000','Message': str(data[0])}

class Directorio(Resource):
    def get(self):
        try:
           PATH_DIRECTORIO = 'C:/Users/matias/Desktop/horacio/fotos actuales_original/assets/galeria/'
           PATH_DIRECTORIO_SALIDA = 'C:/Users/matias/Desktop/horacio/fotos nuevas reducidas/galeria/'
           dirs = os.listdir( PATH_DIRECTORIO )
           for item in dirs:
              if os.path.isfile(PATH_DIRECTORIO+item):
               img = Image.open(PATH_DIRECTORIO+item)
               img.save(os.path.join(PATH_DIRECTORIO_SALIDA+item), quality=30, optimize=True)
           return {'StatusCode':'200','Message':'archivos copiados'}
        except Exception as e:
            return {'error': str(e)}
class index(Resource):
    def get(self):
    return {'hello': 'world'}
    def options(self):
        print('entra');
        return {'Allow' : 'PUT' }, 200, \
        { 'Access-Control-Allow-Origin': '*', \
          'Access-Control-Allow-Methods' : 'PUT,GET,POST' }
          
api.add_resource(index, '/')
api.add_resource(ClienteResource, '/cliente')
api.add_resource(UsuariosResource, '/usuarios')
api.add_resource(NoticiaDetaill, '/detaill_new')
api.add_resource(CronogramaDetaill, '/detaill_cronograma')
api.add_resource(AlumnoDetaill, '/detaill_alumno')
api.add_resource(EnviarMails, '/mandarMail')
api.add_resource(CronogramaResource, '/cronograma')
api.add_resource(StaffResource, '/staff')
api.add_resource(NoticiasResource, '/noticias')
api.add_resource(ImagenesResource, '/imagenes')
api.add_resource(PublicidadResource, '/publicidad')
api.add_resource(UploadImagenes, '/upload_file')
api.add_resource(UploadImagenesInicio, '/upload_file_inicio')
api.add_resource(UploadImagenesConfig, '/upload_file_config')
api.add_resource(UploadImagenesNotiFoto, '/upload_noticia_foto')
api.add_resource(UploadImagenesPublicidadFoto, '/upload_publicidad_foto')
api.add_resource(BorrarImagen, '/borrarImagen')
api.add_resource(UsuarioPagina, '/userGeopos')
api.add_resource(CategoriasResource, '/categorias')
api.add_resource(ImagenesConfigResource, '/imagenesConfig')
api.add_resource(ImagenesInicioResource, '/imagenesInicio')
api.add_resource(PublicidadABMResource, '/publi_abm')
api.add_resource(ReporteAlumnoResource, '/repoAlumnos')
api.add_resource(Directorio,'/directorio')
if __name__ == '__main__':
    import sys
    sys.path.insert(0,'/var/www/html/imagenesGregoryteam/')
    app.run(debug=True)

:: Command execute ::

Enter:
 
Select:
 

:: Search ::
  - regexp 

:: Upload ::
 
[ Read-Only ]

:: Make Dir ::
 
[ Read-Only ]
:: Make File ::
 
[ Read-Only ]

:: Go Dir ::
 
:: Go File ::
 

--[ c99shell v. 2.0 [PHP 7 Update] [25.02.2019] maintained by KaizenLouie | C99Shell Github | Generation time: 0.0073 ]--