Spaces:
Running
Running
Commit
·
4fe6125
1
Parent(s):
c86a50e
fixed login link not showing
Browse files- src/auth.py +12 -1
- src/main.py +48 -11
src/auth.py
CHANGED
@@ -135,7 +135,7 @@ def save_credentials(creds, project_id=None):
|
|
135 |
json.dump(creds_data, f, indent=2)
|
136 |
|
137 |
|
138 |
-
def get_credentials():
|
139 |
"""Loads credentials matching gemini-cli OAuth2 flow."""
|
140 |
global credentials, credentials_from_env, user_project_id
|
141 |
|
@@ -365,6 +365,11 @@ def get_credentials():
|
|
365 |
logging.error(f"Failed to read credentials file {CREDENTIAL_FILE}: {e}")
|
366 |
# Fall through to new login only if file is completely unreadable
|
367 |
|
|
|
|
|
|
|
|
|
|
|
368 |
client_config = {
|
369 |
"installed": {
|
370 |
"client_id": CLIENT_ID,
|
@@ -387,6 +392,12 @@ def get_credentials():
|
|
387 |
prompt="consent",
|
388 |
include_granted_scopes='true'
|
389 |
)
|
|
|
|
|
|
|
|
|
|
|
|
|
390 |
logging.info(f"Please open this URL in your browser to log in: {auth_url}")
|
391 |
|
392 |
server = HTTPServer(("", 8080), _OAuthCallbackHandler)
|
|
|
135 |
json.dump(creds_data, f, indent=2)
|
136 |
|
137 |
|
138 |
+
def get_credentials(allow_oauth_flow=True):
|
139 |
"""Loads credentials matching gemini-cli OAuth2 flow."""
|
140 |
global credentials, credentials_from_env, user_project_id
|
141 |
|
|
|
365 |
logging.error(f"Failed to read credentials file {CREDENTIAL_FILE}: {e}")
|
366 |
# Fall through to new login only if file is completely unreadable
|
367 |
|
368 |
+
# Only start OAuth flow if explicitly allowed
|
369 |
+
if not allow_oauth_flow:
|
370 |
+
logging.info("OAuth flow not allowed - returning None (credentials will be required on first request)")
|
371 |
+
return None
|
372 |
+
|
373 |
client_config = {
|
374 |
"installed": {
|
375 |
"client_id": CLIENT_ID,
|
|
|
392 |
prompt="consent",
|
393 |
include_granted_scopes='true'
|
394 |
)
|
395 |
+
print(f"\n{'='*80}")
|
396 |
+
print(f"AUTHENTICATION REQUIRED")
|
397 |
+
print(f"{'='*80}")
|
398 |
+
print(f"Please open this URL in your browser to log in:")
|
399 |
+
print(f"{auth_url}")
|
400 |
+
print(f"{'='*80}\n")
|
401 |
logging.info(f"Please open this URL in your browser to log in: {auth_url}")
|
402 |
|
403 |
server = HTTPServer(("", 8080), _OAuthCallbackHandler)
|
src/main.py
CHANGED
@@ -37,20 +37,57 @@ app.add_middleware(
|
|
37 |
async def startup_event():
|
38 |
try:
|
39 |
logging.info("Starting Gemini proxy server...")
|
40 |
-
|
41 |
-
if
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
42 |
try:
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
49 |
except Exception as e:
|
50 |
-
logging.error(f"
|
51 |
-
logging.warning("Server started but
|
52 |
else:
|
53 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
54 |
except Exception as e:
|
55 |
logging.error(f"Startup error: {str(e)}")
|
56 |
logging.warning("Server may not function properly.")
|
|
|
37 |
async def startup_event():
|
38 |
try:
|
39 |
logging.info("Starting Gemini proxy server...")
|
40 |
+
|
41 |
+
# Check if credentials exist
|
42 |
+
import os
|
43 |
+
from .config import CREDENTIAL_FILE
|
44 |
+
|
45 |
+
env_creds_json = os.getenv("GEMINI_CREDENTIALS")
|
46 |
+
creds_file_exists = os.path.exists(CREDENTIAL_FILE)
|
47 |
+
|
48 |
+
if env_creds_json or creds_file_exists:
|
49 |
try:
|
50 |
+
# Try to load existing credentials without OAuth flow first
|
51 |
+
creds = get_credentials(allow_oauth_flow=False)
|
52 |
+
if creds:
|
53 |
+
try:
|
54 |
+
proj_id = get_user_project_id(creds)
|
55 |
+
if proj_id:
|
56 |
+
onboard_user(creds, proj_id)
|
57 |
+
logging.info(f"Successfully onboarded with project ID: {proj_id}")
|
58 |
+
logging.info("Gemini proxy server started successfully")
|
59 |
+
logging.info("Authentication required - Password: see .env file")
|
60 |
+
except Exception as e:
|
61 |
+
logging.error(f"Setup failed: {str(e)}")
|
62 |
+
logging.warning("Server started but may not function properly until setup issues are resolved.")
|
63 |
+
else:
|
64 |
+
logging.warning("Credentials file exists but could not be loaded. Server started - authentication will be required on first request.")
|
65 |
except Exception as e:
|
66 |
+
logging.error(f"Credential loading error: {str(e)}")
|
67 |
+
logging.warning("Server started but credentials need to be set up.")
|
68 |
else:
|
69 |
+
# No credentials found - prompt user to authenticate
|
70 |
+
logging.info("No credentials found. Starting OAuth authentication flow...")
|
71 |
+
try:
|
72 |
+
creds = get_credentials(allow_oauth_flow=True)
|
73 |
+
if creds:
|
74 |
+
try:
|
75 |
+
proj_id = get_user_project_id(creds)
|
76 |
+
if proj_id:
|
77 |
+
onboard_user(creds, proj_id)
|
78 |
+
logging.info(f"Successfully onboarded with project ID: {proj_id}")
|
79 |
+
logging.info("Gemini proxy server started successfully")
|
80 |
+
except Exception as e:
|
81 |
+
logging.error(f"Setup failed: {str(e)}")
|
82 |
+
logging.warning("Server started but may not function properly until setup issues are resolved.")
|
83 |
+
else:
|
84 |
+
logging.error("Authentication failed. Server started but will not function until credentials are provided.")
|
85 |
+
except Exception as e:
|
86 |
+
logging.error(f"Authentication error: {str(e)}")
|
87 |
+
logging.warning("Server started but authentication failed.")
|
88 |
+
|
89 |
+
logging.info("Authentication required - Password: see .env file")
|
90 |
+
|
91 |
except Exception as e:
|
92 |
logging.error(f"Startup error: {str(e)}")
|
93 |
logging.warning("Server may not function properly.")
|