Пример #1
0
def user(username):
    user = User.query.filter_by(username=username).first_or_404()
    posts = [{
        'author': user,
        'body': 'Test post #1'
    }, {
        'author': user,
        'body': 'Test post #2'
    }]
    if request.method == 'POST':
        FileNotFound = None
        try:
            file = request.files['file']
            filename = secure_filename(file.filename)
            path_images = os.getcwd() + r'\tmp'
            file.save(os.path.join(path_images, filename))
            _resize(path_img=path_images + f'\\{filename}',
                    size=200,
                    user_id=user.id,
                    pics_before=User.count_pics(user_id=user.id))
            print(user.id)
            FileNotFound = False
        except FileNotFoundError:
            FileNotFound = True
        finally:
            request.close()
            return render_template('user.html',
                                   user=user,
                                   posts=posts,
                                   Error_FileNotFoundError=FileNotFound)
    return render_template('user.html', user=user, posts=posts)
Пример #2
0
    def put(self, id):
        try:
            user = Users.query.get(id)
            if request.json.get('name'):
                user.name = request.json.get('name')
            if request.json.get('email') and Users.isMail(
                    request.json.get('email')):
                user.email = request.json.get('email')
            if request.json.get('password'):
                user.password = Users.setPassword(request.json.get('password'))
            db.session.add(user)
            db.session.commit()
            db.session.remove()

            userschema = UserSchema(only=['id', 'name', 'email', 'password'])

            get_users = Users.query.filter(Users.status == 1).order_by(
                Users.id.desc()).all()
            users_schema = UserSchema(many=True)
            users = users_schema.dump(get_users)

            db.session.remove()
            request.close()

            return {'response': 'Registro Actualizado', 'users': users}, 200

        except:

            request.close()
            return {'response': ' El registro no existe'}, 400
Пример #3
0
    def post(self):

        code = request.json.get('code')
        password = request.json.get('password')

        if code and password:
            user = Users.query.filter(Users.code == code).first()
            if not user:
                return {'error': 'El código es inválido'}, 401

            if (user.status == 0):
                return {
                    'error':
                    'El usuario ha sido dado de baja por el administrador'
                }, 401

            user.code = ''
            user.password = Users.setPassword(password)
            db.session.add(user)
            db.session.commit()
            db.session.remove()

            request.close()
            return {
                'response': 'Su contraseña ha sido cambiada con éxito'
            }, 200

        else:
            request.close()
            return {'response': 'Faltan datos'}, 401
Пример #4
0
 def get(self):
        # import gc
    # try: 
        
        name_img, id_img, hayImage = getImg()
        if hayImage:
            from tracking.neural_network import comenzar_auditoria
            name=comenzar_auditoria([name_img])
            # name_img, id_img = getImg()


            
            print('id_img.......................',id_img)
            # name = comenzar_auditoria([name_img])
            updateImg(id_img)


            #     request.close()
            gc.collect()
            request.close()
        

            return 'auditoria finalizada'
        else:
            return 'No hay imagen'
Пример #5
0
 def get(self,id):

    get_audit = Audits.query.filter(Audits.user_id == id).order_by(Audits.id.desc()).all()
    audit_schema =AuditSchema(many=True)
    audit = audit_schema.dump(get_audit)
    db.session.remove()
    request.close()
    return make_response(jsonify(audit))
Пример #6
0
 def get(self):
     get_users = Users.query.filter(Users.status == 1).order_by(
         Users.id.desc()).all()
     users_schema = UserSchema(many=True)
     users = users_schema.dump(get_users)
     db.session.remove()
     request.close()
     return make_response(jsonify(users))
Пример #7
0
 def get(self, id):
     try:
         user = Users.query.get(id)
         db.session.remove()
         request.close()
         return {'user': user}
     except:
         request.close()
         return {'response': ' El registro no existe'}
Пример #8
0
 def get(self, search):
     get_users = Users.query.filter(
         Users.status == 1).filter((Users.name.ilike(f'%{search}%')) | (
             Users.email.ilike(f'%{search}%'))).order_by(
                 Users.id.desc()).all()
     users_schema = UserSchema(many=True)
     users = users_schema.dump(get_users)
     db.session.remove()
     request.close()
     return make_response(jsonify(users))
