Exemplo n.º 1
0
async def main():
    logger = get_logger(__name__)
    runner = web.AppRunner(await application())
    await runner.setup()
    port = config.api_server.port
    site = web.TCPSite(runner, port=port, backlog=1024)
    await site.start()
    logger.debug(f"Run server / {port}")

    # Infinite loop for maintaining server alive
    # https://github.com/aio-libs/aiohttp/blob/master/aiohttp/web.py#L365
    while True:
        await asyncio.sleep(100 * 3600)
Exemplo n.º 2
0
import json
import datetime
import uuid

import deserialize
from aiohttp import web

from jauth.exception.request import IncompleteParameterError, TypeConvertError
from jauth.util.logger.logger import get_logger
from jauth.util.util import datetime_to_kst_datetime, datetime_to_utc_datetime

logger = get_logger(__name__)


class ManualJSONEncoder(json.JSONEncoder):
    def default(self, o):
        if isinstance(o, datetime.datetime):
            r = datetime_to_kst_datetime(
                datetime_to_utc_datetime(o)).isoformat()
            return r
        if isinstance(o, uuid.UUID):
            return str(o)
        return super().default(o)


def json_response(
    result=None,
    reason=None,
    status=200,
    headers=None,
):
Exemplo n.º 3
0
async def application():
    logger = get_logger(__name__)

    app = web.Application(logger=logger)
    logger.debug(object_to_dict(config))
    mysql_config = config.api_server.mysql

    await init_db(
        host=mysql_config.host,
        port=mysql_config.port,
        user=mysql_config.user,
        password=mysql_config.password,
        db=mysql_config.database,
    )
    user_repository = UserRepositoryImpl()
    token_repository = TokenRepositoryImpl()
    external = {
        "third_party": {
            "facebook": DummyThirdPartyRequest(
                {
                    "dummy-facebook-token": "dummy-facebook-user-id",
                    "dummy-facebook-token-dup": "dummy-facebook-user-id",
                },
                UserType.FACEBOOK,
            ),
            "kakao": DummyThirdPartyRequest(
                {
                    "dummy-kakao-token": "dummy-kakao-user-id",
                    "dummy-kakao-token-dup": "dummy-kakao-user-id",
                },
                UserType.KAKAO,
            ),
            "apple": DummyThirdPartyRequest(
                {
                    "dummy-apple-token": "dummy-apple-user-id",
                    "dummy-apple-token-dup": "dummy-apple-user-id",
                },
                UserType.APPLE,
            ),
            "google": DummyThirdPartyRequest(
                {
                    "dummy-google-token": "dummy-google-user-id",
                    "dummy-google-token-dup": "dummy-google-user-id",
                },
                UserType.GOOGLE,
            ),
        },
    }
    secret = {
        "jwt_secret": config.api_server.jwt_secret,
        "internal_api_keys": config.api_server.internal_api_keys,
    }
    user_creation_callback_handler = DummyCallbackHandler()
    user_update_callback_handler = DummyCallbackHandler()

    resource_list: Dict[str, BaseResource] = {
        "/users": UsersHttpResource(
            user_creation_callback_handler=user_creation_callback_handler,
            user_update_callback_handler=user_update_callback_handler,
            user_repository=user_repository,
            secret=secret,
            external=external,
        ),
        "/token": TokenHttpResource(
            user_repository=user_repository,
            token_repository=token_repository,
            secret=secret,
            external=external,
        ),
        "/internal": InternalHttpResource(
            user_repository=user_repository,
            secret=secret,
        ),
    }

    async def cleanup(request):
        await User.all().delete()
        await Token.all().delete()
        return json_response(result={"status": "done"})

    app.router.add_get("/storage/clean-up", cleanup)

    for path, resource in resource_list.items():
        subapp = web.Application(logger=logger)
        resource.route(subapp.router)
        plugin_app(app, path, subapp)

    cors = aiohttp_cors.setup(app)
    allow_url = "*"

    for route in list(app.router.routes()):
        cors.add(
            route,
            {
                allow_url: aiohttp_cors.ResourceOptions(
                    allow_credentials=True,
                    allow_headers="*",
                    allow_methods=[route.method],
                )
            },
        )

    return app
