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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)