package org.wfc.omada.api.sitesetting;

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import io.swagger.annotations.ApiResponse;
import io.swagger.annotations.ApiResponses;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.core.io.Resource;
import org.springframework.http.ResponseEntity;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.wfc.omada.config.FeignConfig;
import org.wfc.omada.api.sitesetting.model.ClientToSiteVpnClient;
import org.wfc.omada.api.sitesetting.model.ClientToSiteVpnServer;
import org.wfc.omada.api.sitesetting.model.IPsecFailover;
import org.wfc.omada.api.sitesetting.model.OperationResponseClientToSiteVpnClient;
import org.wfc.omada.api.sitesetting.model.OperationResponseClientToSiteVpnServer;
import org.wfc.omada.api.sitesetting.model.OperationResponseGridVoVpnUserResponse;
import org.wfc.omada.api.sitesetting.model.OperationResponseGridVoiPsecFailover;
import org.wfc.omada.api.sitesetting.model.OperationResponseListClientToSiteVpnClient;
import org.wfc.omada.api.sitesetting.model.OperationResponseListClientToSiteVpnServer;
import org.wfc.omada.api.sitesetting.model.OperationResponseListSiteToSiteVpn;
import org.wfc.omada.api.sitesetting.model.OperationResponseListVpnUserResponse;
import org.wfc.omada.api.sitesetting.model.OperationResponseSiteToSiteVpn;
import org.wfc.omada.api.sitesetting.model.OperationResponseWithoutResult;
import org.wfc.omada.api.sitesetting.model.SiteToSiteVpn;
import org.wfc.omada.api.sitesetting.model.VpnUser;
import org.wfc.omada.api.sitesetting.model.VpnUserRequest;

import javax.validation.Valid;
import javax.validation.constraints.NotNull;
@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen", date = "2024-12-04T11:31:51.978+08:00[Asia/Shanghai]")

@Validated
@Api(value = "OmadaVpn", description = "the OmadaVpn API")
@FeignClient(name="OmadaVpnApi", url = "${omada.omada-url}", configuration = FeignConfig.class)
public interface OmadaVpnApi {

    /**
     * POST /openapi/v1/{omadacId}/sites/{siteId}/vpn/client-to-site-vpn-clients : Create client-to-site VPN client
     * Create client-to-site VPN client.&lt;br/&gt;&lt;br/&gt;The interface requires one of the permissions: &lt;br/&gt;Site Settings Manager Modify
     *
     * @param omadacId Omada ID (required)
     * @param siteId Site ID (required)
     * @param clientToSiteVpnClient  (optional)
     * @return OK (status code 200)
     */
    @ApiOperation(value = "Create client-to-site VPN client", nickname = "createClientToSiteVpnClient", notes = "Create client-to-site VPN client.<br/><br/>The interface requires one of the permissions: <br/>Site Settings Manager Modify", response = OperationResponseWithoutResult.class, tags={ "Omada/VPN","VPN", })
    @ApiResponses(value = { 
        @ApiResponse(code = 200, message = "OK", response = OperationResponseWithoutResult.class) })
    @RequestMapping(value = "/openapi/v1/${omada.omadac-id}/sites/{siteId}/vpn/client-to-site-vpn-clients",
        produces = "*/*", 
        consumes = "application/json",
        method = RequestMethod.POST)
    ResponseEntity<OperationResponseWithoutResult> createClientToSiteVpnClient(@ApiParam(value = "Site ID",required=true) @PathVariable("siteId") String siteId,@ApiParam(value = ""  )  @Valid @RequestBody(required = false) ClientToSiteVpnClient clientToSiteVpnClient);


    /**
     * POST /openapi/v1/{omadacId}/sites/{siteId}/vpn/client-to-site-vpn-servers : Create client-to-site VPN server
     * Create client-to-site VPN server.&lt;br/&gt;&lt;br/&gt;The interface requires one of the permissions: &lt;br/&gt;Site Settings Manager Modify&lt;br/&gt;&lt;br/&gt;The possible error code for the interface in the returned body is one of the following error codes (non generic error codes): &lt;br/&gt;-35708  -  The device does not support IPSec Source NAT.
     *
     * @param omadacId Omada ID (required)
     * @param siteId Site ID (required)
     * @param clientToSiteVpnServer  (optional)
     * @return OK (status code 200)
     */
    @ApiOperation(value = "Create client-to-site VPN server", nickname = "createClientToSiteVpnServer", notes = "Create client-to-site VPN server.<br/><br/>The interface requires one of the permissions: <br/>Site Settings Manager Modify<br/><br/>The possible error code for the interface in the returned body is one of the following error codes (non generic error codes): <br/>-35708  -  The device does not support IPSec Source NAT.", response = OperationResponseWithoutResult.class, tags={ "Omada/VPN","VPN", })
    @ApiResponses(value = { 
        @ApiResponse(code = 200, message = "OK", response = OperationResponseWithoutResult.class) })
    @RequestMapping(value = "/openapi/v1/${omada.omadac-id}/sites/{siteId}/vpn/client-to-site-vpn-servers",
        produces = "*/*", 
        consumes = "application/json",
        method = RequestMethod.POST)
    ResponseEntity<OperationResponseWithoutResult> createClientToSiteVpnServer(@ApiParam(value = "Site ID",required=true) @PathVariable("siteId") String siteId,@ApiParam(value = ""  )  @Valid @RequestBody(required = false) ClientToSiteVpnServer clientToSiteVpnServer);


