Spaces:
Running
Running
buletomato25
commited on
Commit
·
e2b9ac7
1
Parent(s):
8097043
login_separate
Browse files- app.py +2 -44
- client_secret.json +0 -11
- login.py +51 -0
app.py
CHANGED
@@ -15,6 +15,7 @@ from google.oauth2 import id_token
|
|
15 |
from google_auth_oauthlib.flow import Flow
|
16 |
from google.auth.transport import requests as google_requests
|
17 |
from new_record import record_bp
|
|
|
18 |
|
19 |
|
20 |
# Hugging Face のトークン取得(環境変数 HF に設定)
|
@@ -36,15 +37,6 @@ app = Flask(__name__)
|
|
36 |
|
37 |
app.config['SECRET_KEY'] = os.urandom(24)
|
38 |
|
39 |
-
# Google OAuth 2.0の設定
|
40 |
-
os.environ["OAUTHLIB_INSECURE_TRANSPORT"] = "1"
|
41 |
-
GOOGLE_CLIENT_ID = "228160683186-6u7986qsfhcv3kd9iqtv08iphpl4gdk2.apps.googleusercontent.com"
|
42 |
-
GOOGLE_CLIENT_SECRET = "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"
|
43 |
-
#HFにpushするときは下記のコメントアウトを外してください
|
44 |
-
#REDIRECT_URI = "https://huggingface.co/spaces/Justtalk/JusTalk/callback"
|
45 |
-
#ローカルの時はこちら
|
46 |
-
REDIRECT_URI = "http://127.0.0.1:7860/callback"
|
47 |
-
|
48 |
flow = Flow.from_client_secrets_file(
|
49 |
'client_secret.json',
|
50 |
scopes=["openid", "https://www.googleapis.com/auth/userinfo.profile", "https://www.googleapis.com/auth/userinfo.email"],
|
@@ -109,47 +101,13 @@ def generate_filename(random_length):
|
|
109 |
return filename
|
110 |
|
111 |
app.register_blueprint(record_bp)
|
|
|
112 |
|
113 |
# トップページ(テンプレート: index.html)
|
114 |
@app.route('/')
|
115 |
def top():
|
116 |
return redirect('index')
|
117 |
|
118 |
-
# ログイン画面(テンプレート: login.html)
|
119 |
-
@app.route('/login')
|
120 |
-
def login():
|
121 |
-
authorization_url, state = flow.authorization_url()
|
122 |
-
session['state'] = state
|
123 |
-
return redirect(authorization_url)
|
124 |
-
|
125 |
-
|
126 |
-
# ログイン後画面
|
127 |
-
@app.route('/callback')
|
128 |
-
def callback():
|
129 |
-
flow.fetch_token(authorization_response=request.url)
|
130 |
-
|
131 |
-
# `session.get('state')` を使用し、エラーを防ぐ
|
132 |
-
session_state = session.get('state')
|
133 |
-
request_state = request.args.get('state')
|
134 |
-
|
135 |
-
if session_state is None or session_state != request_state:
|
136 |
-
print(f"State mismatch error: session_state={session_state}, request_state={request_state}")
|
137 |
-
return 'State mismatch error', 400
|
138 |
-
|
139 |
-
credentials = flow.credentials
|
140 |
-
request_session = google_requests.Request()
|
141 |
-
|
142 |
-
id_info = id_token.verify_oauth2_token(
|
143 |
-
credentials.id_token, request_session, GOOGLE_CLIENT_ID
|
144 |
-
)
|
145 |
-
|
146 |
-
session['google_id'] = id_info.get("sub")
|
147 |
-
session['email'] = id_info.get("email")
|
148 |
-
session['name'] = id_info.get("name")
|
149 |
-
|
150 |
-
return redirect(url_for('new_person'))
|
151 |
-
|
152 |
-
|
153 |
# フィードバック画面(テンプレート: feedback.html)
|
154 |
@app.route('/feedback', methods=['GET', 'POST'])
|
155 |
def feedback():
|
|
|
15 |
from google_auth_oauthlib.flow import Flow
|
16 |
from google.auth.transport import requests as google_requests
|
17 |
from new_record import record_bp
|
18 |
+
from login import login_bp
|
19 |
|
20 |
|
21 |
# Hugging Face のトークン取得(環境変数 HF に設定)
|
|
|
37 |
|
38 |
app.config['SECRET_KEY'] = os.urandom(24)
|
39 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
40 |
flow = Flow.from_client_secrets_file(
|
41 |
'client_secret.json',
|
42 |
scopes=["openid", "https://www.googleapis.com/auth/userinfo.profile", "https://www.googleapis.com/auth/userinfo.email"],
|
|
|
101 |
return filename
|
102 |
|
103 |
app.register_blueprint(record_bp)
|
104 |
+
app.register_blueprint(login_bp)
|
105 |
|
106 |
# トップページ(テンプレート: index.html)
|
107 |
@app.route('/')
|
108 |
def top():
|
109 |
return redirect('index')
|
110 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
111 |
# フィードバック画面(テンプレート: feedback.html)
|
112 |
@app.route('/feedback', methods=['GET', 'POST'])
|
113 |
def feedback():
|
client_secret.json
DELETED
@@ -1,11 +0,0 @@
|
|
1 |
-
{
|
2 |
-
"web": {
|
3 |
-
"client_id": "228160683186-6u7986qsfhcv3kd9iqtv08iphpl4gdk2.apps.googleusercontent.com",
|
4 |
-
"project_id": "justtalk-454100",
|
5 |
-
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
|
6 |
-
"token_uri": "https://oauth2.googleapis.com/token",
|
7 |
-
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
|
8 |
-
"client_secret": "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",
|
9 |
-
"redirect_uris": "http://127.0.0.1:7860/callback"
|
10 |
-
}
|
11 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
login.py
ADDED
@@ -0,0 +1,51 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
from flask import Blueprint, request, redirect, session, url_for, render_template
|
2 |
+
import os
|
3 |
+
from google.oauth2 import id_token
|
4 |
+
from google_auth_oauthlib.flow import Flow
|
5 |
+
from google.auth.transport import requests as google_requests
|
6 |
+
|
7 |
+
login_bp = Blueprint('login', __name__)
|
8 |
+
|
9 |
+
# Google OAuth 2.0 の設定
|
10 |
+
os.environ["OAUTHLIB_INSECURE_TRANSPORT"] = "1"
|
11 |
+
GOOGLE_CLIENT_ID = "228160683186-6u7986qsfhcv3kd9iqtv08iphpl4gdk2.apps.googleusercontent.com"
|
12 |
+
GOOGLE_CLIENT_SECRET = "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"
|
13 |
+
REDIRECT_URI = "http://127.0.0.1:7860/callback"
|
14 |
+
|
15 |
+
flow = Flow.from_client_secrets_file(
|
16 |
+
'client_secret.json',
|
17 |
+
scopes=["openid", "https://www.googleapis.com/auth/userinfo.profile", "https://www.googleapis.com/auth/userinfo.email"],
|
18 |
+
redirect_uri=REDIRECT_URI
|
19 |
+
)
|
20 |
+
|
21 |
+
@login_bp.route('/login')
|
22 |
+
def login():
|
23 |
+
authorization_url, state = flow.authorization_url()
|
24 |
+
session['state'] = state
|
25 |
+
return redirect(authorization_url)
|
26 |
+
|
27 |
+
@login_bp.route('/callback')
|
28 |
+
def callback():
|
29 |
+
flow.fetch_token(authorization_response=request.url)
|
30 |
+
|
31 |
+
session_state = session.get('state')
|
32 |
+
request_state = request.args.get('state')
|
33 |
+
|
34 |
+
if session_state is None or session_state != request_state:
|
35 |
+
print(f"State mismatch error: session_state={session_state}, request_state={request_state}")
|
36 |
+
return 'State mismatch error', 400
|
37 |
+
|
38 |
+
credentials = flow.credentials
|
39 |
+
request_session = google_requests.Request()
|
40 |
+
|
41 |
+
id_info = id_token.verify_oauth2_token(
|
42 |
+
credentials.id_token, request_session, GOOGLE_CLIENT_ID
|
43 |
+
)
|
44 |
+
|
45 |
+
session['google_id'] = id_info.get("sub")
|
46 |
+
session['email'] = id_info.get("email")
|
47 |
+
session['name'] = id_info.get("name")
|
48 |
+
|
49 |
+
return redirect(url_for('new_person'))
|
50 |
+
|
51 |
+
|