Пример #9
0
    def signup(self):
        password = request.form.get('password')
        password_confirm = request.form.get('password-confirm')

        if password == password_confirm:
            if len(password) < 4:
                return jsonify(
                    {"error":
                     "Password must be greater than four characters"}), 400
            user = {
                "_id":
                uuid.uuid4().hex,
                "username":
                request.form.get('username'),
                "email":
                request.form.get('email'),
                "password":
                password,
                "profile_pic":
                'profile.png',
                "twitter-consumer_key":
                os.getenv('twitter-consumer_key'),
                "twitter-consumer_secret":
                os.getenv('twitter-consumer_secret'),
                "twitter-access_token_key":
                os.getenv('twitter-access_token_key'),
                "twitter-access_token_secret":
                os.getenv('twitter-access_token_secret'),
                "ig-username":
                os.getenv('ig-username'),
                "ig-password":
                os.getenv('ig-password')
            }

            user['password'] = pbkdf2_sha256.encrypt(user['password'])
            request.close()
            if db.users.find_one({"email": user['email']}):
                return jsonify({
                    "error":
                    "Email address is already in use, please sign in"
                }), 400
            elif db.users.find_one({"username": user['username']}):
                return jsonify({
                    "error":
                    "Username is already in use, please choose another"
                }), 400

            if db.users.insert_one(user):
                return self.start_session(user)

        elif password != password_confirm:
            return jsonify(
                {"error": "Passwords do not match, please try again"}), 400
        else:
            return jsonify({"error": "Signup failed"}), 400
Пример #10
0
def processjson():
    body = request.get_json()
    jsonContent = body["jsonContent"]
    className = request.args.get('className')
    generateTest = request.args.get('generateTest')
    auraEnabled = request.args.get('auraEnabled')
    parseMethod = request.args.get('parseMethod')
    convertedContent = json2apex(className, generateTest, jsonContent,
                                 auraEnabled, parseMethod)
    return convertedContent
    request.close()
Пример #11
0
def after_request_func(response):
    """ 
    This function will run after a request, as long as no exceptions occur.
    It must take and return the same parameter - an instance of response_class.
    This is a good place to do some application cleanup.
    """

    t = math.floor(time.time())
    if t % 5 == 0:
        request.close()
        print("close", file=sys.stderr)
    return response
Пример #12
0
    def get(self):

        user = Users.query.get(2)
        db.session.remove()
        request.close()

        code = '111111'

        return send_email('Recuperar Acceso',
                          sender='*****@*****.**',
                          recipients=['*****@*****.**'],
                          text_body=render_template('reset_password.txt',
                                                    code=code),
                          html_body=render_template('reset_password.html',
                                                    code=code))
Пример #13
0
def deployModelData():

    global deploy_storage;

    result = helpers.deployModel(request.files);
    request.close();
    result_json = json.dumps(result);

    model_deploy_id = result["model_deploy_id"];

    deploy_storage.deployCell(model_deploy_id);

    deploy_logger.writeDown("A model deployed: \n {}".format(result_json));

    return result_json;
Пример #14
0
 def refresh_image(self):
     if self.last_refresh_attempt + self.refresh_interval > datetime.datetime.now(
     ):
         print "+++ImageUpdater+++: Skipping this update"
         # Return right away if we need to wait longer
         return
     self.last_refresh_attempt = datetime.datetime.now()
     attempt_num = 0
     max_attempts = 3
     success = False
     while attempt_num < max_attempts and success == False:
         attempt_num += 1
         try:
             # Grab the latest frame from the camera
             print "+++ImageUpdater+++: Opening request"
             request = urllib2.urlopen(self.camera_server + "/photo.jpg",
                                       timeout=3)
             print "+++ImageUpdater+++: Reading request"
             data = request.read()
             print "+++ImageUpdater+++: Encoding  request"
             encoded_str = base64.b64encode(data)
             print "+++ImageUpdater+++: Closing request"
             request.close()
             success = True
         except OSError as e:
             print "+++ImageUpdater+++: Image read attempt {} failed: ".format(
                 attempt_num) + str(e)
         except Exception as e:
             print "+++ImageUpdater+++: Image read attempt {} failed: ".format(
                 attempt_num) + str(e)
     if not success:
         print "+++ImageUpdater+++: Failed to read new image"
     else:
         try:
             # Upload the image to the cloud
             print "+++ImageUpdater+++: Uploading request"
             upload_result = upload("data:image/jpg;base64," + encoded_str)
             print "+++ImageUpdater+++: upload returned"
             if upload_result:
                 # If the upload was successful, save the result in last_image_url
                 self.last_image_url = upload_result['url']
                 self.last_update_time = datetime.datetime.now().strftime(
                     '%H:%M:%S')
         except Exception as e:
             print "+++ImageUpdater+++: Failed to upload image to cloud: " + str(
                 e)
             success = False
     return success