    /**
     * POST /openapi/v1/{omadacId}/sites/{siteId}/vpn/ipsec_failovers : Create IPsec failover
     * Create IPsec failover.&lt;br/&gt;&lt;br/&gt;The interface requires one of the permissions: &lt;br/&gt;Site Settings Manager Modify
     *
     * @param omadacId Omada ID (required)
     * @param siteId Site ID (required)
     * @param ipsecFailover  (optional)
     * @return OK (status code 200)
     */
    @ApiOperation(value = "Create IPsec failover", nickname = "createIpsecFailover", notes = "Create IPsec failover.<br/><br/>The interface requires one of the permissions: <br/>Site Settings Manager Modify", response = OperationResponseWithoutResult.class, tags={ "Omada/VPN","VPN", })
    @ApiResponses(value = { 
        @ApiResponse(code = 200, message = "OK", response = OperationResponseWithoutResult.class) })
    @RequestMapping(value = "/openapi/v1/${omada.omadac-id}/sites/{siteId}/vpn/ipsec_failovers",
        produces = "*/*", 
        consumes = "application/json",
        method = RequestMethod.POST)
    ResponseEntity<OperationResponseWithoutResult> createIpsecFailover(@ApiParam(value = "Site ID",required=true) @PathVariable("siteId") String siteId,@ApiParam(value = ""  )  @Valid @RequestBody(required = false) IPsecFailover ipsecFailover);


    /**
     * POST /openapi/v1/{omadacId}/sites/{siteId}/vpn/site-to-site-vpns : Create site-to-site VPN
     * Create site-to-site VPN.&lt;br/&gt;&lt;br/&gt;The interface requires one of the permissions: &lt;br/&gt;Site Settings Manager Modify&lt;br/&gt;&lt;br/&gt;The possible error code for the interface in the returned body is one of the following error codes (non generic error codes): &lt;br/&gt;-35708  -  The device does not support IPSec Source NAT.
     *
     * @param omadacId Omada ID (required)
     * @param siteId Site ID (required)
     * @param siteToSiteVpn  (optional)
     * @return OK (status code 200)
     */
    @ApiOperation(value = "Create site-to-site VPN", nickname = "createSiteToSiteVpn", notes = "Create site-to-site VPN.<br/><br/>The interface requires one of the permissions: <br/>Site Settings Manager Modify<br/><br/>The possible error code for the interface in the returned body is one of the following error codes (non generic error codes): <br/>-35708  -  The device does not support IPSec Source NAT.", response = OperationResponseWithoutResult.class, tags={ "Omada/VPN","VPN", })
    @ApiResponses(value = { 
        @ApiResponse(code = 200, message = "OK", response = OperationResponseWithoutResult.class) })
    @RequestMapping(value = "/openapi/v1/${omada.omadac-id}/sites/{siteId}/vpn/site-to-site-vpns",
        produces = "*/*", 
        consumes = "application/json",
        method = RequestMethod.POST)
    ResponseEntity<OperationResponseWithoutResult> createSiteToSiteVpn(@ApiParam(value = "Site ID",required=true) @PathVariable("siteId") String siteId,@ApiParam(value = ""  )  @Valid @RequestBody(required = false) SiteToSiteVpn siteToSiteVpn);


    /**
     * POST /openapi/v1/{omadacId}/sites/{siteId}/vpn/users : Create VPN user
     * Create VPN user. This interface has been deprecated. Please use the following interface instead: Create VPN user V2&lt;br/&gt;&lt;br/&gt;The interface requires one of the permissions: &lt;br/&gt;Site Settings Manager View Only
     *
     * @param omadacId Omada ID (required)
     * @param siteId Site ID (required)
     * @param vpnUser  (optional)
     * @return OK (status code 200)
     * @deprecated
     */
    @ApiOperation(value = "Create VPN user", nickname = "createVpnUser", notes = "Create VPN user. This interface has been deprecated. Please use the following interface instead: Create VPN user V2<br/><br/>The interface requires one of the permissions: <br/>Site Settings Manager View Only", response = OperationResponseWithoutResult.class, tags={ "Omada/VPN","VPN", })
    @ApiResponses(value = { 
        @ApiResponse(code = 200, message = "OK", response = OperationResponseWithoutResult.class) })
    @RequestMapping(value = "/openapi/v1/${omada.omadac-id}/sites/{siteId}/vpn/users",
        produces = "*/*", 
        consumes = "application/json",
        method = RequestMethod.POST)
    ResponseEntity<OperationResponseWithoutResult> createVpnUser(@ApiParam(value = "Site ID",required=true) @PathVariable("siteId") String siteId,@ApiParam(value = ""  )  @Valid @RequestBody(required = false) VpnUser vpnUser);


    /**
     * POST /openapi/v2/{omadacId}/sites/{siteId}/vpn/users : Create VPN user V2
     * Create VPN user.&lt;br/&gt;&lt;br/&gt;The interface requires one of the permissions: &lt;br/&gt;Site Settings Manager View Only&lt;br/&gt;&lt;br/&gt;The possible error code for the interface in the returned body is one of the following error codes (non generic error codes): &lt;br/&gt;-35702  -  VPN user configuration requires VPN server configuration.
     *
     * @param omadacId Omada ID (required)
     * @param siteId Site ID (required)
     * @param vpnUserRequest  (optional)
     * @return OK (status code 200)
     */
    @ApiOperation(value = "Create VPN user V2", nickname = "createVpnUserV2", notes = "Create VPN user.<br/><br/>The interface requires one of the permissions: <br/>Site Settings Manager View Only<br/><br/>The possible error code for the interface in the returned body is one of the following error codes (non generic error codes): <br/>-35702  -  VPN user configuration requires VPN server configuration.", response = OperationResponseWithoutResult.class, tags={ "Omada/VPN","VPN", })
    @ApiResponses(value = { 
        @ApiResponse(code = 200, message = "OK", response = OperationResponseWithoutResult.class) })
    @RequestMapping(value = "/openapi/v2/{omadacId}/sites/{siteId}/vpn/users",
        produces = "*/*", 
        consumes = "application/json",
        method = RequestMethod.POST)
    ResponseEntity<OperationResponseWithoutResult> createVpnUserV2(@ApiParam(value = "Site ID",required=true) @PathVariable("siteId") String siteId,@ApiParam(value = ""  )  @Valid @RequestBody(required = false) VpnUserRequest vpnUserRequest);


