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.
Files changed (74) hide show
  1. {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/PKG-INFO +1 -1
  2. {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/pyproject.toml +1 -1
  3. ida_hcli-0.7.7.dev3/src/hcli/__init__.py +1 -0
  4. {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/lib/auth/__init__.py +40 -1
  5. {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/lib/commands/__init__.py +18 -3
  6. {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/ida_hcli.egg-info/PKG-INFO +1 -1
  7. ida_hcli-0.7.7.dev2/src/hcli/__init__.py +0 -1
  8. {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/LICENSE +0 -0
  9. {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/README.md +0 -0
  10. {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/setup.cfg +0 -0
  11. {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/commands/__init__.py +0 -0
  12. {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/commands/auth/__init__.py +0 -0
  13. {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/commands/auth/default.py +0 -0
  14. {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/commands/auth/key/__init__.py +0 -0
  15. {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/commands/auth/key/create.py +0 -0
  16. {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/commands/auth/key/install.py +0 -0
  17. {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/commands/auth/key/list.py +0 -0
  18. {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/commands/auth/key/revoke.py +0 -0
  19. {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/commands/auth/list.py +0 -0
  20. {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/commands/auth/switch.py +0 -0
  21. {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/commands/commands.py +0 -0
  22. {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/commands/common.py +0 -0
  23. {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/commands/download.py +0 -0
  24. {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/commands/extension/__init__.py +0 -0
  25. {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/commands/extension/create.py +0 -0
  26. {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/commands/extension/list.py +0 -0
  27. {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/commands/ida/__init__.py +0 -0
  28. {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/commands/ida/install.py +0 -0
  29. {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/commands/license/__init__.py +0 -0
  30. {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/commands/license/common.py +0 -0
  31. {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/commands/license/get.py +0 -0
  32. {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/commands/license/install.py +0 -0
  33. {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/commands/license/list.py +0 -0
  34. {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/commands/login.py +0 -0
  35. {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/commands/logout.py +0 -0
  36. {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/commands/share/__init__.py +0 -0
  37. {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/commands/share/delete.py +0 -0
  38. {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/commands/share/get.py +0 -0
  39. {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/commands/share/list.py +0 -0
  40. {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/commands/share/put.py +0 -0
  41. {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/commands/update.py +0 -0
  42. {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/commands/whoami.py +0 -0
  43. {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/env.py +0 -0
  44. {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/lib/__init__.py +0 -0
  45. {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/lib/api/__init__.py +0 -0
  46. {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/lib/api/asset.py +0 -0
  47. {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/lib/api/auth.py +0 -0
  48. {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/lib/api/common.py +0 -0
  49. {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/lib/api/customer.py +0 -0
  50. {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/lib/api/index.py +0 -0
  51. {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/lib/api/keys.py +0 -0
  52. {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/lib/api/license.py +0 -0
  53. {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/lib/config/__init__.py +0 -0
  54. {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/lib/console.py +0 -0
  55. {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/lib/constants/__init__.py +0 -0
  56. {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/lib/constants/auth.py +0 -0
  57. {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/lib/constants/cli.py +0 -0
  58. {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/lib/extensions/__init__.py +0 -0
  59. {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/lib/ida/__init__.py +0 -0
  60. {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/lib/update/__init__.py +0 -0
  61. {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/lib/update/release.py +0 -0
  62. {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/lib/update/version.py +0 -0
  63. {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/lib/util/__init__.py +0 -0
  64. {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/lib/util/crc32.py +0 -0
  65. {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/lib/util/io.py +0 -0
  66. {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/lib/util/output.py +0 -0
  67. {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/lib/util/python.py +0 -0
  68. {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/lib/util/string.py +0 -0
  69. {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/hcli/main.py +0 -0
  70. {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/ida_hcli.egg-info/SOURCES.txt +0 -0
  71. {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/ida_hcli.egg-info/dependency_links.txt +0 -0
  72. {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/ida_hcli.egg-info/entry_points.txt +0 -0
  73. {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/ida_hcli.egg-info/requires.txt +0 -0
  74. {ida_hcli-0.7.7.dev2 → ida_hcli-0.7.7.dev3}/src/ida_hcli.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ida-hcli
3
- Version: 0.7.7.dev2
3
+ Version: 0.7.7.dev3
4
4
  Summary: HCLI - Hex-Rays CLI Utility
5
5
  Author-email: Hex-Rays SA <support@hex-rays.com>
6
6
  License-Expression: MIT
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "ida-hcli"
3
- version = "0.7.7-dev.2"
3
+ version = "0.7.7-dev.3"
4
4
  description = "HCLI - Hex-Rays CLI Utility"
5
5
  requires-python = ">=3.10"
6
6
  license = "MIT"
@@ -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
- return self.session is not None and self.session.user is not None
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
- console.print("[red]You are not logged in. Use 'hcli login'.[/red]")
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
- console.print("[red]You are not logged in. Use 'hcli login'.[/red]")
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
- console.print("[red]You are not logged in. Use 'hcli login'.[/red]")
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,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ida-hcli
3
- Version: 0.7.7.dev2
3
+ Version: 0.7.7.dev3
4
4
  Summary: HCLI - Hex-Rays CLI Utility
5
5
  Author-email: Hex-Rays SA <support@hex-rays.com>
6
6
  License-Expression: MIT
@@ -1 +0,0 @@
1
- __version__ = "0.7.7-dev.2"
File without changes
File without changes
File without changes