Skip to content

Commit 68fbec9

Browse files
authored
Add unbounded sessions (#205)
## Изменения Были добавлены unbounded (далее неограниченные) сессии. Неограниченные сессии позволяют пользователю не обновлять токен сессии для обновления списка его скоупов (прав). Список скоупов у таких сессий не привязан к сессии, а подтягивается из групп, к которым относится пользователь. ## Детали реализации Все активные до обновления сессии станут неограниченными. Для создания неограниченной сессии необходимо при создании сессии указать поле is_unbounded: true Для создания ограниченной сессии это поле можно не указывать (Стандартное значение поля is_unbounded - false) При авторизации через login/register генерируемая сессия будет неограниченной <!-- resolves #193 --> ## Check-List <!-- После сохранения у следующих полей появятся галочки, которые нужно проставить мышкой --> - [ ] Вы проверили свой код перед отправкой запроса? - [ ] Вы написали тесты к реализованным функциям? - [ ] Вы не забыли применить форматирование `black` и `isort` для _Back-End_ или `Prettier` для _Front-End_?
1 parent d42cd5a commit 68fbec9

26 files changed

Lines changed: 325 additions & 114 deletions

auth_backend/auth_method/method_mixins.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,13 @@ async def _login(*args, **kwargs) -> Session:
5151

5252
@staticmethod
5353
async def _create_session(
54-
user: User, scopes_list_names: list[TypeScope] | None, session_name: str | None = None, *, db_session: DbSession
54+
user: User,
55+
scopes_list_names: list[TypeScope] | None,
56+
session_name: str | None = None,
57+
*,
58+
db_session: DbSession,
5559
) -> Session:
5660
"""Создает сессию пользователя"""
57-
return await create_session(user, scopes_list_names, db_session=db_session, session_name=session_name)
61+
return await create_session(
62+
user, scopes_list_names, db_session=db_session, session_name=session_name, is_unbounded=True
63+
)

auth_backend/auth_plugins/email.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,10 @@ async def _login(cls, user_inp: EmailLogin, background_tasks: BackgroundTasks) -
166166
userdata,
167167
)
168168
return await cls._create_session(
169-
query.user, user_inp.scopes, db_session=db.session, session_name=user_inp.session_name
169+
query.user,
170+
user_inp.scopes,
171+
db_session=db.session,
172+
session_name=user_inp.session_name,
170173
)
171174

172175
@staticmethod

auth_backend/auth_plugins/github.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,10 @@ async def _register(
114114
)
115115
await AuthPluginMeta.user_updated(new_user, old_user)
116116
return await cls._create_session(
117-
user, user_inp.scopes, db_session=db.session, session_name=user_inp.session_name
117+
user,
118+
user_inp.scopes,
119+
db_session=db.session,
120+
session_name=user_inp.session_name,
118121
)
119122

120123
@classmethod
@@ -169,7 +172,10 @@ async def _login(cls, user_inp: OauthResponseSchema, background_tasks: Backgroun
169172
userdata,
170173
)
171174
return await cls._create_session(
172-
user, user_inp.scopes, db_session=db.session, session_name=user_inp.session_name
175+
user,
176+
user_inp.scopes,
177+
db_session=db.session,
178+
session_name=user_inp.session_name,
173179
)
174180

175181
@classmethod

auth_backend/auth_plugins/google.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,10 @@ async def _register(
122122
)
123123
await AuthPluginMeta.user_updated(new_user, old_user)
124124
return await cls._create_session(
125-
user, user_inp.scopes, db_session=db.session, session_name=user_inp.session_name
125+
user,
126+
user_inp.scopes,
127+
db_session=db.session,
128+
session_name=user_inp.session_name,
126129
)
127130

128131
@classmethod
@@ -161,7 +164,10 @@ async def _login(cls, user_inp: OauthResponseSchema, background_tasks: Backgroun
161164
userdata,
162165
)
163166
return await cls._create_session(
164-
user, user_inp.scopes, db_session=db.session, session_name=user_inp.session_name
167+
user,
168+
user_inp.scopes,
169+
db_session=db.session,
170+
session_name=user_inp.session_name,
165171
)
166172

167173
@classmethod

auth_backend/auth_plugins/keycloak.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,10 @@ async def _register(
113113
)
114114
await AuthPluginMeta.user_updated(new_user, old_user)
115115
return await cls._create_session(
116-
user, user_inp.scopes, db_session=db.session, session_name=user_inp.session_name
116+
user,
117+
user_inp.scopes,
118+
db_session=db.session,
119+
session_name=user_inp.session_name,
117120
)
118121