Пример #15
0
def URL_CHECKER(url):
    try:
        request = requests.get(url)
        time.sleep(5)
        if request.status_code == 200:
            print('Web site exists')
            request.close()
            return True
        else:
            print('Web site does not exist')
            request.close()
            return False
    except Exception as e:
        print(e)
        print("Error here")
        return False
Пример #16
0
def upload():
    file = request.files['inputFile']

    # If no file selected
    if file.filename == '':
        return '<h1>No file selected</h1>'

    # Filetype check
    if file and allowed_file(file.filename):

        # Read in values from CSV:
        csvFile = file.read().decode().split('\n')
        reader = csv.DictReader(csvFile, delimiter=',')

        fields = ('first', 'last', 'position', 'email', 'location',
                  'ringCentral', 'workPhone', 'mobilePhone')

        for row in reader:

            # Find empty fields in CSV:
            for val in fields:
                if row[val] is "":
                    row[val] = None

            # Schema Validation:
            try:
                new_employee = employee_schema.load(dict(row))
            except ValidationError as err:
                print(row['first'] + ' ' + row['last'] + '\n' +
                      str(err.messages))
                continue

            #TODO Update database from CSV

            # Add new employee to session:
            db.session.add(new_employee)

        # Commit session to db:
        db.session.commit()

        request.close()

        return '<h1>CSV Successfully Parsed</h1>'

    # Invalid filetype
    else:
        return '<h1>Invalid filetype</h1>'
Пример #17
0
    def post(self):

        email = request.json.get('email')

        if email:
            user = Users.query.filter(Users.email == email).first()

            if not user:
                return {
                    'error': 'El correo electrónico no se encuentra registrado'
                }, 401

            if (user.status == 0):
                return {
                    'error':
                    'El usuario ha sido dado de baja por el administrador'
                }, 401

            code = uuid.uuid4().hex[:4]
            user.code = code

            send_email('Recuperar Acceso',
                       sender='*****@*****.**',
                       recipients=[user.email],
                       text_body=render_template('reset_password.txt',
                                                 code=code),
                       html_body=render_template('reset_password.html',
                                                 code=code))

            db.session.add(user)
            db.session.commit()
            db.session.remove()

            request.close()
            return {
                'response':
                'Se ha enviado un código de verificación a su correo electrónico, si no te aparece en tu bandeja de entrada por favor revisá los correos no deseados'
            }, 200

        else:

            request.close()
            return {'response': 'Faltan datos'}, 401
Пример #18
0
 def delete(self,id):
    try: 

        images = Audits.query.get(id)
        user_id =  images.user_id
        db.session.delete(images)
        db.session.commit()

        get_audit = Audits.query.filter(Audits.user_id == user_id).order_by(Audits.id.desc()).all()
        audit_schema =AuditSchema(many=True)
        audit = audit_schema.dump(get_audit)
        
        db.session.remove()
        request.close()

        return {'response': 'Registro Eliminado','images':audit},200

    except:

        request.close()
        return {'response':' El registro no existe'},401
