File size: 2,274 Bytes
287d681
 
 
 
 
 
3807ea3
287d681
4e663d8
 
 
 
 
 
 
287d681
 
 
 
 
 
 
 
3807ea3
287d681
f3080d1
3807ea3
287d681
 
 
 
 
 
3807ea3
 
287d681
3807ea3
287d681
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# Copyright (c) Meta Platforms, Inc. and affiliates.
# All rights reserved.
#
# This source code is licensed under the BSD-style license found in the
# LICENSE file in the root directory of this source tree.

"""FastAPI application for the CyberSecurity_OWASP OpenEnv server."""

import os

# OpenEnv disables the Gradio playground unless this flag is enabled. Default it
# on so Docker/HF Spaces show the reset/step/state UI, while explicit env values
# such as ENABLE_WEB_INTERFACE=false still take precedence.
os.environ.setdefault("ENABLE_WEB_INTERFACE", "true")

try:
    from openenv.core.env_server.http_server import create_app
except Exception as e:  # pragma: no cover
    raise ImportError(
        "openenv is required for the web interface. Install dependencies with '\n    uv sync\n'"
    ) from e

try:
    from ..models import CyberSecurityOWASPAction, CyberSecurityOWASPObservation
    from .CyberSecurity_OWASP_environment import CybersecurityOwaspEnvironment
except ImportError:
    from models import CyberSecurityOWASPAction, CyberSecurityOWASPObservation
    from server.CyberSecurity_OWASP_environment import CybersecurityOwaspEnvironment


# Create the app with web interface and README integration
app = create_app(
    CybersecurityOwaspEnvironment,
    CyberSecurityOWASPAction,
    CyberSecurityOWASPObservation,
    env_name="CyberSecurity_OWASP",
    max_concurrent_envs=4,
)


def main(host: str = "0.0.0.0", port: int = 8000):
    """
    Entry point for direct execution via uv run or python -m.

    This function enables running the server without Docker:
        uv run --project . server
        uv run --project . server --port 8001
        python -m CyberSecurity_OWASP.server.app

    Args:
        host: Host address to bind to (default: "0.0.0.0")
        port: Port number to listen on (default: 8000)

    For production deployments, consider using uvicorn directly with
    multiple workers:
        uvicorn CyberSecurity_OWASP.server.app:app --workers 4
    """
    import uvicorn

    uvicorn.run(app, host=host, port=port)


if __name__ == "__main__":
    import argparse

    parser = argparse.ArgumentParser()
    parser.add_argument("--port", type=int, default=8000)
    args = parser.parse_args()
    main(port=args.port)