    /**
     * DELETE /openapi/v1/{omadacId}/sites/{siteId}/vpn/client-to-site-vpn-clients/{vpnId} : Delete client-to-site VPN client
     * Delete client-to-site VPN client.&lt;br/&gt;&lt;br/&gt;The interface requires one of the permissions: &lt;br/&gt;Site Settings Manager Modify&lt;br/&gt;&lt;br/&gt;The possible error code for the interface in the returned body is one of the following error codes (non generic error codes): &lt;br/&gt;-34682  -  This VPN entry has been used by Static Route, and thus it cannot be deleted.&lt;br/&gt;-34683  -  This VPN entry has been used by Policy Routing, and thus it cannot be deleted.&lt;br/&gt;-34684  -  This VPN entry has been used by Static Route and Policy Routing, and thus it cannot be deleted.&lt;br/&gt;-35706  -  This VPN entry has been used by Gateway ACL, and thus it cannot be deleted.
     *
     * @param omadacId Omada ID (required)
     * @param siteId Site ID (required)
     * @param vpnId VPN ID (required)
     * @return OK (status code 200)
     */
    @ApiOperation(value = "Delete client-to-site VPN client", nickname = "deleteClientToSiteVpnClient", notes = "Delete client-to-site VPN client.<br/><br/>The interface requires one of the permissions: <br/>Site Settings Manager Modify<br/><br/>The possible error code for the interface in the returned body is one of the following error codes (non generic error codes): <br/>-34682  -  This VPN entry has been used by Static Route, and thus it cannot be deleted.<br/>-34683  -  This VPN entry has been used by Policy Routing, and thus it cannot be deleted.<br/>-34684  -  This VPN entry has been used by Static Route and Policy Routing, and thus it cannot be deleted.<br/>-35706  -  This VPN entry has been used by Gateway ACL, and thus it cannot be deleted.", response = OperationResponseWithoutResult.class, tags={ "Omada/VPN","VPN", })
    @ApiResponses(value = { 
        @ApiResponse(code = 200, message = "OK", response = OperationResponseWithoutResult.class) })
    @RequestMapping(value = "/openapi/v1/${omada.omadac-id}/sites/{siteId}/vpn/client-to-site-vpn-clients/{vpnId}",
        produces = "*/*", 
        method = RequestMethod.DELETE)
    ResponseEntity<OperationResponseWithoutResult> deleteClientToSiteVpnClient(@ApiParam(value = "Site ID",required=true) @PathVariable("siteId") String siteId,@ApiParam(value = "VPN ID",required=true) @PathVariable("vpnId") String vpnId);


    /**
     * DELETE /openapi/v1/{omadacId}/sites/{siteId}/vpn/client-to-site-vpn-servers/{vpnId} : Delete client-to-site VPN server
     * Delete client-to-site VPN server.&lt;br/&gt;&lt;br/&gt;The interface requires one of the permissions: &lt;br/&gt;Site Settings Manager Modify
     *
     * @param omadacId Omada ID (required)
     * @param siteId Site ID (required)
     * @param vpnId VPN ID (required)
     * @return OK (status code 200)
     */
    @ApiOperation(value = "Delete client-to-site VPN server", nickname = "deleteClientToSiteVpnServer", notes = "Delete client-to-site VPN server.<br/><br/>The interface requires one of the permissions: <br/>Site Settings Manager Modify", response = OperationResponseWithoutResult.class, tags={ "Omada/VPN","VPN", })
    @ApiResponses(value = { 
        @ApiResponse(code = 200, message = "OK", response = OperationResponseWithoutResult.class) })
    @RequestMapping(value = "/openapi/v1/${omada.omadac-id}/sites/{siteId}/vpn/client-to-site-vpn-servers/{vpnId}",
        produces = "*/*", 
        method = RequestMethod.DELETE)
    ResponseEntity<OperationResponseWithoutResult> deleteClientToSiteVpnServer(@ApiParam(value = "Site ID",required=true) @PathVariable("siteId") String siteId,@ApiParam(value = "VPN ID",required=true) @PathVariable("vpnId") String vpnId);


    /**
     * DELETE /openapi/v1/{omadacId}/sites/{siteId}/vpn/ipsec_failovers/{failoverId} : Delete IPsec failover
     * Delete IPsec failover.&lt;br/&gt;&lt;br/&gt;The interface requires one of the permissions: &lt;br/&gt;Site Settings Manager Modify
     *
     * @param omadacId Omada ID (required)
     * @param siteId Site ID (required)
     * @param failoverId IPSec failover ID (required)
     * @return OK (status code 200)
     */
    @ApiOperation(value = "Delete IPsec failover", nickname = "deleteIpsecFailover", notes = "Delete IPsec failover.<br/><br/>The interface requires one of the permissions: <br/>Site Settings Manager Modify", response = OperationResponseWithoutResult.class, tags={ "Omada/VPN","VPN", })
    @ApiResponses(value = { 
        @ApiResponse(code = 200, message = "OK", response = OperationResponseWithoutResult.class) })
    @RequestMapping(value = "/openapi/v1/${omada.omadac-id}/sites/{siteId}/vpn/ipsec_failovers/{failoverId}",
        produces = "*/*", 
        method = RequestMethod.DELETE)
    ResponseEntity<OperationResponseWithoutResult> deleteIpsecFailover(@ApiParam(value = "Site ID",required=true) @PathVariable("siteId") String siteId,@ApiParam(value = "IPSec failover ID",required=true) @PathVariable("failoverId") String failoverId);


