Ejemplo n.º 1
0
def location_create():
    """
        This route is used to add a new location for a user
    """
    # recupération des données du post
    uid = session['user']['id']
    osm_id = escape(request.form['osm_id'].strip())
    osm_type = escape(request.form['osm_type'].strip())
    # construction du bloc de metadonnées
    metadata = {}
    metadata['reason'] = escape(request.form['reason'].strip())
    # vérification des champs
    content = {}
    err = True
    if not validator.validate(osm_id, 'int'):
        content[
            'osm_id'] = "Le champ osm_id doit être un identifiant numérique !"
    if validator.is_empty(osm_type):
        content['osm_type'] = "Le champ osm_type ne doit pas être vide !"
    if metadata['reason'] not in ['no', 'internship', 'exchange', 'dd', 'job']:
        content['meta'][
            'reason'] = "La valeur de la métadonnée raison est invalide."
    if len(content.keys()) == 0:
        # create user - location mapping record in db
        content = "L'ajout de la localisation a échoué. La localisation n'a pas été confirmée par Nominatim."
        if db.create_user_location(uid, osm_id, osm_type, metadata):
            err = False
            content = "La nouvelle localisation a été enregistrée."
    return json_response(Response(err, content).json(), status_code=200)
Ejemplo n.º 2
0
 def wrapped_f(*args, **kwargs):
     if not _check_authorized(request.form):
         return json_response(Response(True,
                                       "You're not connected.").json(),
                              status_code=403)
     else:
         return f(*args, **kwargs)
Ejemplo n.º 3
0
def account_update_password():
    """
        This route will be used to update user password
    """
    err = True
    pwd_old = request.form['password_old']
    pwd_clear = request.form['password1']
    pwd_clear2 = request.form['password2']
    # verification des champs
    content = {}
    # if pwd_old != ancien mdp
    if _hash_pwd(pwd_old) != db.get_user_by_id(session['user']['id']).pwd:
        content['password_old'] = "Le mot de passe est incorrect !"
    if len(pwd_clear) < 6:
        content[
            'password1'] = "Le mot de passe doit faire au minimum 6 caractères !"
    if pwd_clear2 != pwd_clear:
        content[
            'password2'] = "Les deux mots de passe doivent être identiques !"
    # hash password
    pwd_hash = _hash_pwd(pwd_clear)

    # realisation si pas d'erreur
    if len(content.keys()) == 0:
        content = "La mise à jour du profil a échouée"
        # verification de l'existence de l'utilisateur
        if db.update_user(session['user']['id'], pwd=pwd_hash):
            # _update_user(session, session['user']['id'])
            # mise à jour des variables de réponse
            err = False
            content = 'ok'
    return json_response(Response(err, content).json(), status_code=200)
Ejemplo n.º 4
0
def account_update_names():
    """
        This route will be used to update user profile firstname and lastname
    """
    err = True
    firstname = escape(request.form['firstname'].strip())
    lastname = escape(request.form['lastname'].strip())
    # verification des champs
    content = {}
    if validator.is_empty(firstname):
        content['firstname'] = "Le champ prénom ne doit pas être vide !"
    if validator.is_empty(lastname):
        content['lastname'] = "Le champ nom ne doit pas être vide !"
    # realisation si pas d'erreur
    if len(content.keys()) == 0:
        content = "La mise à jour du profil a échouée"
        # verification de l'existence de l'utilisateur
        if db.update_user(session['user']['id'],
                          firstname=firstname,
                          lastname=lastname):
            _update_user(session, session['user']['id'])
            # mise à jour des variables de réponse
            err = False
            content = 'ok'
    return json_response(Response(err, content).json(), status_code=200)
Ejemplo n.º 5
0
def account_update_email():
    """
        This route will be used to update user email
    """
    err = True
    email = request.form['email'].strip()
    # verification des champs
    content = {}
    if not validator.validate(email, 'email'):
        content['email'] = "L'email ne respecte pas le format attendu !"

    # realisation si pas d'erreur
    if len(content.keys()) == 0:
        content[
            'email'] = "Cette adresse email est déjà attribuée à un utilisateur."
        # verification de l'existence de l'utilisateur
        if not db.user_exists(email):
            content = "La mise à jour du profil a échouée"
            # verification de l'existence de l'utilisateur
            if db.update_user(session['user']['id'], email=email):
                _update_user(session, session['user']['id'])
                # mise à jour des variables de réponse
                err = False
                content = 'ok'
    return json_response(Response(err, content).json(), status_code=200)
Ejemplo n.º 6
0
def search_users():
    """
        This route can be used to search users based on given filters
    """
    filters = request.form['filters']
    content = db.get_users(filters)
    return json_response(Response(False, content).json(), status_code=200)
Ejemplo n.º 7
0
 def wrapped_f(*args, **kwargs):
     try:
         return f(*args, **kwargs)
     except Exception as e:
         timestamp = time.strftime('%d%m%H%M%S')
         logger.log_error('mapif.{0}() at {1} error: details below.'.format(f.__name__, timestamp), e)
         code = '{0}.{1}'.format(err_code, timestamp)
         return json_response(Response(has_error=True, code=code, content='').json(), status_code=500)
Ejemplo n.º 8
0
def account_delete():
    """
        This route is used to delete completly a user account and all its data
    """
    uid = session['user']['id']
    db.delete_user(uid)
    session.pop('user', None)
    err = False
    content = "Le compte a été supprimé avec succès."
    return json_response(Response(err, content).json(), status_code=200)
