summaryrefslogtreecommitdiff
path: root/src/soc_collector/auth.py
blob: 4aacb527d6e1f4edffc4b262a059e6aa61507deb (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
39
40
41
42
43
44
45
46
"""Auth module"""
from typing import List
from fastapi import Request, HTTPException


def load_api_keys(path: str) -> List[str]:
    """Load API keys from file

    :param path: Path to API keys file.
    :return: List[str]
    """
    keys: List[str] = []

    with open(path, encoding="utf-8") as f_data:
        key_file = f_data.readlines()

    for line in key_file:
        if line[0] == "#" or len(line) < 3:
            continue

        key = line.split(";")[0]
        keys.append(key)

    return keys


def authorize_client(request: Request, api_keys: List[str]) -> None:
    """Authorize a client request.

    Parameters:
    request (Request): The HTTP request.
    api_keys (List[str]): List of accepted api_keys.

    Raises HTTPException with status_code=401 if authorize fail.

    Returns:
    None
    """

    if "API-KEY" not in request.headers:
        raise HTTPException(status_code=401, detail="API-KEY header missing")

    request_key = request.headers["API-KEY"].strip()

    if request_key not in api_keys:
        raise HTTPException(status_code=401, detail="API-KEY header invalid")