    /**
     * DELETE /openapi/v1/{omadacId}/sites/{siteId}/vpn/site-to-site-vpns/{vpnId} : Delete site-to-site VPN
     * Delete site-to-site VPN.&lt;br/&gt;&lt;br/&gt;The interface requires one of the permissions: &lt;br/&gt;Site Settings Manager Modify
     *
     * @param omadacId Omada ID (required)
     * @param siteId Site ID (required)
     * @param vpnId VPN ID (required)
     * @return OK (status code 200)
     */
    @ApiOperation(value = "Delete site-to-site VPN", nickname = "deleteSiteToSiteVpn", notes = "Delete site-to-site VPN.<br/><br/>The interface requires one of the permissions: <br/>Site Settings Manager Modify", response = OperationResponseWithoutResult.class, tags={ "Omada/VPN","VPN", })
    @ApiResponses(value = { 
        @ApiResponse(code = 200, message = "OK", response = OperationResponseWithoutResult.class) })
    @RequestMapping(value = "/openapi/v1/${omada.omadac-id}/sites/{siteId}/vpn/site-to-site-vpns/{vpnId}",
        produces = "*/*", 
        method = RequestMethod.DELETE)
    ResponseEntity<OperationResponseWithoutResult> deleteSiteToSiteVpn(@ApiParam(value = "Site ID",required=true) @PathVariable("siteId") String siteId,@ApiParam(value = "VPN ID",required=true) @PathVariable("vpnId") String vpnId);


    /**
     * DELETE /openapi/v1/{omadacId}/sites/{siteId}/vpn/users/{userId} : Delete VPN user
     * Delete VPN user.&lt;br/&gt;&lt;br/&gt;The interface requires one of the permissions: &lt;br/&gt;Site Settings Manager View Only
     *
     * @param omadacId Omada ID (required)
     * @param siteId Site ID (required)
     * @param userId VPN user ID (required)
     * @return OK (status code 200)
     */
    @ApiOperation(value = "Delete VPN user", nickname = "deleteVpnUser", notes = "Delete VPN user.<br/><br/>The interface requires one of the permissions: <br/>Site Settings Manager View Only", response = OperationResponseWithoutResult.class, tags={ "Omada/VPN","VPN", })
    @ApiResponses(value = { 
        @ApiResponse(code = 200, message = "OK", response = OperationResponseWithoutResult.class) })
    @RequestMapping(value = "/openapi/v1/${omada.omadac-id}/sites/{siteId}/vpn/users/{userId}",
        produces = "*/*", 
        method = RequestMethod.DELETE)
    ResponseEntity<OperationResponseWithoutResult> deleteVpnUser(@ApiParam(value = "Site ID",required=true) @PathVariable("siteId") String siteId,@ApiParam(value = "VPN user ID",required=true) @PathVariable("userId") String userId);


    /**
     * GET /openapi/v1/{omadacId}/sites/{siteId}/vpn/client-to-site-vpn-clients : Get client-to-site VPN client list
     * Get client-to-site VPN client list.&lt;br/&gt;&lt;br/&gt;The interface requires one of the permissions: &lt;br/&gt;Site Settings Manager View Only
     *
     * @param omadacId Omada ID (required)
     * @param siteId Site ID (required)
     * @return OK (status code 200)
     */
    @ApiOperation(value = "Get client-to-site VPN client list", nickname = "getClientToSiteVpnClientList", notes = "Get client-to-site VPN client list.<br/><br/>The interface requires one of the permissions: <br/>Site Settings Manager View Only", response = OperationResponseListClientToSiteVpnClient.class, tags={ "Omada/VPN","VPN", })
    @ApiResponses(value = { 
        @ApiResponse(code = 200, message = "OK", response = OperationResponseListClientToSiteVpnClient.class) })
    @RequestMapping(value = "/openapi/v1/${omada.omadac-id}/sites/{siteId}/vpn/client-to-site-vpn-clients",
        produces = "*/*", 
        method = RequestMethod.GET)
    ResponseEntity<OperationResponseListClientToSiteVpnClient> getClientToSiteVpnClientList(@ApiParam(value = "Site ID",required=true) @PathVariable("siteId") String siteId);


    /**
     * GET /openapi/v1/{omadacId}/sites/{siteId}/vpn/client-to-site-vpn-servers/{vpnId} : Get client-to-site VPN server info
     * Get client-to-site VPN server info.&lt;br/&gt;&lt;br/&gt;The interface requires one of the permissions: &lt;br/&gt;Site Settings Manager View Only
     *
     * @param omadacId Omada ID (required)
     * @param siteId Site ID (required)
     * @param vpnId VPN ID (required)
     * @return OK (status code 200)
     */
    @ApiOperation(value = "Get client-to-site VPN server info", nickname = "getClientToSiteVpnServerInfo", notes = "Get client-to-site VPN server info.<br/><br/>The interface requires one of the permissions: <br/>Site Settings Manager View Only", response = OperationResponseClientToSiteVpnServer.class, tags={ "Omada/VPN","VPN", })
    @ApiResponses(value = { 
        @ApiResponse(code = 200, message = "OK", response = OperationResponseClientToSiteVpnServer.class) })
    @RequestMapping(value = "/openapi/v1/${omada.omadac-id}/sites/{siteId}/vpn/client-to-site-vpn-servers/{vpnId}",
        produces = "*/*", 
        method = RequestMethod.GET)
    ResponseEntity<OperationResponseClientToSiteVpnServer> getClientToSiteVpnServerInfo(@ApiParam(value = "Site ID",required=true) @PathVariable("siteId") String siteId,@ApiParam(value = "VPN ID",required=true) @PathVariable("vpnId") String vpnId);