Ejemplo n.º 9
0
def login():
    """
        This route is used to authenticate a user in the application
    """
    content = "L'utilisateur et/ou le mot de passe est érroné."
    email = request.form['email']
    pwd_clear = request.form['password']
    pwd_hash = _hash_pwd(pwd_clear)
    _load_user(session, email, pwd_hash)
    err = True
    if _check_connected(session):
        err = False
        content = "Vous êtes maintenant connecté !"
    return json_response(Response(err, content).json(), status_code=200)
Ejemplo n.º 10
0
def locations():
    """
        This route is used to retrieve all locations for a given user 
    """
    err = True
    code = 200
    uid = request.form['uid']
    content = "Une erreur s'est produite, l'identifiant de l'utilisateur passé en paramètre n'est pas valide."
    if not validator.validate(uid, 'int'):
        uid = int(uid)
        locations = db.get_user_locations(uid)
        content = "Une erreur s'est produite, aucune localisation n'a été trouvée pour cet utilisateur."
        if locations:
            err = False
            content = locations
    return json_response(Response(err, content).json(), status_code=code)
Ejemplo n.º 11
0
def account_create():
    """
        This route is used by the application to add a new user to the application
    """
    content = "Captcha invalide. Annulation de l'inscription ! Encore un bot..."
    err = True
    if validator.check_captcha(request):
        # recuperation du contenu de la requete
        firstname = escape(request.form['firstname'].strip())
        lastname = escape(request.form['lastname'].strip())
        email = request.form['email'].strip()
        pwd_clear = request.form['password1']
        pwd_clear2 = request.form['password2']
        promo = request.form['promo'].strip()
        # verification des champs
        content = {}
        if validator.is_empty(firstname):
            content['firstname'] = "Le champ prénom ne doit pas être vide !"
        if validator.is_empty(lastname):
            content['lastname'] = "Le champ nom ne doit pas être vide !"
        if not validator.validate(email, 'email'):
            content['email'] = "L'email ne respecte pas le format attendu !"
        if not validator.validate(promo, 'year'):
            content[
                'promo'] = "La promo n'est pas une année correctement formaté !"
        if len(pwd_clear) < 6:
            content[
                'password1'] = "Le mot de passe doit faire au minimum 6 caractères !"
        if pwd_clear2 != pwd_clear:
            content[
                'password2'] = "Les deux mots de passe doivent être identiques !"
        # hash password
        pwd_hash = _hash_pwd(pwd_clear)
        # realisation si pas d'erreur
        if len(content.keys()) == 0:
            content = "Cette adresse email est déjà attribuée à un utilisateur."
            # verification de l'existence de l'utilisateur
            if not db.user_exists(email):
                # creation de l'utilisateur
                db.create_user(firstname, lastname, email, pwd_hash, promo)
                # chargement de l'utilisateur créé dans la session (connexion automatique après inscription)
                _load_user(session, email, pwd_hash)
                # mise à jour des variables de réponse
                err = False
                content = 'ok'
    return json_response(Response(err, content).json(), status_code=200)
Ejemplo n.º 12
0
def account_update_promo():
    """
        This route will be used to update user promotion
    """
    err = True
    promo = request.form['promo'].strip()
    # verification des champs
    content = {}
    if not validator.validate(promo, 'year'):
        content[
            'promo'] = "La promo n'est pas une année correctement formaté !"
    # realisation si pas d'erreur
    if len(content.keys()) == 0:
        content = "La mise à jour du profil a échouée"
        # verification de l'existence de l'utilisateur
        if db.update_user(session['user']['id'], promo=promo):
            _update_user(session, session['user']['id'])
            # mise à jour des variables de réponse
            err = False
            content = 'ok'
    return json_response(Response(err, content).json(), status_code=200)
Ejemplo n.º 13
0
def location_delete():
    """
        This route can be used to delete a user location
    """
    # recupération des données du post
    uid = session['user']['id']
    osm_id = escape(request.form['osm_id'].strip())
    timestamp = escape(request.form['timestamp'].strip())
    # vérification des champs
    content = {}
    err = True
    if not validator.validate(osm_id, 'int'):
        content[
            'osm_id'] = "L'osm_id transmis ne respecte pas le format attendu: nombre entier."
    if not validator.validate(timestamp, 'timestamp'):
        content[
            'timestamp'] = "Le timestamp ne respecte pas le format attendu: YYYY-mm-dd"
    if len(content.keys()) == 0:
        # delete location
        content = "La suppression de la localisation n'a pas aboutie !"
        if db.delete_user_location(uid, osm_id, timestamp):
            err = False
            content = "La localisation a été supprimée de votre historique."
    return json_response(Response(err, content).json(), status_code=200)
Ejemplo n.º 14
0
def location_update():
    """
        This route can be used to update a user location
    """
    # recupération des données du post
    uid = session['user']['id']
    osm_id = escape(request.form['osm_id'].strip())
    timestamp = escape(request.form['timestamp'].strip())
    # vérification des champs
    content = {}
    err = True
    if not validator.validate(osm_id, 'int'):
        content[
            'osm_id'] = "L'osm_id transmis ne respecte pas le format attendu: nombre entier."
    if not validator.validate(timestamp, 'timestamp'):
        content[
            'timestamp'] = "Le timestamp ne respecte pas le format attendu: YYYY-mm-dd"
    if len(content.keys()) == 0:
        # update timestamp
        content = "La mise à jour de la localisation est un échec. Une erreur de persistence s'est produite."
        if db.update_user_location(uid, osm_id, timestamp):
            err = False
            content = "La localisation a été mise à jour."
    return json_response(Response(err, content).json(), status_code=200)
Ejemplo n.º 15
0
 def wrapped_f(*args, **kwargs):
     if session.get('user', None):
         return json_response(Response(True, "Opération interdite vous n'êtes pas déconnecté !").json(), status_code=403)
     else:
         return f(*args, **kwargs)