wg-portal/docs/documentation/rest-api/swagger.yaml
2025-02-17 08:03:43 +01:00

1537 lines
45 KiB
YAML

basePath: /api/v1
definitions:
models.ConfigOption-array_string:
properties:
Overridable:
type: boolean
Value:
items:
type: string
type: array
type: object
models.ConfigOption-int:
properties:
Overridable:
type: boolean
Value:
type: integer
type: object
models.ConfigOption-string:
properties:
Overridable:
type: boolean
Value:
type: string
type: object
models.ConfigOption-uint32:
properties:
Overridable:
type: boolean
Value:
type: integer
type: object
models.Error:
properties:
Code:
description: HTTP status code.
type: integer
Details:
description: Additional error details.
type: string
Message:
description: Error message.
type: string
type: object
models.Interface:
properties:
Addresses:
description: Addresses is a list of IP addresses (in CIDR format) that are
assigned to the interface.
example:
- 10.11.12.1/24
items:
type: string
type: array
Disabled:
description: Disabled is a flag that specifies if the interface is enabled
(up) or not (down). Disabled interfaces are not able to accept connections.
example: false
type: boolean
DisabledReason:
description: DisabledReason is the reason why the interface has been disabled.
example: This is a reason why the interface has been disabled.
type: string
DisplayName:
description: DisplayName is a nice display name / description for the interface.
example: My Interface
maxLength: 64
type: string
Dns:
description: Dns is a list of DNS servers that should be set if the interface
is up.
example:
- 1.1.1.1
items:
type: string
type: array
DnsSearch:
description: DnsSearch is the dns search option string that should be set
if the interface is up, will be appended to Dns servers.
example:
- wg.local
items:
type: string
type: array
EnabledPeers:
description: EnabledPeers is the number of enabled peers for this interface.
Only enabled peers are able to connect.
readOnly: true
type: integer
FirewallMark:
description: FirewallMark is an optional firewall mark which is used to handle
interface traffic.
type: integer
Identifier:
description: Identifier is the unique identifier of the interface. It is always
equal to the device name of the interface.
example: wg0
type: string
ListenPort:
description: 'ListenPort is the listening port, for example: 51820. The listening
port is only required for server interfaces.'
example: 51820
maximum: 65535
minimum: 1
type: integer
Mode:
description: Mode is the interface type, either 'server', 'client' or 'any'.
The mode specifies how WireGuard Portal handles peers for this interface.
enum:
- server
- client
- any
example: server
type: string
Mtu:
description: Mtu is the device MTU of the interface.
example: 1420
maximum: 9000
minimum: 1
type: integer
PeerDefAllowedIPs:
description: PeerDefAllowedIPs specifies the default allowed IP addresses
for a new peer.
example:
- 10.11.12.0/24
items:
type: string
type: array
PeerDefDns:
description: PeerDefDns specifies the default dns servers for a new peer.
example:
- 8.8.8.8
items:
type: string
type: array
PeerDefDnsSearch:
description: PeerDefDnsSearch specifies the default dns search options for
a new peer.
example:
- wg.local
items:
type: string
type: array
PeerDefEndpoint:
description: PeerDefEndpoint specifies the default endpoint for a new peer.
example: wg.example.com:51820
type: string
PeerDefFirewallMark:
description: PeerDefFirewallMark specifies the default firewall mark for a
new peer.
type: integer
PeerDefMtu:
description: PeerDefMtu specifies the default device MTU for a new peer.
example: 1420
type: integer
PeerDefNetwork:
description: PeerDefNetwork specifies the default subnets from which new peers
will get their IP addresses. The subnet is specified in CIDR format.
example:
- 10.11.12.0/24
items:
type: string
type: array
PeerDefPersistentKeepalive:
description: PeerDefPersistentKeepalive specifies the default persistent keep-alive
value in seconds for a new peer.
example: 25
type: integer
PeerDefPostDown:
description: PeerDefPostDown specifies the default action that is executed
after the device is down for a new peer.
type: string
PeerDefPostUp:
description: PeerDefPostUp specifies the default action that is executed after
the device is up for a new peer.
type: string
PeerDefPreDown:
description: PeerDefPreDown specifies the default action that is executed
before the device is down for a new peer.
type: string
PeerDefPreUp:
description: PeerDefPreUp specifies the default action that is executed before
the device is up for a new peer.
type: string
PeerDefRoutingTable:
description: PeerDefRoutingTable specifies the default routing table for a
new peer.
type: string
PostDown:
description: PostDown is an optional action that is executed after the device
is down.
example: echo 'Interface is down'
type: string
PostUp:
description: PostUp is an optional action that is executed after the device
is up.
example: iptables -A FORWARD -i %i -j ACCEPT
type: string
PreDown:
description: PreDown is an optional action that is executed before the device
is down.
example: iptables -D FORWARD -i %i -j ACCEPT
type: string
PreUp:
description: PreUp is an optional action that is executed before the device
is up.
example: echo 'Interface is up'
type: string
PrivateKey:
description: PrivateKey is the private key of the interface.
example: gI6EdUSYvn8ugXOt8QQD6Yc+JyiZxIhp3GInSWRfWGE=
type: string
PublicKey:
description: PublicKey is the public key of the server interface. The public
key is used by peers to connect to the server.
example: HIgo9xNzJMWLKASShiTqIybxZ0U3wGLiUeJ1PKf8ykw=
type: string
RoutingTable:
description: RoutingTable is an optional routing table which is used to route
interface traffic.
type: string
SaveConfig:
description: SaveConfig is a flag that specifies if the configuration should
be saved to the configuration file (wgX.conf in wg-quick format).
example: false
type: boolean
TotalPeers:
description: TotalPeers is the total number of peers for this interface.
readOnly: true
type: integer
required:
- Identifier
- Mode
- PrivateKey
- PublicKey
type: object
models.InterfaceMetrics:
properties:
BytesReceived:
description: The number of bytes received by the interface.
example: 123456789
type: integer
BytesTransmitted:
description: The number of bytes transmitted by the interface.
example: 123456789
type: integer
InterfaceIdentifier:
description: The unique identifier of the interface.
example: wg0
type: string
type: object
models.Peer:
properties:
Addresses:
description: Addresses is a list of IP addresses in CIDR format (both IPv4
and IPv6) for the peer.
example:
- 10.11.12.2/24
items:
type: string
type: array
AllowedIPs:
allOf:
- $ref: '#/definitions/models.ConfigOption-array_string'
description: AllowedIPs is a list of allowed IP subnets for the peer.
CheckAliveAddress:
description: CheckAliveAddress is an optional ip address or DNS name that
is used for ping checks.
example: 1.1.1.1
type: string
Disabled:
description: Disabled is a flag that specifies if the peer is enabled or not.
Disabled peers are not able to connect.
example: false
type: boolean
DisabledReason:
description: DisabledReason is the reason why the peer has been disabled.
example: This is a reason why the peer has been disabled.
type: string
DisplayName:
description: DisplayName is a nice display name / description for the peer.
example: My Peer
maxLength: 64
type: string
Dns:
allOf:
- $ref: '#/definitions/models.ConfigOption-array_string'
description: Dns is a list of DNS servers that should be set if the peer interface
is up.
DnsSearch:
allOf:
- $ref: '#/definitions/models.ConfigOption-array_string'
description: DnsSearch is the dns search option string that should be set
if the peer interface is up, will be appended to Dns servers.
Endpoint:
allOf:
- $ref: '#/definitions/models.ConfigOption-string'
description: Endpoint is the endpoint address of the peer.
EndpointPublicKey:
allOf:
- $ref: '#/definitions/models.ConfigOption-string'
description: EndpointPublicKey is the endpoint public key.
ExpiresAt:
description: ExpiresAt is the expiry date of the peer in YYYY-MM-DD format.
An expired peer is not able to connect.
type: string
ExtraAllowedIPs:
description: ExtraAllowedIPs is a list of additional allowed IP subnets for
the peer. These allowed IP subnets are added on the server side.
items:
type: string
type: array
FirewallMark:
allOf:
- $ref: '#/definitions/models.ConfigOption-uint32'
description: FirewallMark is an optional firewall mark which is used to handle
peer traffic.
Identifier:
description: Identifier is the unique identifier of the peer. It is always
equal to the public key of the peer.
example: xTIBA5rboUvnH4htodjb6e697QjLERt1NAB4mZqp8Dg=
type: string
InterfaceIdentifier:
description: InterfaceIdentifier is the identifier of the interface the peer
is linked to.
example: wg0
type: string
Mode:
description: Mode is the peer interface type (server, client, any).
enum:
- server
- client
- any
example: client
type: string
Mtu:
allOf:
- $ref: '#/definitions/models.ConfigOption-int'
description: Mtu is the device MTU of the peer.
Notes:
description: Notes is a note field for peers.
example: This is a note for the peer.
type: string
PersistentKeepalive:
allOf:
- $ref: '#/definitions/models.ConfigOption-int'
description: PersistentKeepalive is the optional persistent keep-alive interval
in seconds.
PostDown:
allOf:
- $ref: '#/definitions/models.ConfigOption-string'
description: PostDown is an optional action that is executed after the device
is down.
PostUp:
allOf:
- $ref: '#/definitions/models.ConfigOption-string'
description: PostUp is an optional action that is executed after the device
is up.
PreDown:
allOf:
- $ref: '#/definitions/models.ConfigOption-string'
description: PreDown is an optional action that is executed before the device
is down.
PreUp:
allOf:
- $ref: '#/definitions/models.ConfigOption-string'
description: PreUp is an optional action that is executed before the device
is up.
PresharedKey:
description: PresharedKey is the optional pre-shared Key of the peer.
example: yAnz5TF+lXXJte14tji3zlMNq+hd2rYUIgJBgB3fBmk=
type: string
PrivateKey:
description: PrivateKey is the private Key of the peer.
example: yAnz5TF+lXXJte14tji3zlMNq+hd2rYUIgJBgB3fBmk=
type: string
PublicKey:
description: PublicKey is the public Key of the server peer.
example: TrMvSoP4jYQlY6RIzBgbssQqY3vxI2Pi+y71lOWWXX0=
type: string
RoutingTable:
allOf:
- $ref: '#/definitions/models.ConfigOption-string'
description: RoutingTable is an optional routing table which is used to route
peer traffic.
UserIdentifier:
description: UserIdentifier is the identifier of the user that owns the peer.
example: uid-1234567
type: string
required:
- Identifier
- InterfaceIdentifier
- PrivateKey
type: object
models.PeerMetrics:
properties:
BytesReceived:
description: The number of bytes received by the peer.
example: 123456789
type: integer
BytesTransmitted:
description: The number of bytes transmitted by the peer.
example: 123456789
type: integer
Endpoint:
description: The current endpoint address of the peer.
example: 12.34.56.78
type: string
IsPingable:
description: If this field is set, the peer is pingable.
example: true
type: boolean
LastHandshake:
description: The last time the peer initiated a handshake.
example: "2021-01-01T12:00:00Z"
type: string
LastPing:
description: The last time the peer responded to a ICMP ping request.
example: "2021-01-01T12:00:00Z"
type: string
LastSessionStart:
description: The last time the peer initiated a session.
example: "2021-01-01T12:00:00Z"
type: string
PeerIdentifier:
description: The unique identifier of the peer.
example: xTIBA5rboUvnH4htodjb6e697QjLERt1NAB4mZqp8Dg=
type: string
type: object
models.ProvisioningRequest:
properties:
InterfaceIdentifier:
description: InterfaceIdentifier is the identifier of the WireGuard interface
the peer should be linked to.
example: wg0
type: string
PresharedKey:
description: PresharedKey is the optional pre-shared key of the peer. If no
pre-shared key is set, a new key is generated.
example: yAnz5TF+lXXJte14tji3zlMNq+hd2rYUIgJBgB3fBmk=
type: string
PublicKey:
description: PublicKey is the optional public key of the peer. If no public
key is set, a new key pair is generated.
example: xTIBA5rboUvnH4htodjb6e697QjLERt1NAB4mZqp8Dg=
type: string
UserIdentifier:
description: |-
UserIdentifier is the identifier of the user the peer should be linked to.
If no user identifier is set, the authenticated user is used.
example: uid-1234567
type: string
required:
- InterfaceIdentifier
type: object
models.User:
properties:
ApiEnabled:
description: If this field is set, the user is allowed to use the RESTful
API. This field is read-only.
example: false
readOnly: true
type: boolean
ApiToken:
description: The API token of the user. This field is never populated on bulk
read operations.
example: ""
maxLength: 64
minLength: 32
type: string
Department:
description: The department of the user. This field is optional.
example: Software Development
type: string
Disabled:
description: If this field is set, the user is disabled.
example: false
type: boolean
DisabledReason:
description: The reason why the user has been disabled.
example: ""
type: string
Email:
description: The email address of the user. This field is optional.
example: test@test.com
type: string
Firstname:
description: The first name of the user. This field is optional.
example: Max
type: string
Identifier:
description: The unique identifier of the user.
example: uid-1234567
maxLength: 64
type: string
IsAdmin:
description: If this field is set, the user is an admin.
example: false
type: boolean
Lastname:
description: The last name of the user. This field is optional.
example: Muster
type: string
Locked:
description: If this field is set, the user is locked and thus unable to log
in to WireGuard Portal.
example: false
type: boolean
LockedReason:
description: The reason why the user has been locked.
example: ""
type: string
Notes:
description: Additional notes about the user. This field is optional.
example: some sample notes
type: string
Password:
description: The password of the user. This field is never populated on read
operations.
example: ""
maxLength: 64
minLength: 16
type: string
PeerCount:
description: The number of peers linked to the user. This field is read-only.
example: 2
readOnly: true
type: integer
Phone:
description: The phone number of the user. This field is optional.
example: "+1234546789"
type: string
ProviderName:
description: The name of the authentication provider. This field is read-only.
example: ""
readOnly: true
type: string
Source:
description: The source of the user. This field is optional.
enum:
- db
example: db
type: string
required:
- Identifier
type: object
models.UserInformation:
properties:
PeerCount:
description: PeerCount is the number of peers linked to the user.
example: 2
type: integer
Peers:
description: Peers is a list of peers linked to the user.
items:
$ref: '#/definitions/models.UserInformationPeer'
type: array
UserIdentifier:
description: UserIdentifier is the unique identifier of the user.
example: uid-1234567
type: string
type: object
models.UserInformationPeer:
properties:
DisplayName:
description: DisplayName is a user-defined description of the peer.
example: My iPhone
type: string
Identifier:
description: Identifier is the unique identifier of the peer. It equals the
public key of the peer.
example: peer-1234567
type: string
InterfaceIdentifier:
description: InterfaceIdentifier is the unique identifier of the WireGuard
Portal device the peer is connected to.
example: wg0
type: string
IpAddresses:
description: IPAddresses is a list of IP addresses in CIDR format assigned
to the peer.
example:
- 10.11.12.2/24
items:
type: string
type: array
IsDisabled:
description: IsDisabled is a flag that specifies if the peer is enabled or
not. Disabled peers are not able to connect.
example: true
type: boolean
type: object
models.UserMetrics:
properties:
BytesReceived:
description: The total number of bytes received by the user. This is the sum
of all bytes received by the peers linked to the user.
example: 123456789
type: integer
BytesTransmitted:
description: The total number of bytes transmitted by the user. This is the
sum of all bytes transmitted by the peers linked to the user.
example: 123456789
type: integer
PeerCount:
description: PeerCount represents the number of peers linked to the user.
example: 2
type: integer
PeerMetrics:
description: PeerMetrics represents the metrics of the peers linked to the
user.
items:
$ref: '#/definitions/models.PeerMetrics'
type: array
UserIdentifier:
description: The unique identifier of the user.
example: uid-1234567
type: string
type: object
info:
contact:
name: WireGuard Portal Project
url: https://github.com/h44z/wg-portal
description: |-
The WireGuard Portal REST API enables efficient management of WireGuard VPN configurations through a set of JSON-based endpoints.
It supports creating and editing peers, interfaces, and user profiles, while also providing role-based access control and auditing.
This API allows seamless integration with external tools or scripts for automated network configuration and administration.
license:
name: MIT
url: https://github.com/h44z/wg-portal/blob/master/LICENSE.txt
title: WireGuard Portal Public API
version: "1.0"
paths:
/interface/all:
get:
operationId: interface_handleAllGet
produces:
- application/json
responses:
"200":
description: OK
schema:
items:
$ref: '#/definitions/models.Interface'
type: array
"401":
description: Unauthorized
schema:
$ref: '#/definitions/models.Error'
"500":
description: Internal Server Error
schema:
$ref: '#/definitions/models.Error'
security:
- BasicAuth: []
summary: Get all interface records.
tags:
- Interfaces
/interface/by-id/{id}:
delete:
operationId: interfaces_handleDelete
parameters:
- description: The interface identifier.
in: path
name: id
required: true
type: string
produces:
- application/json
responses:
"204":
description: No content if deletion was successful.
"400":
description: Bad Request
schema:
$ref: '#/definitions/models.Error'
"401":
description: Unauthorized
schema:
$ref: '#/definitions/models.Error'
"403":
description: Forbidden
schema:
$ref: '#/definitions/models.Error'
"404":
description: Not Found
schema:
$ref: '#/definitions/models.Error'
"500":
description: Internal Server Error
schema:
$ref: '#/definitions/models.Error'
security:
- BasicAuth: []
summary: Delete the interface record.
tags:
- Interfaces
get:
operationId: interfaces_handleByIdGet
parameters:
- description: The interface identifier.
in: path
name: id
required: true
type: string
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/models.Interface'
"401":
description: Unauthorized
schema:
$ref: '#/definitions/models.Error'
"403":
description: Forbidden
schema:
$ref: '#/definitions/models.Error'
"404":
description: Not Found
schema:
$ref: '#/definitions/models.Error'
"500":
description: Internal Server Error
schema:
$ref: '#/definitions/models.Error'
security:
- BasicAuth: []
summary: Get a specific interface record by its identifier.
tags:
- Interfaces
put:
operationId: interfaces_handleUpdatePut
parameters:
- description: The interface identifier.
in: path
name: id
required: true
type: string
- description: The interface data.
in: body
name: request
required: true
schema:
$ref: '#/definitions/models.Interface'
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/models.Interface'
"400":
description: Bad Request
schema:
$ref: '#/definitions/models.Error'
"401":
description: Unauthorized
schema:
$ref: '#/definitions/models.Error'
"403":
description: Forbidden
schema:
$ref: '#/definitions/models.Error'
"404":
description: Not Found
schema:
$ref: '#/definitions/models.Error'
"500":
description: Internal Server Error
schema:
$ref: '#/definitions/models.Error'
security:
- BasicAuth: []
summary: Update an interface record.
tags:
- Interfaces
/interface/new:
post:
operationId: interfaces_handleCreatePost
parameters:
- description: The interface data.
in: body
name: request
required: true
schema:
$ref: '#/definitions/models.Interface'
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/models.Interface'
"400":
description: Bad Request
schema:
$ref: '#/definitions/models.Error'
"401":
description: Unauthorized
schema:
$ref: '#/definitions/models.Error'
"403":
description: Forbidden
schema:
$ref: '#/definitions/models.Error'
"409":
description: Conflict
schema:
$ref: '#/definitions/models.Error'
"500":
description: Internal Server Error
schema:
$ref: '#/definitions/models.Error'
security:
- BasicAuth: []
summary: Create a new interface record.
tags:
- Interfaces
/metrics/by-interface/{id}:
get:
operationId: metrics_handleMetricsForInterfaceGet
parameters:
- description: The WireGuard interface identifier.
in: path
name: id
required: true
type: string
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/models.InterfaceMetrics'
"400":
description: Bad Request
schema:
$ref: '#/definitions/models.Error'
"401":
description: Unauthorized
schema:
$ref: '#/definitions/models.Error'
"404":
description: Not Found
schema:
$ref: '#/definitions/models.Error'
"500":
description: Internal Server Error
schema:
$ref: '#/definitions/models.Error'
security:
- BasicAuth: []
summary: Get all metrics for a WireGuard Portal interface.
tags:
- Metrics
/metrics/by-peer/{id}:
get:
operationId: metrics_handleMetricsForPeerGet
parameters:
- description: The peer identifier (public key).
in: path
name: id
required: true
type: string
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/models.PeerMetrics'
"400":
description: Bad Request
schema:
$ref: '#/definitions/models.Error'
"401":
description: Unauthorized
schema:
$ref: '#/definitions/models.Error'
"404":
description: Not Found
schema:
$ref: '#/definitions/models.Error'
"500":
description: Internal Server Error
schema:
$ref: '#/definitions/models.Error'
security:
- BasicAuth: []
summary: Get all metrics for a WireGuard Portal peer.
tags:
- Metrics
/metrics/by-user/{id}:
get:
operationId: metrics_handleMetricsForUserGet
parameters:
- description: The user identifier.
in: path
name: id
required: true
type: string
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/models.UserMetrics'
"400":
description: Bad Request
schema:
$ref: '#/definitions/models.Error'
"401":
description: Unauthorized
schema:
$ref: '#/definitions/models.Error'
"404":
description: Not Found
schema:
$ref: '#/definitions/models.Error'
"500":
description: Internal Server Error
schema:
$ref: '#/definitions/models.Error'
security:
- BasicAuth: []
summary: Get all metrics for a WireGuard Portal user.
tags:
- Metrics
/peer/by-id/{id}:
delete:
operationId: peers_handleDelete
parameters:
- description: The peer identifier.
in: path
name: id
required: true
type: string
produces:
- application/json
responses:
"204":
description: No content if deletion was successful.
"400":
description: Bad Request
schema:
$ref: '#/definitions/models.Error'
"401":
description: Unauthorized
schema:
$ref: '#/definitions/models.Error'
"403":
description: Forbidden
schema:
$ref: '#/definitions/models.Error'
"404":
description: Not Found
schema:
$ref: '#/definitions/models.Error'
"500":
description: Internal Server Error
schema:
$ref: '#/definitions/models.Error'
security:
- BasicAuth: []
summary: Delete the peer record.
tags:
- Peers
get:
description: Normal users can only access their own records. Admins can access
all records.
operationId: peers_handleByIdGet
parameters:
- description: The peer identifier (public key).
in: path
name: id
required: true
type: string
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/models.Peer'
"401":
description: Unauthorized
schema:
$ref: '#/definitions/models.Error'
"403":
description: Forbidden
schema:
$ref: '#/definitions/models.Error'
"404":
description: Not Found
schema:
$ref: '#/definitions/models.Error'
"500":
description: Internal Server Error
schema:
$ref: '#/definitions/models.Error'
security:
- BasicAuth: []
summary: Get a specific peer record by its identifier (public key).
tags:
- Peers
put:
description: Only admins can update existing records.
operationId: peers_handleUpdatePut
parameters:
- description: The peer identifier.
in: path
name: id
required: true
type: string
- description: The peer data.
in: body
name: request
required: true
schema:
$ref: '#/definitions/models.Peer'
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/models.Peer'
"400":
description: Bad Request
schema:
$ref: '#/definitions/models.Error'
"401":
description: Unauthorized
schema:
$ref: '#/definitions/models.Error'
"403":
description: Forbidden
schema:
$ref: '#/definitions/models.Error'
"404":
description: Not Found
schema:
$ref: '#/definitions/models.Error'
"500":
description: Internal Server Error
schema:
$ref: '#/definitions/models.Error'
security:
- BasicAuth: []
summary: Update a peer record.
tags:
- Peers
/peer/by-interface/{id}:
get:
operationId: peers_handleAllForInterfaceGet
parameters:
- description: The WireGuard interface identifier.
in: path
name: id
required: true
type: string
produces:
- application/json
responses:
"200":
description: OK
schema:
items:
$ref: '#/definitions/models.Peer'
type: array
"401":
description: Unauthorized
schema:
$ref: '#/definitions/models.Error'
"500":
description: Internal Server Error
schema:
$ref: '#/definitions/models.Error'
security:
- BasicAuth: []
summary: Get all peer records for a given WireGuard interface.
tags:
- Peers
/peer/by-user/{id}:
get:
description: Normal users can only access their own records. Admins can access
all records.
operationId: peers_handleAllForUserGet
parameters:
- description: The user identifier.
in: path
name: id
required: true
type: string
produces:
- application/json
responses:
"200":
description: OK
schema:
items:
$ref: '#/definitions/models.Peer'
type: array
"401":
description: Unauthorized
schema:
$ref: '#/definitions/models.Error'
"500":
description: Internal Server Error
schema:
$ref: '#/definitions/models.Error'
security:
- BasicAuth: []
summary: Get all peer records for a given user.
tags:
- Peers
/peer/new:
post:
description: Only admins can create new records.
operationId: peers_handleCreatePost
parameters:
- description: The peer data.
in: body
name: request
required: true
schema:
$ref: '#/definitions/models.Peer'
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/models.Peer'
"400":
description: Bad Request
schema:
$ref: '#/definitions/models.Error'
"401":
description: Unauthorized
schema:
$ref: '#/definitions/models.Error'
"403":
description: Forbidden
schema:
$ref: '#/definitions/models.Error'
"409":
description: Conflict
schema:
$ref: '#/definitions/models.Error'
"500":
description: Internal Server Error
schema:
$ref: '#/definitions/models.Error'
security:
- BasicAuth: []
summary: Create a new peer record.
tags:
- Peers
/provisioning/data/peer-config:
get:
description: Normal users can only access their own record. Admins can access
all records.
operationId: provisioning_handlePeerConfigGet
parameters:
- description: The peer identifier (public key) that should be queried.
in: query
name: PeerId
required: true
type: string
produces:
- text/plain
- application/json
responses:
"200":
description: The WireGuard configuration file
schema:
type: string
"400":
description: Bad Request
schema:
$ref: '#/definitions/models.Error'
"401":
description: Unauthorized
schema:
$ref: '#/definitions/models.Error'
"403":
description: Forbidden
schema:
$ref: '#/definitions/models.Error'
"404":
description: Not Found
schema:
$ref: '#/definitions/models.Error'
"500":
description: Internal Server Error
schema:
$ref: '#/definitions/models.Error'
security:
- BasicAuth: []
summary: Get the peer configuration in wg-quick format.
tags:
- Provisioning
/provisioning/data/peer-qr:
get:
description: Normal users can only access their own record. Admins can access
all records.
operationId: provisioning_handlePeerQrGet
parameters:
- description: The peer identifier (public key) that should be queried.
in: query
name: PeerId
required: true
type: string
produces:
- image/png
- application/json
responses:
"200":
description: The WireGuard configuration QR code
schema:
type: file
"400":
description: Bad Request
schema:
$ref: '#/definitions/models.Error'
"401":
description: Unauthorized
schema:
$ref: '#/definitions/models.Error'
"403":
description: Forbidden
schema:
$ref: '#/definitions/models.Error'
"404":
description: Not Found
schema:
$ref: '#/definitions/models.Error'
"500":
description: Internal Server Error
schema:
$ref: '#/definitions/models.Error'
security:
- BasicAuth: []
summary: Get the peer configuration as QR code.
tags:
- Provisioning
/provisioning/data/user-info:
get:
description: Normal users can only access their own record. Admins can access
all records.
operationId: provisioning_handleUserInfoGet
parameters:
- description: The user identifier that should be queried. If not set, the authenticated
user is used.
in: query
name: UserId
type: string
- description: The email address that should be queried. If UserId is set, this
is ignored.
in: query
name: Email
type: string
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/models.UserInformation'
"400":
description: Bad Request
schema:
$ref: '#/definitions/models.Error'
"401":
description: Unauthorized
schema:
$ref: '#/definitions/models.Error'
"403":
description: Forbidden
schema:
$ref: '#/definitions/models.Error'
"404":
description: Not Found
schema:
$ref: '#/definitions/models.Error'
"500":
description: Internal Server Error
schema:
$ref: '#/definitions/models.Error'
security:
- BasicAuth: []
summary: Get information about all peer records for a given user.
tags:
- Provisioning
/provisioning/new-peer:
post:
description: Normal users can only create new peers if self provisioning is
allowed. Admins can always add new peers.
operationId: provisioning_handleNewPeerPost
parameters:
- description: Provisioning request model.
in: body
name: request
required: true
schema:
$ref: '#/definitions/models.ProvisioningRequest'
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/models.Peer'
"400":
description: Bad Request
schema:
$ref: '#/definitions/models.Error'
"401":
description: Unauthorized
schema:
$ref: '#/definitions/models.Error'
"403":
description: Forbidden
schema:
$ref: '#/definitions/models.Error'
"404":
description: Not Found
schema:
$ref: '#/definitions/models.Error'
"500":
description: Internal Server Error
schema:
$ref: '#/definitions/models.Error'
security:
- BasicAuth: []
summary: Create a new peer for the given interface and user.
tags:
- Provisioning
/user/all:
get:
operationId: users_handleAllGet
produces:
- application/json
responses:
"200":
description: OK
schema:
items:
$ref: '#/definitions/models.User'
type: array
"401":
description: Unauthorized
schema:
$ref: '#/definitions/models.Error'
"500":
description: Internal Server Error
schema:
$ref: '#/definitions/models.Error'
security:
- BasicAuth: []
summary: Get all user records.
tags:
- Users
/user/by-id/{id}:
delete:
operationId: users_handleDelete
parameters:
- description: The user identifier.
in: path
name: id
required: true
type: string
produces:
- application/json
responses:
"204":
description: No content if deletion was successful.
"400":
description: Bad Request
schema:
$ref: '#/definitions/models.Error'
"401":
description: Unauthorized
schema:
$ref: '#/definitions/models.Error'
"403":
description: Forbidden
schema:
$ref: '#/definitions/models.Error'
"404":
description: Not Found
schema:
$ref: '#/definitions/models.Error'
"500":
description: Internal Server Error
schema:
$ref: '#/definitions/models.Error'
security:
- BasicAuth: []
summary: Delete the user record.
tags:
- Users
get:
description: Normal users can only access their own record. Admins can access
all records.
operationId: users_handleByIdGet
parameters:
- description: The user identifier.
in: path
name: id
required: true
type: string
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/models.User'
"401":
description: Unauthorized
schema:
$ref: '#/definitions/models.Error'
"403":
description: Forbidden
schema:
$ref: '#/definitions/models.Error'
"404":
description: Not Found
schema:
$ref: '#/definitions/models.Error'
"500":
description: Internal Server Error
schema:
$ref: '#/definitions/models.Error'
security:
- BasicAuth: []
summary: Get a specific user record by its internal identifier.
tags:
- Users
put:
description: Only admins can update existing records.
operationId: users_handleUpdatePut
parameters:
- description: The user identifier.
in: path
name: id
required: true
type: string
- description: The user data.
in: body
name: request
required: true
schema:
$ref: '#/definitions/models.User'
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/models.User'
"400":
description: Bad Request
schema:
$ref: '#/definitions/models.Error'
"401":
description: Unauthorized
schema:
$ref: '#/definitions/models.Error'
"403":
description: Forbidden
schema:
$ref: '#/definitions/models.Error'
"404":
description: Not Found
schema:
$ref: '#/definitions/models.Error'
"500":
description: Internal Server Error
schema:
$ref: '#/definitions/models.Error'
security:
- BasicAuth: []
summary: Update a user record.
tags:
- Users
/user/new:
post:
description: Only admins can create new records.
operationId: users_handleCreatePost
parameters:
- description: The user data.
in: body
name: request
required: true
schema:
$ref: '#/definitions/models.User'
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/models.User'
"400":
description: Bad Request
schema:
$ref: '#/definitions/models.Error'
"401":
description: Unauthorized
schema:
$ref: '#/definitions/models.Error'
"403":
description: Forbidden
schema:
$ref: '#/definitions/models.Error'
"409":
description: Conflict
schema:
$ref: '#/definitions/models.Error'
"500":
description: Internal Server Error
schema:
$ref: '#/definitions/models.Error'
security:
- BasicAuth: []
summary: Create a new user record.
tags:
- Users
swagger: "2.0"