    /**
     * GET /openapi/v1/{omadacId}/sites/{siteId}/vpn/client-to-site-vpn-servers : Get client-to-site VPN server list
     * Get client-to-site VPN server list.&lt;br/&gt;&lt;br/&gt;The interface requires one of the permissions: &lt;br/&gt;Site Settings Manager View Only
     *
     * @param omadacId Omada ID (required)
     * @param siteId Site ID (required)
     * @return OK (status code 200)
     */
    @ApiOperation(value = "Get client-to-site VPN server list", nickname = "getClientToSiteVpnServerList", notes = "Get client-to-site VPN server list.<br/><br/>The interface requires one of the permissions: <br/>Site Settings Manager View Only", response = OperationResponseListClientToSiteVpnServer.class, tags={ "Omada/VPN","VPN", })
    @ApiResponses(value = { 
        @ApiResponse(code = 200, message = "OK", response = OperationResponseListClientToSiteVpnServer.class) })
    @RequestMapping(value = "/openapi/v1/${omada.omadac-id}/sites/{siteId}/vpn/client-to-site-vpn-servers",
        produces = "*/*", 
        method = RequestMethod.GET)
    ResponseEntity<OperationResponseListClientToSiteVpnServer> getClientToSiteVpnServerList(@ApiParam(value = "Site ID",required=true) @PathVariable("siteId") String siteId);


    /**
     * GET /openapi/v1/{omadacId}/sites/{siteId}/vpn/client-to-site-vpn-servers/{vpnId}/users : Get user list for client-to-site VPN server
     * Get user list for client-to-site VPN server.&lt;br/&gt;&lt;br/&gt;The interface requires one of the permissions: &lt;br/&gt;Site Settings Manager View Only
     *
     * @param omadacId Omada ID (required)
     * @param siteId Site ID (required)
     * @param vpnId VPN ID (required)
     * @return OK (status code 200)
     */
    @ApiOperation(value = "Get user list for client-to-site VPN server", nickname = "getClientToSiteVpnServerUserList", notes = "Get user list for client-to-site VPN server.<br/><br/>The interface requires one of the permissions: <br/>Site Settings Manager View Only", response = OperationResponseListVpnUserResponse.class, tags={ "Omada/VPN","VPN", })
    @ApiResponses(value = { 
        @ApiResponse(code = 200, message = "OK", response = OperationResponseListVpnUserResponse.class) })
    @RequestMapping(value = "/openapi/v1/${omada.omadac-id}/sites/{siteId}/vpn/client-to-site-vpn-servers/{vpnId}/users",
        produces = "*/*", 
        method = RequestMethod.GET)
    ResponseEntity<OperationResponseListVpnUserResponse> getClientToSiteVpnServerUserList(@ApiParam(value = "Site ID",required=true) @PathVariable("siteId") String siteId,@ApiParam(value = "VPN ID",required=true) @PathVariable("vpnId") String vpnId);


    /**
     * GET /openapi/v1/{omadacId}/sites/{siteId}/vpn/ipsec_failovers : Get IPsec failover list
     * Get IPsec failover list.&lt;br/&gt;&lt;br/&gt;The interface requires one of the permissions: &lt;br/&gt;Site Settings Manager View Only
     *
     * @param omadacId Omada ID (required)
     * @param siteId Site ID (required)
     * @param page Start page number. Start from 1. (required)
     * @param pageSize Number of entries per page. It should be within the range of 1–1000. (required)
     * @return OK (status code 200)
     */
    @ApiOperation(value = "Get IPsec failover list", nickname = "getGridIpsecFailover", notes = "Get IPsec failover list.<br/><br/>The interface requires one of the permissions: <br/>Site Settings Manager View Only", response = OperationResponseGridVoiPsecFailover.class, tags={ "Omada/VPN","VPN", })
    @ApiResponses(value = { 
        @ApiResponse(code = 200, message = "OK", response = OperationResponseGridVoiPsecFailover.class) })
    @RequestMapping(value = "/openapi/v1/${omada.omadac-id}/sites/{siteId}/vpn/ipsec_failovers",
        produces = "*/*", 
        method = RequestMethod.GET)
    ResponseEntity<OperationResponseGridVoiPsecFailover> getGridIpsecFailover(@ApiParam(value = "Site ID",required=true) @PathVariable("siteId") String siteId,@NotNull @ApiParam(value = "Start page number. Start from 1.", required = true) @Valid @RequestParam(value = "page", required = true) Integer page,@NotNull @ApiParam(value = "Number of entries per page. It should be within the range of 1–1000.", required = true) @Valid @RequestParam(value = "pageSize", required = true) Integer pageSize);


    /**
     * GET /openapi/v1/{omadacId}/sites/{siteId}/vpn/users : Get VPN user list
     * Get VPN user list.&lt;br/&gt;&lt;br/&gt;The interface requires one of the permissions: &lt;br/&gt;Site Settings Manager View Only
     *
     * @param omadacId Omada ID (required)
     * @param siteId Site ID (required)
     * @param page Start page number. Start from 1. (required)
     * @param pageSize Number of entries per page. It should be within the range of 1–1000. (required)
     * @return OK (status code 200)
     */
    @ApiOperation(value = "Get VPN user list", nickname = "getGridVpnUser", notes = "Get VPN user list.<br/><br/>The interface requires one of the permissions: <br/>Site Settings Manager View Only", response = OperationResponseGridVoVpnUserResponse.class, tags={ "Omada/VPN","VPN", })
    @ApiResponses(value = { 
        @ApiResponse(code = 200, message = "OK", response = OperationResponseGridVoVpnUserResponse.class) })
    @RequestMapping(value = "/openapi/v1/${omada.omadac-id}/sites/{siteId}/vpn/users",
        produces = "*/*", 
        method = RequestMethod.GET)
    ResponseEntity<OperationResponseGridVoVpnUserResponse> getGridVpnUser(@ApiParam(value = "Site ID",required=true) @PathVariable("siteId") String siteId,@NotNull @ApiParam(value = "Start page number. Start from 1.", required = true) @Valid @RequestParam(value = "page", required = true) Integer page,@NotNull @ApiParam(value = "Number of entries per page. It should be within the range of 1–1000.", required = true) @Valid @RequestParam(value = "pageSize", required = true) Integer pageSize);