Пример #19
0
    def post(self):

        try:
            user_id = get_jwt_identity()
            try:
                user = Users.query.get(user_id)
                if request.json.get('name'):
                    user.name = request.json.get('name')
                if request.json.get('email') and Users.isMail(
                        request.json.get('email')):
                    user.email = request.json.get('email')
                if request.json.get('password'):
                    user.password = Users.setPassword(
                        request.json.get('password'))
                db.session.add(user)
                db.session.commit()
                db.session.remove()
                userschema = UserSchema(
                    only=['id', 'name', 'email', 'password'])
                db.session.remove()
                request.close()
                return {'response': 'Sus datos han sido actualizados'}, 200

            except:
                request.close()
                return {'response': ' El registro no existe'}, 401
        except:
            request.close()
            return {'response': ' El registro no existe'}, 401
Пример #20
0
    def delete(self, id):
        try:

            user = Users.query.get(id)
            user.status = 0
            db.session.add(user)
            db.session.commit()

            get_users = Users.query.filter(Users.status == 1).order_by(
                Users.id.desc()).all()
            users_schema = UserSchema(many=True)
            users = users_schema.dump(get_users)

            db.session.remove()

            request.close()

            return {'response': 'Registro Eliminado', 'users': users}, 200

        except:

            request.close()
            return {'error': ' El registro no existe'}, 401
Пример #21
0
    def post(self):

        email = request.json.get('email')
        password = request.json.get('password')

        if email and password:
            user = Users.query.filter(Users.email == email).first()
            db.session.remove()
            if not user:
                return {
                    'error': 'El correo electrónico no se encuentra registrado'
                }, 401

            if (user.status == 0):
                return {
                    'error':
                    'El usuario ha sido dado de baja por el administrador'
                }, 401

            authorized = user.checkPassword(password)
            db.session.remove()
            if not authorized:
                return {'error': 'La contraseña es invalida'}, 401

            expires = datetime.timedelta(days=30)
            access_token = create_access_token(identity=str(user.id),
                                               expires_delta=expires)

            request.close()

            return {
                'token': access_token,
                'name': user.name,
                'email': user.email,
                'id': user.id,
                'total': user.images
            }, 200

        else:

            request.close()

            return {'response': 'Faltan datos'}, 401

        request.close()

        return {'response': 'Faltan datos'}, 401
Пример #22
0
    def get(self):

        try:
            user_id = get_jwt_identity()
            try:
                user = Users.query.get(user_id)
                data = {
                    'name': user.name,
                    'email': user.email,
                }
                db.session.remove()
                request.close()
                return data, 200
            except:
                request.close()
                return {'response': ' El registro no existe'}, 401
        except:
            request.close()
            return {'response': ' El registro no existe'}, 401
Пример #23
0
    def post(self):
        name = request.json.get('name')
        email = request.json.get('email')
        password = request.json.get('password')

        if name and email and password:
            if Users.isMail(email):
                user = Users.query.filter(Users.email == email).first()
                if user:
                    return {'error': 'El correo electrónico ya existe'}, 401
                data = {
                    'name': name,
                    'email': email,
                    'code': '',
                    'password': Users.setPassword(password),
                    'status': 1,
                    'images': 0
                }
                users_schema = UserSchema()
                user = users_schema.load(data)
                users_schema.dump(user.create())
                db.session.commit()

                get_sampling = Sampling.query.filter(
                    Sampling.status == 0).limit(400).all()
                sampling_schema = SamplingSchema(many=True)
                sampling = sampling_schema.dump(get_sampling)

                for row in sampling:

                    data = {
                        'user_id': user.id,
                        'sampling_id': row['id'],
                        'tag_id': 0,
                        'status': '0'
                    }

                    training_shema = TrainingSchema()
                    training = training_shema.load(data)
                    training_shema.dump(training.create())
                    db.session.commit()

                    samp = Sampling.query.get(row['id'])
                    samp.status = 1
                    db.session.add(samp)
                    db.session.commit()

                get_users = Users.query.filter(Users.status == 1).order_by(
                    Users.id.desc()).all()
                users_schema = UserSchema(many=True)
                users = users_schema.dump(get_users)
                db.session.remove()
                request.close()

                return {'response': 'Registro Exitoso', 'users': users}, 200

            else:
                request.close()
                return {'error': 'Ingrese un correo valido'}, 401
        else:
            request.close()
            return {'error': 'Faltan datos'}, 401
