From adf57d529447f6b2f7bdf4ec2739ea656b0c31a1 Mon Sep 17 00:00:00 2001 From: Pascal Fischer Date: Fri, 5 May 2023 18:00:13 +0200 Subject: [PATCH] add examples to response --- generator/api.ts | 68 ++++-- generator/openapi.json | 338 +++++++++++++++++++---------- generator/openapi.yml | 114 ++++++++++ generator/templates/ApiTemplate.ts | 30 ++- src/components/HeroPattern.jsx | 2 +- src/pages/accounts.mdx | 24 +- src/pages/dns.mdx | 118 +++++++++- src/pages/events.mdx | 19 +- src/pages/groups.mdx | 62 +++++- src/pages/peers.mdx | 86 +++++++- src/pages/policies.mdx | 138 +++++++++++- src/pages/routes.mdx | 74 ++++++- src/pages/rules.mdx | 102 ++++++++- src/pages/setup-keys.mdx | 86 +++++++- src/pages/tokens.mdx | 41 +++- src/pages/users.mdx | 52 ++++- 16 files changed, 1174 insertions(+), 180 deletions(-) diff --git a/generator/api.ts b/generator/api.ts index 08c4a7a3..3074a7d0 100644 --- a/generator/api.ts +++ b/generator/api.ts @@ -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(); + let components = new Map(); Object.entries(spec.components?.schemas).forEach(([key, val]) => { const schema = val as OpenAPIV3.SchemaObject - let examples = new Map(); + let outputSchema = new Map(); + let outputExample = new Map(); 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() + 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 +} + diff --git a/generator/openapi.json b/generator/openapi.json index df1bf59f..cd4d15b5 100644 --- a/generator/openapi.json +++ b/generator/openapi.json @@ -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" + } } } } diff --git a/generator/openapi.yml b/generator/openapi.yml index 9e74b3a5..72cee0df 100644 --- a/generator/openapi.yml +++ b/generator/openapi.yml @@ -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 diff --git a/generator/templates/ApiTemplate.ts b/generator/templates/ApiTemplate.ts index 0be621cc..db28a5f9 100644 --- a/generator/templates/ApiTemplate.ts +++ b/generator/templates/ApiTemplate.ts @@ -35,7 +35,7 @@ export const title = '<%- tag %>' <% if(operation.requestBody?.content && operation.requestBody?.content['application/json']){ %> #### Request-Body Parameters - <% 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){ %> \} <% 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 " <% 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'){ %> -\`\`\`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) %> \`\`\` <% } else { %> -\`\`\`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) %> \`\`\` <% }; -%> diff --git a/src/components/HeroPattern.jsx b/src/components/HeroPattern.jsx index 01625893..2bf52463 100644 --- a/src/components/HeroPattern.jsx +++ b/src/components/HeroPattern.jsx @@ -4,7 +4,7 @@ export function HeroPattern() { return (
-
+
-```json {{ title: '200' }} +```json {{ title: 'Example' }} +[ + { + "id": "ch8i4ug6lnn4g9hqv7l0", + "settings": { + "peer_login_expiration_enabled": true, + "peer_login_expiration": 43200 + } + } +] +``` +```json {{ title: 'Schema' }} [ { "id": "string", @@ -416,7 +427,16 @@ echo $response; -```json {{ title: '200' }} +```json {{ title: 'Example' }} +{ + "id": "ch8i4ug6lnn4g9hqv7l0", + "settings": { + "peer_login_expiration_enabled": true, + "peer_login_expiration": 43200 + } +} +``` +```json {{ title: 'Schema' }} { "id": "string", "settings": { diff --git a/src/pages/dns.mdx b/src/pages/dns.mdx index 7a61e43c..36c9f7bc 100644 --- a/src/pages/dns.mdx +++ b/src/pages/dns.mdx @@ -173,7 +173,31 @@ echo $response; -```json {{ title: '200' }} +```json {{ title: 'Example' }} +[ + { + "id": "ch8i4ug6lnn4g9hqv7m0", + "name": "Google DNS", + "description": "Google DNS servers", + "nameservers": [ + { + "ip": "8.8.8.8", + "ns_type": "udp", + "port": 53 + } + ], + "enabled": true, + "groups": [ + "ch8i4ug6lnn4g9hqv7m0" + ], + "primary": true, + "domains": [ + "example.com" + ] + } +] +``` +```json {{ title: 'Schema' }} [ { "id": "string", @@ -569,7 +593,29 @@ echo $response; -```json {{ title: '200' }} +```json {{ title: 'Example' }} +{ + "id": "ch8i4ug6lnn4g9hqv7m0", + "name": "Google DNS", + "description": "Google DNS servers", + "nameservers": [ + { + "ip": "8.8.8.8", + "ns_type": "udp", + "port": 53 + } + ], + "enabled": true, + "groups": [ + "ch8i4ug6lnn4g9hqv7m0" + ], + "primary": true, + "domains": [ + "example.com" + ] +} +``` +```json {{ title: 'Schema' }} { "id": "string", "name": "string", @@ -778,7 +824,29 @@ echo $response; -```json {{ title: '200' }} +```json {{ title: 'Example' }} +{ + "id": "ch8i4ug6lnn4g9hqv7m0", + "name": "Google DNS", + "description": "Google DNS servers", + "nameservers": [ + { + "ip": "8.8.8.8", + "ns_type": "udp", + "port": 53 + } + ], + "enabled": true, + "groups": [ + "ch8i4ug6lnn4g9hqv7m0" + ], + "primary": true, + "domains": [ + "example.com" + ] +} +``` +```json {{ title: 'Schema' }} { "id": "string", "name": "string", @@ -1180,7 +1248,29 @@ echo $response; -```json {{ title: '200' }} +```json {{ title: 'Example' }} +{ + "id": "ch8i4ug6lnn4g9hqv7m0", + "name": "Google DNS", + "description": "Google DNS servers", + "nameservers": [ + { + "ip": "8.8.8.8", + "ns_type": "udp", + "port": 53 + } + ], + "enabled": true, + "groups": [ + "ch8i4ug6lnn4g9hqv7m0" + ], + "primary": true, + "domains": [ + "example.com" + ] +} +``` +```json {{ title: 'Schema' }} { "id": "string", "name": "string", @@ -1563,7 +1653,16 @@ echo $response; -```json {{ title: '200' }} +```json {{ title: 'Example' }} +[ + { + "disabled_management_groups": [ + "ch8i4ug6lnn4g9hqv7m0" + ] + } +] +``` +```json {{ title: 'Schema' }} [ { "disabled_management_groups": [ @@ -1796,7 +1895,14 @@ echo $response; -```json {{ title: '200' }} +```json {{ title: 'Example' }} +{ + "disabled_management_groups": [ + "ch8i4ug6lnn4g9hqv7m0" + ] +} +``` +```json {{ title: 'Schema' }} { "disabled_management_groups": [ "string" diff --git a/src/pages/events.mdx b/src/pages/events.mdx index f8481434..42394d97 100644 --- a/src/pages/events.mdx +++ b/src/pages/events.mdx @@ -173,7 +173,24 @@ echo $response; -```json {{ title: '200' }} +```json {{ title: 'Example' }} +[ + { + "id": "10", + "timestamp": "2023-05-05T10:04:37.473542Z", + "activity": "Route created", + "activity_code": "route.add", + "initiator_id": "google-oauth2|123456789012345678901", + "target_id": "chad9d86lnnc59g18ou0", + "meta": { + "name": "my route", + "network_range": "10.64.0.0/24", + "peer_id": "chacbco6lnnbn6cg5s91" + } + } +] +``` +```json {{ title: 'Schema' }} [ { "id": "string", diff --git a/src/pages/groups.mdx b/src/pages/groups.mdx index 4e78d350..085e50cc 100644 --- a/src/pages/groups.mdx +++ b/src/pages/groups.mdx @@ -173,7 +173,22 @@ echo $response; -```json {{ title: '200' }} +```json {{ title: 'Example' }} +[ + { + "id": "ch8i4ug6lnn4g9hqv7m0", + "name": "devs", + "peers_count": 2, + "peers": [ + { + "id": "chacbco6lnnbn6cg5s90", + "name": "stage-host-1" + } + ] + } +] +``` +```json {{ title: 'Schema' }} [ { "id": "string", @@ -426,7 +441,20 @@ echo $response; -```json {{ title: '200' }} +```json {{ title: 'Example' }} +{ + "id": "ch8i4ug6lnn4g9hqv7m0", + "name": "devs", + "peers_count": 2, + "peers": [ + { + "id": "chacbco6lnnbn6cg5s90", + "name": "stage-host-1" + } + ] +} +``` +```json {{ title: 'Schema' }} { "id": "string", "name": "string", @@ -626,7 +654,20 @@ echo $response; -```json {{ title: '200' }} +```json {{ title: 'Example' }} +{ + "id": "ch8i4ug6lnn4g9hqv7m0", + "name": "devs", + "peers_count": 2, + "peers": [ + { + "id": "chacbco6lnnbn6cg5s90", + "name": "stage-host-1" + } + ] +} +``` +```json {{ title: 'Schema' }} { "id": "string", "name": "string", @@ -885,7 +926,20 @@ echo $response; -```json {{ title: '200' }} +```json {{ title: 'Example' }} +{ + "id": "ch8i4ug6lnn4g9hqv7m0", + "name": "devs", + "peers_count": 2, + "peers": [ + { + "id": "chacbco6lnnbn6cg5s90", + "name": "stage-host-1" + } + ] +} +``` +```json {{ title: 'Schema' }} { "id": "string", "name": "string", diff --git a/src/pages/peers.mdx b/src/pages/peers.mdx index 65d8b9e0..43cb94f0 100644 --- a/src/pages/peers.mdx +++ b/src/pages/peers.mdx @@ -173,7 +173,35 @@ echo $response; -```json {{ title: '200' }} +```json {{ title: 'Example' }} +[ + { + "id": "chacbco6lnnbn6cg5s90", + "name": "stage-host-1", + "ip": "10.64.0.1", + "connected": true, + "last_seen": "2023-05-05T10:05:26.420578Z", + "os": "Darwin 13.2.1", + "version": "0.14.0", + "groups": [ + { + "id": "ch8i4ug6lnn4g9hqv7m0", + "name": "devs", + "peers_count": 2 + } + ], + "ssh_enabled": true, + "user_id": "google-oauth2|277474792786460067937", + "hostname": "stage-host-1", + "ui_version": "0.14.0", + "dns_label": "stage-host-1.netbird.cloud", + "login_expiration_enabled": false, + "login_expired": false, + "last_login": "2023-05-05T09:00:35.477782Z" + } +] +``` +```json {{ title: 'Schema' }} [ { "id": "string", @@ -388,7 +416,33 @@ echo $response; -```json {{ title: '200' }} +```json {{ title: 'Example' }} +{ + "id": "chacbco6lnnbn6cg5s90", + "name": "stage-host-1", + "ip": "10.64.0.1", + "connected": true, + "last_seen": "2023-05-05T10:05:26.420578Z", + "os": "Darwin 13.2.1", + "version": "0.14.0", + "groups": [ + { + "id": "ch8i4ug6lnn4g9hqv7m0", + "name": "devs", + "peers_count": 2 + } + ], + "ssh_enabled": true, + "user_id": "google-oauth2|277474792786460067937", + "hostname": "stage-host-1", + "ui_version": "0.14.0", + "dns_label": "stage-host-1.netbird.cloud", + "login_expiration_enabled": false, + "login_expired": false, + "last_login": "2023-05-05T09:00:35.477782Z" +} +``` +```json {{ title: 'Schema' }} { "id": "string", "name": "string", @@ -660,7 +714,33 @@ echo $response; -```json {{ title: '200' }} +```json {{ title: 'Example' }} +{ + "id": "chacbco6lnnbn6cg5s90", + "name": "stage-host-1", + "ip": "10.64.0.1", + "connected": true, + "last_seen": "2023-05-05T10:05:26.420578Z", + "os": "Darwin 13.2.1", + "version": "0.14.0", + "groups": [ + { + "id": "ch8i4ug6lnn4g9hqv7m0", + "name": "devs", + "peers_count": 2 + } + ], + "ssh_enabled": true, + "user_id": "google-oauth2|277474792786460067937", + "hostname": "stage-host-1", + "ui_version": "0.14.0", + "dns_label": "stage-host-1.netbird.cloud", + "login_expiration_enabled": false, + "login_expired": false, + "last_login": "2023-05-05T09:00:35.477782Z" +} +``` +```json {{ title: 'Schema' }} { "id": "string", "name": "string", diff --git a/src/pages/policies.mdx b/src/pages/policies.mdx index 27f4db6e..e7b36445 100644 --- a/src/pages/policies.mdx +++ b/src/pages/policies.mdx @@ -173,7 +173,41 @@ echo $response; -```json {{ title: '200' }} +```json {{ title: 'Example' }} +[ + { + "name": "ch8i4ug6lnn4g9hqv7mg", + "description": "This is a default policy that allows connections between all the resources", + "enabled": true, + "query": "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": [ + { + "id": "ch8i4ug6lnn4g9hqv7mg", + "name": "Default", + "description": "This is a default rule that allows connections between all the resources", + "enabled": true, + "sources": [ + { + "id": "ch8i4ug6lnn4g9hqv7m0", + "name": "devs", + "peers_count": 2 + } + ], + "destinations": [ + { + "id": "ch8i4ug6lnn4g9hqv7m0", + "name": "devs", + "peers_count": 2 + } + ], + "action": "accept" + } + ], + "id": "ch8i4ug6lnn4g9hqv7mg" + } +] +``` +```json {{ title: 'Schema' }} [ { "name": "string", @@ -627,7 +661,39 @@ echo $response; -```json {{ title: '200' }} +```json {{ title: 'Example' }} +{ + "name": "ch8i4ug6lnn4g9hqv7mg", + "description": "This is a default policy that allows connections between all the resources", + "enabled": true, + "query": "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": [ + { + "id": "ch8i4ug6lnn4g9hqv7mg", + "name": "Default", + "description": "This is a default rule that allows connections between all the resources", + "enabled": true, + "sources": [ + { + "id": "ch8i4ug6lnn4g9hqv7m0", + "name": "devs", + "peers_count": 2 + } + ], + "destinations": [ + { + "id": "ch8i4ug6lnn4g9hqv7m0", + "name": "devs", + "peers_count": 2 + } + ], + "action": "accept" + } + ], + "id": "ch8i4ug6lnn4g9hqv7mg" +} +``` +```json {{ title: 'Schema' }} { "name": "string", "description": "string", @@ -842,7 +908,39 @@ echo $response; -```json {{ title: '200' }} +```json {{ title: 'Example' }} +{ + "name": "ch8i4ug6lnn4g9hqv7mg", + "description": "This is a default policy that allows connections between all the resources", + "enabled": true, + "query": "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": [ + { + "id": "ch8i4ug6lnn4g9hqv7mg", + "name": "Default", + "description": "This is a default rule that allows connections between all the resources", + "enabled": true, + "sources": [ + { + "id": "ch8i4ug6lnn4g9hqv7m0", + "name": "devs", + "peers_count": 2 + } + ], + "destinations": [ + { + "id": "ch8i4ug6lnn4g9hqv7m0", + "name": "devs", + "peers_count": 2 + } + ], + "action": "accept" + } + ], + "id": "ch8i4ug6lnn4g9hqv7mg" +} +``` +```json {{ title: 'Schema' }} { "name": "string", "description": "string", @@ -1302,7 +1400,39 @@ echo $response; -```json {{ title: '200' }} +```json {{ title: 'Example' }} +{ + "name": "ch8i4ug6lnn4g9hqv7mg", + "description": "This is a default policy that allows connections between all the resources", + "enabled": true, + "query": "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": [ + { + "id": "ch8i4ug6lnn4g9hqv7mg", + "name": "Default", + "description": "This is a default rule that allows connections between all the resources", + "enabled": true, + "sources": [ + { + "id": "ch8i4ug6lnn4g9hqv7m0", + "name": "devs", + "peers_count": 2 + } + ], + "destinations": [ + { + "id": "ch8i4ug6lnn4g9hqv7m0", + "name": "devs", + "peers_count": 2 + } + ], + "action": "accept" + } + ], + "id": "ch8i4ug6lnn4g9hqv7mg" +} +``` +```json {{ title: 'Schema' }} { "name": "string", "description": "string", diff --git a/src/pages/routes.mdx b/src/pages/routes.mdx index 78c1a351..da75548e 100644 --- a/src/pages/routes.mdx +++ b/src/pages/routes.mdx @@ -173,7 +173,25 @@ echo $response; -```json {{ title: '200' }} +```json {{ title: 'Example' }} +[ + { + "id": "chacdk86lnnboviihd7g", + "network_type": "IPv4", + "description": "My first route", + "network_id": "Route 1", + "enabled": true, + "peer": "chacbco6lnnbn6cg5s91", + "network": "10.64.0.0/24", + "metric": 9999, + "masquerade": true, + "groups": [ + "chacdk86lnnboviihd70" + ] + } +] +``` +```json {{ title: 'Schema' }} [ { "id": "string", @@ -521,7 +539,23 @@ echo $response; -```json {{ title: '200' }} +```json {{ title: 'Example' }} +{ + "id": "chacdk86lnnboviihd7g", + "network_type": "IPv4", + "description": "My first route", + "network_id": "Route 1", + "enabled": true, + "peer": "chacbco6lnnbn6cg5s91", + "network": "10.64.0.0/24", + "metric": 9999, + "masquerade": true, + "groups": [ + "chacdk86lnnboviihd70" + ] +} +``` +```json {{ title: 'Schema' }} { "id": "string", "network_type": "string", @@ -724,7 +758,23 @@ echo $response; -```json {{ title: '200' }} +```json {{ title: 'Example' }} +{ + "id": "chacdk86lnnboviihd7g", + "network_type": "IPv4", + "description": "My first route", + "network_id": "Route 1", + "enabled": true, + "peer": "chacbco6lnnbn6cg5s91", + "network": "10.64.0.0/24", + "metric": 9999, + "masquerade": true, + "groups": [ + "chacdk86lnnboviihd70" + ] +} +``` +```json {{ title: 'Schema' }} { "id": "string", "network_type": "string", @@ -1078,7 +1128,23 @@ echo $response; -```json {{ title: '200' }} +```json {{ title: 'Example' }} +{ + "id": "chacdk86lnnboviihd7g", + "network_type": "IPv4", + "description": "My first route", + "network_id": "Route 1", + "enabled": true, + "peer": "chacbco6lnnbn6cg5s91", + "network": "10.64.0.0/24", + "metric": 9999, + "masquerade": true, + "groups": [ + "chacdk86lnnboviihd70" + ] +} +``` +```json {{ title: 'Schema' }} { "id": "string", "network_type": "string", diff --git a/src/pages/rules.mdx b/src/pages/rules.mdx index b9105935..6cfad7fc 100644 --- a/src/pages/rules.mdx +++ b/src/pages/rules.mdx @@ -173,7 +173,32 @@ echo $response; -```json {{ title: '200' }} +```json {{ title: 'Example' }} +[ + { + "id": "ch8i4ug6lnn4g9hqv7mg", + "name": "Default", + "description": "This is a default rule that allows connections between all the resources", + "disabled": false, + "flow": "bidirect", + "sources": [ + { + "id": "ch8i4ug6lnn4g9hqv7m0", + "name": "devs", + "peers_count": 2 + } + ], + "destinations": [ + { + "id": "ch8i4ug6lnn4g9hqv7m0", + "name": "devs", + "peers_count": 2 + } + ] + } +] +``` +```json {{ title: 'Schema' }} [ { "id": "string", @@ -506,7 +531,30 @@ echo $response; -```json {{ title: '200' }} +```json {{ title: 'Example' }} +{ + "id": "ch8i4ug6lnn4g9hqv7mg", + "name": "Default", + "description": "This is a default rule that allows connections between all the resources", + "disabled": false, + "flow": "bidirect", + "sources": [ + { + "id": "ch8i4ug6lnn4g9hqv7m0", + "name": "devs", + "peers_count": 2 + } + ], + "destinations": [ + { + "id": "ch8i4ug6lnn4g9hqv7m0", + "name": "devs", + "peers_count": 2 + } + ] +} +``` +```json {{ title: 'Schema' }} { "id": "string", "name": "string", @@ -712,7 +760,30 @@ echo $response; -```json {{ title: '200' }} +```json {{ title: 'Example' }} +{ + "id": "ch8i4ug6lnn4g9hqv7mg", + "name": "Default", + "description": "This is a default rule that allows connections between all the resources", + "disabled": false, + "flow": "bidirect", + "sources": [ + { + "id": "ch8i4ug6lnn4g9hqv7m0", + "name": "devs", + "peers_count": 2 + } + ], + "destinations": [ + { + "id": "ch8i4ug6lnn4g9hqv7m0", + "name": "devs", + "peers_count": 2 + } + ] +} +``` +```json {{ title: 'Schema' }} { "id": "string", "name": "string", @@ -1051,7 +1122,30 @@ echo $response; -```json {{ title: '200' }} +```json {{ title: 'Example' }} +{ + "id": "ch8i4ug6lnn4g9hqv7mg", + "name": "Default", + "description": "This is a default rule that allows connections between all the resources", + "disabled": false, + "flow": "bidirect", + "sources": [ + { + "id": "ch8i4ug6lnn4g9hqv7m0", + "name": "devs", + "peers_count": 2 + } + ], + "destinations": [ + { + "id": "ch8i4ug6lnn4g9hqv7m0", + "name": "devs", + "peers_count": 2 + } + ] +} +``` +```json {{ title: 'Schema' }} { "id": "string", "name": "string", diff --git a/src/pages/setup-keys.mdx b/src/pages/setup-keys.mdx index 687b970c..954fb7cc 100644 --- a/src/pages/setup-keys.mdx +++ b/src/pages/setup-keys.mdx @@ -173,7 +173,28 @@ echo $response; -```json {{ title: '200' }} +```json {{ title: 'Example' }} +[ + { + "id": "2531583362", + "key": "A616097E-FCF0-48FA-9354-CA4A61142761", + "name": "Default key", + "expires": "2023-06-01T14:47:22.291057Z", + "type": "reusable", + "valid": true, + "revoked": false, + "used_times": 2, + "last_used": "2023-05-05T09:00:35.477782Z", + "state": "valid", + "auto_groups": [ + "devs" + ], + "updated_at": "2023-05-05T09:00:35.477782Z", + "usage_limit": 0 + } +] +``` +```json {{ title: 'Schema' }} [ { "id": "string", @@ -488,7 +509,26 @@ echo $response; -```json {{ title: '200' }} +```json {{ title: 'Example' }} +{ + "id": "2531583362", + "key": "A616097E-FCF0-48FA-9354-CA4A61142761", + "name": "Default key", + "expires": "2023-06-01T14:47:22.291057Z", + "type": "reusable", + "valid": true, + "revoked": false, + "used_times": 2, + "last_used": "2023-05-05T09:00:35.477782Z", + "state": "valid", + "auto_groups": [ + "devs" + ], + "updated_at": "2023-05-05T09:00:35.477782Z", + "usage_limit": 0 +} +``` +```json {{ title: 'Schema' }} { "id": "string", "key": "string", @@ -694,7 +734,26 @@ echo $response; -```json {{ title: '200' }} +```json {{ title: 'Example' }} +{ + "id": "2531583362", + "key": "A616097E-FCF0-48FA-9354-CA4A61142761", + "name": "Default key", + "expires": "2023-06-01T14:47:22.291057Z", + "type": "reusable", + "valid": true, + "revoked": false, + "used_times": 2, + "last_used": "2023-05-05T09:00:35.477782Z", + "state": "valid", + "auto_groups": [ + "devs" + ], + "updated_at": "2023-05-05T09:00:35.477782Z", + "usage_limit": 0 +} +``` +```json {{ title: 'Schema' }} { "id": "string", "key": "string", @@ -1015,7 +1074,26 @@ echo $response; -```json {{ title: '200' }} +```json {{ title: 'Example' }} +{ + "id": "2531583362", + "key": "A616097E-FCF0-48FA-9354-CA4A61142761", + "name": "Default key", + "expires": "2023-06-01T14:47:22.291057Z", + "type": "reusable", + "valid": true, + "revoked": false, + "used_times": 2, + "last_used": "2023-05-05T09:00:35.477782Z", + "state": "valid", + "auto_groups": [ + "devs" + ], + "updated_at": "2023-05-05T09:00:35.477782Z", + "usage_limit": 0 +} +``` +```json {{ title: 'Schema' }} { "id": "string", "key": "string", diff --git a/src/pages/tokens.mdx b/src/pages/tokens.mdx index 54081d11..a4e55f32 100644 --- a/src/pages/tokens.mdx +++ b/src/pages/tokens.mdx @@ -181,7 +181,19 @@ echo $response; -```json {{ title: '200' }} +```json {{ title: 'Example' }} +[ + { + "id": "ch8i54g6lnn4g9hqv7n0", + "name": "My first token", + "expiration_date": "2023-05-05T14:38:28.977616Z", + "created_by": "google-oauth2|277474792786460067937", + "created_at": "2023-05-02T14:48:20.465209Z", + "last_used": "2023-05-04T12:45:25.9723616Z" + } +] +``` +```json {{ title: 'Schema' }} [ { "id": "string", @@ -429,7 +441,20 @@ echo $response; -```json {{ title: '200' }} +```json {{ title: 'Example' }} +{ + "plain_token": "2023-05-02T14:48:20.465209Z", + "personal_access_token": { + "id": "ch8i54g6lnn4g9hqv7n0", + "name": "My first token", + "expiration_date": "2023-05-05T14:38:28.977616Z", + "created_by": "google-oauth2|277474792786460067937", + "created_at": "2023-05-02T14:48:20.465209Z", + "last_used": "2023-05-04T12:45:25.9723616Z" + } +} +``` +```json {{ title: 'Schema' }} { "plain_token": "string", "personal_access_token": { @@ -633,7 +658,17 @@ echo $response; -```json {{ title: '200' }} +```json {{ title: 'Example' }} +{ + "id": "ch8i54g6lnn4g9hqv7n0", + "name": "My first token", + "expiration_date": "2023-05-05T14:38:28.977616Z", + "created_by": "google-oauth2|277474792786460067937", + "created_at": "2023-05-02T14:48:20.465209Z", + "last_used": "2023-05-04T12:45:25.9723616Z" +} +``` +```json {{ title: 'Schema' }} { "id": "string", "name": "string", diff --git a/src/pages/users.mdx b/src/pages/users.mdx index 432a6b31..f3cd8964 100644 --- a/src/pages/users.mdx +++ b/src/pages/users.mdx @@ -6,7 +6,7 @@ export const title = 'Users' -## Retrieve Users {{ tag: 'GET' , label: '/api/users' }} +## List all Users {{ tag: 'GET' , label: '/api/users' }} @@ -181,7 +181,23 @@ echo $response; -```json {{ title: '200' }} +```json {{ title: 'Example' }} +[ + { + "id": "google-oauth2|277474792786460067937", + "email": "demo@netbird.io", + "name": "Tom Schulz", + "role": "admin", + "status": "active", + "auto_groups": [ + "devs" + ], + "is_current": true, + "is_service_user": false + } +] +``` +```json {{ title: 'Schema' }} [ { "id": "string", @@ -477,7 +493,21 @@ echo $response; -```json {{ title: '200' }} +```json {{ title: 'Example' }} +{ + "id": "google-oauth2|277474792786460067937", + "email": "demo@netbird.io", + "name": "Tom Schulz", + "role": "admin", + "status": "active", + "auto_groups": [ + "devs" + ], + "is_current": true, + "is_service_user": false +} +``` +```json {{ title: 'Schema' }} { "id": "string", "email": "string", @@ -737,7 +767,21 @@ echo $response; -```json {{ title: '200' }} +```json {{ title: 'Example' }} +{ + "id": "google-oauth2|277474792786460067937", + "email": "demo@netbird.io", + "name": "Tom Schulz", + "role": "admin", + "status": "active", + "auto_groups": [ + "devs" + ], + "is_current": true, + "is_service_user": false +} +``` +```json {{ title: 'Schema' }} { "id": "string", "email": "string",