summaryrefslogtreecommitdiff
path: root/ATRI/plugins/console/driver/depends.py
blob: 8205f449be50b4b06f639d78dc4b4ae0506520cb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
from typing import Union
from datetime import datetime

from fastapi import Query, HTTPException, status
from starlette.websockets import WebSocket

from ..data_source import AuthDealer


def http_author(token: Union[str, None] = Query(default=None)):
    data = AuthDealer.get()
    if data is None:
        raise HTTPException(status_code=status.HTTP_403_FORBIDDEN, detail="验证信息不存在")

    now_time = datetime.now().timestamp()
    if token != data.token:
        raise HTTPException(status_code=status.HTTP_403_FORBIDDEN, detail="密钥不匹配, 请检查")
    elif now_time > data.dead_time:
        raise HTTPException(status_code=status.HTTP_403_FORBIDDEN, detail="密钥已过期")
    else:
        return token


async def websocket_author(
    websocket: WebSocket, token: Union[str, None] = Query(default=None)
):
    data = AuthDealer.get()
    if not data:
        await websocket.close(code=status.WS_1008_POLICY_VIOLATION)
        return

    now_time = datetime.now().timestamp()
    if token != data.token:
        await websocket.close(code=status.WS_1008_POLICY_VIOLATION)
    elif now_time > data.dead_time:
        await websocket.close(code=status.WS_1008_POLICY_VIOLATION)
    else:
        return token