diff options
Diffstat (limited to 'src/services/vyos-http-api-server')
| -rwxr-xr-x | src/services/vyos-http-api-server | 76 | 
1 files changed, 67 insertions, 9 deletions
| diff --git a/src/services/vyos-http-api-server b/src/services/vyos-http-api-server index 3a9efb73e..85d7884b6 100755 --- a/src/services/vyos-http-api-server +++ b/src/services/vyos-http-api-server @@ -223,6 +223,19 @@ class ShowModel(ApiModel):              }          } +class RebootModel(ApiModel): +    op: StrictStr +    path: List[StrictStr] + +    class Config: +        schema_extra = { +            "example": { +                "key": "id_key", +                "op": "reboot", +                "path": ["op", "mode", "path"], +            } +        } +  class ResetModel(ApiModel):      op: StrictStr      path: List[StrictStr] @@ -236,6 +249,19 @@ class ResetModel(ApiModel):              }          } +class PoweroffModel(ApiModel): +    op: StrictStr +    path: List[StrictStr] + +    class Config: +        schema_extra = { +            "example": { +                "key": "id_key", +                "op": "poweroff", +                "path": ["op", "mode", "path"], +            } +        } +  class Success(BaseModel):      success: bool @@ -713,6 +739,26 @@ def show_op(data: ShowModel):      return success(res) +@app.post('/reboot') +def reboot_op(data: RebootModel): +    session = app.state.vyos_session + +    op = data.op +    path = data.path + +    try: +        if op == 'reboot': +            res = session.reboot(path) +        else: +            return error(400, f"'{op}' is not a valid operation") +    except ConfigSessionError as e: +        return error(400, str(e)) +    except Exception as e: +        logger.critical(traceback.format_exc()) +        return error(500, "An internal error occured. Check the logs for details.") + +    return success(res) +  @app.post('/reset')  def reset_op(data: ResetModel):      session = app.state.vyos_session @@ -733,6 +779,26 @@ def reset_op(data: ResetModel):      return success(res) +@app.post('/poweroff') +def poweroff_op(data: PoweroffModel): +    session = app.state.vyos_session + +    op = data.op +    path = data.path + +    try: +        if op == 'poweroff': +            res = session.poweroff(path) +        else: +            return error(400, f"'{op}' is not a valid operation") +    except ConfigSessionError as e: +        return error(400, str(e)) +    except Exception as e: +        logger.critical(traceback.format_exc()) +        return error(500, "An internal error occured. Check the logs for details.") + +    return success(res) +  ###  # GraphQL integration @@ -825,15 +891,7 @@ def initialization(session: ConfigSession, app: FastAPI = app):      if app.state.vyos_graphql:          graphql_init(app) -    if not server_config['socket']: -        config = ApiServerConfig(app, -                                 host=server_config["listen_address"], -                                 port=int(server_config["port"]), -                                 proxy_headers=True) -    else: -        config = ApiServerConfig(app, -                                 uds="/run/api.sock", -                                 proxy_headers=True) +    config = ApiServerConfig(app, uds="/run/api.sock", proxy_headers=True)      server = ApiServer(config)  def run_server(): | 