Пример #24
0
def condition(city,state):
    #weather stuff
    city = city.replace(" ","_")
    url="http://api.wunderground.com/api/e67a9f7ffa697198/alerts/q/%s/%s.json"
    url = url%(state, city)
    request = urllib2.urlopen(url)
    resultstring = request.read()
    result = json.loads(resultstring)
    if 'errors' in result:
        return render_template("error.html")
    else:
        #getting the alert type
        try:
            atype = result['alerts'][0]['type']
        except:
            atype = "NONE"
        request.close()

    if atype in alert:
        tag = alert[atype]
    else:
        #get forecast
        url="http://api.wunderground.com/api/e67a9f7ffa697198/forecast/q/%s/%s.json"
        url = url%(state, city)
        request = urllib2.urlopen(url)
        resultstring = request.read()
        result = json.loads(resultstring)
        try:
            tag = result['forecast']['simpleforecast']['forecastday'][0]['conditions']
        except:
            flash('Invalid city and state')
            return redirect(url_for('index'))
    url = "http://api.wunderground.com/api/e67a9f7ffa697198/conditions/q/%s/%s.json"
    url = url%(state, city)
    try:
        request = urllib2.urlopen(url)
    except:
        return render_template("error.html")
    resultstring = request.read()
    result = json.loads(resultstring)
    temp = result['current_observation']['temperature_string']
        #we can make this even more brolic if we do scrap more data like tempertaure (lows and highs), wind, humidity

    #tumblr stuff
    url="http://api.tumblr.com/v2/tagged?tag=%s&api_key=6qjbDDaQ4vUogvpFIZ2UoaHuo6ykn1vMpjRYOdYOPCQI6dBw4K"
    tag2 = tag 
    if tag2 == "Partly Cloudy":
        tag2 = "Cloudy"
    if tag2 == "Cloudy" or tag2 == "Clear":
        tag2 = tag2 + "skies"
    url = url%(tag2)
    try:
        request = urllib2.urlopen(url)
    except:
        return render_template("error.html")
    resultstring = request.read()
    result = json.loads(resultstring)
    pictures = []
    for item in result['response']:
        try:
            pictures.append(item['photos'][0]['original_size']['url'])
        except:
            pass
    request.close()
    bgcolors = {'Cloudy':'darkgray', 'Partly Cloudy': 'gainsboro', 'Sunny':'yellow', 'Rain':'lightsteelblue', 'Snow':'snow', 'Clear':'lightskyblue', 'Windy':'whitesmoke', 'Thunderstorm':'gray'}
    try:
        color = bgcolors[tag]
    except:
        color = 'white'
    return render_template("condition.html",tag=tag,pictures=pictures,temp=temp, color = color)
