def wrapped_f(*args, **kwargs): if session.get('user', None): resp = Response( True, "Opération interdite vous n'êtes pas déconnecté !") return json_response(resp.json(), status_code=403) else: return f(*args, **kwargs)
def wrapped_f(*args, **kwargs): try: return f(*args, **kwargs) except Exception as e: timestamp = time.strftime('%d%m%H%M%S') desc = '`mapif.{0}()` at `{1}` error: details below.'.format( f.__name__, timestamp) modlgr.exception(desc) code = '{0}.{1}'.format(err_code, timestamp) resp = Response(has_error=True, code=code, content='') return json_response(resp.json(), status_code=500)
def wrapped_f(*args, **kwargs): try: return f(*args, **kwargs) except Exception as e: timestamp = time.strftime('%d%m%H%M%S') desc = '`mapif.{0}()` at `{1}` error: details below.'.format( f.__name__, timestamp ) modlgr.exception(desc) code = '{0}.{1}'.format(err_code, timestamp) resp = Response(has_error=True, code=code, content='') return json_response(resp.json(), status_code=500)
def account_update_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 db.check_user_password(session['user']['id'], _hash_pwd(pwd_old)): 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 password_reset(): email = request.form['email'] modlgr.debug('Asking for password reset for: {0}'.format(email)) if not db.user_exists(email): error = True content = "Cette adresse électronique n'est associée à aucun utilisateur." modlgr.error('{0} does not exist'.format(email)) return json_response(Response(error, content).json(), status_code=200) token = db.create_or_update_password_reset(email, app.secret_key) modlgr.debug("Created/updated user's password reset object with token '{0}'".format(token)) reset_link = "{0}password-reset?token={1}&email={2}".format(request.url_root, token, email) user = db.retrieve_user_by_email(email) emails.send_password_reset_mail(email, user.firstname, token) modlgr.debug("Process finished sending mail to {0} with link '{1}'".format(email, reset_link)) error = False content = "Un lien pour modifier ton mot de passe a été envoyé à cette adresse, il expirera dans 10 minutes." return json_response(Response(error, content).json(), status_code=200)
def login(): 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(): 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.retrieve_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(): content = "Captcha invalide. Annulation de l'inscription ! Encore un bot..." err = True if app.debug or 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 int(promo) < 1969 or int(promo) >= (datetime.datetime.now().year+4): content['promo'] = "L'année est en dehors de l'intervalle autorisé !" 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' msg = """A new user joined MapIF! *{0} {1}* promo *{2}* *{3}* :D """.format(firstname, lastname, promo, email) modlgr.info(msg) return json_response(Response(err, content).json(), status_code=200)
def location_delete(): # recupération des données du post uid = session['user']['id'] ulid = escape(request.form['ulid'].strip()) # vérification des champs content = {} err = True if not validator.validate(ulid, 'int'): content['ulid'] = "L'ulid transmis ne respecte pas le format attendu: nombre entier." if len(content.keys()) == 0: # delete location content = "La suppression de la localisation n'a pas aboutie !" if db.delete_user_location(uid, ulid): err = False content = "La localisation a été supprimée de votre historique." return json_response(Response(err, content).json(), status_code=200)
def account_delete(): uid = session['user']['id'] msg = """A user left MapIF. *{0} {1}* promo *{2}* *{3}* :/""".format( session['user']['firstname'], session['user']['lastname'], session['user']['promo'], session['user']['email']) db.delete_user(uid) session.pop('user', None) err = False content = "Le compte a été supprimé avec succès." modlgr.warning(msg) return json_response(Response(err, content).json(), status_code=200)
def account_update_promo(): 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é !" if int(promo) < 1969 or int(promo) >= (datetime.datetime.now().year+4): content['promo'] = "L'année est en dehors de l'intervalle autorisé !" # 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 account_update_names(): 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(): 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 location_update(): # recupération des données du post uid = session['user']['id'] ulid = escape(request.form['ulid'].strip()) timestamp = escape(request.form['timestamp'].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(ulid, 'int'): content['ulid'] = "L'ulid 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 metadata['reason'] not in db.META_REASON_ENUM: content['meta']['reason'] = "La valeur de la métadonnée raison est invalide." 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, ulid, timestamp, metadata): err = False content = "La localisation a été mise à jour." return json_response(Response(err, content).json(), status_code=200)
def location_create(): # 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 db.META_REASON_ENUM: 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 search_users(): filters = request.form['filters'] content = db.search_users(filters) return json_response(Response(False, content).json(), status_code=200)
def wrapped_f(*args, **kwargs): if session.get('user', None): resp = Response(True, "Opération interdite vous n'êtes pas déconnecté !") return json_response(resp.json(), status_code=403) else: return f(*args, **kwargs)