ida-hcli 0.7.7.dev2__tar.gz → 0.7.7.dev3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/PKG-INFO +1 -1
- {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/pyproject.toml +1 -1
- ida_hcli-0.7.7.dev3/src/hcli/__init__.py +1 -0
- {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/lib/auth/__init__.py +40 -1
- {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/lib/commands/__init__.py +18 -3
- {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/ida_hcli.egg-info/PKG-INFO +1 -1
- ida_hcli-0.7.7.dev2/src/hcli/__init__.py +0 -1
- {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/LICENSE +0 -0
- {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/README.md +0 -0
- {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/setup.cfg +0 -0
- {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/commands/__init__.py +0 -0
- {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/commands/auth/__init__.py +0 -0
- {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/commands/auth/default.py +0 -0
- {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/commands/auth/key/__init__.py +0 -0
- {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/commands/auth/key/create.py +0 -0
- {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/commands/auth/key/install.py +0 -0
- {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/commands/auth/key/list.py +0 -0
- {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/commands/auth/key/revoke.py +0 -0
- {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/commands/auth/list.py +0 -0
- {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/commands/auth/switch.py +0 -0
- {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/commands/commands.py +0 -0
- {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/commands/common.py +0 -0
- {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/commands/download.py +0 -0
- {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/commands/extension/__init__.py +0 -0
- {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/commands/extension/create.py +0 -0
- {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/commands/extension/list.py +0 -0
- {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/commands/ida/__init__.py +0 -0
- {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/commands/ida/install.py +0 -0
- {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/commands/license/__init__.py +0 -0
- {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/commands/license/common.py +0 -0
- {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/commands/license/get.py +0 -0
- {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/commands/license/install.py +0 -0
- {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/commands/license/list.py +0 -0
- {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/commands/login.py +0 -0
- {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/commands/logout.py +0 -0
- {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/commands/share/__init__.py +0 -0
- {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/commands/share/delete.py +0 -0
- {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/commands/share/get.py +0 -0
- {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/commands/share/list.py +0 -0
- {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/commands/share/put.py +0 -0
- {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/commands/update.py +0 -0
- {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/commands/whoami.py +0 -0
- {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/env.py +0 -0
- {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/lib/__init__.py +0 -0
- {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/lib/api/__init__.py +0 -0
- {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/lib/api/asset.py +0 -0
- {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/lib/api/auth.py +0 -0
- {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/lib/api/common.py +0 -0
- {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/lib/api/customer.py +0 -0
- {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/lib/api/index.py +0 -0
- {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/lib/api/keys.py +0 -0
- {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/lib/api/license.py +0 -0
- {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/lib/config/__init__.py +0 -0
- {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/lib/console.py +0 -0
- {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/lib/constants/__init__.py +0 -0
- {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/lib/constants/auth.py +0 -0
- {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/lib/constants/cli.py +0 -0
- {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/lib/extensions/__init__.py +0 -0
- {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/lib/ida/__init__.py +0 -0
- {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/lib/update/__init__.py +0 -0
- {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/lib/update/release.py +0 -0
- {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/lib/update/version.py +0 -0
- {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/lib/util/__init__.py +0 -0
- {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/lib/util/crc32.py +0 -0
- {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/lib/util/io.py +0 -0
- {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/lib/util/output.py +0 -0
- {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/lib/util/python.py +0 -0
- {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/lib/util/string.py +0 -0
- {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/main.py +0 -0
- {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/ida_hcli.egg-info/SOURCES.txt +0 -0
- {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/ida_hcli.egg-info/dependency_links.txt +0 -0
- {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/ida_hcli.egg-info/entry_points.txt +0 -0
- {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/ida_hcli.egg-info/requires.txt +0 -0
- {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/ida_hcli.egg-info/top_level.txt +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "0.7.7-dev.3"
|
|
@@ -193,8 +193,47 @@ class AuthService:
|
|
|
193
193
|
if self._current_source.type == CredentialType.KEY:
|
|
194
194
|
return bool(self._current_source.token)
|
|
195
195
|
elif self._current_source.type == CredentialType.INTERACTIVE:
|
|
196
|
-
|
|
196
|
+
# For interactive auth, check if session is valid by attempting to get user
|
|
197
|
+
if self.session is not None and self.session.user is not None:
|
|
198
|
+
return True
|
|
199
|
+
# If we have credentials but no valid session, try to refresh
|
|
200
|
+
if self._current_source.token:
|
|
201
|
+
try:
|
|
202
|
+
user_response = self.supabase.auth.get_user()
|
|
203
|
+
if user_response.user:
|
|
204
|
+
self.user = user_response.user
|
|
205
|
+
self.session = self.supabase.auth.get_session()
|
|
206
|
+
return True
|
|
207
|
+
except Exception:
|
|
208
|
+
# Token exists but is expired/invalid
|
|
209
|
+
return False
|
|
210
|
+
return False
|
|
211
|
+
|
|
212
|
+
return False
|
|
197
213
|
|
|
214
|
+
def has_expired_session(self) -> bool:
|
|
215
|
+
"""Check if user has credentials but session is expired."""
|
|
216
|
+
# No expired session for environment API key
|
|
217
|
+
if ENV.HCLI_API_KEY:
|
|
218
|
+
return False
|
|
219
|
+
|
|
220
|
+
# No expired session if no credentials exist
|
|
221
|
+
if not self._current_source:
|
|
222
|
+
return False
|
|
223
|
+
|
|
224
|
+
# Only interactive auth can have expired sessions
|
|
225
|
+
if self._current_source.type != CredentialType.INTERACTIVE:
|
|
226
|
+
return False
|
|
227
|
+
|
|
228
|
+
# Has credentials but session is invalid/expired
|
|
229
|
+
if self._current_source.token and (self.session is None or self.session.user is None):
|
|
230
|
+
try:
|
|
231
|
+
# Try to verify if token is actually expired
|
|
232
|
+
user_response = self.supabase.auth.get_user()
|
|
233
|
+
return user_response.user is None
|
|
234
|
+
except Exception:
|
|
235
|
+
return True
|
|
236
|
+
|
|
198
237
|
return False
|
|
199
238
|
|
|
200
239
|
def get_auth_type(self) -> Dict[str, str]:
|
|
@@ -20,7 +20,12 @@ def require_auth(f: Callable) -> Callable:
|
|
|
20
20
|
|
|
21
21
|
# Check if user is logged in
|
|
22
22
|
if not auth_service.is_logged_in():
|
|
23
|
-
|
|
23
|
+
if auth_service.has_expired_session():
|
|
24
|
+
current_source = auth_service.get_current_credentials()
|
|
25
|
+
email = current_source.email if current_source else "unknown"
|
|
26
|
+
console.print(f"[red]Your session {email} has expired, use 'hcli login'.[/red]")
|
|
27
|
+
else:
|
|
28
|
+
console.print("[red]You are not logged in. Use 'hcli login'.[/red]")
|
|
24
29
|
sys.exit(1)
|
|
25
30
|
|
|
26
31
|
return f(*args, **kwargs)
|
|
@@ -52,7 +57,12 @@ def enforce_login() -> bool:
|
|
|
52
57
|
auth_service = get_auth_service()
|
|
53
58
|
|
|
54
59
|
if not auth_service.is_logged_in():
|
|
55
|
-
|
|
60
|
+
if auth_service.has_expired_session():
|
|
61
|
+
current_source = auth_service.get_current_credentials()
|
|
62
|
+
email = current_source.email if current_source else "unknown"
|
|
63
|
+
console.print(f"[red]Your session {email} has expired, use 'hcli login'.[/red]")
|
|
64
|
+
else:
|
|
65
|
+
console.print("[red]You are not logged in. Use 'hcli login'.[/red]")
|
|
56
66
|
sys.exit(1)
|
|
57
67
|
|
|
58
68
|
return True
|
|
@@ -97,7 +107,12 @@ class AuthCommand(BaseCommand):
|
|
|
97
107
|
|
|
98
108
|
# Check if user is logged in
|
|
99
109
|
if not auth_service.is_logged_in():
|
|
100
|
-
|
|
110
|
+
if auth_service.has_expired_session():
|
|
111
|
+
current_source = auth_service.get_current_credentials()
|
|
112
|
+
email = current_source.email if current_source else "unknown"
|
|
113
|
+
console.print(f"[red]Your session {email} has expired, use 'hcli login'.[/red]")
|
|
114
|
+
else:
|
|
115
|
+
console.print("[red]You are not logged in. Use 'hcli login'.[/red]")
|
|
101
116
|
sys.exit(1)
|
|
102
117
|
|
|
103
118
|
# Validate forced credentials exists
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__version__ = "0.7.7-dev.2"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|