gitscope
https://dev.kronoz.win/r/marzneshin.git
app/tasks/review_users.py · v0.5.4
Source
1 9a6b0fa Dawsh 2y ago import asyncio
2 f7af2b3 Dawsh 2y ago import logging
3 d377c4c Dawsh 2y ago from datetime import datetime, timedelta
4 a47eb4c Dawsh 2y ago from typing import TYPE_CHECKING
5 a47eb4c Dawsh 2y ago
6 f7af2b3 Dawsh 2y ago from app import marznode
7 01cdf2e Dawsh 2y ago from app.db import (
8 01cdf2e Dawsh 2y ago GetDB,
9 01cdf2e Dawsh 2y ago get_users,
10 01cdf2e Dawsh 2y ago )
11 d377c4c Dawsh 2y ago from app.models.user import (
12 d377c4c Dawsh 2y ago UserResponse,
13 d377c4c Dawsh 2y ago UserExpireStrategy,
14 f1ab16c Dawsh 2y ago )
15 d377c4c Dawsh 2y ago from app.utils import report
16 a47eb4c Dawsh 2y ago
17 a47eb4c Dawsh 2y ago if TYPE_CHECKING:
18 d377c4c Dawsh 2y ago pass
19 a47eb4c Dawsh 2y ago
20 a47eb4c Dawsh 2y ago
21 f7af2b3 Dawsh 2y ago logger = logging.getLogger(__name__)
22 f7af2b3 Dawsh 2y ago
23 f7af2b3 Dawsh 2y ago
24 f7af2b3 Dawsh 2y ago async def review_users():
25 a47eb4c Dawsh 2y ago now = datetime.utcnow()
26 9a6b0fa Dawsh 2y ago with GetDB() as db:
27 d377c4c Dawsh 2y ago for user in get_users(db, activated=True, is_active=False):
28 d377c4c Dawsh 2y ago """looking for expired/to be limited users who are still active"""
29 d377c4c Dawsh 2y ago
30 d377c4c Dawsh 2y ago marznode.operations.update_user(user, remove=True)
31 d377c4c Dawsh 2y ago user.activated = False
32 d377c4c Dawsh 2y ago db.commit()
33 d377c4c Dawsh 2y ago db.refresh(user)
34 d377c4c Dawsh 2y ago asyncio.ensure_future(
35 01cdf2e Dawsh 2y ago report.status_change(
36 f1ab16c Dawsh 2y ago user.username,
37 f1ab16c Dawsh 2y ago user.status,
38 f1ab16c Dawsh 2y ago UserResponse.model_validate(user),
39 01cdf2e Dawsh 2y ago )
40 01cdf2e Dawsh 2y ago )
41 a47eb4c Dawsh 2y ago
42 d377c4c Dawsh 2y ago logger.info(
43 d377c4c Dawsh 2y ago "User `%s` activation state changed to `%s`",
44 d377c4c Dawsh 2y ago user.username,
45 d377c4c Dawsh 2y ago str(user.activated),
46 d377c4c Dawsh 2y ago )
47 a47eb4c Dawsh 2y ago
48 d377c4c Dawsh 2y ago for user in get_users(
49 d377c4c Dawsh 2y ago db,
50 d377c4c Dawsh 2y ago expire_strategy=UserExpireStrategy.START_ON_FIRST_USE,
51 d377c4c Dawsh 2y ago is_active=True,
52 d377c4c Dawsh 2y ago ):
53 d377c4c Dawsh 2y ago """looking for to be activated, on hold users"""
54 d377c4c Dawsh 2y ago base_time = user.edit_at or user.created_at
55 d377c4c Dawsh 2y ago
56 d377c4c Dawsh 2y ago # Check if the user is online After or at 'base_time' or...
57 d377c4c Dawsh 2y ago # If the user didn't connect until activation_deadline; change status to "Active"
58 d377c4c Dawsh 2y ago if not (
59 d377c4c Dawsh 2y ago (user.online_at and base_time <= user.online_at)
60 d377c4c Dawsh 2y ago or (
61 d377c4c Dawsh 2y ago user.activation_deadline
62 d377c4c Dawsh 2y ago and (user.activation_deadline <= now)
63 d377c4c Dawsh 2y ago )
64 d377c4c Dawsh 2y ago ):
65 a47eb4c Dawsh 2y ago continue
66 a47eb4c Dawsh 2y ago
67 d377c4c Dawsh 2y ago user.expire_date = datetime.utcnow() + timedelta(
68 d377c4c Dawsh 2y ago seconds=user.usage_duration
69 d377c4c Dawsh 2y ago )
70 d377c4c Dawsh 2y ago user.expire_strategy = UserExpireStrategy.FIXED_DATE
71 d377c4c Dawsh 2y ago db.commit()
72 d377c4c Dawsh 2y ago db.refresh(user)
73 d377c4c Dawsh 2y ago asyncio.ensure_future(
74 01cdf2e Dawsh 2y ago report.status_change(
75 f1ab16c Dawsh 2y ago user.username,
76 f1ab16c Dawsh 2y ago user.status,
77 f1ab16c Dawsh 2y ago UserResponse.model_validate(user),
78 01cdf2e Dawsh 2y ago )
79 01cdf2e Dawsh 2y ago )
80 d377c4c Dawsh 2y ago logger.info("on hold user `%s` has been activated", user.username)