    /**
     * GET /openapi/v1/{omadacId}/sites/{siteId}/vpn/site-to-site-vpns/{vpnId} : Get site-to-site VPN info
     * Get site-to-site VPN info.&lt;br/&gt;&lt;br/&gt;The interface requires one of the permissions: &lt;br/&gt;Site Settings Manager View Only
     *
     * @param omadacId Omada ID (required)
     * @param siteId Site ID (required)
     * @param vpnId VPN ID (required)
     * @return OK (status code 200)
     */
    @ApiOperation(value = "Get site-to-site VPN info", nickname = "getSiteToSiteVpnInfo", notes = "Get site-to-site VPN info.<br/><br/>The interface requires one of the permissions: <br/>Site Settings Manager View Only", response = OperationResponseSiteToSiteVpn.class, tags={ "Omada/VPN","VPN", })
    @ApiResponses(value = { 
        @ApiResponse(code = 200, message = "OK", response = OperationResponseSiteToSiteVpn.class) })
    @RequestMapping(value = "/openapi/v1/${omada.omadac-id}/sites/{siteId}/vpn/site-to-site-vpns/{vpnId}",
        produces = "*/*", 
        method = RequestMethod.GET)
    ResponseEntity<OperationResponseSiteToSiteVpn> getSiteToSiteVpnInfo(@ApiParam(value = "Site ID",required=true) @PathVariable("siteId") String siteId,@ApiParam(value = "VPN ID",required=true) @PathVariable("vpnId") String vpnId);


    /**
     * GET /openapi/v1/{omadacId}/sites/{siteId}/vpn/site-to-site-vpns : Get site-to-site VPN list
     * Get site-to-site VPN list.&lt;br/&gt;&lt;br/&gt;The interface requires one of the permissions: &lt;br/&gt;Site Settings Manager View Only
     *
     * @param omadacId Omada ID (required)
     * @param siteId Site ID (required)
     * @return OK (status code 200)
     */
    @ApiOperation(value = "Get site-to-site VPN list", nickname = "getSiteToSiteVpnList", notes = "Get site-to-site VPN list.<br/><br/>The interface requires one of the permissions: <br/>Site Settings Manager View Only", response = OperationResponseListSiteToSiteVpn.class, tags={ "Omada/VPN","VPN", })
    @ApiResponses(value = { 
        @ApiResponse(code = 200, message = "OK", response = OperationResponseListSiteToSiteVpn.class) })
    @RequestMapping(value = "/openapi/v1/${omada.omadac-id}/sites/{siteId}/vpn/site-to-site-vpns",
        produces = "*/*", 
        method = RequestMethod.GET)
    ResponseEntity<OperationResponseListSiteToSiteVpn> getSiteToSiteVpnList(@ApiParam(value = "Site ID",required=true) @PathVariable("siteId") String siteId);


    /**
     * GET /openapi/v1/{omadacId}/sites/{siteId}/vpn/client-to-site-vpn-clients/{vpnId} : Get client-to-site VPN client info
     * Get client-to-site VPN client info.&lt;br/&gt;&lt;br/&gt;The interface requires one of the permissions: &lt;br/&gt;Site Settings Manager View Only
     *
     * @param omadacId Omada ID (required)
     * @param siteId Site ID (required)
     * @param vpnId VPN ID (required)
     * @return OK (status code 200)
     */
    @ApiOperation(value = "Get client-to-site VPN client info", nickname = "getVpnClientToSiteClientInfo", notes = "Get client-to-site VPN client info.<br/><br/>The interface requires one of the permissions: <br/>Site Settings Manager View Only", response = OperationResponseClientToSiteVpnClient.class, tags={ "Omada/VPN","VPN", })
    @ApiResponses(value = { 
        @ApiResponse(code = 200, message = "OK", response = OperationResponseClientToSiteVpnClient.class) })
    @RequestMapping(value = "/openapi/v1/${omada.omadac-id}/sites/{siteId}/vpn/client-to-site-vpn-clients/{vpnId}",
        produces = "*/*", 
        method = RequestMethod.GET)
    ResponseEntity<OperationResponseClientToSiteVpnClient> getVpnClientToSiteClientInfo(@ApiParam(value = "Site ID",required=true) @PathVariable("siteId") String siteId,@ApiParam(value = "VPN ID",required=true) @PathVariable("vpnId") String vpnId);


    /**
     * PATCH /openapi/v1/{omadacId}/sites/{siteId}/vpn/client-to-site-vpn-clients/{vpnId} : Modify client-to-site VPN client
     * Modify client-to-site VPN client.&lt;br/&gt;&lt;br/&gt;The interface requires one of the permissions: &lt;br/&gt;Site Settings Manager Modify&lt;br/&gt;&lt;br/&gt;The possible error code for the interface in the returned body is one of the following error codes (non generic error codes): &lt;br/&gt;-34679  -  This VPN entry has been used by Static Route, and thus the VPN type cannot be changed.&lt;br/&gt;-34680  -  This VPN entry has been used by Policy Routing, and thus the VPN type cannot be changed.&lt;br/&gt;-34681  -  This VPN entry has been used by Static Route and Policy Routing, and thus the VPN type cannot be changed.&lt;br/&gt;-35705  -  This VPN entry has been used by Gateway ACL, and thus the VPN type cannot be changed.
     *
     * @param omadacId Omada ID (required)
     * @param siteId Site ID (required)
     * @param vpnId VPN ID (required)
     * @param clientToSiteVpnClient  (optional)
     * @return OK (status code 200)
     */
    @ApiOperation(value = "Modify client-to-site VPN client", nickname = "modifyClientToSiteVpnClient", notes = "Modify client-to-site VPN client.<br/><br/>The interface requires one of the permissions: <br/>Site Settings Manager Modify<br/><br/>The possible error code for the interface in the returned body is one of the following error codes (non generic error codes): <br/>-34679  -  This VPN entry has been used by Static Route, and thus the VPN type cannot be changed.<br/>-34680  -  This VPN entry has been used by Policy Routing, and thus the VPN type cannot be changed.<br/>-34681  -  This VPN entry has been used by Static Route and Policy Routing, and thus the VPN type cannot be changed.<br/>-35705  -  This VPN entry has been used by Gateway ACL, and thus the VPN type cannot be changed.", response = OperationResponseWithoutResult.class, tags={ "Omada/VPN","VPN", })
    @ApiResponses(value = { 
        @ApiResponse(code = 200, message = "OK", response = OperationResponseWithoutResult.class) })
    @RequestMapping(value = "/openapi/v1/${omada.omadac-id}/sites/{siteId}/vpn/client-to-site-vpn-clients/{vpnId}",
        produces = "*/*", 
        consumes = "application/json",
        method = RequestMethod.PATCH)
    ResponseEntity<OperationResponseWithoutResult> modifyClientToSiteVpnClient(@ApiParam(value = "Site ID",required=true) @PathVariable("siteId") String siteId,@ApiParam(value = "VPN ID",required=true) @PathVariable("vpnId") String vpnId,@ApiParam(value = ""  )  @Valid @RequestBody(required = false) ClientToSiteVpnClient clientToSiteVpnClient);


