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