Exemplo n.º 4
0
async def application():
    logger = get_logger(__name__)

    app = web.Application(logger=logger)
    logger.debug(object_to_dict(config))
    mysql_config = config.api_server.mysql

    await init_db(
        host=mysql_config.host,
        port=mysql_config.port,
        user=mysql_config.user,
        password=mysql_config.password,
        db=mysql_config.database,
    )
    user_repository = UserRepositoryImpl()
    token_repository = TokenRepositoryImpl()
    external = {
        "third_party": {
            "facebook": FacebookToken(),
            "kakao": KakaoToken(),
            "apple": AppleToken(),
            "google": GoogleToken(),
        },
    }
    secret = {
        "jwt_secret": config.api_server.jwt_secret,
        "internal_api_keys": config.api_server.internal_api_keys,
    }
    user_creation_callback_handler = UserCreationCallbackHandler(
        config.api_server.event_callback_urls
    )
    user_update_callback_handler = UserUpdateCallbackHandler(
        config.api_server.event_callback_urls
    )

    resource_list: Dict[str, BaseResource] = {
        "/users": UsersHttpResource(
            user_creation_callback_handler=user_creation_callback_handler,
            user_update_callback_handler=user_update_callback_handler,
            user_repository=user_repository,
            secret=secret,
            external=external,
        ),
        "/token": TokenHttpResource(
            user_repository=user_repository,
            token_repository=token_repository,
            secret=secret,
            external=external,
        ),
        "/internal": InternalHttpResource(
            user_repository=user_repository,
            secret=secret,
        ),
    }

    for path, resource in resource_list.items():
        subapp = web.Application(logger=logger)
        resource.route(subapp.router)
        plugin_app(app, path, subapp)

    cors = aiohttp_cors.setup(app)
    allow_url = "*"

    for route in list(app.router.routes()):
        cors.add(
            route,
            {
                allow_url: aiohttp_cors.ResourceOptions(
                    allow_credentials=True,
                    allow_headers="*",
                    allow_methods=[route.method],
                )
            },
        )

    return app
Exemplo n.º 5
0
async def application():
    logger = get_logger(__name__)

    app = web.Application(logger=logger)
    logger.debug(object_to_dict(config))
    mysql_config = config.api_server.mysql
    await init_db(
        host=mysql_config.host,
        port=mysql_config.port,
        user=mysql_config.user,
        password=mysql_config.password,
        db=mysql_config.database,
    )

    redis_config = config.api_server.redis

    token_cache: ConnectionsPool = await aioredis.create_pool(
        f'redis://{redis_config.host}:{redis_config.port}',
        password=redis_config.password,
        minsize=5,
        maxsize=10,
        db=redis_config.token_cache.database,
    )

    storage = {
        'redis': {
            'token_cache': token_cache,
        }
    }
    external = {
        'third_party': {
            'facebook': FacebookToken(),
            'kakao': KakaoToken(),
            'apple': AppleToken(),
            'google': GoogleToken(),
        },
    }
    secret = {
        'jwt_secret': config.api_server.jwt_secret,
        'internal_api_keys': config.api_server.internal_api_keys,
    }
    resource_list = {
        '/users': UsersHttpResource,
        '/token': TokenHttpResource,
        '/internal': InternalHttpResource,
    }

    for path, resource in resource_list.items():
        subapp = web.Application(logger=logger)
        resource(
            router=subapp.router,
            storage=storage,
            secret=secret,
            external=external,
        ).route()
        plugin_app(app, path, subapp)

    cors = aiohttp_cors.setup(app)
    allow_url = '*'

    for route in list(app.router.routes()):
        cors.add(
            route, {
                allow_url:
                aiohttp_cors.ResourceOptions(allow_credentials=True,
                                             allow_headers='*',
                                             allow_methods=[route.method])
            })

    return app