    /**
     * PATCH /openapi/v1/{omadacId}/sites/{siteId}/vpn/client-to-site-vpn-servers/{vpnId} : Modify client-to-site VPN server
     * Modify client-to-site VPN server.&lt;br/&gt;&lt;br/&gt;The interface requires one of the permissions: &lt;br/&gt;Site Settings Manager Modify&lt;br/&gt;&lt;br/&gt;The possible error code for the interface in the returned body is one of the following error codes (non generic error codes): &lt;br/&gt;-35708  -  The device does not support IPSec Source NAT.
     *
     * @param omadacId Omada ID (required)
     * @param siteId Site ID (required)
     * @param vpnId VPN ID (required)
     * @param clientToSiteVpnServer  (optional)
     * @return OK (status code 200)
     */
    @ApiOperation(value = "Modify client-to-site VPN server", nickname = "modifyClientToSiteVpnServer", notes = "Modify client-to-site VPN server.<br/><br/>The interface requires one of the permissions: <br/>Site Settings Manager Modify<br/><br/>The possible error code for the interface in the returned body is one of the following error codes (non generic error codes): <br/>-35708  -  The device does not support IPSec Source NAT.", response = OperationResponseWithoutResult.class, tags={ "Omada/VPN","VPN", })
    @ApiResponses(value = { 
        @ApiResponse(code = 200, message = "OK", response = OperationResponseWithoutResult.class) })
    @RequestMapping(value = "/openapi/v1/${omada.omadac-id}/sites/{siteId}/vpn/client-to-site-vpn-servers/{vpnId}",
        produces = "*/*", 
        consumes = "application/json",
        method = RequestMethod.PATCH)
    ResponseEntity<OperationResponseWithoutResult> modifyClientToSiteVpnServer(@ApiParam(value = "Site ID",required=true) @PathVariable("siteId") String siteId,@ApiParam(value = "VPN ID",required=true) @PathVariable("vpnId") String vpnId,@ApiParam(value = ""  )  @Valid @RequestBody(required = false) ClientToSiteVpnServer clientToSiteVpnServer);


    /**
     * PATCH /openapi/v1/{omadacId}/sites/{siteId}/vpn/ipsec_failovers/{failoverId} : Modify IPsec failover
     * Modify IPsec failover.&lt;br/&gt;&lt;br/&gt;The interface requires one of the permissions: &lt;br/&gt;Site Settings Manager Modify
     *
     * @param omadacId Omada ID (required)
     * @param siteId Site ID (required)
     * @param failoverId IPSec failover ID (required)
     * @param ipsecFailover  (optional)
     * @return OK (status code 200)
     */
    @ApiOperation(value = "Modify IPsec failover", nickname = "modifyIpsecFailover", notes = "Modify IPsec failover.<br/><br/>The interface requires one of the permissions: <br/>Site Settings Manager Modify", response = OperationResponseWithoutResult.class, tags={ "Omada/VPN","VPN", })
    @ApiResponses(value = { 
        @ApiResponse(code = 200, message = "OK", response = OperationResponseWithoutResult.class) })
    @RequestMapping(value = "/openapi/v1/${omada.omadac-id}/sites/{siteId}/vpn/ipsec_failovers/{failoverId}",
        produces = "*/*", 
        consumes = "application/json",
        method = RequestMethod.PATCH)
    ResponseEntity<OperationResponseWithoutResult> modifyIpsecFailover(@ApiParam(value = "Site ID",required=true) @PathVariable("siteId") String siteId,@ApiParam(value = "IPSec failover ID",required=true) @PathVariable("failoverId") String failoverId,@ApiParam(value = ""  )  @Valid @RequestBody(required = false) IPsecFailover ipsecFailover);


    /**
     * PATCH /openapi/v1/{omadacId}/sites/{siteId}/vpn/site-to-site-vpns/{vpnId} : Modify site-to-site VPN
     * Modify site-to-site VPN.&lt;br/&gt;&lt;br/&gt;The interface requires one of the permissions: &lt;br/&gt;Site Settings Manager Modify&lt;br/&gt;&lt;br/&gt;The possible error code for the interface in the returned body is one of the following error codes (non generic error codes): &lt;br/&gt;-35708  -  The device does not support IPSec Source NAT.
     *
     * @param omadacId Omada ID (required)
     * @param siteId Site ID (required)
     * @param vpnId VPN ID (required)
     * @param siteToSiteVpn  (optional)
     * @return OK (status code 200)
     */
    @ApiOperation(value = "Modify site-to-site VPN", nickname = "modifySiteToSiteVpn", notes = "Modify site-to-site VPN.<br/><br/>The interface requires one of the permissions: <br/>Site Settings Manager Modify<br/><br/>The possible error code for the interface in the returned body is one of the following error codes (non generic error codes): <br/>-35708  -  The device does not support IPSec Source NAT.", response = OperationResponseWithoutResult.class, tags={ "Omada/VPN","VPN", })
    @ApiResponses(value = { 
        @ApiResponse(code = 200, message = "OK", response = OperationResponseWithoutResult.class) })
    @RequestMapping(value = "/openapi/v1/${omada.omadac-id}/sites/{siteId}/vpn/site-to-site-vpns/{vpnId}",
        produces = "*/*", 
        consumes = "application/json",
        method = RequestMethod.PATCH)
    ResponseEntity<OperationResponseWithoutResult> modifySiteToSiteVpn(@ApiParam(value = "Site ID",required=true) @PathVariable("siteId") String siteId,@ApiParam(value = "VPN ID",required=true) @PathVariable("vpnId") String vpnId,@ApiParam(value = ""  )  @Valid @RequestBody(required = false) SiteToSiteVpn siteToSiteVpn);