Пример #25
0
def index():
	"""Render Home Page"""
	obs_dict = {}	
	global aerisTemp
	global respTypes
	endpt1 = '/observations?p=charlotte%2Cnc'
	endpt2 = '/observations/summary?p=charlotte%2Cnc'
	aerisURL = "http://api.aerisapi.com/batch/charlotte,nc?requests=/observations,/observations/summary&client_id=" + CLIENT_ID + "&client_secret=" + CLIENT_SECRET
	request = urllib.request.urlopen(aerisURL)
	response = request.read()
	info = json.loads(response)
	if info['success']:
		respTypes = info['response']['responses']
		if respTypes[0]['request'] == endpt1:
			resp = respTypes[0]
			obs = resp['response']
			ob = obs['ob']
			obs_dict.update(timestamp = str(ob['timestamp']))
			obs_dict.update(humidity = str(ob['humidity']))
			obs_dict.update(isDay = str(ob['isDay']))
			obs_dict.update(tempF = str(ob['tempF']))
			obs_dict.update(weatherPrimaryCoded = str(ob['weatherPrimaryCoded']))
			obs_dict.update(weatherShort = str(ob['weatherShort']))
		if respTypes[1]['request'] == endpt2:
			resp = respTypes[1]
			ob_sum = resp['response']
			periods = ob_sum[0]['periods']
			aerisTemp = periods[0]['summary']['temp']['avgF']
			precipMM = periods[0]['summary']['precip']['totalMM']
			obs_dict.update(avgTempF = str(aerisTemp))
			obs_dict.update(precipMM = str(precipMM))
	else:
		print("An error occurred: %s" % (info['error']['description']))
		respTypes = {}
		request.close()
			
	query_statement1 = "SELECT Disaster, Total_CPI_Adjusted_Cost_Millions, Deaths FROM US_Disasters"
	df_disasters = pd.read_sql_query(query_statement1, db.session.bind)
	top10c = df_disasters.copy()
	top10d = df_disasters.copy()	
	top10c.drop(['Deaths'], axis=1, inplace=True)
	top10c.Total_CPI_Adjusted_Cost_Millions = top10c.Total_CPI_Adjusted_Cost_Millions.round()
	top10c = top10c.nlargest(10, 'Total_CPI_Adjusted_Cost_Millions')
	top10c['Cost_Sum_Totals'] = top10c.groupby(['Disaster'])['Total_CPI_Adjusted_Cost_Millions'].transform(sum)
	top10c.drop(['Total_CPI_Adjusted_Cost_Millions'], axis=1, inplace=True)
	newtop10c = top10c.drop_duplicates(subset=['Disaster'])
	newtop10c['Percentage'] = (100*(newtop10c.Cost_Sum_Totals / newtop10c.Cost_Sum_Totals.sum())).round()
	newtop10c.columns = ['label', 'total', 'value']
	dataOpt1 = newtop10c.to_dict(orient='records')
	top10d.drop(['Total_CPI_Adjusted_Cost_Millions'], axis=1, inplace=True)
	top10d = top10d.nlargest(10, 'Deaths')
	top10d['Death_Sum_Totals'] = top10d.groupby(['Disaster'])['Deaths'].transform(sum)
	top10d.drop(['Deaths'], axis=1, inplace=True)
	newtop10d = top10d.drop_duplicates(subset=['Disaster'])
	newtop10d['Percentage'] = (100*(newtop10d.Death_Sum_Totals / newtop10d.Death_Sum_Totals.sum())).round()
	newtop10d.columns = ['label', 'total', 'value']
	dataOpt2 = newtop10d.to_dict(orient='records')
				
	d = datetime.date.today()
	searchDate = str(d.year) + '-' + f"{d:%m}" + '-' + f"{d:%d}"
	result = db.session.query(CLTtemps).filter(CLTtemps.Date == searchDate)
	for row in result.all(): 
		temp2 = row.ForecastTemps	
	temp2 = (round(temp2,0))
	tempDiff = abs(aerisTemp - temp2)
	if tempDiff > 18: #18 is the current max on d3 gauge
		difference = 18.5
	else:
		difference = tempDiff
	
	return render_template("index.html", data=(obs_dict,dataOpt1,dataOpt2,difference,temp2))
Пример #26
0
 def post(self):

    try: 

        path=os.path.abspath(os.curdir+'/static/images/predictions/')
                        
        # for files in os.listdir(path):
        #         os.remove(path+'/'+files)

        if request.files['file']:
            
            f = request.files['file']
            filename = secure_filename(f.filename)
            points = filename.count(".")
            extension = filename.split('.')


            if (extension[points]!='png'):
                request.close()
                return {'error': 'El formato de la imagen ingresada no esta permitido (Tipo de Formatos permitidos: PNG)' }, 401

            name = time.time()
            name = int(name)
            pick_name = str(name)+'.'+extension[points]

            print('pick_name----------------',filename)

            #save image
            f.save(path+'/'+filename)
            ##get image size
            size = os.stat(path+'/'+filename).st_size
            # validate image size

            if (size > (2 * 1024 * 1024)):

                request.close()
                os.remove(path+'/'+filename)
                return {'error': 'La imagen es muy grande, el tamaño máximo permitido para la imagen es de 2 MB' }, 401

            os.rename(path+'/'+filename, path+'/'+pick_name)

            insertImg(pick_name)

            return {'image': 'Todo Correcto' }, 401

            # else:

            #     request.close()

            #     return {'error': 'Ha ocurrido un error con la imagen, por favor intentá con otra imagen' }, 401

        else:

            request.close()

            return {'error':'Ingresá la imagen del terreno (Tipo de Formatos permitidos: PNG)'}, 401

    except:

        request.close()
        return {'error':'Ha ocurrido un error por favor intentá más tarde'},401
