opengater-globalauth-client 0.1.3__py3-none-any.whl → 0.1.6__py3-none-any.whl
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.
- opengater_globalauth_client/__init__.py +1 -1
- opengater_globalauth_client/broker/events.py +2 -0
- opengater_globalauth_client/broker/publisher.py +4 -0
- opengater_globalauth_client/fastapi/__init__.py +2 -0
- opengater_globalauth_client/fastapi/dependencies.py +44 -16
- opengater_globalauth_client/models.py +1 -0
- {opengater_globalauth_client-0.1.3.dist-info → opengater_globalauth_client-0.1.6.dist-info}/METADATA +1 -1
- opengater_globalauth_client-0.1.6.dist-info/RECORD +14 -0
- opengater_globalauth_client-0.1.3.dist-info/RECORD +0 -14
- {opengater_globalauth_client-0.1.3.dist-info → opengater_globalauth_client-0.1.6.dist-info}/WHEEL +0 -0
|
@@ -35,6 +35,7 @@ class UserCreatedEvent(BrokerMessage):
|
|
|
35
35
|
user_id: str
|
|
36
36
|
auth_type: str
|
|
37
37
|
identifier: str
|
|
38
|
+
language: str = "ru"
|
|
38
39
|
extra_data: dict | None = None
|
|
39
40
|
trust: TrustInfo
|
|
40
41
|
|
|
@@ -99,6 +100,7 @@ class CreateUserCommand(BrokerMessage):
|
|
|
99
100
|
|
|
100
101
|
auth_type: Literal["telegram"]
|
|
101
102
|
identifier: str
|
|
103
|
+
language: str = "ru"
|
|
102
104
|
extra_data: dict | None = None
|
|
103
105
|
|
|
104
106
|
# Registration source (optional, mutually exclusive)
|
|
@@ -52,6 +52,7 @@ class GlobalAuthPublisher:
|
|
|
52
52
|
self,
|
|
53
53
|
auth_type: str,
|
|
54
54
|
identifier: str,
|
|
55
|
+
language: str = "ru",
|
|
55
56
|
extra_data: dict | None = None,
|
|
56
57
|
invited_by_id: str | None = None,
|
|
57
58
|
event_id: str | None = None,
|
|
@@ -65,6 +66,7 @@ class GlobalAuthPublisher:
|
|
|
65
66
|
Args:
|
|
66
67
|
auth_type: Authentication type ("telegram")
|
|
67
68
|
identifier: User identifier (e.g., telegram_id)
|
|
69
|
+
language: User language code (default: "ru")
|
|
68
70
|
extra_data: Additional data (username, first_name, etc.)
|
|
69
71
|
invited_by_id: UUID of inviter (referral)
|
|
70
72
|
event_id: Event/campaign ID
|
|
@@ -80,6 +82,7 @@ class GlobalAuthPublisher:
|
|
|
80
82
|
await publisher.create_user(
|
|
81
83
|
auth_type="telegram",
|
|
82
84
|
identifier="123456789",
|
|
85
|
+
language="en",
|
|
83
86
|
invited_by_id="uuid-of-inviter"
|
|
84
87
|
)
|
|
85
88
|
|
|
@@ -95,6 +98,7 @@ class GlobalAuthPublisher:
|
|
|
95
98
|
command = CreateUserCommand(
|
|
96
99
|
auth_type=auth_type,
|
|
97
100
|
identifier=identifier,
|
|
101
|
+
language=language,
|
|
98
102
|
extra_data=extra_data,
|
|
99
103
|
invited_by_id=invited_by_id,
|
|
100
104
|
event_id=event_id,
|
|
@@ -7,6 +7,7 @@ from opengater_globalauth_client.fastapi.dependencies import (
|
|
|
7
7
|
get_current_user_optional,
|
|
8
8
|
require_admin,
|
|
9
9
|
require_verified,
|
|
10
|
+
get_token,
|
|
10
11
|
)
|
|
11
12
|
|
|
12
13
|
__all__ = [
|
|
@@ -16,4 +17,5 @@ __all__ = [
|
|
|
16
17
|
"get_current_user_optional",
|
|
17
18
|
"require_admin",
|
|
18
19
|
"require_verified",
|
|
20
|
+
"get_token",
|
|
19
21
|
]
|
|
@@ -3,7 +3,8 @@ FastAPI dependencies for GlobalAuth.
|
|
|
3
3
|
"""
|
|
4
4
|
from typing import Callable
|
|
5
5
|
|
|
6
|
-
from fastapi import Request, HTTPException, Depends
|
|
6
|
+
from fastapi import Request, HTTPException, Depends
|
|
7
|
+
from fastapi.security import HTTPBearer, HTTPAuthorizationCredentials
|
|
7
8
|
|
|
8
9
|
from opengater_globalauth_client.client import GlobalAuthClient
|
|
9
10
|
from opengater_globalauth_client.models import User
|
|
@@ -16,6 +17,10 @@ from opengater_globalauth_client.exceptions import (
|
|
|
16
17
|
)
|
|
17
18
|
|
|
18
19
|
|
|
20
|
+
# Security scheme for Swagger UI
|
|
21
|
+
_security = HTTPBearer(auto_error=False)
|
|
22
|
+
|
|
23
|
+
|
|
19
24
|
def get_current_user(client: GlobalAuthClient | None = None) -> Callable:
|
|
20
25
|
"""
|
|
21
26
|
Dependency factory for getting current authenticated user.
|
|
@@ -48,7 +53,7 @@ def get_current_user(client: GlobalAuthClient | None = None) -> Callable:
|
|
|
48
53
|
"""
|
|
49
54
|
async def dependency(
|
|
50
55
|
request: Request,
|
|
51
|
-
|
|
56
|
+
credentials: HTTPAuthorizationCredentials | None = Depends(_security),
|
|
52
57
|
) -> User:
|
|
53
58
|
# Try to get user from middleware first
|
|
54
59
|
user = getattr(request.state, USER_STATE_KEY, None)
|
|
@@ -63,13 +68,13 @@ def get_current_user(client: GlobalAuthClient | None = None) -> Callable:
|
|
|
63
68
|
detail="Auth middleware not configured and no client provided"
|
|
64
69
|
)
|
|
65
70
|
|
|
66
|
-
if not
|
|
71
|
+
if not credentials:
|
|
67
72
|
raise HTTPException(
|
|
68
73
|
status_code=401,
|
|
69
|
-
detail="Authorization
|
|
74
|
+
detail="Authorization required"
|
|
70
75
|
)
|
|
71
76
|
|
|
72
|
-
token =
|
|
77
|
+
token = credentials.credentials
|
|
73
78
|
|
|
74
79
|
try:
|
|
75
80
|
return await client.introspect(token)
|
|
@@ -107,7 +112,7 @@ def get_current_user_optional(client: GlobalAuthClient | None = None) -> Callabl
|
|
|
107
112
|
"""
|
|
108
113
|
async def dependency(
|
|
109
114
|
request: Request,
|
|
110
|
-
|
|
115
|
+
credentials: HTTPAuthorizationCredentials | None = Depends(_security),
|
|
111
116
|
) -> User | None:
|
|
112
117
|
# Try to get user from middleware
|
|
113
118
|
user = getattr(request.state, USER_STATE_KEY, None)
|
|
@@ -116,14 +121,14 @@ def get_current_user_optional(client: GlobalAuthClient | None = None) -> Callabl
|
|
|
116
121
|
return user
|
|
117
122
|
|
|
118
123
|
# No token - that's ok for optional auth
|
|
119
|
-
if not
|
|
124
|
+
if not credentials:
|
|
120
125
|
return None
|
|
121
126
|
|
|
122
127
|
# Has token - validate it
|
|
123
128
|
if client is None:
|
|
124
129
|
return None
|
|
125
130
|
|
|
126
|
-
token =
|
|
131
|
+
token = credentials.credentials
|
|
127
132
|
|
|
128
133
|
try:
|
|
129
134
|
return await client.introspect(token)
|
|
@@ -159,13 +164,12 @@ def require_admin(client: GlobalAuthClient | None = None) -> Callable:
|
|
|
159
164
|
...
|
|
160
165
|
```
|
|
161
166
|
"""
|
|
162
|
-
user_dependency = get_current_user(client)
|
|
163
|
-
|
|
164
167
|
async def dependency(
|
|
165
168
|
request: Request,
|
|
166
|
-
|
|
169
|
+
credentials: HTTPAuthorizationCredentials | None = Depends(_security),
|
|
167
170
|
) -> User:
|
|
168
|
-
|
|
171
|
+
user_dep = get_current_user(client)
|
|
172
|
+
user = await user_dep(request, credentials)
|
|
169
173
|
|
|
170
174
|
if not user.is_admin:
|
|
171
175
|
raise HTTPException(
|
|
@@ -192,13 +196,12 @@ def require_verified(client: GlobalAuthClient | None = None) -> Callable:
|
|
|
192
196
|
...
|
|
193
197
|
```
|
|
194
198
|
"""
|
|
195
|
-
user_dependency = get_current_user(client)
|
|
196
|
-
|
|
197
199
|
async def dependency(
|
|
198
200
|
request: Request,
|
|
199
|
-
|
|
201
|
+
credentials: HTTPAuthorizationCredentials | None = Depends(_security),
|
|
200
202
|
) -> User:
|
|
201
|
-
|
|
203
|
+
user_dep = get_current_user(client)
|
|
204
|
+
user = await user_dep(request, credentials)
|
|
202
205
|
|
|
203
206
|
if not user.verified:
|
|
204
207
|
raise HTTPException(
|
|
@@ -209,3 +212,28 @@ def require_verified(client: GlobalAuthClient | None = None) -> Callable:
|
|
|
209
212
|
return user
|
|
210
213
|
|
|
211
214
|
return dependency
|
|
215
|
+
|
|
216
|
+
|
|
217
|
+
def get_token() -> Callable:
|
|
218
|
+
"""
|
|
219
|
+
Simple dependency to get just the token string.
|
|
220
|
+
|
|
221
|
+
Example:
|
|
222
|
+
```python
|
|
223
|
+
@app.get("/something")
|
|
224
|
+
async def something(token: str = Depends(get_token())):
|
|
225
|
+
# Use raw token
|
|
226
|
+
...
|
|
227
|
+
```
|
|
228
|
+
"""
|
|
229
|
+
async def dependency(
|
|
230
|
+
credentials: HTTPAuthorizationCredentials | None = Depends(_security),
|
|
231
|
+
) -> str:
|
|
232
|
+
if not credentials:
|
|
233
|
+
raise HTTPException(
|
|
234
|
+
status_code=401,
|
|
235
|
+
detail="Authorization required"
|
|
236
|
+
)
|
|
237
|
+
return credentials.credentials
|
|
238
|
+
|
|
239
|
+
return dependency
|
{opengater_globalauth_client-0.1.3.dist-info → opengater_globalauth_client-0.1.6.dist-info}/METADATA
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: opengater-globalauth-client
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.6
|
|
4
4
|
Summary: Client library for GlobalAuth authentication service
|
|
5
5
|
Project-URL: Homepage, https://github.com/opengater/globalauth-client
|
|
6
6
|
Project-URL: Documentation, https://github.com/opengater/globalauth-client#readme
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
opengater_globalauth_client/__init__.py,sha256=XF5E_NbE6CqZSa4nw0jl2jXVIKuWLNEY_di_jM3quKM,3102
|
|
2
|
+
opengater_globalauth_client/client.py,sha256=PPePBs_6uaYPxKhqVZOWjS7hG8bx9flA7QLOnKQy6HM,12393
|
|
3
|
+
opengater_globalauth_client/exceptions.py,sha256=0lw1UMrh7B-f6q-TAHgv5euiDwGo9PjmV7SkewSM3MQ,830
|
|
4
|
+
opengater_globalauth_client/models.py,sha256=qU5jTqIJwa-RkX7e3qqH0i2sQI7s3fqWkmylALA1IZ8,2696
|
|
5
|
+
opengater_globalauth_client/broker/__init__.py,sha256=ih8b1xYcdUZSXZY1DwVqsnDbe8O_ch6ckYwYSyAnM_Q,632
|
|
6
|
+
opengater_globalauth_client/broker/consumer.py,sha256=2CCkp1MD5igFYDh3qlkrRtKR7E0Lk1EQ7dWxwGVEoQo,6057
|
|
7
|
+
opengater_globalauth_client/broker/events.py,sha256=5335_6MJtDa8cMLyhUPJBq5JylNiHc3T6U-7RaBhj5c,2724
|
|
8
|
+
opengater_globalauth_client/broker/publisher.py,sha256=qHP9Xq-BtsC3JFh0AdeW_HumebY34LErcTyegxxnfk0,3847
|
|
9
|
+
opengater_globalauth_client/fastapi/__init__.py,sha256=Jjk9eJD1-GIXMprJT0NAkmAb7rqFT0DPqx0s8eEI3c8,486
|
|
10
|
+
opengater_globalauth_client/fastapi/dependencies.py,sha256=P5C9PWIOsKrDwtF8LlPStPzFaMMjqXU85mQ1vuc_gn8,6912
|
|
11
|
+
opengater_globalauth_client/fastapi/middleware.py,sha256=_ySEvBH4C86VIdtuevTO8MlpSvIG8r_liLN4mpFaAls,5656
|
|
12
|
+
opengater_globalauth_client-0.1.6.dist-info/METADATA,sha256=lmjtpvrjdcrtDj_Gg4tWWWZ0r4GxAfORWJmYh3aRlLM,5901
|
|
13
|
+
opengater_globalauth_client-0.1.6.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
|
|
14
|
+
opengater_globalauth_client-0.1.6.dist-info/RECORD,,
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
opengater_globalauth_client/__init__.py,sha256=78rRMS6IPaQNXeSTjDJ-HIg9RuEAEZMmvRragIewPw0,3102
|
|
2
|
-
opengater_globalauth_client/client.py,sha256=PPePBs_6uaYPxKhqVZOWjS7hG8bx9flA7QLOnKQy6HM,12393
|
|
3
|
-
opengater_globalauth_client/exceptions.py,sha256=0lw1UMrh7B-f6q-TAHgv5euiDwGo9PjmV7SkewSM3MQ,830
|
|
4
|
-
opengater_globalauth_client/models.py,sha256=MzULCnIF0a3YCA5tUPnQfYFd_kv5xZ9hvqI5xJ45TTI,2671
|
|
5
|
-
opengater_globalauth_client/broker/__init__.py,sha256=ih8b1xYcdUZSXZY1DwVqsnDbe8O_ch6ckYwYSyAnM_Q,632
|
|
6
|
-
opengater_globalauth_client/broker/consumer.py,sha256=2CCkp1MD5igFYDh3qlkrRtKR7E0Lk1EQ7dWxwGVEoQo,6057
|
|
7
|
-
opengater_globalauth_client/broker/events.py,sha256=nidShH1XCe7xt02gFANtq6mbjaVA5TwtnZ06qbgql4k,2674
|
|
8
|
-
opengater_globalauth_client/broker/publisher.py,sha256=mLk9yPrGG1a_0b8BlqEYPWOdrLbT2SPh77rLyKIlzNM,3698
|
|
9
|
-
opengater_globalauth_client/fastapi/__init__.py,sha256=ynkeQ5Had9SEPgsP1fJVCvuS-qiTFolYFn6ZaxEwwvU,454
|
|
10
|
-
opengater_globalauth_client/fastapi/dependencies.py,sha256=oJBaeeWhNFV5dfSI2-K9uOpx1fqfTH73JHeuO2BZn_8,6242
|
|
11
|
-
opengater_globalauth_client/fastapi/middleware.py,sha256=_ySEvBH4C86VIdtuevTO8MlpSvIG8r_liLN4mpFaAls,5656
|
|
12
|
-
opengater_globalauth_client-0.1.3.dist-info/METADATA,sha256=ANDRvkGq0-8tcbLQ03wpV6v6y8_vLs4rlx6kdFAJHdY,5901
|
|
13
|
-
opengater_globalauth_client-0.1.3.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
|
|
14
|
-
opengater_globalauth_client-0.1.3.dist-info/RECORD,,
|
{opengater_globalauth_client-0.1.3.dist-info → opengater_globalauth_client-0.1.6.dist-info}/WHEEL
RENAMED
|
File without changes
|