Spaces:
Running
Running
Update app.py
Browse files
app.py
CHANGED
|
@@ -13,10 +13,9 @@ def generate_code_challenge(code_verifier):
|
|
| 13 |
hashed = hashlib.sha256(code_verifier.encode('utf-8')).digest()
|
| 14 |
return base64.urlsafe_b64encode(hashed).decode('utf-8').rstrip('=')
|
| 15 |
|
| 16 |
-
# Инициализация session_state для хранения code_verifier
|
| 17 |
if 'code_verifier' not in st.session_state:
|
| 18 |
st.session_state.code_verifier = generate_code_verifier()
|
| 19 |
-
st.session_state.code_challenge = generate_code_challenge(st.session_state.code_verifier)
|
| 20 |
|
| 21 |
# Заголовок приложения
|
| 22 |
st.title("VK ID Authorization with PKCE")
|
|
@@ -27,9 +26,12 @@ client_secret = "piaMXHEDj0afa4QObJCD" # Ваш client_secret
|
|
| 27 |
redirect_uri = "https://huggingface.co/spaces/PRAnalytics/prtooltest" # Ваш redirect_uri
|
| 28 |
scope = "wall" # Запрошенные разрешения
|
| 29 |
|
|
|
|
|
|
|
|
|
|
| 30 |
# Отображение code_verifier и code_challenge (для отладки)
|
| 31 |
st.write("code_verifier:", st.session_state.code_verifier)
|
| 32 |
-
st.write("code_challenge:",
|
| 33 |
|
| 34 |
# Шаг 1: Авторизация
|
| 35 |
st.markdown("### 1) Авторизация")
|
|
@@ -38,8 +40,8 @@ auth_params = {
|
|
| 38 |
"redirect_uri": redirect_uri,
|
| 39 |
"response_type": "code",
|
| 40 |
"scope": scope,
|
| 41 |
-
"state":
|
| 42 |
-
"code_challenge":
|
| 43 |
"code_challenge_method": "S256",
|
| 44 |
"response_mode": "query"
|
| 45 |
}
|
|
@@ -55,9 +57,13 @@ st.markdown("""
|
|
| 55 |
st.markdown("### 2) Обмен кода на токены")
|
| 56 |
user_code = st.text_input("Введите полный code, полученный из URL", value="")
|
| 57 |
user_device_id = st.text_input("Введите полный device_id, полученный из URL", value="")
|
|
|
|
| 58 |
|
| 59 |
-
if user_code:
|
| 60 |
if st.button("Обменять code"):
|
|
|
|
|
|
|
|
|
|
| 61 |
url = "https://id.vk.com/oauth2/auth" # Endpoint для обмена токенов
|
| 62 |
data = {
|
| 63 |
"grant_type": "authorization_code",
|
|
@@ -65,7 +71,7 @@ if user_code:
|
|
| 65 |
"client_secret": client_secret,
|
| 66 |
"redirect_uri": redirect_uri,
|
| 67 |
"code": user_code,
|
| 68 |
-
"code_verifier":
|
| 69 |
}
|
| 70 |
if user_device_id:
|
| 71 |
data["device_id"] = user_device_id
|
|
|
|
| 13 |
hashed = hashlib.sha256(code_verifier.encode('utf-8')).digest()
|
| 14 |
return base64.urlsafe_b64encode(hashed).decode('utf-8').rstrip('=')
|
| 15 |
|
| 16 |
+
# Инициализация session_state для хранения code_verifier
|
| 17 |
if 'code_verifier' not in st.session_state:
|
| 18 |
st.session_state.code_verifier = generate_code_verifier()
|
|
|
|
| 19 |
|
| 20 |
# Заголовок приложения
|
| 21 |
st.title("VK ID Authorization with PKCE")
|
|
|
|
| 26 |
redirect_uri = "https://huggingface.co/spaces/PRAnalytics/prtooltest" # Ваш redirect_uri
|
| 27 |
scope = "wall" # Запрошенные разрешения
|
| 28 |
|
| 29 |
+
# Генерация code_challenge на основе сохраненного code_verifier
|
| 30 |
+
code_challenge = generate_code_challenge(st.session_state.code_verifier)
|
| 31 |
+
|
| 32 |
# Отображение code_verifier и code_challenge (для отладки)
|
| 33 |
st.write("code_verifier:", st.session_state.code_verifier)
|
| 34 |
+
st.write("code_challenge:", code_challenge)
|
| 35 |
|
| 36 |
# Шаг 1: Авторизация
|
| 37 |
st.markdown("### 1) Авторизация")
|
|
|
|
| 40 |
"redirect_uri": redirect_uri,
|
| 41 |
"response_type": "code",
|
| 42 |
"scope": scope,
|
| 43 |
+
"state": st.session_state.code_verifier, # Передаем code_verifier в параметре state
|
| 44 |
+
"code_challenge": code_challenge,
|
| 45 |
"code_challenge_method": "S256",
|
| 46 |
"response_mode": "query"
|
| 47 |
}
|
|
|
|
| 57 |
st.markdown("### 2) Обмен кода на токены")
|
| 58 |
user_code = st.text_input("Введите полный code, полученный из URL", value="")
|
| 59 |
user_device_id = st.text_input("Введите полный device_id, полученный из URL", value="")
|
| 60 |
+
user_state = st.text_input("Введите state, полученный из URL", value="") # Поле для ввода state
|
| 61 |
|
| 62 |
+
if user_code and user_state:
|
| 63 |
if st.button("Обменять code"):
|
| 64 |
+
# Используем code_verifier из параметра state
|
| 65 |
+
code_verifier = user_state
|
| 66 |
+
|
| 67 |
url = "https://id.vk.com/oauth2/auth" # Endpoint для обмена токенов
|
| 68 |
data = {
|
| 69 |
"grant_type": "authorization_code",
|
|
|
|
| 71 |
"client_secret": client_secret,
|
| 72 |
"redirect_uri": redirect_uri,
|
| 73 |
"code": user_code,
|
| 74 |
+
"code_verifier": code_verifier # Используем code_verifier из state
|
| 75 |
}
|
| 76 |
if user_device_id:
|
| 77 |
data["device_id"] = user_device_id
|