    /**
     * PATCH /openapi/v1/{omadacId}/sites/{siteId}/vpn/users/{userId} : Modify VPN user
     * Modify VPN user. This interface has been deprecated. Please use the following interface instead: Modify VPN user V2&lt;br/&gt;&lt;br/&gt;The interface requires one of the permissions: &lt;br/&gt;Site Settings Manager View Only
     *
     * @param omadacId Omada ID (required)
     * @param siteId Site ID (required)
     * @param userId VPN user ID (required)
     * @param vpnUser  (optional)
     * @return OK (status code 200)
     * @deprecated
     */
    @ApiOperation(value = "Modify VPN user", nickname = "modifyVpnUser", notes = "Modify VPN user. This interface has been deprecated. Please use the following interface instead: Modify VPN user V2<br/><br/>The interface requires one of the permissions: <br/>Site Settings Manager View Only", response = OperationResponseWithoutResult.class, tags={ "Omada/VPN","VPN", })
    @ApiResponses(value = { 
        @ApiResponse(code = 200, message = "OK", response = OperationResponseWithoutResult.class) })
    @RequestMapping(value = "/openapi/v1/${omada.omadac-id}/sites/{siteId}/vpn/users/{userId}",
        produces = "*/*", 
        consumes = "application/json",
        method = RequestMethod.PATCH)
    ResponseEntity<OperationResponseWithoutResult> modifyVpnUser(@ApiParam(value = "Site ID",required=true) @PathVariable("siteId") String siteId,@ApiParam(value = "VPN user ID",required=true) @PathVariable("userId") String userId,@ApiParam(value = ""  )  @Valid @RequestBody(required = false) VpnUser vpnUser);


    /**
     * PATCH /openapi/v2/{omadacId}/sites/{siteId}/vpn/users/{userId} : Modify VPN user V2
     * Modify VPN user.&lt;br/&gt;&lt;br/&gt;The interface requires one of the permissions: &lt;br/&gt;Site Settings Manager View Only&lt;br/&gt;&lt;br/&gt;The possible error code for the interface in the returned body is one of the following error codes (non generic error codes): &lt;br/&gt;-35702  -  VPN user configuration requires VPN server configuration.
     *
     * @param omadacId Omada ID (required)
     * @param siteId Site ID (required)
     * @param userId VPN user ID (required)
     * @param vpnUserRequest  (optional)
     * @return OK (status code 200)
     */
    @ApiOperation(value = "Modify VPN user V2", nickname = "modifyVpnUserV2", notes = "Modify VPN user.<br/><br/>The interface requires one of the permissions: <br/>Site Settings Manager View Only<br/><br/>The possible error code for the interface in the returned body is one of the following error codes (non generic error codes): <br/>-35702  -  VPN user configuration requires VPN server configuration.", response = OperationResponseWithoutResult.class, tags={ "Omada/VPN","VPN", })
    @ApiResponses(value = { 
        @ApiResponse(code = 200, message = "OK", response = OperationResponseWithoutResult.class) })
    @RequestMapping(value = "/openapi/v2/{omadacId}/sites/{siteId}/vpn/users/{userId}",
        produces = "*/*", 
        consumes = "application/json",
        method = RequestMethod.PATCH)
    ResponseEntity<OperationResponseWithoutResult> modifyVpnUserV2(@ApiParam(value = "Site ID",required=true) @PathVariable("siteId") String siteId,@ApiParam(value = "VPN user ID",required=true) @PathVariable("userId") String userId,@ApiParam(value = ""  )  @Valid @RequestBody(required = false) VpnUserRequest vpnUserRequest);


    /**
     * POST /openapi/v1/{omadacId}/sites/{siteId}/vpn/certificate : Upload VPN certificate file
     * Upload VPN certificate file.&lt;br/&gt;&lt;br/&gt;The interface requires one of the permissions: &lt;br/&gt;Site Settings Manager Modify
     *
     * @param omadacId Omada ID (required)
     * @param siteId Site ID (required)
     * @param file  (required)
     * @return OK (status code 200)
     */
    @ApiOperation(value = "Upload VPN certificate file", nickname = "uploadVpnCertificateFile", notes = "Upload VPN certificate file.<br/><br/>The interface requires one of the permissions: <br/>Site Settings Manager Modify", response = OperationResponseWithoutResult.class, tags={ "Omada/VPN","VPN", })
    @ApiResponses(value = { 
        @ApiResponse(code = 200, message = "OK", response = OperationResponseWithoutResult.class) })
    @RequestMapping(value = "/openapi/v1/${omada.omadac-id}/sites/{siteId}/vpn/certificate",
        produces = "*/*", 
        method = RequestMethod.POST)
    ResponseEntity<OperationResponseWithoutResult> uploadVpnCertificateFile(@ApiParam(value = "Site ID",required=true) @PathVariable("siteId") String siteId,@NotNull @ApiParam(value = "", required = true) @Valid @RequestParam(value = "file", required = true) Resource file);

}
