def linkedin_login(): """ Fonction de callback appelée par LinkedIn. Log-in un membre à partir de LinkedIn. Worfklow : - Request un token - Faire un appel sur l'API "people" pour obtenir l'id_linkedin - Regarder si il existe un ancien avec cet id_linkedin - Regarder si il existe un utilisateur pour cet id_ancien - Logguer cet utilisateur ! Notes : - On pourrait stocker les tokens pour ne pas avoir la demande systématique, mais ça veut dire modifier le workflow - Il faut penser à garder le "remember me", si on décide d'en faire une variable. """ app.logger.info("LINKEDIN - begin login") access_token = __get_linkedin_token(url_for('linkedin_login', _external=True)) api_url = "https://api.linkedin.com/v1/people/~:(id)?oauth2_access_token=%s" % access_token api_req = requests.get(api_url) if api_req is not None and api_req.status_code == requests.codes.ok: parsed = etree.fromstring(api_req.text.encode("utf-8")) if parsed is not None: id_linkedin = None for e in parsed: if e.tag == "id": id_linkedin = e.text if id_linkedin is not None: app.logger.info("LINKEDIN - search ancien for id id_linkedin : %s", id_linkedin) ancien = annuaire.find_ancien_by_id_linkedin(id_linkedin) if ancien is not None: app.logger.info("LINKEDIN - found ancien with ID : %s", ancien['id_ancien']) utilisateur = user.find_user_by_id_ancien(ancien['id_ancien'], actif_only=True) if utilisateur is not None : app.logger.info("LOGIN - linkedin login successful, with id %s", utilisateur.id) login_user(utilisateur, remember=True) flash("Logged in successfully.") return redirect(url_for('annuaire_view')) else: flash("Erreur de connexion : mot de passe incorrect ou utilisateur inconnu", "danger") app.logger.warning("LOGIN - linkedin login failed for id_linkedin %s", id_linkedin) else: app.logger.warning("LINKEDIN - no ancien for id_linkedin : %s", id_linkedin) else: app.logger.error("LINKEDIN - blank API response file") elif api_req is None: app.logger.error("LINKEDIN - bad people API request, null response") else: app.logger.error( "LINKEDIN - bad people API request ... code : %s, request response : %s", api_req.status_code, api_req.text ) return redirect(url_for("login"))
def valider_ancien_api(id_ancien): """ Valider un ancien. :param id_ancien: L'id de l'ancien à valider """ if annuaire.update_ancien_valider(id_ancien): utilisateur = user.find_user_by_id_ancien(id_ancien) helper.send_fiche_activee_mail(utilisateur.mail) return json.dumps({ "succes" : True }) else: abort(500, "Oops ! Probleme de mise a jour de l'ancien ...")
def compte(): """ Permet, entre autres, d'associer un utilisateur à un ancien : - Si l'utilisateur U n'a pas d'ancien associé - Trouver si il y a un ancien A tel que A.mail_asso == U.mail - Si oui, vérifier qu'il n'y a pas d'utilisateur U2 tel que U2.id_ancien == A.id_ancien - Si U2 n'existe pas, alors UPDATE U tel que U.id_ancien = A.id_ancien """ # Trouver si l'utilisateur a un ancien associé ancien = annuaire.find_ancien_by_id(current_user.id_ancien, actif=None, bloque=None, nouveau=None) # Si l'utilisateur n'a pas d'ancien, on va vérifier # Via le mail asso, s'il existe un ancien dans la base pour lui if ancien is None: ancien_temp = annuaire.find_ancien_by_mail_asso(current_user.mail) # si il y a effectivement un ancien, vérifier # qu'il n'est pas déjà associé à un utilisateur if ancien_temp is not None: app.logger.info( "USER ASSOCIATION - trying to associate user %s with ancien %s", current_user.id, ancien_temp['id_ancien'] ) user_temp = user.find_user_by_id_ancien(ancien_temp['id_ancien']) # Si ça n'existe pas, alors faire l'association if user_temp is None: # On récupère le nouvel utilisateur sql_res = user.update_id_ancien(current_user.id, ancien_temp['id_ancien']) # Si l'association réussit # réucpérer l'ancien if sql_res : app.logger.info( "USER ASSOCIATION - Success, associated user %s with ancien %s", current_user.id, ancien_temp['id_ancien'] ) return redirect(url_for("ancien", id_ancien=ancien_temp['id_ancien'])) else: app.logger.error( "USER ASSOCIATION - Oops ... update went wrong." ) else: app.logger.warning( "USER ASSOCIATION - user %s already associated with ancien %s", user_temp.id, ancien_temp['id_ancien'] ) else: # Sinon, on le laisse créer sa fiche ! return redirect(url_for("create_ancien")) elif ancien['nouveau']: return redirect(url_for("create_ancien")) # cas spécifique : ancien en cours de création else: return redirect(url_for("ancien", id_ancien=current_user.id_ancien))