Пример #27
0
    def handle(request):
        request, addr = request
        PRINT("socket connected")
        #Managing the connections until the proxy is initialized
        while True:
            PRINT(
                "------------------------------------------------------------")
            PRINT("socket is {}".format(request))
            PRINT("registered is {}".format(MediaProxy.registered))
            PRINT("connections are {}".format(MediaProxy.connections))

            #Proxy not initialized by now
            #size = bytearray_to_num(recvall(request,4))
            #PRINT("We need to read " + str(size) + " bytes from " + str(request))
            data = request.recv(128)
            if data == b'':
                return
            #except Exception as e:
            #	print(e)
            #	return

            PRINT("{} wrote: {}".format(addr, data))
            to_send = None

            if data == b"bye":
                break

            elif data == b'iamready':
                for connection in MediaProxy.connections:
                    if addr[0] in connection['addrs']:
                        connection['ready'] = True
                to_send = b'ok'

            elif data == b'isready':
                found = False
                PRINT('inside isready with {}'.format(MediaProxy.connections))

                for connection in MediaProxy.connections:
                    PRINT("{} in {} ? ".format(addr[0], connection['addrs']))
                    if addr[0] in connection['addrs']:
                        found = True
                        if connection['ready']:
                            to_send = b'yes'
                        else:
                            to_send = b'no'
                if not found:
                    to_send = b'unconnected'

            elif data.split(b" ")[0] == b"register":
                data = data.decode("ascii")
                user = uuid.uuid4().hex[0:8]
                password = uuid.uuid4().hex[0:8]
                to_send = bytearray("credentials " + user + ";" + password,
                                    "ascii")
                server_local_ip, server_local_port = None, None

                try:
                    server_local_ip, server_local_port = data.split(" ")[1:]
                except Exception as e:
                    print(e)
                    request.sendall(bytearray(str(e), "ascii"))

                found = False
                for usr in MediaProxy.registered:
                    if usr[2] == request:
                        to_send = b"already registered"
                        found = True
                if not found:
                    MediaProxy.registered += [(user, password, request, addr,
                                               (server_local_ip,
                                                int(server_local_port)))]

            elif b"connect" in data:
                command, client_local_ip, client_local_port, user, password = None, None, None, None, None
                try:
                    command, client_local_ip, client_local_port, user, password = data.decode(
                        "ascii").split(" ")
                except Exception as e:
                    print(e)
                    request.sendall(bytearray(str(e), "ascii"))

                proxy_session_initialized = False
                to_send = b"sender not found"
                found = False
                for usr in MediaProxy.registered:
                    if usr[0] == user:
                        found = True
                        if usr[1] == password:
                            PRINT("user + password match")
                            to_send = b"connection established"

                            msg = bytearray(
                                "request {};{};{};{}".format(
                                    client_local_ip, client_local_port,
                                    addr[0], addr[1]), "ascii")
                            #usr[2].sendall(num_to_bytearray(len(msg)))
                            usr[2].sendall(msg)

                            msg = bytearray(
                                "address {};{};{};{}".format(
                                    usr[4][0], usr[4][1], usr[3][0],
                                    usr[3][1]), "ascii")
                            #request.sendall(num_to_bytearray(len(msg)))
                            request.sendall(msg)

                            time.sleep(1)
                            proxy_session_initialized = True

                            MediaProxy.connections += [{
                                'addrs': (addr[0], usr[3][0]),
                                'udpports':
                                None,
                                'ready':
                                False
                            }]

                            request.close()
                            usr[2].close()
                        else:
                            PRINT("incorrect password")
                            to_send = b"incorrect password"
                            break

                if proxy_session_initialized:
                    continue

            else:
                to_send = data.upper()

            #request.sendall(num_to_bytearray(len(to_send)))
            request.sendall(to_send)
Пример #28
0
 def get(self,path,name):
     request.close()
     return send_from_directory('static/images/'+path, name)