mirror of
https://github.com/netbirdio/docs.git
synced 2026-04-16 07:26:35 +00:00
add examples to response
This commit is contained in:
@@ -49,8 +49,9 @@ export type schemaParameter = {
|
||||
enum?: string[]
|
||||
}
|
||||
|
||||
export type schemaObject = {
|
||||
examples: Object
|
||||
export type component = {
|
||||
example: Object
|
||||
schema: Object
|
||||
parameters: schemaParameter[]
|
||||
}
|
||||
|
||||
@@ -77,31 +78,39 @@ async function gen_v3(spec: OpenAPIV3.Document, dest: string, { apiUrl }: { apiU
|
||||
})
|
||||
})
|
||||
|
||||
let schemas = new Map<string, schemaObject>();
|
||||
let components = new Map<string, component>();
|
||||
Object.entries(spec.components?.schemas).forEach(([key, val]) => {
|
||||
const schema = val as OpenAPIV3.SchemaObject
|
||||
let examples = new Map<string, any>();
|
||||
let outputSchema = new Map<string, any>();
|
||||
let outputExample = new Map<string, any>();
|
||||
let parameters : schemaParameter[] = []
|
||||
if(schema.allOf){
|
||||
schema.allOf.forEach((item) => {
|
||||
if((item as OpenAPIV3.ReferenceObject).$ref){
|
||||
let schemaObject = schemas.get((item as OpenAPIV3.ReferenceObject).$ref.split('/').pop())
|
||||
let examplesMap = new Map(Object.entries(schemaObject.examples))
|
||||
examplesMap.forEach((value, key) => {
|
||||
examples.set(key, value)
|
||||
let component = components.get((item as OpenAPIV3.ReferenceObject).$ref.split('/').pop())
|
||||
let schemaMap = new Map(Object.entries(component.schema))
|
||||
let exampleMap = new Map(Object.entries(component.example))
|
||||
schemaMap.forEach((value, key) => {
|
||||
outputSchema.set(key, value)
|
||||
})
|
||||
parameters = parameters.concat(schemaObject.parameters)
|
||||
exampleMap.forEach((value, key) => {
|
||||
outputExample.set(key, value)
|
||||
})
|
||||
parameters = parameters.concat(component.parameters)
|
||||
}
|
||||
if((item as OpenAPIV3.SchemaObject).properties){
|
||||
Object.entries((item as OpenAPIV3.SchemaObject).properties).forEach(([key, val]) => {
|
||||
let property = val as OpenAPIV3.SchemaObject
|
||||
let type
|
||||
let type, exampleValue
|
||||
if (property.type === "array") {
|
||||
type = new Array(resolveType(property.items, spec.components?.schemas))
|
||||
exampleValue = new Array(resolveExampleValue(property.items, spec.components?.schemas))
|
||||
} else {
|
||||
type = resolveType(property, spec.components?.schemas)
|
||||
exampleValue = resolveExampleValue(property, spec.components?.schemas)
|
||||
}
|
||||
examples.set(key, type)
|
||||
outputSchema.set(key, type)
|
||||
outputExample.set(key, exampleValue)
|
||||
let parameter: schemaParameter = {
|
||||
name: key,
|
||||
type: property.type === "array" ? ((property.items as OpenAPIV3.SchemaObject).type || (property.items as OpenAPIV3.ReferenceObject).$ref.split('/').pop()) + "[]" : property.type,
|
||||
@@ -120,13 +129,16 @@ async function gen_v3(spec: OpenAPIV3.Document, dest: string, { apiUrl }: { apiU
|
||||
} else {
|
||||
Object.entries(schema.properties).forEach(([key, val]) => {
|
||||
let property = val as OpenAPIV3.SchemaObject
|
||||
let type
|
||||
let type, exampleValue
|
||||
if(property.type === "array"){
|
||||
type = new Array(resolveType(property.items, spec.components?.schemas))
|
||||
exampleValue = new Array(resolveExampleValue(property.items, spec.components?.schemas))
|
||||
} else {
|
||||
type = resolveType(property, spec.components?.schemas)
|
||||
exampleValue = resolveExampleValue(property, spec.components?.schemas)
|
||||
}
|
||||
examples.set(key, type)
|
||||
outputSchema.set(key, type)
|
||||
outputExample.set(key, exampleValue)
|
||||
let parameter : schemaParameter = {
|
||||
name: key,
|
||||
type: property.type === "array" ? ((property.items as OpenAPIV3.SchemaObject).type || (property.items as OpenAPIV3.ReferenceObject).$ref.split('/').pop()) + "[]" : property.type,
|
||||
@@ -142,12 +154,12 @@ async function gen_v3(spec: OpenAPIV3.Document, dest: string, { apiUrl }: { apiU
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
let output : schemaObject = {
|
||||
examples: Object.fromEntries(examples),
|
||||
let output : component = {
|
||||
example: Object.fromEntries(outputExample),
|
||||
schema: Object.fromEntries(outputSchema),
|
||||
parameters: parameters
|
||||
}
|
||||
schemas.set(key, output)
|
||||
components.set(key, output)
|
||||
})
|
||||
|
||||
|
||||
@@ -169,7 +181,7 @@ async function gen_v3(spec: OpenAPIV3.Document, dest: string, { apiUrl }: { apiU
|
||||
tag: key,
|
||||
sections,
|
||||
operations,
|
||||
schemas,
|
||||
components,
|
||||
})
|
||||
|
||||
// Write to disk
|
||||
@@ -198,3 +210,23 @@ function resolveType(items: OpenAPIV3.ReferenceObject | OpenAPIV3.SchemaObject |
|
||||
return (items as OpenAPIV3.ArraySchemaObject).type
|
||||
}
|
||||
|
||||
|
||||
function resolveExampleValue(items: OpenAPIV3.ReferenceObject | OpenAPIV3.SchemaObject | OpenAPIV3.NonArraySchemaObjectType, schemas) : any {
|
||||
if((items as OpenAPIV3.ReferenceObject).$ref){
|
||||
let ref = (items as OpenAPIV3.ReferenceObject).$ref
|
||||
let map = new Map<string, any>()
|
||||
Object.entries(schemas[ref.split('/').pop()].properties).forEach(([key, val]) => {
|
||||
let property = val as OpenAPIV3.SchemaObject
|
||||
let exampleValue
|
||||
if(property.type === "array"){
|
||||
exampleValue = new Array(resolveExampleValue(property.items, schemas))
|
||||
} else {
|
||||
exampleValue = resolveExampleValue(property, schemas)
|
||||
}
|
||||
map.set(key, exampleValue)
|
||||
})
|
||||
return Object.fromEntries(map)
|
||||
}
|
||||
return (items as OpenAPIV3.ArraySchemaObject).example
|
||||
}
|
||||
|
||||
|
||||
@@ -158,7 +158,7 @@
|
||||
"/api/users" : {
|
||||
"get" : {
|
||||
"tags" : [ "Users" ],
|
||||
"summary" : "Retrieve Users",
|
||||
"summary" : "List all Users",
|
||||
"description" : "Returns a list of all users",
|
||||
"operationId" : "getUsers",
|
||||
"parameters" : [ {
|
||||
@@ -2325,7 +2325,8 @@
|
||||
"properties" : {
|
||||
"id" : {
|
||||
"type" : "string",
|
||||
"description" : "Account ID"
|
||||
"description" : "Account ID",
|
||||
"example" : "ch8i4ug6lnn4g9hqv7l0"
|
||||
},
|
||||
"settings" : {
|
||||
"$ref" : "#/components/schemas/AccountSettings"
|
||||
@@ -2337,11 +2338,13 @@
|
||||
"properties" : {
|
||||
"peer_login_expiration_enabled" : {
|
||||
"type" : "boolean",
|
||||
"description" : "Enables or disables peer login expiration globally. After peer's login has expired the user has to log in (authenticate). Applies only to peers that were added by a user (interactive SSO login)."
|
||||
"description" : "Enables or disables peer login expiration globally. After peer's login has expired the user has to log in (authenticate). Applies only to peers that were added by a user (interactive SSO login).",
|
||||
"example" : true
|
||||
},
|
||||
"peer_login_expiration" : {
|
||||
"type" : "integer",
|
||||
"description" : "Period of time after which peer login expires (seconds)."
|
||||
"description" : "Period of time after which peer login expires (seconds).",
|
||||
"example" : 43200
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -2351,41 +2354,49 @@
|
||||
"properties" : {
|
||||
"id" : {
|
||||
"type" : "string",
|
||||
"description" : "User ID"
|
||||
"description" : "User ID",
|
||||
"example" : "google-oauth2|277474792786460067937"
|
||||
},
|
||||
"email" : {
|
||||
"type" : "string",
|
||||
"description" : "User's email address"
|
||||
"description" : "User's email address",
|
||||
"example" : "demo@netbird.io"
|
||||
},
|
||||
"name" : {
|
||||
"type" : "string",
|
||||
"description" : "User's name from idp provider"
|
||||
"description" : "User's name from idp provider",
|
||||
"example" : "Tom Schulz"
|
||||
},
|
||||
"role" : {
|
||||
"type" : "string",
|
||||
"description" : "User's NetBird account role"
|
||||
"description" : "User's NetBird account role",
|
||||
"example" : "admin"
|
||||
},
|
||||
"status" : {
|
||||
"type" : "string",
|
||||
"description" : "User's status",
|
||||
"example" : "active",
|
||||
"enum" : [ "active", "invited", "disabled" ]
|
||||
},
|
||||
"auto_groups" : {
|
||||
"type" : "array",
|
||||
"description" : "Groups to auto-assign to peers registered by this user",
|
||||
"items" : {
|
||||
"type" : "string"
|
||||
"type" : "string",
|
||||
"example" : "devs"
|
||||
}
|
||||
},
|
||||
"is_current" : {
|
||||
"type" : "boolean",
|
||||
"description" : "Is true if authenticated user is the same as this user",
|
||||
"readOnly" : true
|
||||
"readOnly" : true,
|
||||
"example" : true
|
||||
},
|
||||
"is_service_user" : {
|
||||
"type" : "boolean",
|
||||
"description" : "Is true if this user is a service user",
|
||||
"readOnly" : true
|
||||
"readOnly" : true,
|
||||
"example" : false
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -2395,13 +2406,15 @@
|
||||
"properties" : {
|
||||
"role" : {
|
||||
"type" : "string",
|
||||
"description" : "User's NetBird account role"
|
||||
"description" : "User's NetBird account role",
|
||||
"example" : "admin"
|
||||
},
|
||||
"auto_groups" : {
|
||||
"type" : "array",
|
||||
"description" : "Groups to auto-assign to peers registered by this user",
|
||||
"items" : {
|
||||
"type" : "string"
|
||||
"type" : "string",
|
||||
"example" : "devs"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2412,26 +2425,31 @@
|
||||
"properties" : {
|
||||
"email" : {
|
||||
"type" : "string",
|
||||
"description" : "User's Email to send invite to"
|
||||
"description" : "User's Email to send invite to",
|
||||
"example" : "demo@netbird.io"
|
||||
},
|
||||
"name" : {
|
||||
"type" : "string",
|
||||
"description" : "User's full name"
|
||||
"description" : "User's full name",
|
||||
"example" : "Tom Schulz"
|
||||
},
|
||||
"role" : {
|
||||
"type" : "string",
|
||||
"description" : "User's NetBird account role"
|
||||
"description" : "User's NetBird account role",
|
||||
"example" : "admin"
|
||||
},
|
||||
"auto_groups" : {
|
||||
"type" : "array",
|
||||
"description" : "Groups to auto-assign to peers registered by this user",
|
||||
"items" : {
|
||||
"type" : "string"
|
||||
"type" : "string",
|
||||
"example" : "devs"
|
||||
}
|
||||
},
|
||||
"is_service_user" : {
|
||||
"type" : "boolean",
|
||||
"description" : "Is true if this user is a service user"
|
||||
"description" : "Is true if this user is a service user",
|
||||
"example" : false
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -2441,11 +2459,13 @@
|
||||
"properties" : {
|
||||
"id" : {
|
||||
"type" : "string",
|
||||
"description" : "Peer ID"
|
||||
"description" : "Peer ID",
|
||||
"example" : "chacbco6lnnbn6cg5s90"
|
||||
},
|
||||
"name" : {
|
||||
"type" : "string",
|
||||
"description" : "Peer's hostname"
|
||||
"description" : "Peer's hostname",
|
||||
"example" : "stage-host-1"
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -2454,13 +2474,16 @@
|
||||
"type" : "object",
|
||||
"properties" : {
|
||||
"name" : {
|
||||
"type" : "string"
|
||||
"type" : "string",
|
||||
"example" : "stage-host-1"
|
||||
},
|
||||
"ssh_enabled" : {
|
||||
"type" : "boolean"
|
||||
"type" : "boolean",
|
||||
"example" : true
|
||||
},
|
||||
"login_expiration_enabled" : {
|
||||
"type" : "boolean"
|
||||
"type" : "boolean",
|
||||
"example" : false
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -2473,24 +2496,29 @@
|
||||
"properties" : {
|
||||
"ip" : {
|
||||
"type" : "string",
|
||||
"description" : "Peer's IP address"
|
||||
"description" : "Peer's IP address",
|
||||
"example" : "10.64.0.1"
|
||||
},
|
||||
"connected" : {
|
||||
"type" : "boolean",
|
||||
"description" : "Peer to Management connection status"
|
||||
"description" : "Peer to Management connection status",
|
||||
"example" : true
|
||||
},
|
||||
"last_seen" : {
|
||||
"type" : "string",
|
||||
"description" : "Last time peer connected to Netbird's management service",
|
||||
"format" : "date-time"
|
||||
"format" : "date-time",
|
||||
"example" : "2023-05-05T10:05:26.420578Z"
|
||||
},
|
||||
"os" : {
|
||||
"type" : "string",
|
||||
"description" : "Peer's operating system and version"
|
||||
"description" : "Peer's operating system and version",
|
||||
"example" : "Darwin 13.2.1"
|
||||
},
|
||||
"version" : {
|
||||
"type" : "string",
|
||||
"description" : "Peer's daemon or cli version"
|
||||
"description" : "Peer's daemon or cli version",
|
||||
"example" : "0.14.0"
|
||||
},
|
||||
"groups" : {
|
||||
"type" : "array",
|
||||
@@ -2501,36 +2529,44 @@
|
||||
},
|
||||
"ssh_enabled" : {
|
||||
"type" : "boolean",
|
||||
"description" : "Indicates whether SSH server is enabled on this peer"
|
||||
"description" : "Indicates whether SSH server is enabled on this peer",
|
||||
"example" : true
|
||||
},
|
||||
"user_id" : {
|
||||
"type" : "string",
|
||||
"description" : "User ID of the user that enrolled this peer"
|
||||
"description" : "User ID of the user that enrolled this peer",
|
||||
"example" : "google-oauth2|277474792786460067937"
|
||||
},
|
||||
"hostname" : {
|
||||
"type" : "string",
|
||||
"description" : "Hostname of the machine"
|
||||
"description" : "Hostname of the machine",
|
||||
"example" : "stage-host-1"
|
||||
},
|
||||
"ui_version" : {
|
||||
"type" : "string",
|
||||
"description" : "Peer's desktop UI version"
|
||||
"description" : "Peer's desktop UI version",
|
||||
"example" : "0.14.0"
|
||||
},
|
||||
"dns_label" : {
|
||||
"type" : "string",
|
||||
"description" : "Peer's DNS label is the parsed peer name for domain resolution. It is used to form an FQDN by appending the account's domain to the peer label. e.g. peer-dns-label.netbird.cloud"
|
||||
"description" : "Peer's DNS label is the parsed peer name for domain resolution. It is used to form an FQDN by appending the account's domain to the peer label. e.g. peer-dns-label.netbird.cloud",
|
||||
"example" : "stage-host-1.netbird.cloud"
|
||||
},
|
||||
"login_expiration_enabled" : {
|
||||
"type" : "boolean",
|
||||
"description" : "Indicates whether peer login expiration has been enabled or not"
|
||||
"description" : "Indicates whether peer login expiration has been enabled or not",
|
||||
"example" : false
|
||||
},
|
||||
"login_expired" : {
|
||||
"type" : "boolean",
|
||||
"description" : "Indicates whether peer's login expired or not"
|
||||
"description" : "Indicates whether peer's login expired or not",
|
||||
"example" : false
|
||||
},
|
||||
"last_login" : {
|
||||
"type" : "string",
|
||||
"description" : "Last time this peer performed log in (authentication). E.g., user authenticated.",
|
||||
"format" : "date-time"
|
||||
"format" : "date-time",
|
||||
"example" : "2023-05-05T09:00:35.477782Z"
|
||||
}
|
||||
}
|
||||
} ]
|
||||
@@ -2541,61 +2577,74 @@
|
||||
"properties" : {
|
||||
"id" : {
|
||||
"type" : "string",
|
||||
"description" : "Setup Key ID"
|
||||
"description" : "Setup Key ID",
|
||||
"example" : "2531583362"
|
||||
},
|
||||
"key" : {
|
||||
"type" : "string",
|
||||
"description" : "Setup Key value"
|
||||
"description" : "Setup Key value",
|
||||
"example" : "A616097E-FCF0-48FA-9354-CA4A61142761"
|
||||
},
|
||||
"name" : {
|
||||
"type" : "string",
|
||||
"description" : "Setup key name identifier"
|
||||
"description" : "Setup key name identifier",
|
||||
"example" : "Default key"
|
||||
},
|
||||
"expires" : {
|
||||
"type" : "string",
|
||||
"description" : "Setup Key expiration date",
|
||||
"format" : "date-time"
|
||||
"format" : "date-time",
|
||||
"example" : "2023-06-01T14:47:22.291057Z"
|
||||
},
|
||||
"type" : {
|
||||
"type" : "string",
|
||||
"description" : "Setup key type, one-off for single time usage and reusable"
|
||||
"description" : "Setup key type, one-off for single time usage and reusable",
|
||||
"example" : "reusable"
|
||||
},
|
||||
"valid" : {
|
||||
"type" : "boolean",
|
||||
"description" : "Setup key validity status"
|
||||
"description" : "Setup key validity status",
|
||||
"example" : true
|
||||
},
|
||||
"revoked" : {
|
||||
"type" : "boolean",
|
||||
"description" : "Setup key revocation status"
|
||||
"description" : "Setup key revocation status",
|
||||
"example" : false
|
||||
},
|
||||
"used_times" : {
|
||||
"type" : "integer",
|
||||
"description" : "Usage count of setup key"
|
||||
"description" : "Usage count of setup key",
|
||||
"example" : 2
|
||||
},
|
||||
"last_used" : {
|
||||
"type" : "string",
|
||||
"description" : "Setup key last usage date",
|
||||
"format" : "date-time"
|
||||
"format" : "date-time",
|
||||
"example" : "2023-05-05T09:00:35.477782Z"
|
||||
},
|
||||
"state" : {
|
||||
"type" : "string",
|
||||
"description" : "Setup key status, \"valid\", \"overused\",\"expired\" or \"revoked\""
|
||||
"description" : "Setup key status, \"valid\", \"overused\",\"expired\" or \"revoked\"",
|
||||
"example" : "valid"
|
||||
},
|
||||
"auto_groups" : {
|
||||
"type" : "array",
|
||||
"description" : "Setup key groups to auto-assign to peers registered with this key",
|
||||
"items" : {
|
||||
"type" : "string"
|
||||
"type" : "string",
|
||||
"example" : "devs"
|
||||
}
|
||||
},
|
||||
"updated_at" : {
|
||||
"type" : "string",
|
||||
"description" : "Setup key last update date",
|
||||
"format" : "date-time"
|
||||
"format" : "date-time",
|
||||
"example" : "2023-05-05T09:00:35.477782Z"
|
||||
},
|
||||
"usage_limit" : {
|
||||
"type" : "integer",
|
||||
"description" : "A number of times this key can be used. The value of 0 indicates the unlimited usage."
|
||||
"description" : "A number of times this key can be used. The value of 0 indicates the unlimited usage.",
|
||||
"example" : 0
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -2605,30 +2654,36 @@
|
||||
"properties" : {
|
||||
"name" : {
|
||||
"type" : "string",
|
||||
"description" : "Setup Key name"
|
||||
"description" : "Setup Key name",
|
||||
"example" : "Default key"
|
||||
},
|
||||
"type" : {
|
||||
"type" : "string",
|
||||
"description" : "Setup key type, one-off for single time usage and reusable"
|
||||
"description" : "Setup key type, one-off for single time usage and reusable",
|
||||
"example" : "reusable"
|
||||
},
|
||||
"expires_in" : {
|
||||
"type" : "integer",
|
||||
"description" : "Expiration time in seconds"
|
||||
"description" : "Expiration time in seconds",
|
||||
"example" : 43200
|
||||
},
|
||||
"revoked" : {
|
||||
"type" : "boolean",
|
||||
"description" : "Setup key revocation status"
|
||||
"description" : "Setup key revocation status",
|
||||
"example" : false
|
||||
},
|
||||
"auto_groups" : {
|
||||
"type" : "array",
|
||||
"description" : "Setup key groups to auto-assign to peers registered with this key",
|
||||
"items" : {
|
||||
"type" : "string"
|
||||
"type" : "string",
|
||||
"example" : "devs"
|
||||
}
|
||||
},
|
||||
"usage_limit" : {
|
||||
"type" : "integer",
|
||||
"description" : "A number of times this key can be used. The value of 0 indicates the unlimited usage."
|
||||
"description" : "A number of times this key can be used. The value of 0 indicates the unlimited usage.",
|
||||
"example" : 0
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -2638,30 +2693,36 @@
|
||||
"properties" : {
|
||||
"id" : {
|
||||
"type" : "string",
|
||||
"description" : "ID of a token"
|
||||
"description" : "ID of a token",
|
||||
"example" : "ch8i54g6lnn4g9hqv7n0"
|
||||
},
|
||||
"name" : {
|
||||
"type" : "string",
|
||||
"description" : "Name of the token"
|
||||
"description" : "Name of the token",
|
||||
"example" : "My first token"
|
||||
},
|
||||
"expiration_date" : {
|
||||
"type" : "string",
|
||||
"description" : "Date the token expires",
|
||||
"format" : "date-time"
|
||||
"format" : "date-time",
|
||||
"example" : "2023-05-05T14:38:28.977616Z"
|
||||
},
|
||||
"created_by" : {
|
||||
"type" : "string",
|
||||
"description" : "User ID of the user who created the token"
|
||||
"description" : "User ID of the user who created the token",
|
||||
"example" : "google-oauth2|277474792786460067937"
|
||||
},
|
||||
"created_at" : {
|
||||
"type" : "string",
|
||||
"description" : "Date the token was created",
|
||||
"format" : "date-time"
|
||||
"format" : "date-time",
|
||||
"example" : "2023-05-02T14:48:20.465209Z"
|
||||
},
|
||||
"last_used" : {
|
||||
"type" : "string",
|
||||
"description" : "Date the token was last used",
|
||||
"format" : "date-time"
|
||||
"format" : "date-time",
|
||||
"example" : "2023-05-04T12:45:25.9723616Z"
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -2671,7 +2732,8 @@
|
||||
"properties" : {
|
||||
"plain_token" : {
|
||||
"type" : "string",
|
||||
"description" : "Plain text representation of the generated token"
|
||||
"description" : "Plain text representation of the generated token",
|
||||
"example" : "2023-05-02T14:48:20.465209Z"
|
||||
},
|
||||
"personal_access_token" : {
|
||||
"$ref" : "#/components/schemas/PersonalAccessToken"
|
||||
@@ -2684,13 +2746,15 @@
|
||||
"properties" : {
|
||||
"name" : {
|
||||
"type" : "string",
|
||||
"description" : "Name of the token"
|
||||
"description" : "Name of the token",
|
||||
"example" : "My first token"
|
||||
},
|
||||
"expires_in" : {
|
||||
"maximum" : 365,
|
||||
"minimum" : 1,
|
||||
"type" : "integer",
|
||||
"description" : "Expiration in days"
|
||||
"description" : "Expiration in days",
|
||||
"example" : 30
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -2700,15 +2764,18 @@
|
||||
"properties" : {
|
||||
"id" : {
|
||||
"type" : "string",
|
||||
"description" : "Group ID"
|
||||
"description" : "Group ID",
|
||||
"example" : "ch8i4ug6lnn4g9hqv7m0"
|
||||
},
|
||||
"name" : {
|
||||
"type" : "string",
|
||||
"description" : "Group Name identifier"
|
||||
"description" : "Group Name identifier",
|
||||
"example" : "devs"
|
||||
},
|
||||
"peers_count" : {
|
||||
"type" : "integer",
|
||||
"description" : "Count of peers associated to the group"
|
||||
"description" : "Count of peers associated to the group",
|
||||
"example" : 2
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -2718,11 +2785,13 @@
|
||||
"properties" : {
|
||||
"name" : {
|
||||
"type" : "string",
|
||||
"description" : "Group name identifier"
|
||||
"description" : "Group name identifier",
|
||||
"example" : "devs"
|
||||
},
|
||||
"peers" : {
|
||||
"type" : "array",
|
||||
"description" : "List of peers ids",
|
||||
"example" : "ch8i4ug6lnn4g9hqv7m1",
|
||||
"items" : {
|
||||
"type" : "string"
|
||||
}
|
||||
@@ -2752,19 +2821,23 @@
|
||||
"properties" : {
|
||||
"name" : {
|
||||
"type" : "string",
|
||||
"description" : "Rule name identifier"
|
||||
"description" : "Rule name identifier",
|
||||
"example" : "Default"
|
||||
},
|
||||
"description" : {
|
||||
"type" : "string",
|
||||
"description" : "Rule friendly description"
|
||||
"description" : "Rule friendly description",
|
||||
"example" : "This is a default rule that allows connections between all the resources"
|
||||
},
|
||||
"disabled" : {
|
||||
"type" : "boolean",
|
||||
"description" : "Rules status"
|
||||
"description" : "Rules status",
|
||||
"example" : false
|
||||
},
|
||||
"flow" : {
|
||||
"type" : "string",
|
||||
"description" : "Rule flow, currently, only \"bidirect\" for bi-directional traffic is accepted"
|
||||
"description" : "Rule flow, currently, only \"bidirect\" for bi-directional traffic is accepted",
|
||||
"example" : "bidirect"
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -2778,14 +2851,16 @@
|
||||
"type" : "array",
|
||||
"description" : "List of source groups",
|
||||
"items" : {
|
||||
"type" : "string"
|
||||
"type" : "string",
|
||||
"example" : "ch8i4ug6lnn4g9hqv7m1"
|
||||
}
|
||||
},
|
||||
"destinations" : {
|
||||
"type" : "array",
|
||||
"description" : "List of destination groups",
|
||||
"items" : {
|
||||
"type" : "string"
|
||||
"type" : "string",
|
||||
"example" : "ch8i4ug6lnn4g9hqv7m0"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2798,7 +2873,8 @@
|
||||
"properties" : {
|
||||
"id" : {
|
||||
"type" : "string",
|
||||
"description" : "Rule ID"
|
||||
"description" : "Rule ID",
|
||||
"example" : "ch8i4ug6lnn4g9hqv7mg"
|
||||
}
|
||||
}
|
||||
}, {
|
||||
@@ -2830,19 +2906,23 @@
|
||||
"properties" : {
|
||||
"id" : {
|
||||
"type" : "string",
|
||||
"description" : "Rule ID"
|
||||
"description" : "Rule ID",
|
||||
"example" : "ch8i4ug6lnn4g9hqv7mg"
|
||||
},
|
||||
"name" : {
|
||||
"type" : "string",
|
||||
"description" : "Rule name identifier"
|
||||
"description" : "Rule name identifier",
|
||||
"example" : "Default"
|
||||
},
|
||||
"description" : {
|
||||
"type" : "string",
|
||||
"description" : "Rule friendly description"
|
||||
"description" : "Rule friendly description",
|
||||
"example" : "This is a default rule that allows connections between all the resources"
|
||||
},
|
||||
"enabled" : {
|
||||
"type" : "boolean",
|
||||
"description" : "Rules status"
|
||||
"description" : "Rules status",
|
||||
"example" : true
|
||||
},
|
||||
"sources" : {
|
||||
"type" : "array",
|
||||
@@ -2861,6 +2941,7 @@
|
||||
"action" : {
|
||||
"type" : "string",
|
||||
"description" : "policy accept or drops packets",
|
||||
"example" : "accept",
|
||||
"enum" : [ "accept", "drop" ]
|
||||
}
|
||||
}
|
||||
@@ -2871,19 +2952,23 @@
|
||||
"properties" : {
|
||||
"name" : {
|
||||
"type" : "string",
|
||||
"description" : "Policy name identifier"
|
||||
"description" : "Policy name identifier",
|
||||
"example" : "ch8i4ug6lnn4g9hqv7mg"
|
||||
},
|
||||
"description" : {
|
||||
"type" : "string",
|
||||
"description" : "Policy friendly description"
|
||||
"description" : "Policy friendly description",
|
||||
"example" : "This is a default policy that allows connections between all the resources"
|
||||
},
|
||||
"enabled" : {
|
||||
"type" : "boolean",
|
||||
"description" : "Policy status"
|
||||
"description" : "Policy status",
|
||||
"example" : true
|
||||
},
|
||||
"query" : {
|
||||
"type" : "string",
|
||||
"description" : "Policy Rego query"
|
||||
"description" : "Policy Rego query",
|
||||
"example" : "package netbird\\n\\nall[rule] {\\n is_peer_in_any_group([\\\"ch8i4ug6lnn4g9hqv7m0\\\",\\\"ch8i4ug6lnn4g9hqv7m0\\\"])\\n rule := {\\n rules_from_group(\\\"ch8i4ug6lnn4g9hqv7m0\\\", \\\"dst\\\", \\\"accept\\\", \\\"\\\"),\\n rules_from_group(\\\"ch8i4ug6lnn4g9hqv7m0\\\", \\\"src\\\", \\\"accept\\\", \\\"\\\"),\\n }[_][_]\\n}\\n"
|
||||
},
|
||||
"rules" : {
|
||||
"type" : "array",
|
||||
@@ -2903,7 +2988,8 @@
|
||||
"properties" : {
|
||||
"id" : {
|
||||
"type" : "string",
|
||||
"description" : "Policy ID"
|
||||
"description" : "Policy ID",
|
||||
"example" : "ch8i4ug6lnn4g9hqv7mg"
|
||||
}
|
||||
}
|
||||
} ]
|
||||
@@ -2914,41 +3000,49 @@
|
||||
"properties" : {
|
||||
"description" : {
|
||||
"type" : "string",
|
||||
"description" : "Route description"
|
||||
"description" : "Route description",
|
||||
"example" : "My first route"
|
||||
},
|
||||
"network_id" : {
|
||||
"maxLength" : 40,
|
||||
"minLength" : 1,
|
||||
"type" : "string",
|
||||
"description" : "Route network identifier, to group HA routes"
|
||||
"description" : "Route network identifier, to group HA routes",
|
||||
"example" : "Route 1"
|
||||
},
|
||||
"enabled" : {
|
||||
"type" : "boolean",
|
||||
"description" : "Route status"
|
||||
"description" : "Route status",
|
||||
"example" : true
|
||||
},
|
||||
"peer" : {
|
||||
"type" : "string",
|
||||
"description" : "Peer Identifier associated with route"
|
||||
"description" : "Peer Identifier associated with route",
|
||||
"example" : "chacbco6lnnbn6cg5s91"
|
||||
},
|
||||
"network" : {
|
||||
"type" : "string",
|
||||
"description" : "Network range in CIDR format"
|
||||
"description" : "Network range in CIDR format",
|
||||
"example" : "10.64.0.0/24"
|
||||
},
|
||||
"metric" : {
|
||||
"maximum" : 9999,
|
||||
"minimum" : 1,
|
||||
"type" : "integer",
|
||||
"description" : "Route metric number. Lowest number has higher priority"
|
||||
"description" : "Route metric number. Lowest number has higher priority",
|
||||
"example" : 9999
|
||||
},
|
||||
"masquerade" : {
|
||||
"type" : "boolean",
|
||||
"description" : "Indicate if peer should masquerade traffic to this route's prefix"
|
||||
"description" : "Indicate if peer should masquerade traffic to this route's prefix",
|
||||
"example" : true
|
||||
},
|
||||
"groups" : {
|
||||
"type" : "array",
|
||||
"description" : "Route group tag groups",
|
||||
"items" : {
|
||||
"type" : "string"
|
||||
"type" : "string",
|
||||
"example" : "chacdk86lnnboviihd70"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2960,11 +3054,13 @@
|
||||
"properties" : {
|
||||
"id" : {
|
||||
"type" : "string",
|
||||
"description" : "Route Id"
|
||||
"description" : "Route Id",
|
||||
"example" : "chacdk86lnnboviihd7g"
|
||||
},
|
||||
"network_type" : {
|
||||
"type" : "string",
|
||||
"description" : "Network type indicating if it is IPv4 or IPv6"
|
||||
"description" : "Network type indicating if it is IPv4 or IPv6",
|
||||
"example" : "IPv4"
|
||||
}
|
||||
}
|
||||
}, {
|
||||
@@ -2977,16 +3073,19 @@
|
||||
"properties" : {
|
||||
"ip" : {
|
||||
"type" : "string",
|
||||
"description" : "Nameserver IP"
|
||||
"description" : "Nameserver IP",
|
||||
"example" : "8.8.8.8"
|
||||
},
|
||||
"ns_type" : {
|
||||
"type" : "string",
|
||||
"description" : "Nameserver Type",
|
||||
"example" : "udp",
|
||||
"enum" : [ "udp" ]
|
||||
},
|
||||
"port" : {
|
||||
"type" : "integer",
|
||||
"description" : "Nameserver Port"
|
||||
"description" : "Nameserver Port",
|
||||
"example" : 53
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -2998,11 +3097,13 @@
|
||||
"maxLength" : 40,
|
||||
"minLength" : 1,
|
||||
"type" : "string",
|
||||
"description" : "Nameserver group name"
|
||||
"description" : "Nameserver group name",
|
||||
"example" : "Google DNS"
|
||||
},
|
||||
"description" : {
|
||||
"type" : "string",
|
||||
"description" : "Nameserver group description"
|
||||
"description" : "Nameserver group description",
|
||||
"example" : "Google DNS servers"
|
||||
},
|
||||
"nameservers" : {
|
||||
"maxLength" : 2,
|
||||
@@ -3015,18 +3116,21 @@
|
||||
},
|
||||
"enabled" : {
|
||||
"type" : "boolean",
|
||||
"description" : "Nameserver group status"
|
||||
"description" : "Nameserver group status",
|
||||
"example" : true
|
||||
},
|
||||
"groups" : {
|
||||
"type" : "array",
|
||||
"description" : "Nameserver group tag groups",
|
||||
"items" : {
|
||||
"type" : "string"
|
||||
"type" : "string",
|
||||
"example" : "ch8i4ug6lnn4g9hqv7m0"
|
||||
}
|
||||
},
|
||||
"primary" : {
|
||||
"type" : "boolean",
|
||||
"description" : "Nameserver group primary status"
|
||||
"description" : "Nameserver group primary status",
|
||||
"example" : true
|
||||
},
|
||||
"domains" : {
|
||||
"type" : "array",
|
||||
@@ -3034,7 +3138,8 @@
|
||||
"items" : {
|
||||
"maxLength" : 255,
|
||||
"minLength" : 1,
|
||||
"type" : "string"
|
||||
"type" : "string",
|
||||
"example" : "example.com"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -3046,7 +3151,8 @@
|
||||
"properties" : {
|
||||
"id" : {
|
||||
"type" : "string",
|
||||
"description" : "Nameserver group ID"
|
||||
"description" : "Nameserver group ID",
|
||||
"example" : "ch8i4ug6lnn4g9hqv7m0"
|
||||
}
|
||||
}
|
||||
}, {
|
||||
@@ -3061,7 +3167,8 @@
|
||||
"type" : "array",
|
||||
"description" : "Groups whose DNS management is disabled",
|
||||
"items" : {
|
||||
"type" : "string"
|
||||
"type" : "string",
|
||||
"example" : "ch8i4ug6lnn4g9hqv7m0"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -3072,36 +3179,47 @@
|
||||
"properties" : {
|
||||
"id" : {
|
||||
"type" : "string",
|
||||
"description" : "Event unique identifier"
|
||||
"description" : "Event unique identifier",
|
||||
"example" : "10"
|
||||
},
|
||||
"timestamp" : {
|
||||
"type" : "string",
|
||||
"description" : "The date and time when the event occurred",
|
||||
"format" : "date-time"
|
||||
"format" : "date-time",
|
||||
"example" : "2023-05-05T10:04:37.473542Z"
|
||||
},
|
||||
"activity" : {
|
||||
"type" : "string",
|
||||
"description" : "The activity that occurred during the event"
|
||||
"description" : "The activity that occurred during the event",
|
||||
"example" : "Route created"
|
||||
},
|
||||
"activity_code" : {
|
||||
"type" : "string",
|
||||
"description" : "The string code of the activity that occurred during the event",
|
||||
"example" : "route.add",
|
||||
"enum" : [ "user.peer.delete", "user.join", "user.invite", "user.peer.add", "user.group.add", "user.group.delete", "user.role.update", "setupkey.peer.add", "setupkey.add", "setupkey.update", "setupkey.revoke", "setupkey.overuse", "setupkey.group.delete", "setupkey.group.add", "rule.add", "rule.delete", "rule.update", "policy.add", "policy.delete", "policy.update", "group.add", "group.update", "dns.setting.disabled.management.group.add", "dns.setting.disabled.management.group.delete", "account.create", "account.setting.peer.login.expiration.update", "account.setting.peer.login.expiration.disable", "account.setting.peer.login.expiration.enable", "route.add", "route.delete", "route.update", "nameserver.group.add", "nameserver.group.delete", "nameserver.group.update", "peer.ssh.disable", "peer.ssh.enable", "peer.rename", "peer.login.expiration.disable", "peer.login.expiration.enable", "service.user.create", "personal.access.token.create", "service.user.delete", "personal.access.token.delete" ]
|
||||
},
|
||||
"initiator_id" : {
|
||||
"type" : "string",
|
||||
"description" : "The ID of the initiator of the event. E.g., an ID of a user that triggered the event."
|
||||
"description" : "The ID of the initiator of the event. E.g., an ID of a user that triggered the event.",
|
||||
"example" : "google-oauth2|123456789012345678901"
|
||||
},
|
||||
"target_id" : {
|
||||
"type" : "string",
|
||||
"description" : "The ID of the target of the event. E.g., an ID of the peer that a user removed."
|
||||
"description" : "The ID of the target of the event. E.g., an ID of the peer that a user removed.",
|
||||
"example" : "chad9d86lnnc59g18ou0"
|
||||
},
|
||||
"meta" : {
|
||||
"type" : "object",
|
||||
"additionalProperties" : {
|
||||
"type" : "string"
|
||||
},
|
||||
"description" : "The metadata of the event"
|
||||
"description" : "The metadata of the event",
|
||||
"example" : {
|
||||
"name" : "my route",
|
||||
"network_range" : "10.64.0.0/24",
|
||||
"peer_id" : "chacbco6lnnbn6cg5s91"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -36,6 +36,7 @@ components:
|
||||
id:
|
||||
description: Account ID
|
||||
type: string
|
||||
example: ch8i4ug6lnn4g9hqv7l0
|
||||
settings:
|
||||
$ref: '#/components/schemas/AccountSettings'
|
||||
required:
|
||||
@@ -46,9 +47,11 @@ components:
|
||||
peer_login_expiration_enabled:
|
||||
description: Enables or disables peer login expiration globally. After peer's login has expired the user has to log in (authenticate). Applies only to peers that were added by a user (interactive SSO login).
|
||||
type: boolean
|
||||
example: true
|
||||
peer_login_expiration:
|
||||
description: Period of time after which peer login expires (seconds).
|
||||
type: integer
|
||||
example: 43200
|
||||
required:
|
||||
- peer_login_expiration_enabled
|
||||
- peer_login_expiration
|
||||
@@ -58,32 +61,40 @@ components:
|
||||
id:
|
||||
description: User ID
|
||||
type: string
|
||||
example: google-oauth2|277474792786460067937
|
||||
email:
|
||||
description: User's email address
|
||||
type: string
|
||||
example: demo@netbird.io
|
||||
name:
|
||||
description: User's name from idp provider
|
||||
type: string
|
||||
example: Tom Schulz
|
||||
role:
|
||||
description: User's NetBird account role
|
||||
type: string
|
||||
example: admin
|
||||
status:
|
||||
description: User's status
|
||||
type: string
|
||||
enum: [ "active","invited","disabled" ]
|
||||
example: active
|
||||
auto_groups:
|
||||
description: Groups to auto-assign to peers registered by this user
|
||||
type: array
|
||||
items:
|
||||
type: string
|
||||
example: devs
|
||||
is_current:
|
||||
description: Is true if authenticated user is the same as this user
|
||||
type: boolean
|
||||
readOnly: true
|
||||
example: true
|
||||
is_service_user:
|
||||
description: Is true if this user is a service user
|
||||
type: boolean
|
||||
readOnly: true
|
||||
example: false
|
||||
required:
|
||||
- id
|
||||
- email
|
||||
@@ -97,11 +108,13 @@ components:
|
||||
role:
|
||||
description: User's NetBird account role
|
||||
type: string
|
||||
example: admin
|
||||
auto_groups:
|
||||
description: Groups to auto-assign to peers registered by this user
|
||||
type: array
|
||||
items:
|
||||
type: string
|
||||
example: devs
|
||||
required:
|
||||
- role
|
||||
- auto_groups
|
||||
@@ -111,20 +124,25 @@ components:
|
||||
email:
|
||||
description: User's Email to send invite to
|
||||
type: string
|
||||
example: demo@netbird.io
|
||||
name:
|
||||
description: User's full name
|
||||
type: string
|
||||
example: Tom Schulz
|
||||
role:
|
||||
description: User's NetBird account role
|
||||
type: string
|
||||
example: admin
|
||||
auto_groups:
|
||||
description: Groups to auto-assign to peers registered by this user
|
||||
type: array
|
||||
items:
|
||||
type: string
|
||||
example: devs
|
||||
is_service_user:
|
||||
description: Is true if this user is a service user
|
||||
type: boolean
|
||||
example: false
|
||||
required:
|
||||
- role
|
||||
- auto_groups
|
||||
@@ -135,9 +153,11 @@ components:
|
||||
id:
|
||||
description: Peer ID
|
||||
type: string
|
||||
example: chacbco6lnnbn6cg5s90
|
||||
name:
|
||||
description: Peer's hostname
|
||||
type: string
|
||||
example: stage-host-1
|
||||
required:
|
||||
- id
|
||||
- name
|
||||
@@ -146,10 +166,13 @@ components:
|
||||
properties:
|
||||
name:
|
||||
type: string
|
||||
example: stage-host-1
|
||||
ssh_enabled:
|
||||
type: boolean
|
||||
example: true
|
||||
login_expiration_enabled:
|
||||
type: boolean
|
||||
example: false
|
||||
required:
|
||||
- name
|
||||
- ssh_enabled
|
||||
@@ -162,19 +185,24 @@ components:
|
||||
ip:
|
||||
description: Peer's IP address
|
||||
type: string
|
||||
example: 10.64.0.1
|
||||
connected:
|
||||
description: Peer to Management connection status
|
||||
type: boolean
|
||||
example: true
|
||||
last_seen:
|
||||
description: Last time peer connected to Netbird's management service
|
||||
type: string
|
||||
format: date-time
|
||||
example: 2023-05-05T10:05:26.420578Z
|
||||
os:
|
||||
description: Peer's operating system and version
|
||||
type: string
|
||||
example: Darwin 13.2.1
|
||||
version:
|
||||
description: Peer's daemon or cli version
|
||||
type: string
|
||||
example: 0.14.0
|
||||
groups:
|
||||
description: Groups that the peer belongs to
|
||||
type: array
|
||||
@@ -183,28 +211,36 @@ components:
|
||||
ssh_enabled:
|
||||
description: Indicates whether SSH server is enabled on this peer
|
||||
type: boolean
|
||||
example: true
|
||||
user_id:
|
||||
description: User ID of the user that enrolled this peer
|
||||
type: string
|
||||
example: google-oauth2|277474792786460067937
|
||||
hostname:
|
||||
description: Hostname of the machine
|
||||
type: string
|
||||
example: stage-host-1
|
||||
ui_version:
|
||||
description: Peer's desktop UI version
|
||||
type: string
|
||||
example: 0.14.0
|
||||
dns_label:
|
||||
description: Peer's DNS label is the parsed peer name for domain resolution. It is used to form an FQDN by appending the account's domain to the peer label. e.g. peer-dns-label.netbird.cloud
|
||||
type: string
|
||||
example: stage-host-1.netbird.cloud
|
||||
login_expiration_enabled:
|
||||
description: Indicates whether peer login expiration has been enabled or not
|
||||
type: boolean
|
||||
example: false
|
||||
login_expired:
|
||||
description: Indicates whether peer's login expired or not
|
||||
type: boolean
|
||||
example: false
|
||||
last_login:
|
||||
description: Last time this peer performed log in (authentication). E.g., user authenticated.
|
||||
type: string
|
||||
format: date-time
|
||||
example: 2023-05-05T09:00:35.477782Z
|
||||
required:
|
||||
- ip
|
||||
- connected
|
||||
@@ -224,47 +260,60 @@ components:
|
||||
id:
|
||||
description: Setup Key ID
|
||||
type: string
|
||||
example: 2531583362
|
||||
key:
|
||||
description: Setup Key value
|
||||
type: string
|
||||
example: A616097E-FCF0-48FA-9354-CA4A61142761
|
||||
name:
|
||||
description: Setup key name identifier
|
||||
type: string
|
||||
example: Default key
|
||||
expires:
|
||||
description: Setup Key expiration date
|
||||
type: string
|
||||
format: date-time
|
||||
example: 2023-06-01T14:47:22.291057Z
|
||||
type:
|
||||
description: Setup key type, one-off for single time usage and reusable
|
||||
type: string
|
||||
example: reusable
|
||||
valid:
|
||||
description: Setup key validity status
|
||||
type: boolean
|
||||
example: true
|
||||
revoked:
|
||||
description: Setup key revocation status
|
||||
type: boolean
|
||||
example: false
|
||||
used_times:
|
||||
description: Usage count of setup key
|
||||
type: integer
|
||||
example: 2
|
||||
last_used:
|
||||
description: Setup key last usage date
|
||||
type: string
|
||||
format: date-time
|
||||
example: 2023-05-05T09:00:35.477782Z
|
||||
state:
|
||||
description: Setup key status, "valid", "overused","expired" or "revoked"
|
||||
type: string
|
||||
example: valid
|
||||
auto_groups:
|
||||
description: Setup key groups to auto-assign to peers registered with this key
|
||||
type: array
|
||||
items:
|
||||
type: string
|
||||
example: "devs"
|
||||
updated_at:
|
||||
description: Setup key last update date
|
||||
type: string
|
||||
format: date-time
|
||||
example: 2023-05-05T09:00:35.477782Z
|
||||
usage_limit:
|
||||
description: A number of times this key can be used. The value of 0 indicates the unlimited usage.
|
||||
type: integer
|
||||
example: 0
|
||||
required:
|
||||
- id
|
||||
- key
|
||||
@@ -285,23 +334,29 @@ components:
|
||||
name:
|
||||
description: Setup Key name
|
||||
type: string
|
||||
example: Default key
|
||||
type:
|
||||
description: Setup key type, one-off for single time usage and reusable
|
||||
type: string
|
||||
example: reusable
|
||||
expires_in:
|
||||
description: Expiration time in seconds
|
||||
type: integer
|
||||
example: 43200
|
||||
revoked:
|
||||
description: Setup key revocation status
|
||||
type: boolean
|
||||
example: false
|
||||
auto_groups:
|
||||
description: Setup key groups to auto-assign to peers registered with this key
|
||||
type: array
|
||||
items:
|
||||
type: string
|
||||
example: "devs"
|
||||
usage_limit:
|
||||
description: A number of times this key can be used. The value of 0 indicates the unlimited usage.
|
||||
type: integer
|
||||
example: 0
|
||||
required:
|
||||
- name
|
||||
- type
|
||||
@@ -315,24 +370,30 @@ components:
|
||||
id:
|
||||
description: ID of a token
|
||||
type: string
|
||||
example: ch8i54g6lnn4g9hqv7n0
|
||||
name:
|
||||
description: Name of the token
|
||||
type: string
|
||||
example: My first token
|
||||
expiration_date:
|
||||
description: Date the token expires
|
||||
type: string
|
||||
format: date-time
|
||||
example: 2023-05-05T14:38:28.977616Z
|
||||
created_by:
|
||||
description: User ID of the user who created the token
|
||||
type: string
|
||||
example: google-oauth2|277474792786460067937
|
||||
created_at:
|
||||
description: Date the token was created
|
||||
type: string
|
||||
format: date-time
|
||||
example: 2023-05-02T14:48:20.465209Z
|
||||
last_used:
|
||||
description: Date the token was last used
|
||||
type: string
|
||||
format: date-time
|
||||
example: 2023-05-04T12:45:25.9723616Z
|
||||
required:
|
||||
- id
|
||||
- name
|
||||
@@ -345,6 +406,7 @@ components:
|
||||
plain_token:
|
||||
description: Plain text representation of the generated token
|
||||
type: string
|
||||
example: 2023-05-02T14:48:20.465209Z
|
||||
personal_access_token:
|
||||
$ref: '#/components/schemas/PersonalAccessToken'
|
||||
required:
|
||||
@@ -356,11 +418,13 @@ components:
|
||||
name:
|
||||
description: Name of the token
|
||||
type: string
|
||||
example: My first token
|
||||
expires_in:
|
||||
description: Expiration in days
|
||||
type: integer
|
||||
minimum: 1
|
||||
maximum: 365
|
||||
example: 30
|
||||
required:
|
||||
- name
|
||||
- expires_in
|
||||
@@ -370,12 +434,15 @@ components:
|
||||
id:
|
||||
description: Group ID
|
||||
type: string
|
||||
example: ch8i4ug6lnn4g9hqv7m0
|
||||
name:
|
||||
description: Group Name identifier
|
||||
type: string
|
||||
example: devs
|
||||
peers_count:
|
||||
description: Count of peers associated to the group
|
||||
type: integer
|
||||
example: 2
|
||||
required:
|
||||
- id
|
||||
- name
|
||||
@@ -386,11 +453,13 @@ components:
|
||||
name:
|
||||
type: string
|
||||
description: Group name identifier
|
||||
example: devs
|
||||
peers:
|
||||
type: array
|
||||
description: List of peers ids
|
||||
items:
|
||||
type: string
|
||||
example: "ch8i4ug6lnn4g9hqv7m1"
|
||||
required:
|
||||
- name
|
||||
Group:
|
||||
@@ -411,15 +480,19 @@ components:
|
||||
name:
|
||||
description: Rule name identifier
|
||||
type: string
|
||||
example: Default
|
||||
description:
|
||||
description: Rule friendly description
|
||||
type: string
|
||||
example: This is a default rule that allows connections between all the resources
|
||||
disabled:
|
||||
description: Rules status
|
||||
type: boolean
|
||||
example: false
|
||||
flow:
|
||||
description: Rule flow, currently, only "bidirect" for bi-directional traffic is accepted
|
||||
type: string
|
||||
example: bidirect
|
||||
required:
|
||||
- name
|
||||
- description
|
||||
@@ -435,11 +508,13 @@ components:
|
||||
description: List of source groups
|
||||
items:
|
||||
type: string
|
||||
example: "ch8i4ug6lnn4g9hqv7m1"
|
||||
destinations:
|
||||
type: array
|
||||
description: List of destination groups
|
||||
items:
|
||||
type: string
|
||||
example: "ch8i4ug6lnn4g9hqv7m0"
|
||||
Rule:
|
||||
allOf:
|
||||
- type: object
|
||||
@@ -447,6 +522,7 @@ components:
|
||||
id:
|
||||
description: Rule ID
|
||||
type: string
|
||||
example: ch8i4ug6lnn4g9hqv7mg
|
||||
required:
|
||||
- id
|
||||
- $ref: '#/components/schemas/RuleMinimum'
|
||||
@@ -471,15 +547,19 @@ components:
|
||||
id:
|
||||
description: Rule ID
|
||||
type: string
|
||||
example: ch8i4ug6lnn4g9hqv7mg
|
||||
name:
|
||||
description: Rule name identifier
|
||||
type: string
|
||||
example: Default
|
||||
description:
|
||||
description: Rule friendly description
|
||||
type: string
|
||||
example: This is a default rule that allows connections between all the resources
|
||||
enabled:
|
||||
description: Rules status
|
||||
type: boolean
|
||||
example: true
|
||||
sources:
|
||||
description: policy source groups
|
||||
type: array
|
||||
@@ -494,6 +574,7 @@ components:
|
||||
description: policy accept or drops packets
|
||||
type: string
|
||||
enum: ["accept","drop"]
|
||||
example: accept
|
||||
required:
|
||||
- name
|
||||
- sources
|
||||
@@ -506,15 +587,19 @@ components:
|
||||
name:
|
||||
description: Policy name identifier
|
||||
type: string
|
||||
example: ch8i4ug6lnn4g9hqv7mg
|
||||
description:
|
||||
description: Policy friendly description
|
||||
type: string
|
||||
example: This is a default policy that allows connections between all the resources
|
||||
enabled:
|
||||
description: Policy status
|
||||
type: boolean
|
||||
example: true
|
||||
query:
|
||||
description: Policy Rego query
|
||||
type: string
|
||||
example: package netbird\n\nall[rule] {\n is_peer_in_any_group([\"ch8i4ug6lnn4g9hqv7m0\",\"ch8i4ug6lnn4g9hqv7m0\"])\n rule := {\n rules_from_group(\"ch8i4ug6lnn4g9hqv7m0\", \"dst\", \"accept\", \"\"),\n rules_from_group(\"ch8i4ug6lnn4g9hqv7m0\", \"src\", \"accept\", \"\"),\n }[_][_]\n}\n
|
||||
rules:
|
||||
description: Policy rule object for policy UI editor
|
||||
type: array
|
||||
@@ -534,6 +619,7 @@ components:
|
||||
id:
|
||||
description: Policy ID
|
||||
type: string
|
||||
example: ch8i4ug6lnn4g9hqv7mg
|
||||
required:
|
||||
- id
|
||||
RouteRequest:
|
||||
@@ -542,33 +628,41 @@ components:
|
||||
description:
|
||||
description: Route description
|
||||
type: string
|
||||
example: My first route
|
||||
network_id:
|
||||
description: Route network identifier, to group HA routes
|
||||
type: string
|
||||
maxLength: 40
|
||||
minLength: 1
|
||||
example: Route 1
|
||||
enabled:
|
||||
description: Route status
|
||||
type: boolean
|
||||
example: true
|
||||
peer:
|
||||
description: Peer Identifier associated with route
|
||||
type: string
|
||||
example: chacbco6lnnbn6cg5s91
|
||||
network:
|
||||
description: Network range in CIDR format
|
||||
type: string
|
||||
example: 10.64.0.0/24
|
||||
metric:
|
||||
description: Route metric number. Lowest number has higher priority
|
||||
type: integer
|
||||
maximum: 9999
|
||||
minimum: 1
|
||||
example: 9999
|
||||
masquerade:
|
||||
description: Indicate if peer should masquerade traffic to this route's prefix
|
||||
type: boolean
|
||||
example: true
|
||||
groups:
|
||||
description: Route group tag groups
|
||||
type: array
|
||||
items:
|
||||
type: string
|
||||
example: "chacdk86lnnboviihd70"
|
||||
required:
|
||||
- id
|
||||
- description
|
||||
@@ -586,9 +680,11 @@ components:
|
||||
id:
|
||||
description: Route Id
|
||||
type: string
|
||||
example: chacdk86lnnboviihd7g
|
||||
network_type:
|
||||
description: Network type indicating if it is IPv4 or IPv6
|
||||
type: string
|
||||
example: IPv4
|
||||
required:
|
||||
- id
|
||||
- network_type
|
||||
@@ -599,13 +695,16 @@ components:
|
||||
ip:
|
||||
description: Nameserver IP
|
||||
type: string
|
||||
example: 8.8.8.8
|
||||
ns_type:
|
||||
description: Nameserver Type
|
||||
type: string
|
||||
enum: [ "udp" ]
|
||||
example: udp
|
||||
port:
|
||||
description: Nameserver Port
|
||||
type: integer
|
||||
example: 53
|
||||
required:
|
||||
- ip
|
||||
- ns_type
|
||||
@@ -618,9 +717,11 @@ components:
|
||||
type: string
|
||||
maxLength: 40
|
||||
minLength: 1
|
||||
example: Google DNS
|
||||
description:
|
||||
description: Nameserver group description
|
||||
type: string
|
||||
example: Google DNS servers
|
||||
nameservers:
|
||||
description: Nameserver group
|
||||
minLength: 1
|
||||
@@ -631,14 +732,17 @@ components:
|
||||
enabled:
|
||||
description: Nameserver group status
|
||||
type: boolean
|
||||
example: true
|
||||
groups:
|
||||
description: Nameserver group tag groups
|
||||
type: array
|
||||
items:
|
||||
type: string
|
||||
example: ch8i4ug6lnn4g9hqv7m0
|
||||
primary:
|
||||
description: Nameserver group primary status
|
||||
type: boolean
|
||||
example: true
|
||||
domains:
|
||||
description: Nameserver group domain list
|
||||
type: array
|
||||
@@ -646,6 +750,7 @@ components:
|
||||
type: string
|
||||
minLength: 1
|
||||
maxLength: 255
|
||||
example: "example.com"
|
||||
required:
|
||||
- name
|
||||
- description
|
||||
@@ -661,6 +766,7 @@ components:
|
||||
id:
|
||||
description: Nameserver group ID
|
||||
type: string
|
||||
example: ch8i4ug6lnn4g9hqv7m0
|
||||
required:
|
||||
- id
|
||||
- $ref: '#/components/schemas/NameserverGroupRequest'
|
||||
@@ -672,6 +778,7 @@ components:
|
||||
type: array
|
||||
items:
|
||||
type: string
|
||||
example: ch8i4ug6lnn4g9hqv7m0
|
||||
required:
|
||||
- disabled_management_groups
|
||||
Event:
|
||||
@@ -680,13 +787,16 @@ components:
|
||||
id:
|
||||
description: Event unique identifier
|
||||
type: string
|
||||
example: 10
|
||||
timestamp:
|
||||
description: The date and time when the event occurred
|
||||
type: string
|
||||
format: date-time
|
||||
example: 2023-05-05T10:04:37.473542Z
|
||||
activity:
|
||||
description: The activity that occurred during the event
|
||||
type: string
|
||||
example: Route created
|
||||
activity_code:
|
||||
description: The string code of the activity that occurred during the event
|
||||
type: string
|
||||
@@ -702,17 +812,21 @@ components:
|
||||
"nameserver.group.add", "nameserver.group.delete", "nameserver.group.update",
|
||||
"peer.ssh.disable", "peer.ssh.enable", "peer.rename", "peer.login.expiration.disable", "peer.login.expiration.enable",
|
||||
"service.user.create", "personal.access.token.create", "service.user.delete", "personal.access.token.delete" ]
|
||||
example: route.add
|
||||
initiator_id:
|
||||
description: The ID of the initiator of the event. E.g., an ID of a user that triggered the event.
|
||||
type: string
|
||||
example: google-oauth2|123456789012345678901
|
||||
target_id:
|
||||
description: The ID of the target of the event. E.g., an ID of the peer that a user removed.
|
||||
type: string
|
||||
example: chad9d86lnnc59g18ou0
|
||||
meta:
|
||||
description: The metadata of the event
|
||||
type: object
|
||||
additionalProperties:
|
||||
type: string
|
||||
example: { "name": "my route", "network_range": "10.64.0.0/24", "peer_id": "chacbco6lnnbn6cg5s91"}
|
||||
required:
|
||||
- id
|
||||
- timestamp
|
||||
|
||||
@@ -35,7 +35,7 @@ export const title = '<%- tag %>'
|
||||
<% if(operation.requestBody?.content && operation.requestBody?.content['application/json']){ %>
|
||||
#### Request-Body Parameters
|
||||
<Properties>
|
||||
<% schemas.get(operation.requestBody?.content['application/json'].schema.$ref.split('/').pop())?.parameters.forEach(function(parameter){ %>
|
||||
<% components.get(operation.requestBody?.content['application/json'].schema.$ref.split('/').pop())?.parameters.forEach(function(parameter){ %>
|
||||
<Property name="<%- parameter.name %>" type="<%- parameter.type %>" required=\{<%- parameter.required %>\}
|
||||
<% if(parameter.enum){ %>
|
||||
enumList="<%- parameter.enum %>"
|
||||
@@ -68,13 +68,13 @@ curl -X <%- operation.operation.toUpperCase() %> <%- operation.fullPath %> \\
|
||||
-H 'Accept: application/json' \\<% }; %>
|
||||
<% if(operation.requestBody?.content && operation.requestBody?.content['application/json']){ -%>
|
||||
-H 'Content-Type: application/json' \\
|
||||
--data-raw '<%- JSON.stringify(schemas.get(operation.requestBody?.content['application/json'].schema.$ref?.split('/').pop())?.examples, null, 2) %>'<% }; %>
|
||||
--data-raw '<%- JSON.stringify(components.get(operation.requestBody?.content['application/json'].schema.$ref?.split('/').pop())?.schema, null, 2) %>'<% }; %>
|
||||
\`\`\`
|
||||
|
||||
\`\`\`js
|
||||
const axios = require('axios');
|
||||
<% if(operation.requestBody?.content && operation.requestBody?.content['application/json']){ -%>
|
||||
let data = JSON.stringify(<%- JSON.stringify(schemas.get(operation.requestBody?.content['application/json'].schema.$ref?.split('/').pop())?.examples, null, 2) %>);<% }; -%>
|
||||
let data = JSON.stringify(<%- JSON.stringify(components.get(operation.requestBody?.content['application/json'].schema.$ref?.split('/').pop())?.schema, null, 2) %>);<% }; -%>
|
||||
|
||||
let config = {
|
||||
method: '<%- operation.operation.toLowerCase() %>',
|
||||
@@ -104,7 +104,7 @@ import json
|
||||
|
||||
url = "<%- operation.fullPath %>"
|
||||
<% if(operation.requestBody?.content && operation.requestBody?.content['application/json']){ -%>
|
||||
payload = json.dumps(<%- JSON.stringify(schemas.get(operation.requestBody?.content['application/json'].schema.$ref?.split('/').pop())?.examples, null, 2) %>)<% }; -%>
|
||||
payload = json.dumps(<%- JSON.stringify(components.get(operation.requestBody?.content['application/json'].schema.$ref?.split('/').pop())?.schema, null, 2) %>)<% }; -%>
|
||||
|
||||
headers = {
|
||||
<% if(operation.requestBody?.content && operation.requestBody?.content['application/json']){ -%>'Content-Type': 'application/json',<% }; %>
|
||||
@@ -132,7 +132,7 @@ func main() {
|
||||
url := "<%- operation.fullPath %>"
|
||||
method := "<%- operation.operation.toUpperCase() %>"
|
||||
<% if(operation.requestBody?.content && operation.requestBody?.content['application/json']){ %>
|
||||
payload := strings.NewReader(\`<%- JSON.stringify(schemas.get(operation.requestBody?.content['application/json'].schema.$ref?.split('/').pop())?.examples, null, 2) %>\`)<% }; -%>
|
||||
payload := strings.NewReader(\`<%- JSON.stringify(components.get(operation.requestBody?.content['application/json'].schema.$ref?.split('/').pop())?.schema, null, 2) %>\`)<% }; -%>
|
||||
|
||||
client := &http.Client {
|
||||
}
|
||||
@@ -178,7 +178,7 @@ request = Net::HTTP::<%- operation.operation.slice(0,1).toUpperCase() + operatio
|
||||
<% if(operation.responseList[0].content && operation.responseList[0].content['application/json']){ -%>request["Accept"] = "application/json"<% }; %>
|
||||
request["Authorization"] = "Token <TOKEN>"
|
||||
<% if(operation.requestBody?.content && operation.requestBody?.content['application/json']){ %>
|
||||
request.body = JSON.dump(<%- JSON.stringify(schemas.get(operation.requestBody?.content['application/json'].schema.$ref?.split('/').pop())?.examples, null, 2) %>)<% }; -%>
|
||||
request.body = JSON.dump(<%- JSON.stringify(components.get(operation.requestBody?.content['application/json'].schema.$ref?.split('/').pop())?.schema, null, 2) %>)<% }; -%>
|
||||
|
||||
response = https.request(request)
|
||||
puts response.read_body
|
||||
@@ -189,7 +189,7 @@ OkHttpClient client = new OkHttpClient().newBuilder()
|
||||
.build();
|
||||
<% if(operation.requestBody?.content && operation.requestBody?.content['application/json']){ -%>
|
||||
MediaType mediaType = MediaType.parse("application/json");
|
||||
RequestBody body = RequestBody.create(mediaType, '<%- JSON.stringify(schemas.get(operation.requestBody?.content['application/json'].schema.$ref?.split('/').pop())?.examples, null, 2) %>');<% }; %>
|
||||
RequestBody body = RequestBody.create(mediaType, '<%- JSON.stringify(components.get(operation.requestBody?.content['application/json'].schema.$ref?.split('/').pop())?.schema, null, 2) %>');<% }; %>
|
||||
Request request = new Request.Builder()
|
||||
.url("<%- operation.fullPath %>")
|
||||
.method("<%- operation.operation.toUpperCase() %>"<% if(operation.requestBody?.content && operation.requestBody?.content['application/json']){ -%>, body<% }; %>)
|
||||
@@ -215,7 +215,7 @@ curl_setopt_array($curl, array(
|
||||
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
|
||||
CURLOPT_CUSTOMREQUEST => '<%- operation.operation.toUpperCase() %>',
|
||||
<% if(operation.requestBody?.content && operation.requestBody?.content['application/json']){ %>
|
||||
CURLOPT_POSTFIELDS =>'<%- JSON.stringify(schemas.get(operation.requestBody?.content['application/json'].schema.$ref?.split('/').pop())?.examples, null, 2) %>',<% }; %>
|
||||
CURLOPT_POSTFIELDS =>'<%- JSON.stringify(components.get(operation.requestBody?.content['application/json'].schema.$ref?.split('/').pop())?.schema, null, 2) %>',<% }; %>
|
||||
CURLOPT_HTTPHEADER => array(
|
||||
<% if(operation.requestBody?.content && operation.requestBody?.content['application/json']){ -%>'Content-Type: application/json',<% }; %>
|
||||
<% if(operation.responseList[0].content && operation.responseList[0].content['application/json']){ -%>'Accept: application/json',<% }; %>
|
||||
@@ -234,14 +234,20 @@ echo $response;
|
||||
<% if(response?.content && response?.content['application/json']){ %>
|
||||
<% if(response?.content['application/json'].schema.type === 'array'){ %>
|
||||
<CodeGroup title="Response">
|
||||
\`\`\`json {{ title: '200' }}
|
||||
<%- JSON.stringify(new Array(schemas.get(response?.content['application/json'].schema.items.$ref?.split('/').pop())?.examples), null, 2) %>
|
||||
\`\`\`json {{ title: 'Example' }}
|
||||
<%- JSON.stringify(new Array(components.get(response?.content['application/json'].schema.items.$ref?.split('/').pop())?.example), null, 2) %>
|
||||
\`\`\`
|
||||
\`\`\`json {{ title: 'Schema' }}
|
||||
<%- JSON.stringify(new Array(components.get(response?.content['application/json'].schema.items.$ref?.split('/').pop())?.schema), null, 2) %>
|
||||
\`\`\`
|
||||
</CodeGroup>
|
||||
<% } else { %>
|
||||
<CodeGroup title="Response">
|
||||
\`\`\`json {{ title: '200' }}
|
||||
<%- JSON.stringify(schemas.get(response?.content['application/json'].schema.$ref?.split('/').pop())?.examples, null, 2) %>
|
||||
\`\`\`json {{ title: 'Example' }}
|
||||
<%- JSON.stringify(components.get(response?.content['application/json'].schema.$ref?.split('/').pop())?.example, null, 2) %>
|
||||
\`\`\`
|
||||
\`\`\`json {{ title: 'Schema' }}
|
||||
<%- JSON.stringify(components.get(response?.content['application/json'].schema.$ref?.split('/').pop())?.schema, null, 2) %>
|
||||
\`\`\`
|
||||
</CodeGroup>
|
||||
<% }; -%>
|
||||
|
||||
Reference in New Issue
Block a user