119122
@classmethod
@@ -170,7 +173,10 @@ async def _login(cls, user_inp: OauthResponseSchema, background_tasks: Backgroun
170173
userdata,
171174
)
172175
return await cls._create_session(
173-
user, user_inp.scopes, db_session=db.session, session_name=user_inp.session_name
176+
user,
177+
user_inp.scopes,
178+
db_session=db.session,
179+
session_name=user_inp.session_name,
174180
)
175181

176182
@classmethod

auth_backend/auth_plugins/lkmsu.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,10 @@ async def _register(
111111
)
112112
await AuthPluginMeta.user_updated(new_user, old_user)
113113
return await cls._create_session(
114-
user, user_inp.scopes, db_session=db.session, session_name=user_inp.session_name
114+
user,
115+
user_inp.scopes,
116+
db_session=db.session,
117+
session_name=user_inp.session_name,
115118
)
116119

117120
@classmethod
@@ -164,7 +167,10 @@ async def _login(
164167
userdata,
165168
)
166169
return await cls._create_session(
167-
user, user_inp.scopes, db_session=db.session, session_name=user_inp.session_name
170+
user,
171+
user_inp.scopes,
172+
db_session=db.session,
173+
session_name=user_inp.session_name,
168174
)
169175

170176
@classmethod

auth_backend/auth_plugins/telegram.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,10 @@ async def _register(
8888
)
8989
await AuthPluginMeta.user_updated(new_user, old_user)
9090
return await cls._create_session(
91-
user, user_inp.scopes, db_session=db.session, session_name=user_inp.session_name
91+
user,
92+
user_inp.scopes,
93+
db_session=db.session,
94+
session_name=user_inp.session_name,
9295
)
9396

9497
@classmethod
@@ -118,7 +121,10 @@ async def _login(cls, user_inp: OauthResponseSchema, background_tasks: Backgroun
118121
userdata,
119122
)
120123
return await cls._create_session(
121-
user, user_inp.scopes, db_session=db.session, session_name=user_inp.session_name
124+
user,
125+
user_inp.scopes,
126+
db_session=db.session,
127+
session_name=user_inp.session_name,
122128
)
123129

124130
@classmethod

auth_backend/auth_plugins/vk.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,10 @@ async def _register(
121121
)
122122
await AuthPluginMeta.user_updated(new_user, old_user)
123123
return await cls._create_session(
124-
user, user_inp.scopes, db_session=db.session, session_name=user_inp.session_name
124+
user,
125+
user_inp.scopes,
126+
db_session=db.session,
127+
session_name=user_inp.session_name,
125128
)
126129

127130
@classmethod
@@ -170,7 +173,10 @@ async def _login(cls, user_inp: OauthResponseSchema, background_tasks: Backgroun
170173
userdata,
171174
)
172175
return await cls._create_session(
173-
user, user_inp.scopes, db_session=db.session, session_name=user_inp.session_name
176+
user,
177+
user_inp.scopes,
178+
db_session=db.session,
179+
session_name=user_inp.session_name,
174180
)
175181

176182
@classmethod

auth_backend/auth_plugins/yandex.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,10 @@ async def _register(
126126
)
127127
await AuthPluginMeta.user_updated(new_user, old_user)
128128
return await cls._create_session(
129-
user, user_inp.scopes, db_session=db.session, session_name=user_inp.session_name
129+
user,
130+
user_inp.scopes,
131+
db_session=db.session,
132+
session_name=user_inp.session_name,
130133
)
131134

132135
@classmethod
@@ -174,7 +177,10 @@ async def _login(cls, user_inp: OauthResponseSchema, background_tasks: Backgroun
174177
userdata,
175178
)
176179
return await cls._create_session(
177-
user, user_inp.scopes, db_session=db.session, session_name=user_inp.session_name
180+
user,
181+
user_inp.scopes,
182+
db_session=db.session,
183+
session_name=user_inp.session_name,
178184
)
179185

180186
@classmethod

auth_backend/models/db.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,7 @@ class UserSession(BaseDbModel):
158158
user_id: Mapped[int] = mapped_column(Integer, sqlalchemy.ForeignKey("user.id"))
159159
expires: Mapped[datetime.datetime] = mapped_column(DateTime, default=session_expires_date)
160160
token: Mapped[str] = mapped_column(String, unique=True)
161+
is_unbounded: Mapped[bool] = mapped_column(Boolean, default=False)
161162
last_activity: Mapped[datetime.datetime] = mapped_column(DateTime, default=datetime.datetime.utcnow)
162163
create_ts: Mapped[datetime.datetime] = mapped_column(DateTime, default=datetime.datetime.utcnow)
163164
user: Mapped[User] = relationship(

0 commit comments

Comments
 (0)