File size: 7,147 Bytes
c9329ee f3e0b9c de32c0d c9329ee 3487183 c9329ee de32c0d 68b8926 de32c0d f3e0b9c c9329ee de32c0d c9329ee de32c0d c9329ee f8521a3 c9329ee |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 |
from taipy import Gui
from taipy.gui import navigate # type: ignore
import taipy.gui.builder as tgb
from functi import *
from Source_manage import source_page, menu_page
from Post_management import Post_manag
from flask import Flask, request
from urllib.parse import urlparse, parse_qs
import time
import logging
logging.getLogger('requests_oauthlib').setLevel(logging.DEBUG)
mssage_callback = "Authentification success, close this tabs and return to the login page"
import requests
def obtenir_access_token(code, client_id, client_secret, redirect_uri):
url = "https://www.linkedin.com/oauth/v2/accessToken"
headers = {
"Content-Type": "application/x-www-form-urlencoded"
}
data = {
"grant_type": "authorization_code",
"code": code,
"redirect_uri": redirect_uri,
"client_id": client_id,
"client_secret": client_secret
}
response = requests.post(url, headers=headers, data=data)
response.raise_for_status() # lève une exception si le statut HTTP n’est pas 2xx
return response.json()
# Presentation text
presentation_text = """
Découvrez Lin votre assistant community manager sur Linkedin
"""
def on_navigate(state, page_name: str):
# Redirige vers Accueil si l'utilisateur n'est pas connecté et qu'il ne s'agit pas de la page d'accueil
if page_name == "callback":
raw = request.environ.get("REQUEST_URI", "")
full = request.scheme + "://" + request.host + raw
if "otp_expired" in full:
print('OTP expired, redirecting to Accueil',full,flush = True)
state.mssage_callback = "Your link has expired, please try again to register"
time.sleep(1)
navigate(state, "Accueil")
state.mssage_callback = "Authentification success, close this tabs and return to the login page"
else:
state.authorization_url = full
state.authorization_url = state.authorization_url.replace("/taipy-jsx", "")
state.authorization_url = state.authorization_url.rsplit("&v", 1)[0]
state.authorization_url = state.authorization_url.replace("http://", "https://")
print(state.authorization_url,flush = True)
parsed = urlparse(state.authorization_url)
# 2. Extrait les paramètres dans un dict (valeur encapsulée dans une liste)
params = parse_qs(parsed.query)
# 3. Récupère la valeur de state
state_value = params.get("state", [""])[0]
code = params.get("code", [""])[0]
print(state_value,flush = True)
print(state.states,flush = True)
print(code,flush = True)
if state_value.endswith('?'):
state_value = state_value[:-1]
else:
state_value = state_value
if state_value == state.states :
if state.Linked_social_network == "Linkedin" :
response = obtenir_access_token(code, state.client_id, state.client_secret, state.redirect_url)
state.token = response["access_token"]
url = "https://api.linkedin.com/v2/userinfo"
headers = {
"Authorization": f"Bearer {state.token}"
}
response_open = requests.get(url, headers=headers)
response_open =response_open.json()
db_manager.add_token_network(state.token,state.Linked_social_network,state.Linked_account_name,state.user_inf.user.id,response_open)
navigate(state,"Source_Management" )
print(state.token,flush = True)
else :
print("mkjgfzmfvhsmehk")
return page_name
with tgb.Page(class_name="bodyp") as callb:
tgb.text("{mssage_callback}")
# Create pages
with tgb.Page(class_name="bodyp") as page_appart:
# Show login/register forms if not logged in
with tgb.part(render="{not is_logged_in}"): # type: ignore
with tgb.part(class_name="presentation", height="100vh"):
tgb.text("Lin", class_name="App_name")
with tgb.part(class_name="presentation_text"):
tgb.text(presentation_text, id="presentation_text_t")
with tgb.part(class_name="auth-container"):
# Login form (default)
with tgb.part(render="{not show_register}"): # type: ignore
tgb.text("Login to Lin")
tgb.input("{login_email}", label="Email", type="email",change_delay = -1,action_on_blur = True)
tgb.input("{login_password}", label="Password", password=True,change_delay = -1,action_on_blur = True)
tgb.button("Login", on_action=on_login )
tgb.button("Need an account? Register", on_action=toggle_register)
# Register form
with tgb.part(render="{show_register}"): # type: ignore
tgb.text("Register for Lin", )
tgb.input("{register_email}", label="Email", type="email",change_delay = -1,action_on_blur = True)
tgb.input("{register_password}", label="Password", password=True,change_delay = -1,action_on_blur = True)
tgb.input("{confirm_password}", label="Confirm Password", password=True,change_delay = -1,action_on_blur = True)
tgb.button("Register", on_action=on_register, class_name="auth-button")
tgb.button("Already have an account? Login", on_action=toggle_register, )
# Message display
with tgb.part(render="{message}"): # type: ignore
tgb.text("{message}", class_name="message")
# Show main content if logged in
with tgb.part(render="{is_logged_in}"): # type: ignore
with tgb.part(class_name="presentation", height="100vh"):
tgb.text("Lin", class_name="App_name")
tgb.text(f"Welcome, {'{current_user}'}!", class_name="welcome-message")
tgb.button("Logout", on_action=on_logout, class_name="logout-button")
with tgb.part(class_name="presentation_text"):
tgb.text(presentation_text, id="presentation_text_t")
# Define pages
pages = {
"Accueil": page_appart,
"/": menu_page,
"Source_Management" : source_page,
"callback" : callb,
"Post" : Post_manag
}
stylekit = {
"color_primary" : "#910029",
}
if __name__ == "__main__":
planning()
gui = Gui(pages=pages)
gui.run(
debug=True,
# port=7860,host = "0.0.0.0",
stylekit=stylekit,
title="Lin",
dark_mode=False,
use_reloader=True
) |