diff --git a/kubernetes/helm/otoroshi/crds-with-schema.yaml b/kubernetes/helm/otoroshi/crds-with-schema.yaml index 5a986ca2fe..d305f2a8af 100644 --- a/kubernetes/helm/otoroshi/crds-with-schema.yaml +++ b/kubernetes/helm/otoroshi/crds-with-schema.yaml @@ -48,24 +48,16 @@ spec: id: type: "string" description: "A unique random string to identify your service" - location: + _loc: description: "Entity location" properties: tenant: description: "Organization of the current entity" - properties: - rawValue: - type: "string" - description: "???" - type: "object" + type: "string" teams: type: "array" items: - properties: - rawValue: - type: "string" - description: "???" - type: "object" + type: "string" description: "Teams of the current entity" type: "object" name: @@ -132,80 +124,81 @@ spec: type: "object" description: "The otoroshi model for X509 certificates" properties: - letsEncrypt: - type: "boolean" - description: "Let's encrypt (ACME) generated" - keypair: + certType: + type: "string" + description: "the kind of certificate" + name: + type: "string" + description: "Entity name" + revoked: type: "boolean" - description: "Is cert used for its keypair only ?" - to: - type: "number" - description: "Stop date" + description: "Certificate is revoked" + subject: + type: "string" + description: "Certificate subject" + description: + type: "string" + description: "Entity description" tags: type: "array" items: type: "string" description: "Entity tags" - exposed: + domain: + type: "string" + description: "Certificate domain" + ca: type: "boolean" - description: "Is the cert exposed (public key exposed in jwks.json)" + description: "Is cert a CA ?" + keypair: + type: "boolean" + description: "Is cert used for its keypair only ?" + letsEncrypt: + type: "boolean" + description: "Let's encrypt (ACME) generated" autoRenew: type: "boolean" description: "Auto renew cert" - id: + caRef: + description: "null type" type: "string" - description: "Entity id" - revoked: - type: "boolean" - description: "Certificate is revoked" - from: + nullable: true + to: type: "number" - description: "Start date" - client: - type: "boolean" - description: "Is cert a client cert ?" - ca: + description: "Stop date" + exposed: type: "boolean" - description: "Is cert a CA ?" - name: - type: "string" - description: "Entity name" - chain: + description: "Is the cert exposed (public key exposed in jwks.json)" + id: type: "string" - description: "Certicates chain (PEM encoded)" - location: + description: "Entity id" + _loc: description: "Entity location" properties: tenant: description: "Organization of the current entity" - properties: - rawValue: - type: "string" - description: "???" - type: "object" + type: "string" teams: type: "array" items: - properties: - rawValue: - type: "string" - description: "???" - type: "object" + type: "string" description: "Teams of the current entity" type: "object" - password: - description: "null type" - type: "string" - nullable: true sans: type: "array" items: type: "string" description: "Certificate SANs" - selfSigned: + client: type: "boolean" - description: "Is cert self signed" - entityMetadata: + description: "Is cert a client cert ?" + from: + type: "number" + description: "Start date" + valid: + type: "boolean" + description: "Is cert valid" + metadata: type: "object" additionalProperties: type: "string" @@ -213,25 +206,16 @@ spec: privateKey: type: "string" description: "Certificate private key (PEM encoded)" - domain: + selfSigned: + type: "boolean" + description: "Is cert self signed" + chain: type: "string" - description: "Certificate domain" - caRef: + description: "Certicates chain (PEM encoded)" + password: description: "null type" type: "string" nullable: true - description: - type: "string" - description: "Entity description" - subject: - type: "string" - description: "Certificate subject" - valid: - type: "boolean" - description: "Is cert valid" - certType: - type: "string" - description: "the kind of certificate" exportSecret: type: "boolean" description: "export certificate as a kubernetes secret" @@ -322,7 +306,7 @@ spec: schema: openAPIV3Schema: type: "object" - description: "The otoroshi model for a service (handles routing)" + description: "???" properties: apiVersion: description: "APIVersion defines the versioned schema of this representation\ @@ -338,24 +322,22 @@ spec: type: "object" spec: type: "object" - description: "The otoroshi model for a service (handles routing)" + description: "???" properties: buildMode: type: "boolean" - description: "Display a construction page when a user try to use the\ - \ service" + description: "???" hosts: type: "array" items: type: "string" - description: "Possible hosts for the service" + description: "???" privateApp: type: "boolean" - description: "When enabled, user will be allowed to use the service\ - \ (UI) only if they are registered users of the private apps domain" + description: "???" localScheme: type: "string" - description: "The scheme used localy, mainly http" + description: "???" authConfigRef: description: "null type" type: "string" @@ -366,129 +348,135 @@ spec: nullable: true root: type: "string" - description: "Otoroshi will append this root to any target choosen.\ - \ If the specified root is '/api/foo', then a request to https://yyyyyyy/bar\ - \ will actually hit https://xxxxxxxxx/api/foo/bar" + description: "???" name: type: "string" - description: "The name of your service. Only for debug and human readability\ - \ purposes" + description: "???" additionalHeaders: type: "object" additionalProperties: type: "string" - description: "Specify headers that will be added to each client request.\ - \ Useful to add authentication" + description: "???" domain: type: "string" - description: "The domain on which the service is available." + description: "???" clientConfig: - description: "Http client settings" + description: "???" properties: connectionTimeout: type: "integer" format: "int64" - description: "Timeout at connection" + description: "???" useCircuitBreaker: type: "boolean" - description: "Use a circuit breaker to avoid cascading failure\ - \ when calling chains of services. Highly recommended !" + description: "???" retryInitialDelay: type: "integer" format: "int64" - description: "Specify the delay between two retries. Each retry,\ - \ the delay is multiplied by the backoff factor" + description: "???" cacheConnectionSettings: - description: "Cached connection settings" + description: "???" properties: enabled: type: "boolean" - description: "Enable Cached connections at host tevel" + description: "???" queueSize: type: "integer" format: "int32" - description: "The size for the request queue" + description: "???" type: "object" proxy: + description: "???" type: "object" - x-kubernetes-preserve-unknown-fields: true - description: "Web proxy settings for http client" + properties: + host: + type: "string" + description: "The hostname of the proxy server." + port: + type: "string" + description: "The port of the proxy server." + protocol: + type: "string" + description: "The protocol of the proxy server. Use \"http\"\ + \ or \"https\". Defaults to \"http\" if not specified." + principal: + type: "string" + description: "The principal (aka username) of the credentials\ + \ for the proxy server." + password: + type: "string" + description: "The password for the credentials for the proxy\ + \ server." + ntlmDomain: + type: "string" + description: "The ntlm domain for the proxy server." + encoding: + type: "string" + description: "The realm's charset." + nonProxyHosts: + type: "string" + description: "The non proxied hosts" callTimeout: type: "integer" format: "int64" - description: "Specify how long each call should last at most in\ - \ milliseconds (soft timeout as it's enforced by the circuit\ - \ breaker)" + description: "???" callAndStreamTimeout: type: "integer" format: "int64" - description: "Specify how long each call should last at most in\ - \ milliseconds (hard timeout, connection will be closed after\ - \ that duration)" + description: "???" globalTimeout: type: "integer" format: "int64" - description: "Specify how long the global call (with retries)\ - \ should last at most in milliseconds" + description: "???" maxErrors: type: "integer" format: "int32" - description: "Specify how many errors can pass before opening\ - \ the circuit breaker" + description: "???" retries: type: "integer" format: "int32" - description: "Specify how many times the client will try to fetch\ - \ the result of the request after an error before giving up." + description: "???" backoffFactor: type: "integer" format: "int64" - description: "Specify the factor to multiply the delay for each\ - \ retry" + description: "???" customTimeouts: type: "array" items: properties: path: type: "string" - description: "path on which this configuration works" + description: "???" callAndStreamTimeout: type: "integer" format: "int64" - description: "Specify how long each call should last at\ - \ most in milliseconds (hard timeout, connection will\ - \ be closed after that duration)" + description: "???" callTimeout: type: "integer" format: "int64" - description: "Specify how long each call should last at\ - \ most in milliseconds (soft timeout as it's enforced\ - \ by the circuit breaker)" + description: "???" idleTimeout: type: "integer" format: "int64" - description: "Timeout on idle connection" + description: "???" globalTimeout: type: "integer" format: "int64" - description: "Specify how long the global call (with retries)\ - \ should last at most in milliseconds" + description: "???" connectionTimeout: type: "integer" format: "int64" - description: "Timeout at connection" + description: "???" type: "object" - description: "Custom timeouts per path" + description: "???" idleTimeout: type: "integer" format: "int64" - description: "Timeout on idle connection" + description: "???" sampleInterval: type: "integer" format: "int64" - description: "Specify the sliding window time for the circuit\ - \ breaker in milliseconds, after this time, error count will\ - \ be reseted" + description: "???" type: "object" matchingRoot: description: "null type" @@ -496,24 +484,22 @@ spec: nullable: true forceHttps: type: "boolean" - description: "Will force redirection to https:// if not present" + description: "???" localHost: type: "string" - description: "The host used localy, mainly localhost:xxxx" + description: "???" sendOtoroshiHeadersBack: type: "boolean" - description: "When enabled, Otoroshi will send headers to consumer\ - \ like request id, client latency, overhead, etc ..." + description: "???" healthCheck: - description: "Healthcheck settings" + description: "???" properties: enabled: type: "boolean" - description: "Whether or not healthcheck is enabled on the current\ - \ service descriptor" + description: "???" url: type: "string" - description: "The URL to check" + description: "???" timeout: type: "integer" format: "int32" @@ -521,102 +507,198 @@ spec: type: "object" strictlyPrivate: type: "boolean" - description: "When strictly private, private app session will not\ - \ pass apikey filters" + description: "???" detectApiKeySooner: type: "boolean" - description: "Detect if an apikey is present but do not fail if not" + description: "???" allowHttp10: type: "boolean" - description: "Allow HTTP/1.0 requests" + description: "???" subdomain: type: "string" - description: "The subdomain on which the service is available" + description: "???" paths: type: "array" items: type: "string" - description: "Matching paths on request" + description: "???" stripPath: type: "boolean" - description: "Strip matching path in the forwarded request path" + description: "???" secComAlgoChallengeOtoToBack: + description: "???" type: "object" - x-kubernetes-preserve-unknown-fields: true - description: "Algorithm to sign challenge token to the backend" - apiKeyConstraints: - description: "Routing and extraction constraints for the apikeyh" properties: - customHeadersAuth: - description: "Settings to extract apikey from custom headers" + type: + type: "string" + description: "the kind of algosettings" + size: + type: "integer" + format: "int32" + description: "SHA function size" + publicKey: + type: "string" + description: "Public key (for verification)" + privateKey: + description: "null type" + type: "string" + nullable: true + certId: + type: "string" + description: "Certificate id" + secret: + type: "string" + description: "HMAC secret" + base64: + type: "boolean" + description: "The secret is base64 encoded" + url: + type: "string" + description: "JWKS url" + tlsConfig: + description: "TLS config" properties: - enabled: + mtls: type: "boolean" - description: "Constraint enabled" - clientIdHeaderName: - description: "null type" - type: "string" - nullable: true - clientSecretHeaderName: - description: "null type" - type: "string" - nullable: true - type: "object" - routing: - description: "Routing settings for this apikey" - properties: - oneTagIn: + description: "???" + loose: + type: "boolean" + description: "???" + trustAll: + type: "boolean" + description: "???" + trustedCerts: type: "array" items: type: "string" - description: "outing if one tag presents in apikey" - noneMetaKeysIn: + description: "???" + certs: type: "array" items: type: "string" - description: "Routing if none meta keys presents in apikey" + description: "???" + type: "object" + kty: + type: "string" + description: "Key type" + proxy: + description: "Web proxy for http client" + type: "object" + properties: + host: + type: "string" + description: "The hostname of the proxy server." + port: + type: "string" + description: "The port of the proxy server." + protocol: + type: "string" + description: "The protocol of the proxy server. Use \"http\"\ + \ or \"https\". Defaults to \"http\" if not specified." + principal: + type: "string" + description: "The principal (aka username) of the credentials\ + \ for the proxy server." + password: + type: "string" + description: "The password for the credentials for the proxy\ + \ server." + ntlmDomain: + type: "string" + description: "The ntlm domain for the proxy server." + encoding: + type: "string" + description: "The realm's charset." + nonProxyHosts: + type: "string" + description: "The non proxied hosts" + headers: + type: "object" + additionalProperties: + type: "string" + description: "Http header when fetching JWKS" + ttl: + type: "number" + description: "Cache ttl" + timeout: + type: "number" + description: "Timeout when fetching JWKS" + onlyExposedCerts: + type: "boolean" + description: "Use only exposed certs" + apiKeyConstraints: + description: "???" + properties: + customHeadersAuth: + description: "???" + properties: + enabled: + type: "boolean" + description: "???" + clientIdHeaderName: + description: "null type" + type: "string" + nullable: true + clientSecretHeaderName: + description: "null type" + type: "string" + nullable: true + type: "object" + routing: + description: "???" + properties: + oneTagIn: + type: "array" + items: + type: "string" + description: "???" + noneMetaKeysIn: + type: "array" + items: + type: "string" + description: "???" oneMetaIn: type: "object" additionalProperties: type: "string" - description: "Routing if one meta presents in apikey" + description: "???" oneMetaKeyIn: type: "array" items: type: "string" - description: "Routing if one meta key presents in apikey" + description: "???" allMetaKeysIn: type: "array" items: type: "string" - description: "Routing if all meta keys presents in apikey" + description: "???" noneTagIn: type: "array" items: type: "string" - description: "Routing if none tags presents in apikey" + description: "???" allTagsIn: type: "array" items: type: "string" - description: "Routing if all tags presents in apikey" + description: "???" allMetaIn: type: "object" additionalProperties: type: "string" - description: "Routing if all meta presents in apikey" + description: "???" noneMetaIn: type: "object" additionalProperties: type: "string" - description: "Routing if none meta presents in apikey" + description: "???" type: "object" clientIdAuth: - description: "Settings to extract client_id only apikey" + description: "???" properties: enabled: type: "boolean" - description: "Constraint enabled" + description: "???" headerName: description: "null type" type: "string" @@ -627,12 +709,11 @@ spec: nullable: true type: "object" jwtAuth: - description: "Settings to extract apikey from jwt token" + description: "???" properties: keyPairSigned: type: "boolean" - description: "The jwt token is signed by a keypair from a\ - \ cert found from its id in apikey meta. 'jwt-sign-keypair'" + description: "???" cookieName: description: "null type" type: "string" @@ -647,24 +728,24 @@ spec: nullable: true secretSigned: type: "boolean" - description: "Jwt token signed with the client_secret" + description: "???" maxJwtLifespanSecs: description: "null type" type: "string" nullable: true enabled: type: "boolean" - description: "Constraint enabled" + description: "???" includeRequestAttributes: type: "boolean" - description: "Jwt token should include verb and path" + description: "???" type: "object" basicAuth: - description: "Settings to extract basic auth style apikey" + description: "???" properties: enabled: type: "boolean" - description: "Constraint enabled" + description: "???" headerName: description: "null type" type: "string" @@ -677,98 +758,187 @@ spec: type: "object" env: type: "string" - description: "The line on which the service is available. Based on\ - \ that value, the name of the line will be appended to the subdomain.\ - \ For line prod, nothing will be appended. For example, if the subdomain\ - \ is 'foo' and line is 'preprod', then the exposed service will\ - \ be available at 'foo.preprod.mydomain'" + description: "???" xForwardedHeaders: type: "boolean" - description: "Send X-Forwarded-* headers" + description: "???" transformerRefs: type: "array" items: type: "string" - description: "Enabled transformer plugins" + description: "???" enabled: type: "boolean" - description: "Activate or deactivate your service. Once disabled,\ - \ users will get an error page saying the service does not exist" + description: "???" gzip: - description: "GZIP settings" + description: "???" properties: compressionLevel: type: "integer" format: "int32" - description: "Compression level (0 - 9)" + description: "???" blackList: type: "array" items: type: "string" - description: "blocklisted content types" + description: "???" chunkedThreshold: type: "integer" format: "int32" - description: "Chunk size" + description: "???" excludedPatterns: type: "array" items: type: "string" - description: "Excluded paths" + description: "???" bufferSize: type: "integer" format: "int32" - description: "Buffer size in bytes" + description: "???" whiteList: type: "array" items: type: "string" - description: "allow listed content types" + description: "???" enabled: type: "boolean" - description: "Gzip enabled" + description: "???" type: "object" sendInfoToken: type: "boolean" - description: "Should otoroshi send info token" + description: "???" tcpUdpTunneling: type: "boolean" - description: "Enabled TCP/UDP tunneling through websocket connection" + description: "???" removeHeadersOut: type: "array" items: type: "string" - description: "Remove headers on client response" + description: "???" useAkkaHttpClient: type: "boolean" - description: "Use akka http client for this service" + description: "???" maintenanceMode: type: "boolean" - description: "Display a maintainance page when a user try to use the\ - \ service" + description: "???" id: type: "string" - description: "A unique random string to identify your service" + description: "???" removeHeadersIn: type: "array" items: type: "string" - description: "Remove headers on client request" + description: "???" logAnalyticsOnServer: type: "boolean" - description: "Log analytics event on the server" + description: "???" secComAlgoInfoToken: + description: "???" type: "object" - x-kubernetes-preserve-unknown-fields: true - description: "Algorithm to verify/sign challenge token coming from/to\ - \ the backend" + properties: + type: + type: "string" + description: "the kind of algosettings" + size: + type: "integer" + format: "int32" + description: "SHA function size" + publicKey: + type: "string" + description: "Public key (for verification)" + privateKey: + description: "null type" + type: "string" + nullable: true + certId: + type: "string" + description: "Certificate id" + secret: + type: "string" + description: "HMAC secret" + base64: + type: "boolean" + description: "The secret is base64 encoded" + url: + type: "string" + description: "JWKS url" + tlsConfig: + description: "TLS config" + properties: + mtls: + type: "boolean" + description: "???" + loose: + type: "boolean" + description: "???" + trustAll: + type: "boolean" + description: "???" + trustedCerts: + type: "array" + items: + type: "string" + description: "???" + certs: + type: "array" + items: + type: "string" + description: "???" + type: "object" + kty: + type: "string" + description: "Key type" + proxy: + description: "Web proxy for http client" + type: "object" + properties: + host: + type: "string" + description: "The hostname of the proxy server." + port: + type: "string" + description: "The port of the proxy server." + protocol: + type: "string" + description: "The protocol of the proxy server. Use \"http\"\ + \ or \"https\". Defaults to \"http\" if not specified." + principal: + type: "string" + description: "The principal (aka username) of the credentials\ + \ for the proxy server." + password: + type: "string" + description: "The password for the credentials for the proxy\ + \ server." + ntlmDomain: + type: "string" + description: "The ntlm domain for the proxy server." + encoding: + type: "string" + description: "The realm's charset." + nonProxyHosts: + type: "string" + description: "The non proxied hosts" + headers: + type: "object" + additionalProperties: + type: "string" + description: "Http header when fetching JWKS" + ttl: + type: "number" + description: "Cache ttl" + timeout: + type: "number" + description: "Timeout when fetching JWKS" + onlyExposedCerts: + type: "boolean" + description: "Use only exposed certs" userFacing: type: "boolean" - description: "The fact that this service will be seen by users and\ - \ cannot be impacted by the Snow Monkey" + description: "???" transformerConfig: type: "object" - description: "Transformer plugins configuration" + description: "???" clientValidatorRef: description: "null type" type: "string" @@ -777,42 +947,42 @@ spec: type: "array" items: type: "string" - description: "Exclude some paths" + description: "???" ipFiltering: - description: "Ip filtering settings" + description: "???" properties: whitelist: type: "array" items: type: "string" - description: "Whitelisted IP addresses" + description: "???" blacklist: type: "array" items: type: "string" - description: "Blacklisted IP addresses" + description: "???" type: "object" redirection: - description: "Redirection settings" + description: "???" properties: enabled: type: "boolean" - description: "Whether or not redirection is enabled" + description: "???" code: type: "integer" format: "int32" - description: "The http redirect code" + description: "???" to: type: "string" - description: "The location for redirection" + description: "???" type: "object" tags: type: "array" items: type: "string" - description: "Entity tags" + description: "???" restrictions: - description: "Restriction settings" + description: "???" properties: forbidden: type: "array" @@ -820,71 +990,71 @@ spec: properties: method: type: "string" - description: "Method of the http request" + description: "???" path: type: "string" - description: "Path of the http request" + description: "???" type: "object" - description: "Forbidden paths (return 403)" + description: "???" allowed: type: "array" items: properties: method: type: "string" - description: "Method of the http request" + description: "???" path: type: "string" - description: "Path of the http request" + description: "???" type: "object" - description: "Allowed paths" + description: "???" notFound: type: "array" items: properties: method: type: "string" - description: "Method of the http request" + description: "???" path: type: "string" - description: "Path of the http request" + description: "???" type: "object" - description: "Not found paths (return 404)" + description: "???" allowLast: type: "boolean" - description: "Evalute allowed paths after everything else" + description: "???" enabled: type: "boolean" - description: "Restrictions enabled" + description: "???" type: "object" overrideHost: type: "boolean" - description: "Host header will be overriden with Host of the target" + description: "???" accessValidator: - description: "Service access validatiors" + description: "???" properties: enabled: type: "boolean" - description: "Access validator plugins enabled" + description: "???" excludedPatterns: type: "array" items: type: "string" - description: "Excluded paths" + description: "???" refs: type: "array" items: type: "string" - description: "Enabled plugins" + description: "???" config: type: "object" - description: "Access validator plugins configuration" + description: "???" type: "object" sendStateChallenge: type: "boolean" - description: "Should otoroshi send challenge token" + description: "???" chaosConfig: - description: "Chaos engineering settings" + description: "???" properties: badResponsesFaultConfig: description: "Settings for bad responses" @@ -960,16 +1130,15 @@ spec: description: "Whether or not this config is enabled" type: "object" secComInfoTokenVersion: - type: "object" - x-kubernetes-preserve-unknown-fields: true description: "Version of the info token" + type: "string" additionalHeadersOut: type: "object" additionalProperties: type: "string" - description: "Specify headers that will be added to each client response" + description: "???" secComHeaders: - description: "Header names for sec. com. protocol" + description: "???" properties: claimRequestName: description: "null type" @@ -988,154 +1157,363 @@ spec: type: "object" additionalProperties: type: "string" - description: "Specify headers that MUST be present on client request\ - \ to route it. Useful to implement versioning" + description: "???" secComAlgoChallengeBackToOto: + description: "???" type: "object" - x-kubernetes-preserve-unknown-fields: true - description: "Algorithm to verify challenge token coming from the\ - \ backend" - secComUseSameAlgo: - type: "boolean" - description: "Use the same algo for info token, challenge token signing,\ - \ challenge token verification" - useNewWSClient: - type: "boolean" - description: "Use akka http client for this service on websocket calls" - secComExcludedPatterns: - type: "array" - items: - type: "string" - description: "URI patterns excluded from secured communications" - redirectToLocal: - type: "boolean" - description: "If you work locally with Otoroshi, you may want to use\ - \ that feature to redirect one particuliar service to a local host.\ - \ For example, you can relocate https://foo.preprod.bar.com to http://localhost:8080\ - \ to make some tests" - enforceSecureCommunication: - type: "boolean" - description: "When enabled, Otoroshi will try to exchange headers\ - \ with backend service to ensure no one else can use the service\ - \ from outside" - missingOnlyHeadersOut: - type: "object" - additionalProperties: - type: "string" - description: "Add header on client response if they are not present" - secComSettings: - type: "object" - x-kubernetes-preserve-unknown-fields: true - description: "Sec. com. settings" - handleLegacyDomain: - type: "boolean" - description: "Use 'domain', 'subdomain', 'env' and 'matchingRoot'\ - \ for routing in addition to hosts, or just use hosts." - canary: - description: "Canary settings" properties: - enabled: + type: + type: "string" + description: "the kind of algosettings" + size: + type: "integer" + format: "int32" + description: "SHA function size" + publicKey: + type: "string" + description: "Public key (for verification)" + privateKey: + description: "null type" + type: "string" + nullable: true + certId: + type: "string" + description: "Certificate id" + secret: + type: "string" + description: "HMAC secret" + base64: type: "boolean" - description: "Use canary mode for this service" - traffic: - type: "number" - format: "double" - description: "Ratio of traffic that will be sent to canary targets." - targets: - type: "array" - items: - properties: - tags: - type: "array" - items: - type: "string" - description: "Tags for this target" - host: - type: "string" - description: "The host on which the HTTP call will be forwarded.\ - \ Can be a domain name, or an IP address. Can also have\ - \ a port" - weight: - type: "integer" - format: "int32" - description: "The weight of the target when choosing" - metadata: - type: "object" - additionalProperties: + description: "The secret is base64 encoded" + url: + type: "string" + description: "JWKS url" + tlsConfig: + description: "TLS config" + properties: + mtls: + type: "boolean" + description: "???" + loose: + type: "boolean" + description: "???" + trustAll: + type: "boolean" + description: "???" + trustedCerts: + type: "array" + items: + type: "string" + description: "???" + certs: + type: "array" + items: + type: "string" + description: "???" + type: "object" + kty: + type: "string" + description: "Key type" + proxy: + description: "Web proxy for http client" + type: "object" + properties: + host: + type: "string" + description: "The hostname of the proxy server." + port: + type: "string" + description: "The port of the proxy server." + protocol: + type: "string" + description: "The protocol of the proxy server. Use \"http\"\ + \ or \"https\". Defaults to \"http\" if not specified." + principal: + type: "string" + description: "The principal (aka username) of the credentials\ + \ for the proxy server." + password: + type: "string" + description: "The password for the credentials for the proxy\ + \ server." + ntlmDomain: + type: "string" + description: "The ntlm domain for the proxy server." + encoding: + type: "string" + description: "The realm's charset." + nonProxyHosts: + type: "string" + description: "The non proxied hosts" + headers: + type: "object" + additionalProperties: + type: "string" + description: "Http header when fetching JWKS" + ttl: + type: "number" + description: "Cache ttl" + timeout: + type: "number" + description: "Timeout when fetching JWKS" + onlyExposedCerts: + type: "boolean" + description: "Use only exposed certs" + secComUseSameAlgo: + type: "boolean" + description: "???" + useNewWSClient: + type: "boolean" + description: "???" + secComExcludedPatterns: + type: "array" + items: + type: "string" + description: "???" + redirectToLocal: + type: "boolean" + description: "???" + enforceSecureCommunication: + type: "boolean" + description: "???" + missingOnlyHeadersOut: + type: "object" + additionalProperties: + type: "string" + description: "???" + secComSettings: + description: "???" + type: "object" + properties: + type: + type: "string" + description: "the kind of algosettings" + size: + type: "integer" + format: "int32" + description: "SHA function size" + publicKey: + type: "string" + description: "Public key (for verification)" + privateKey: + description: "null type" + type: "string" + nullable: true + certId: + type: "string" + description: "Certificate id" + secret: + type: "string" + description: "HMAC secret" + base64: + type: "boolean" + description: "The secret is base64 encoded" + url: + type: "string" + description: "JWKS url" + tlsConfig: + description: "TLS config" + properties: + mtls: + type: "boolean" + description: "???" + loose: + type: "boolean" + description: "???" + trustAll: + type: "boolean" + description: "???" + trustedCerts: + type: "array" + items: + type: "string" + description: "???" + certs: + type: "array" + items: + type: "string" + description: "???" + type: "object" + kty: + type: "string" + description: "Key type" + proxy: + description: "Web proxy for http client" + type: "object" + properties: + host: + type: "string" + description: "The hostname of the proxy server." + port: + type: "string" + description: "The port of the proxy server." + protocol: + type: "string" + description: "The protocol of the proxy server. Use \"http\"\ + \ or \"https\". Defaults to \"http\" if not specified." + principal: + type: "string" + description: "The principal (aka username) of the credentials\ + \ for the proxy server." + password: + type: "string" + description: "The password for the credentials for the proxy\ + \ server." + ntlmDomain: + type: "string" + description: "The ntlm domain for the proxy server." + encoding: + type: "string" + description: "The realm's charset." + nonProxyHosts: + type: "string" + description: "The non proxied hosts" + headers: + type: "object" + additionalProperties: + type: "string" + description: "Http header when fetching JWKS" + ttl: + type: "number" + description: "Cache ttl" + timeout: + type: "number" + description: "Timeout when fetching JWKS" + onlyExposedCerts: + type: "boolean" + description: "Use only exposed certs" + handleLegacyDomain: + type: "boolean" + description: "???" + canary: + description: "???" + properties: + enabled: + type: "boolean" + description: "???" + traffic: + type: "number" + format: "double" + description: "???" + targets: + type: "array" + items: + properties: + tags: + type: "array" + items: + type: "string" + description: "???" + host: + type: "string" + description: "???" + weight: + type: "integer" + format: "int32" + description: "???" + metadata: + type: "object" + additionalProperties: type: "string" - description: "Metadata for this target" + description: "???" protocol: type: "string" - description: "Protocol for the target" + description: "???" predicate: + description: "???" + properties: + type: + type: "string" + description: "the kind of predicate" + dc: + type: "string" + description: "???" + positions: + type: "array" + items: + properties: + latitude: + type: "number" + format: "double" + description: "???" + longitude: + type: "number" + format: "double" + description: "???" + radius: + type: "number" + format: "double" + description: "???" + type: "object" + description: "???" + provider: + description: "null type" + type: "string" + nullable: true + dataCenter: + description: "null type" + type: "string" + nullable: true + rack: + type: "string" + description: "???" + region: + type: "string" + description: "???" + zone: + type: "string" + description: "???" type: "object" - x-kubernetes-preserve-unknown-fields: true - description: "Predicate to choose this target" ipAddress: description: "null type" type: "string" nullable: true mtlsConfig: - description: "TLS settings to contact this target" + description: "???" properties: mtls: type: "boolean" - description: "Enabled" + description: "???" loose: type: "boolean" - description: "Loose verification" + description: "???" trustAll: type: "boolean" - description: "Trust any certificate" + description: "???" trustedCerts: type: "array" items: type: "string" - description: "Trusted cert. ids" + description: "???" certs: type: "array" items: type: "string" - description: "Trusted cert. ids" + description: "???" type: "object" scheme: type: "string" - description: "The protocol used for communication. Can be\ - \ http or https" + description: "???" type: "object" - description: "The list of target that Otoroshi will proxy and\ - \ expose through the subdomain defined before. Otoroshi will\ - \ do round-robin load balancing between all those targets with\ - \ circuit breaker mecanism to avoid cascading failures" + description: "???" root: type: "string" - description: "Otoroshi will append this root to any target choosen.\ - \ If the specified root is '/api/foo', then a request to https://yyyyyyy/bar\ - \ will actually hit https://xxxxxxxxx/api/foo/bar" + description: "???" type: "object" - location: - description: "Entity location" + _loc: + description: "???" properties: tenant: description: "Organization of the current entity" - properties: - rawValue: - type: "string" - description: "???" - type: "object" + type: "string" teams: type: "array" items: - properties: - rawValue: - type: "string" - description: "???" - type: "object" + type: "string" description: "Teams of the current entity" type: "object" plugins: - description: "Plugins enabled for this service. will replace separate\ - \ plugins fields in a near future" + description: "???" properties: config: type: "object" @@ -1156,63 +1534,64 @@ spec: type: "object" secComTtl: type: "number" - description: "TTL for the info token" + description: "???" description: type: "string" - description: "Entity description" + description: "???" secComVersion: - type: "object" - x-kubernetes-preserve-unknown-fields: true - description: "Version of the sec. com." + description: "Version of the challenge token" + type: "string" preRouting: - description: "Pre routing plugin settings" + description: "???" properties: enabled: type: "boolean" - description: "pre-routing plugins enabled" + description: "???" excludedPatterns: type: "array" items: type: "string" - description: "Excluded paths" + description: "???" refs: type: "array" items: type: "string" - description: "Enabled plugins" + description: "???" config: type: "object" - description: "pre-routing plugins configuration" + description: "???" type: "object" groups: type: "array" items: type: "string" - description: "Each service descriptor is attached to groups. A group\ - \ can have one or more services. Each API key is linked to a group\ - \ and allow access to every service in the group" + description: "???" readOnly: type: "boolean" - description: "Service only accepts GET, HEAD and OPTIONS requests" + description: "???" privatePatterns: type: "array" items: type: "string" - description: "If you define a public pattern that is a little bit\ - \ too much, you can make some of public URL private again" + description: "???" targetsLoadBalancing: + description: "???" + properties: + type: + type: "string" + ratio: + type: "number" + format: "double" type: "object" - x-kubernetes-preserve-unknown-fields: true - description: "Loadbalancing strategy" cors: - description: "CORS settings" + description: "???" properties: enabled: type: "boolean" - description: "Whether or not cors is enabled" + description: "???" allowCredentials: type: "boolean" - description: "Allow to pass credentials" + description: "???" maxAge: description: "null type" type: "string" @@ -1221,46 +1600,42 @@ spec: type: "array" items: type: "string" - description: "The cors allowed methods" + description: "???" allowHeaders: type: "array" items: type: "string" - description: "The cors allowed headers" + description: "???" excludedPatterns: type: "array" items: type: "string" - description: "The cors excluded patterns" + description: "???" exposeHeaders: type: "array" items: type: "string" - description: "The cors exposed header" + description: "???" allowOrigin: type: "string" - description: "The cors allowed origin" + description: "???" type: "object" metadata: type: "object" additionalProperties: type: "string" - description: "Just a bunch of random properties" + description: "???" publicPatterns: type: "array" items: type: "string" - description: "By default, every services are private only and you'll\ - \ need an API key to access it. However, if you want to expose a\ - \ public UI, you can define one or more public patterns (regex)\ - \ to allow access to anybody. For example if you want to allow anybody\ - \ on any URL, just use '/.*'" + description: "???" api: - description: "Api exposition settings" + description: "???" properties: exposeApi: type: "boolean" - description: "Is this an API" + description: "???" openApiDescriptorUrl: description: "null type" type: "string" @@ -1270,33 +1645,360 @@ spec: type: "object" additionalProperties: type: "string" - description: "Add header on client request if they are not present" + description: "???" issueCert: type: "boolean" - description: "Flag to automatically issue a cert for this service" + description: "???" headersVerification: type: "object" additionalProperties: type: "string" - description: "Specify headers that will be verified after routing." + description: "???" jwtVerifier: + description: "???" type: "object" - x-kubernetes-preserve-unknown-fields: true - description: "JWT verifiers settings" - letsEncrypt: - type: "boolean" - description: "Flag to automatically issue a let's encrypt (ACME) cert\ - \ for this service" - targets: - x-kubernetes-preserve-unknown-fields: true - type: "object" - enabledAdditionalHosts: - type: "boolean" - description: "if enabled, the additional hosts will be add to hosts\ - \ array" ---- -apiVersion: "apiextensions.k8s.io/v1" -kind: "CustomResourceDefinition" + properties: + type: + type: "string" + description: "the kind of verifier" + desc: + type: "string" + description: "Verifier description" + name: + type: "string" + description: "Verifier name" + strict: + type: "boolean" + description: "???" + source: + description: "???" + type: "object" + properties: + type: + type: "string" + description: "the kind of location" + name: + type: "string" + description: "Query param name" + remove: + type: "string" + description: "Remove from value" + algoSettings: + description: "???" + properties: + type: + type: "string" + description: "the kind of algosettings" + size: + type: "integer" + format: "int32" + description: "SHA function size" + publicKey: + type: "string" + description: "Public key (for verification)" + privateKey: + description: "null type" + type: "string" + nullable: true + certId: + type: "string" + description: "Certificate id" + secret: + type: "string" + description: "HMAC secret" + base64: + type: "boolean" + description: "The secret is base64 encoded" + url: + type: "string" + description: "JWKS url" + tlsConfig: + description: "TLS config" + properties: + mtls: + type: "boolean" + description: "???" + loose: + type: "boolean" + description: "???" + trustAll: + type: "boolean" + description: "???" + trustedCerts: + type: "array" + items: + type: "string" + description: "???" + certs: + type: "array" + items: + type: "string" + description: "???" + type: "object" + kty: + type: "string" + description: "Key type" + proxy: + description: "Web proxy for http client" + type: "object" + properties: + host: + type: "string" + description: "The hostname of the proxy server." + port: + type: "string" + description: "The port of the proxy server." + protocol: + type: "string" + description: "The protocol of the proxy server. Use \"\ + http\" or \"https\". Defaults to \"http\" if not specified." + principal: + type: "string" + description: "The principal (aka username) of the credentials\ + \ for the proxy server." + password: + type: "string" + description: "The password for the credentials for the\ + \ proxy server." + ntlmDomain: + type: "string" + description: "The ntlm domain for the proxy server." + encoding: + type: "string" + description: "The realm's charset." + nonProxyHosts: + type: "string" + description: "The non proxied hosts" + headers: + type: "object" + additionalProperties: + type: "string" + description: "Http header when fetching JWKS" + ttl: + type: "number" + description: "Cache ttl" + timeout: + type: "number" + description: "Timeout when fetching JWKS" + onlyExposedCerts: + type: "boolean" + description: "Use only exposed certs" + type: "object" + tags: + type: "array" + items: + type: "string" + description: "Entity tags" + id: + type: "string" + description: "Verifier id" + _loc: + description: "Entity location" + properties: + tenant: + description: "Organization of the current entity" + type: "string" + teams: + type: "array" + items: + type: "string" + description: "Teams of the current entity" + type: "object" + strategy: + description: "???" + type: "object" + properties: + type: + type: "string" + description: "the kind of strategy" + strict: + type: "boolean" + description: "If the token already exists in the request,\ + \ then fail" + token: + type: "object" + description: "The default token" + verificationSettings: + description: "Verification settings" + properties: + fields: + type: "object" + additionalProperties: + type: "string" + description: "Fields validation" + arrayFields: + type: "object" + additionalProperties: + type: "string" + description: "Fields array validation" + type: "object" + algoSettings: + description: "Algorithm settings for re-signing token" + type: "object" + properties: + type: + type: "string" + description: "the kind of algosettings" + size: + type: "integer" + format: "int32" + description: "SHA function size" + publicKey: + type: "string" + description: "Public key (for verification)" + privateKey: + description: "null type" + type: "string" + nullable: true + certId: + type: "string" + description: "Certificate id" + secret: + type: "string" + description: "HMAC secret" + base64: + type: "boolean" + description: "The secret is base64 encoded" + url: + type: "string" + description: "JWKS url" + tlsConfig: + description: "TLS config" + properties: + mtls: + type: "boolean" + description: "???" + loose: + type: "boolean" + description: "???" + trustAll: + type: "boolean" + description: "???" + trustedCerts: + type: "array" + items: + type: "string" + description: "???" + certs: + type: "array" + items: + type: "string" + description: "???" + type: "object" + kty: + type: "string" + description: "Key type" + proxy: + description: "Web proxy for http client" + type: "object" + properties: + host: + type: "string" + description: "The hostname of the proxy server." + port: + type: "string" + description: "The port of the proxy server." + protocol: + type: "string" + description: "The protocol of the proxy server. Use\ + \ \"http\" or \"https\". Defaults to \"http\" if\ + \ not specified." + principal: + type: "string" + description: "The principal (aka username) of the\ + \ credentials for the proxy server." + password: + type: "string" + description: "The password for the credentials for\ + \ the proxy server." + ntlmDomain: + type: "string" + description: "The ntlm domain for the proxy server." + encoding: + type: "string" + description: "The realm's charset." + nonProxyHosts: + type: "string" + description: "The non proxied hosts" + headers: + type: "object" + additionalProperties: + type: "string" + description: "Http header when fetching JWKS" + ttl: + type: "number" + description: "Cache ttl" + timeout: + type: "number" + description: "Timeout when fetching JWKS" + onlyExposedCerts: + type: "boolean" + description: "Use only exposed certs" + transformSettings: + description: "Transformation settings" + properties: + location: + description: "Location of the token" + properties: + type: + type: "string" + description: "the kind of location" + name: + type: "string" + description: "Query param name" + remove: + type: "string" + description: "Remove from value" + type: "object" + mappingSettings: + description: "Token mapping settings" + properties: + map: + type: "object" + additionalProperties: + type: "string" + description: "Change values" + values: + type: "object" + description: "Add values" + remove: + type: "array" + items: + type: "string" + description: "Remove some token claims" + type: "object" + type: "object" + metadata: + type: "object" + additionalProperties: + type: "string" + description: "Entity metadata" + enabled: + type: "boolean" + description: "???" + excludedPatterns: + type: "array" + items: + type: "string" + description: "???" + ids: + type: "array" + items: + type: "string" + description: "???" + letsEncrypt: + type: "boolean" + description: "???" + targets: + x-kubernetes-preserve-unknown-fields: true + type: "object" + enabledAdditionalHosts: + type: "boolean" + description: "if enabled, the additional hosts will be add to hosts\ + \ array" +--- +apiVersion: "apiextensions.k8s.io/v1" +kind: "CustomResourceDefinition" metadata: name: "wasm-plugins.proxy.otoroshi.io" creationTimestamp: null @@ -1341,24 +2043,16 @@ spec: type: "object" description: "???" properties: - location: + _loc: description: "???" properties: tenant: description: "Organization of the current entity" - properties: - rawValue: - type: "string" - description: "???" - type: "object" + type: "string" teams: type: "array" items: - properties: - rawValue: - type: "string" - description: "???" - type: "object" + type: "string" description: "Teams of the current entity" type: "object" name: @@ -1399,11 +2093,36 @@ spec: type: "integer" format: "int32" description: "???" + killOptions: + description: "???" + properties: + maxUnusedDuration: + type: "number" + description: "???" + immortal: + type: "boolean" + description: "???" + maxAvgCallDuration: + type: "number" + description: "???" + maxMemoryUsage: + type: "number" + format: "double" + description: "???" + maxCalls: + type: "integer" + format: "int32" + description: "???" + type: "object" allowedPaths: type: "object" additionalProperties: type: "string" description: "???" + instances: + type: "integer" + format: "int32" + description: "???" config: type: "object" additionalProperties: @@ -1486,10 +2205,6 @@ spec: wasi: type: "boolean" description: "???" - lifetime: - type: "object" - x-kubernetes-preserve-unknown-fields: true - description: "???" functionName: description: "null type" type: "string" @@ -1560,11 +2275,7 @@ spec: description: "Entity tags" id: description: "Entity id" - properties: - rawValue: - type: "string" - description: "???" - type: "object" + type: "string" --- apiVersion: "apiextensions.k8s.io/v1" kind: "CustomResourceDefinition" @@ -1613,9 +2324,24 @@ spec: description: "The global config (dynamic) for otoroshi" properties: geolocationSettings: - type: "object" - x-kubernetes-preserve-unknown-fields: true description: "Settings for geolocation extraction" + type: "object" + properties: + type: + type: "string" + enabled: + type: "boolean" + description: "Geolocation using maxmind db enabled" + apikey: + type: "string" + description: "IpStack apikey" + timeout: + type: "integer" + format: "int64" + description: "API call timeout" + path: + type: "string" + description: "Maxmlind db file path" alertsEmails: type: "array" items: @@ -1756,16 +2482,22 @@ spec: description: "Enabled plugins" type: "object" kafkaConfig: - description: "Global kafka settings. deprecated" + description: "Kafka settings" type: "object" properties: - securityProtocol: + type: type: "string" - description: "???" - keyPass: + description: "the kind of exporter" + sendEvents: + type: "boolean" + description: "Send events to it, or just connect" + truststore: description: "null type" type: "string" nullable: true + hostValidation: + type: "boolean" + description: "Enabled TLS hostname validation" servers: type: "array" items: @@ -1776,54 +2508,51 @@ spec: properties: mtls: type: "boolean" - description: "Enabled" + description: "???" loose: type: "boolean" - description: "Loose verification" + description: "???" trustAll: type: "boolean" - description: "Trust any certificate" + description: "???" trustedCerts: type: "array" items: type: "string" - description: "Trusted cert. ids" + description: "???" certs: type: "array" items: type: "string" - description: "Trusted cert. ids" + description: "???" type: "object" - sendEvents: - type: "boolean" - description: "Send events to it, or just connect" - truststore: + securityProtocol: + type: "string" + description: "Used security protocol" + keystore: description: "null type" type: "string" nullable: true topic: type: "string" description: "Optional kafka topic (otoroshi-events by default)" + keyPass: + description: "null type" + type: "string" + nullable: true saslConfig: - description: "???" + description: "SASL configuration" type: "object" properties: username: type: "string" - description: "???" + description: "SASL username" password: type: "string" - description: "???" + description: "SASL password" mechanism: type: "string" - description: "???" - keystore: - description: "null type" - type: "string" - nullable: true - hostValidation: - type: "boolean" - description: "???" + description: "SASL login mechanism" maxLogsSize: type: "integer" format: "int32" @@ -1832,37 +2561,253 @@ spec: description: "Web proxies settings" properties: elastic: - type: "object" - x-kubernetes-preserve-unknown-fields: true description: "Web proxy used to call elastic" - eventsWebhooks: - type: "object" - x-kubernetes-preserve-unknown-fields: true - description: "Web proxy used to call webhooks" - jwk: type: "object" - x-kubernetes-preserve-unknown-fields: true + properties: + host: + type: "string" + description: "The hostname of the proxy server." + port: + type: "string" + description: "The port of the proxy server." + protocol: + type: "string" + description: "The protocol of the proxy server. Use \"http\"\ + \ or \"https\". Defaults to \"http\" if not specified." + principal: + type: "string" + description: "The principal (aka username) of the credentials\ + \ for the proxy server." + password: + type: "string" + description: "The password for the credentials for the proxy\ + \ server." + ntlmDomain: + type: "string" + description: "The ntlm domain for the proxy server." + encoding: + type: "string" + description: "The realm's charset." + nonProxyHosts: + type: "string" + description: "The non proxied hosts" + eventsWebhooks: + description: "Web proxy used to call webhooks" + type: "object" + properties: + host: + type: "string" + description: "The hostname of the proxy server." + port: + type: "string" + description: "The port of the proxy server." + protocol: + type: "string" + description: "The protocol of the proxy server. Use \"http\"\ + \ or \"https\". Defaults to \"http\" if not specified." + principal: + type: "string" + description: "The principal (aka username) of the credentials\ + \ for the proxy server." + password: + type: "string" + description: "The password for the credentials for the proxy\ + \ server." + ntlmDomain: + type: "string" + description: "The ntlm domain for the proxy server." + encoding: + type: "string" + description: "The realm's charset." + nonProxyHosts: + type: "string" + description: "The non proxied hosts" + jwk: description: "Web proxy used to fetch jwks" - auth: type: "object" - x-kubernetes-preserve-unknown-fields: true + properties: + host: + type: "string" + description: "The hostname of the proxy server." + port: + type: "string" + description: "The port of the proxy server." + protocol: + type: "string" + description: "The protocol of the proxy server. Use \"http\"\ + \ or \"https\". Defaults to \"http\" if not specified." + principal: + type: "string" + description: "The principal (aka username) of the credentials\ + \ for the proxy server." + password: + type: "string" + description: "The password for the credentials for the proxy\ + \ server." + ntlmDomain: + type: "string" + description: "The ntlm domain for the proxy server." + encoding: + type: "string" + description: "The realm's charset." + nonProxyHosts: + type: "string" + description: "The non proxied hosts" + auth: description: "Web proxy used to call OAuth providers" - clevercloud: type: "object" - x-kubernetes-preserve-unknown-fields: true + properties: + host: + type: "string" + description: "The hostname of the proxy server." + port: + type: "string" + description: "The port of the proxy server." + protocol: + type: "string" + description: "The protocol of the proxy server. Use \"http\"\ + \ or \"https\". Defaults to \"http\" if not specified." + principal: + type: "string" + description: "The principal (aka username) of the credentials\ + \ for the proxy server." + password: + type: "string" + description: "The password for the credentials for the proxy\ + \ server." + ntlmDomain: + type: "string" + description: "The ntlm domain for the proxy server." + encoding: + type: "string" + description: "The realm's charset." + nonProxyHosts: + type: "string" + description: "The non proxied hosts" + clevercloud: description: "Web proxy used to call clevercloud" - alertEmails: type: "object" - x-kubernetes-preserve-unknown-fields: true + properties: + host: + type: "string" + description: "The hostname of the proxy server." + port: + type: "string" + description: "The port of the proxy server." + protocol: + type: "string" + description: "The protocol of the proxy server. Use \"http\"\ + \ or \"https\". Defaults to \"http\" if not specified." + principal: + type: "string" + description: "The principal (aka username) of the credentials\ + \ for the proxy server." + password: + type: "string" + description: "The password for the credentials for the proxy\ + \ server." + ntlmDomain: + type: "string" + description: "The ntlm domain for the proxy server." + encoding: + type: "string" + description: "The realm's charset." + nonProxyHosts: + type: "string" + description: "The non proxied hosts" + alertEmails: description: "Web proxy used to send alert emails" - authority: type: "object" - x-kubernetes-preserve-unknown-fields: true + properties: + host: + type: "string" + description: "The hostname of the proxy server." + port: + type: "string" + description: "The port of the proxy server." + protocol: + type: "string" + description: "The protocol of the proxy server. Use \"http\"\ + \ or \"https\". Defaults to \"http\" if not specified." + principal: + type: "string" + description: "The principal (aka username) of the credentials\ + \ for the proxy server." + password: + type: "string" + description: "The password for the credentials for the proxy\ + \ server." + ntlmDomain: + type: "string" + description: "The ntlm domain for the proxy server." + encoding: + type: "string" + description: "The realm's charset." + nonProxyHosts: + type: "string" + description: "The non proxied hosts" + authority: description: "Web proxy used to check authorities" - services: type: "object" - x-kubernetes-preserve-unknown-fields: true + properties: + host: + type: "string" + description: "The hostname of the proxy server." + port: + type: "string" + description: "The port of the proxy server." + protocol: + type: "string" + description: "The protocol of the proxy server. Use \"http\"\ + \ or \"https\". Defaults to \"http\" if not specified." + principal: + type: "string" + description: "The principal (aka username) of the credentials\ + \ for the proxy server." + password: + type: "string" + description: "The password for the credentials for the proxy\ + \ server." + ntlmDomain: + type: "string" + description: "The ntlm domain for the proxy server." + encoding: + type: "string" + description: "The realm's charset." + nonProxyHosts: + type: "string" + description: "The non proxied hosts" + services: description: "Web proxy used to access services targets" + type: "object" + properties: + host: + type: "string" + description: "The hostname of the proxy server." + port: + type: "string" + description: "The port of the proxy server." + protocol: + type: "string" + description: "The protocol of the proxy server. Use \"http\"\ + \ or \"https\". Defaults to \"http\" if not specified." + principal: + type: "string" + description: "The principal (aka username) of the credentials\ + \ for the proxy server." + password: + type: "string" + description: "The password for the credentials for the proxy\ + \ server." + ntlmDomain: + type: "string" + description: "The ntlm domain for the proxy server." + encoding: + type: "string" + description: "The realm's charset." + nonProxyHosts: + type: "string" + description: "The non proxied hosts" type: "object" enableEmbeddedMetrics: type: "boolean" @@ -1871,18 +2816,58 @@ spec: description: "Config. for elastic reads" type: "object" properties: - headers: - type: "object" - additionalProperties: - type: "string" - description: "Additionnal headers in the http request" - maxBulkSize: + type: + type: "string" + description: "null type" + nullable: true + sendWorkers: type: "integer" format: "int32" description: "???" applyTemplate: type: "boolean" description: "Enable template creation/update" + uris: + type: "array" + items: + type: "string" + description: "???" + mtlsConfig: + description: "TLS settings for the http client" + properties: + mtls: + type: "boolean" + description: "???" + loose: + type: "boolean" + description: "???" + trustAll: + type: "boolean" + description: "???" + trustedCerts: + type: "array" + items: + type: "string" + description: "???" + certs: + type: "array" + items: + type: "string" + description: "???" + type: "object" + version: + description: "null type" + type: "string" + nullable: true + maxBulkSize: + type: "integer" + format: "int32" + description: "???" + headers: + type: "object" + additionalProperties: + type: "string" + description: "Additionnal headers in the http request" indexSettings: description: "Indexation settings" properties: @@ -1902,10 +2887,6 @@ spec: x-kubernetes-preserve-unknown-fields: true description: "Index splitting interval" type: "object" - type: - description: "null type" - type: "string" - nullable: true user: description: "null type" type: "string" @@ -1918,42 +2899,6 @@ spec: description: "null type" type: "string" nullable: true - mtlsConfig: - description: "TLS settings for the http client" - properties: - mtls: - type: "boolean" - description: "Enabled" - loose: - type: "boolean" - description: "Loose verification" - trustAll: - type: "boolean" - description: "Trust any certificate" - trustedCerts: - type: "array" - items: - type: "string" - description: "Trusted cert. ids" - certs: - type: "array" - items: - type: "string" - description: "Trusted cert. ids" - type: "object" - sendWorkers: - type: "integer" - format: "int32" - description: "???" - uris: - type: "array" - items: - type: "string" - description: "???" - version: - description: "null type" - type: "string" - nullable: true trustXForwarded: type: "boolean" description: "Use X-Forwarded-* headers for routing" @@ -1989,18 +2934,58 @@ spec: type: "array" items: properties: - headers: - type: "object" - additionalProperties: - type: "string" - description: "Additionnal headers in the http request" - maxBulkSize: + type: + type: "string" + description: "null type" + nullable: true + sendWorkers: type: "integer" format: "int32" description: "???" applyTemplate: type: "boolean" description: "Enable template creation/update" + uris: + type: "array" + items: + type: "string" + description: "???" + mtlsConfig: + description: "TLS settings for the http client" + properties: + mtls: + type: "boolean" + description: "???" + loose: + type: "boolean" + description: "???" + trustAll: + type: "boolean" + description: "???" + trustedCerts: + type: "array" + items: + type: "string" + description: "???" + certs: + type: "array" + items: + type: "string" + description: "???" + type: "object" + version: + description: "null type" + type: "string" + nullable: true + maxBulkSize: + type: "integer" + format: "int32" + description: "???" + headers: + type: "object" + additionalProperties: + type: "string" + description: "Additionnal headers in the http request" indexSettings: description: "Indexation settings" properties: @@ -2020,10 +3005,6 @@ spec: x-kubernetes-preserve-unknown-fields: true description: "Index splitting interval" type: "object" - type: - description: "null type" - type: "string" - nullable: true user: description: "null type" type: "string" @@ -2036,42 +3017,6 @@ spec: description: "null type" type: "string" nullable: true - mtlsConfig: - description: "TLS settings for the http client" - properties: - mtls: - type: "boolean" - description: "Enabled" - loose: - type: "boolean" - description: "Loose verification" - trustAll: - type: "boolean" - description: "Trust any certificate" - trustedCerts: - type: "array" - items: - type: "string" - description: "Trusted cert. ids" - certs: - type: "array" - items: - type: "string" - description: "Trusted cert. ids" - type: "object" - sendWorkers: - type: "integer" - format: "int32" - description: "???" - uris: - type: "array" - items: - type: "string" - description: "???" - version: - description: "null type" - type: "string" - nullable: true type: "object" description: "Configs. for Elastic writes" logAnalyticsOnServer: @@ -2097,9 +3042,47 @@ spec: type: "string" description: "Unique id for this otoroshi instance" mailerSettings: - type: "object" - x-kubernetes-preserve-unknown-fields: true description: "Optional mailer configuration" + type: "object" + properties: + type: + type: "string" + description: "the kind of exporter" + url: + type: "string" + description: "Sender URL" + headers: + type: "object" + additionalProperties: + type: "string" + description: "Sender headers" + to: + type: "array" + items: + properties: + name: + type: "string" + description: "Destination name" + email: + type: "string" + description: "Email address" + type: "object" + description: "Destination email address" + eu: + type: "boolean" + description: "European tenant" + apiKey: + type: "string" + description: "Sendgrid apikey" + domain: + type: "string" + description: "Mailgun domain" + apiKeyPublic: + type: "string" + description: "Public key" + apiKeyPrivate: + type: "string" + description: "Private key" lines: type: "array" items: @@ -2118,6 +3101,9 @@ spec: type: "array" items: properties: + type: + type: "string" + description: "the kind of exporter" url: type: "string" description: "The URL where events are posted" @@ -2131,23 +3117,23 @@ spec: properties: mtls: type: "boolean" - description: "Enabled" + description: "???" loose: type: "boolean" - description: "Loose verification" + description: "???" trustAll: type: "boolean" - description: "Trust any certificate" + description: "???" trustedCerts: type: "array" items: type: "string" - description: "Trusted cert. ids" + description: "???" certs: type: "array" items: type: "string" - description: "Trusted cert. ids" + description: "???" type: "object" type: "object" description: "Webhook that will receive all internal Otoroshi events" @@ -2198,7 +3184,7 @@ spec: description: "Global maintenant mode" initWithNewEngine: type: "boolean" - description: "???" + description: "Was this instance init with new engine as default" letsEncryptSettings: description: "Let's encrypt (ACME) settings" properties: @@ -2338,9 +3324,8 @@ spec: type: "string" description: "Stop time of Snow Monkey each day" outageStrategy: - type: "object" - x-kubernetes-preserve-unknown-fields: true description: "" + type: "string" type: "object" scripts: description: "global plugins settings. will be deprecated soon" @@ -2448,6 +3433,9 @@ spec: type: "array" items: properties: + type: + type: "string" + description: "the kind of exporter" url: type: "string" description: "The URL where events are posted" @@ -2461,23 +3449,23 @@ spec: properties: mtls: type: "boolean" - description: "Enabled" + description: "???" loose: type: "boolean" - description: "Loose verification" + description: "???" trustAll: type: "boolean" - description: "Trust any certificate" + description: "???" trustedCerts: type: "array" items: type: "string" - description: "Trusted cert. ids" + description: "???" certs: type: "array" items: type: "string" - description: "Trusted cert. ids" + description: "???" type: "object" type: "object" description: "Webhook that will receive all Otoroshi alert events" @@ -2488,12 +3476,12 @@ spec: type: "array" items: type: "string" - description: "Whitelisted IP addresses" + description: "???" blacklist: type: "array" items: type: "string" - description: "Blacklisted IP addresses" + description: "???" type: "object" u2fLoginOnly: type: "boolean" @@ -2574,24 +3562,16 @@ spec: allowClientIdOnly: type: "boolean" description: "This apikey can be used juste with the client_id value" - location: + _loc: description: "The location of the apikey" properties: tenant: description: "Organization of the current entity" - properties: - rawValue: - type: "string" - description: "???" - type: "object" + type: "string" teams: type: "array" items: - properties: - rawValue: - type: "string" - description: "???" - type: "object" + type: "string" description: "Teams of the current entity" type: "object" restrictions: @@ -2603,42 +3583,42 @@ spec: properties: method: type: "string" - description: "Method of the http request" + description: "???" path: type: "string" - description: "Path of the http request" + description: "???" type: "object" - description: "Forbidden paths (return 403)" + description: "???" allowed: type: "array" items: properties: method: type: "string" - description: "Method of the http request" + description: "???" path: type: "string" - description: "Path of the http request" + description: "???" type: "object" - description: "Allowed paths" + description: "???" notFound: type: "array" items: properties: method: type: "string" - description: "Method of the http request" + description: "???" path: type: "string" - description: "Path of the http request" + description: "???" type: "object" - description: "Not found paths (return 404)" + description: "???" allowLast: type: "boolean" - description: "Evalute allowed paths after everything else" + description: "???" enabled: type: "boolean" - description: "Restrictions enabled" + description: "???" type: "object" tags: type: "array" @@ -2693,9 +3673,7 @@ spec: authorizedEntities: type: "array" items: - type: "object" - x-kubernetes-preserve-unknown-fields: true - description: "no-description" + type: "string" description: "The group/service ids (prefixed by group_ or service_\ \ on which the key is authorized" clientId: @@ -2772,11 +3750,7 @@ spec: description: "Entity description" tenant: description: "Entity organization" - properties: - rawValue: - type: "string" - description: "???" - type: "object" + type: "string" metadata: type: "object" additionalProperties: @@ -2784,11 +3758,7 @@ spec: description: "Entity metadata" id: description: "Entity id" - properties: - rawValue: - type: "string" - description: "???" - type: "object" + type: "string" --- apiVersion: "apiextensions.k8s.io/v1" kind: "CustomResourceDefinition" @@ -2886,9 +3856,8 @@ spec: type: "object" description: "Routing rules" clientAuth: - type: "object" - x-kubernetes-preserve-unknown-fields: true - description: "Use client authentication" + description: "Client authentication mode" + type: "string" interface: type: "string" description: "Network interface" @@ -2923,33 +3892,24 @@ spec: id: type: "string" description: "Entity id" - location: + _loc: description: "Entity location" properties: tenant: description: "Organization of the current entity" - properties: - rawValue: - type: "string" - description: "???" - type: "object" + type: "string" teams: type: "array" items: - properties: - rawValue: - type: "string" - description: "???" - type: "object" + type: "string" description: "Teams of the current entity" type: "object" name: type: "string" description: "Entity name" tls: - type: "object" - x-kubernetes-preserve-unknown-fields: true description: "TLS mode" + type: "string" --- apiVersion: "apiextensions.k8s.io/v1" kind: "CustomResourceDefinition" @@ -3003,16 +3963,15 @@ spec: type: "string" description: "The root path of the backend or the full rewrite path" health_check: - description: "Healthcheck config og the backend" + description: "???" type: "object" properties: enabled: type: "boolean" - description: "Whether or not healthcheck is enabled on the current\ - \ service descriptor" + description: "???" url: type: "string" - description: "The URL to check" + description: "???" timeout: type: "integer" format: "int32" @@ -3108,9 +4067,36 @@ spec: description: "Specify the factor to multiply the delay for each\ \ retry" proxy: - type: "object" - x-kubernetes-preserve-unknown-fields: true description: "Web proxy settings for http client" + type: "object" + properties: + host: + type: "string" + description: "The hostname of the proxy server." + port: + type: "string" + description: "The port of the proxy server." + protocol: + type: "string" + description: "The protocol of the proxy server. Use \"http\"\ + \ or \"https\". Defaults to \"http\" if not specified." + principal: + type: "string" + description: "The principal (aka username) of the credentials\ + \ for the proxy server." + password: + type: "string" + description: "The password for the credentials for the proxy\ + \ server." + ntlmDomain: + type: "string" + description: "The ntlm domain for the proxy server." + encoding: + type: "string" + description: "The realm's charset." + nonProxyHosts: + type: "string" + description: "The non proxied hosts" retries: type: "integer" format: "int32" @@ -3123,9 +4109,14 @@ spec: \ the circuit breaker" type: "object" load_balancing: - type: "object" - x-kubernetes-preserve-unknown-fields: true description: "Loadbalancing config og the backend" + properties: + type: + type: "string" + ratio: + type: "number" + format: "double" + type: "object" rewrite: type: "boolean" description: "Does the backend performs a full url rewrite ?" @@ -3141,9 +4132,50 @@ spec: type: "string" description: "Protocol for the target" predicate: - type: "object" - x-kubernetes-preserve-unknown-fields: true description: "Predicate to choose this target" + properties: + type: + type: "string" + description: "the kind of predicate" + dc: + type: "string" + description: "???" + positions: + type: "array" + items: + properties: + latitude: + type: "number" + format: "double" + description: "???" + longitude: + type: "number" + format: "double" + description: "???" + radius: + type: "number" + format: "double" + description: "???" + type: "object" + description: "???" + provider: + description: "null type" + type: "string" + nullable: true + dataCenter: + description: "null type" + type: "string" + nullable: true + rack: + type: "string" + description: "???" + region: + type: "string" + description: "???" + zone: + type: "string" + description: "???" + type: "object" tls_config: description: "TLS settings to contact this target" properties: @@ -3231,112 +4263,945 @@ spec: type: "object" spec: type: "object" - x-kubernetes-preserve-unknown-fields: true description: "???" ---- -apiVersion: "apiextensions.k8s.io/v1" -kind: "CustomResourceDefinition" -metadata: - name: "jwt-verifiers.proxy.otoroshi.io" - creationTimestamp: null -spec: - group: "proxy.otoroshi.io" - names: - kind: "JwtVerifier" - plural: "jwt-verifiers" - singular: "jwt-verifier" - scope: "Namespaced" - versions: - - name: "v1alpha1" - served: false - storage: false - deprecated: true - schema: - openAPIV3Schema: - x-kubernetes-preserve-unknown-fields: true - type: "object" - - name: "v1" - served: true - storage: true - deprecated: false - schema: - openAPIV3Schema: - type: "object" - description: "Otoroshi model for JWT token verifier" - properties: - apiVersion: - description: "APIVersion defines the versioned schema of this representation\ - \ of an object. Servers should convert recognized schemas to the latest\ - \ internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources" - type: "string" - kind: - description: "Kind is a string value representing the REST resource this\ - \ object represents. Servers may infer this from the endpoint the client\ - \ submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds" - type: "string" - metadata: - type: "object" - spec: - type: "object" - description: "Otoroshi model for JWT token verifier" properties: - id: - type: "string" - description: "Verifier id" - strict: - type: "boolean" - description: "Does it fail if JWT not found" - algoSettings: - type: "object" - x-kubernetes-preserve-unknown-fields: true - description: "Algo settings of the verifier" - name: + type: type: "string" - description: "Verifier name" - source: - type: "object" - x-kubernetes-preserve-unknown-fields: true - description: "Where to find the jwt token" - strategy: - type: "object" - x-kubernetes-preserve-unknown-fields: true - description: "The strategy of the verifier" + description: "the type of the module" desc: type: "string" - description: "Verifier description" - tags: - type: "array" + description: "???" + name: + type: "string" + description: "???" + clientSideSessionEnabled: + type: "boolean" + description: "???" + basicAuth: + type: "boolean" + description: "???" + tags: + type: "array" + items: + type: "string" + description: "???" + users: + type: "array" + items: + properties: + metadata: + type: "object" + description: "???" + password: + type: "string" + description: "???" + tags: + type: "array" + items: + type: "string" + description: "???" + email: + type: "string" + description: "???" + webauthn: + description: "???" + type: "object" + properties: + handle: + type: "string" + description: "???" + credentials: + type: "object" + additionalProperties: + type: "object" + description: "???" + rights: + description: "???" + properties: + rights: + type: "array" + items: + properties: + tenant: + description: "Access rights on organizations" + properties: + canWrite: + type: "boolean" + description: "Can this access right write data" + value: + type: "string" + description: "Access pattern" + canRead: + type: "boolean" + description: "Can this access right read data" + type: "object" + teams: + type: "array" + items: + properties: + canRead: + type: "boolean" + description: "Can this access right read data" + value: + type: "string" + description: "Access pattern" + canWrite: + type: "boolean" + description: "Can this access right write data" + type: "object" + description: "Access rights on teams" + type: "object" + description: "Access rights of a user" + type: "object" + name: + type: "string" + description: "???" + type: "object" + description: "???" + sessionMaxAge: + type: "integer" + format: "int32" + description: "???" + webauthn: + type: "boolean" + description: "???" + userValidators: + type: "array" + items: + properties: + path: + type: "string" + description: "???" + value: + type: "object" + description: "???" + error: + description: "null type" + type: "string" + nullable: true + type: "object" + description: "???" + id: + type: "string" + description: "???" + _loc: + description: "???" + properties: + tenant: + description: "Organization of the current entity" + type: "string" + teams: + type: "array" + items: + type: "string" + description: "Teams of the current entity" + type: "object" + metadata: + type: "object" + additionalProperties: + type: "string" + description: "???" + sessionCookieValues: + description: "???" + properties: + httpOnly: + type: "boolean" + description: "???" + secure: + type: "boolean" + description: "???" + type: "object" + extraMetadata: + type: "object" + description: "???" + rightsOverride: + type: "object" + additionalProperties: + properties: + rights: + type: "array" + items: + properties: + tenant: + description: "Access rights on organizations" + properties: + canWrite: + type: "boolean" + description: "Can this access right write data" + value: + type: "string" + description: "Access pattern" + canRead: + type: "boolean" + description: "Can this access right read data" + type: "object" + teams: + type: "array" + items: + properties: + canRead: + type: "boolean" + description: "Can this access right read data" + value: + type: "string" + description: "Access pattern" + canWrite: + type: "boolean" + description: "Can this access right write data" + type: "object" + description: "Access rights on teams" + type: "object" + description: "Access rights of a user" + type: "object" + description: "???" + clientId: + type: "string" + description: "???" + otoroshiRightsField: + type: "string" + description: "???" + scope: + type: "string" + description: "???" + accessTokenField: + type: "string" + description: "???" + superAdmins: + type: "boolean" + description: "???" + refreshTokens: + type: "boolean" + description: "???" + loginUrl: + type: "string" + description: "???" + apiKeyTagsField: + type: "string" + description: "???" + otoroshiDataField: + type: "string" + description: "???" + emailField: + type: "string" + description: "???" + mtlsConfig: + description: "???" + properties: + mtls: + type: "boolean" + description: "???" + loose: + type: "boolean" + description: "???" + trustAll: + type: "boolean" + description: "???" + trustedCerts: + type: "array" + items: + type: "string" + description: "???" + certs: + type: "array" + items: + type: "string" + description: "???" + type: "object" + tokenUrl: + type: "string" + description: "???" + useCookie: + type: "boolean" + description: "???" + pkce: + description: "???" + type: "object" + properties: + enabled: + type: "boolean" + description: "???" + algorithm: + type: "string" + description: "???" + authorizeUrl: + type: "string" + description: "???" + callbackUrl: + type: "string" + description: "???" + proxy: + description: "???" + type: "object" + properties: + host: + type: "string" + description: "The hostname of the proxy server." + port: + type: "string" + description: "The port of the proxy server." + protocol: + type: "string" + description: "The protocol of the proxy server. Use \"http\"\ + \ or \"https\". Defaults to \"http\" if not specified." + principal: + type: "string" + description: "The principal (aka username) of the credentials\ + \ for the proxy server." + password: + type: "string" + description: "The password for the credentials for the proxy server." + ntlmDomain: + type: "string" + description: "The ntlm domain for the proxy server." + encoding: + type: "string" + description: "The realm's charset." + nonProxyHosts: + type: "string" + description: "The non proxied hosts" + apiKeyMetaField: + type: "string" + description: "???" + clientSecret: + type: "string" + description: "???" + useJson: + type: "boolean" + description: "???" + oidConfig: + description: "null type" + type: "string" + nullable: true + claims: + type: "string" + description: "???" + noWildcardRedirectURI: + type: "boolean" + description: "???" + nameField: + type: "string" + description: "???" + introspectionUrl: + type: "string" + description: "???" + logoutUrl: + type: "string" + description: "???" + dataOverride: + type: "object" + additionalProperties: + type: "object" + description: "???" + userInfoUrl: + type: "string" + description: "???" + jwtVerifier: + description: "???" + type: "object" + properties: + type: + type: "string" + description: "the kind of algosettings" + size: + type: "integer" + format: "int32" + description: "SHA function size" + publicKey: + type: "string" + description: "Public key (for verification)" + privateKey: + description: "null type" + type: "string" + nullable: true + certId: + type: "string" + description: "Certificate id" + secret: + type: "string" + description: "HMAC secret" + base64: + type: "boolean" + description: "The secret is base64 encoded" + url: + type: "string" + description: "JWKS url" + tlsConfig: + description: "TLS config" + properties: + mtls: + type: "boolean" + description: "???" + loose: + type: "boolean" + description: "???" + trustAll: + type: "boolean" + description: "???" + trustedCerts: + type: "array" + items: + type: "string" + description: "???" + certs: + type: "array" + items: + type: "string" + description: "???" + type: "object" + kty: + type: "string" + description: "Key type" + proxy: + description: "Web proxy for http client" + type: "object" + properties: + host: + type: "string" + description: "The hostname of the proxy server." + port: + type: "string" + description: "The port of the proxy server." + protocol: + type: "string" + description: "The protocol of the proxy server. Use \"http\"\ + \ or \"https\". Defaults to \"http\" if not specified." + principal: + type: "string" + description: "The principal (aka username) of the credentials\ + \ for the proxy server." + password: + type: "string" + description: "The password for the credentials for the proxy\ + \ server." + ntlmDomain: + type: "string" + description: "The ntlm domain for the proxy server." + encoding: + type: "string" + description: "The realm's charset." + nonProxyHosts: + type: "string" + description: "The non proxied hosts" + headers: + type: "object" + additionalProperties: + type: "string" + description: "Http header when fetching JWKS" + ttl: + type: "number" + description: "Cache ttl" + timeout: + type: "number" + description: "Timeout when fetching JWKS" + onlyExposedCerts: + type: "boolean" + description: "Use only exposed certs" + readProfileFromToken: + type: "boolean" + description: "???" + allowEmptyPassword: + type: "boolean" + description: "???" + groupFilters: + type: "array" + items: + properties: + group: + type: "string" + description: "???" + tenant: + description: "???" + properties: + canWrite: + type: "boolean" + description: "Can this access right write data" + value: + type: "string" + description: "Access pattern" + canRead: + type: "boolean" + description: "Can this access right read data" + type: "object" + team: + type: "string" + description: "???" + type: "object" + description: "???" + serverUrls: + type: "array" + items: + type: "string" + description: "???" + searchBase: + type: "string" + description: "???" + groupRights: + type: "object" + additionalProperties: + properties: + userRights: + description: "???" + properties: + rights: + type: "array" + items: + properties: + tenant: + description: "Access rights on organizations" + properties: + canWrite: + type: "boolean" + description: "Can this access right write data" + value: + type: "string" + description: "Access pattern" + canRead: + type: "boolean" + description: "Can this access right read data" + type: "object" + teams: + type: "array" + items: + properties: + canRead: + type: "boolean" + description: "Can this access right read data" + value: + type: "string" + description: "Access pattern" + canWrite: + type: "boolean" + description: "Can this access right write data" + type: "object" + description: "Access rights on teams" + type: "object" + description: "Access rights of a user" + type: "object" + users: + type: "array" + items: + type: "string" + description: "???" + type: "object" + description: "???" + metadataField: + description: "null type" + type: "string" + nullable: true + searchFilter: + type: "string" + description: "???" + adminUsername: + description: "null type" + type: "string" + nullable: true + extractProfileFilter: + type: "array" + items: + type: "string" + description: "???" + userBase: + description: "null type" + type: "string" + nullable: true + adminPassword: + description: "null type" + type: "string" + nullable: true + extractProfileFilterNot: + type: "array" + items: + type: "string" + description: "???" + extractProfile: + type: "boolean" + description: "???" + accessTokenURL: + type: "string" + description: "???" + authorizeURL: + type: "string" + description: "???" + consumerKey: + type: "string" + description: "???" + callbackURL: + type: "string" + description: "???" + profileURL: + type: "string" + description: "???" + httpMethod: + type: "object" + x-kubernetes-preserve-unknown-fields: true + description: "???" + requestTokenURL: + type: "string" + description: "???" + consumerSecret: + type: "string" + description: "???" +--- +apiVersion: "apiextensions.k8s.io/v1" +kind: "CustomResourceDefinition" +metadata: + name: "jwt-verifiers.proxy.otoroshi.io" + creationTimestamp: null +spec: + group: "proxy.otoroshi.io" + names: + kind: "JwtVerifier" + plural: "jwt-verifiers" + singular: "jwt-verifier" + scope: "Namespaced" + versions: + - name: "v1alpha1" + served: false + storage: false + deprecated: true + schema: + openAPIV3Schema: + x-kubernetes-preserve-unknown-fields: true + type: "object" + - name: "v1" + served: true + storage: true + deprecated: false + schema: + openAPIV3Schema: + type: "object" + description: "Otoroshi model for JWT token verifier" + properties: + apiVersion: + description: "APIVersion defines the versioned schema of this representation\ + \ of an object. Servers should convert recognized schemas to the latest\ + \ internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources" + type: "string" + kind: + description: "Kind is a string value representing the REST resource this\ + \ object represents. Servers may infer this from the endpoint the client\ + \ submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds" + type: "string" + metadata: + type: "object" + spec: + type: "object" + description: "Otoroshi model for JWT token verifier" + properties: + type: + type: "string" + description: "the kind of jwt verifier" + desc: + type: "string" + description: "Verifier description" + name: + type: "string" + description: "Verifier name" + strict: + type: "boolean" + description: "Does it fail if JWT not found" + source: + description: "Where to find the jwt token" + type: "object" + properties: + type: + type: "string" + description: "the kind of location" + name: + type: "string" + description: "Query param name" + remove: + type: "string" + description: "Remove from value" + algoSettings: + description: "Algo settings of the verifier" + type: "object" + properties: + type: + type: "string" + description: "the kind of algosettings" + size: + type: "integer" + format: "int32" + description: "SHA function size" + publicKey: + type: "string" + description: "Public key (for verification)" + privateKey: + description: "null type" + type: "string" + nullable: true + certId: + type: "string" + description: "Certificate id" + secret: + type: "string" + description: "HMAC secret" + base64: + type: "boolean" + description: "The secret is base64 encoded" + url: + type: "string" + description: "JWKS url" + tlsConfig: + description: "TLS config" + properties: + mtls: + type: "boolean" + description: "???" + loose: + type: "boolean" + description: "???" + trustAll: + type: "boolean" + description: "???" + trustedCerts: + type: "array" + items: + type: "string" + description: "???" + certs: + type: "array" + items: + type: "string" + description: "???" + type: "object" + kty: + type: "string" + description: "Key type" + proxy: + description: "Web proxy for http client" + type: "object" + properties: + host: + type: "string" + description: "The hostname of the proxy server." + port: + type: "string" + description: "The port of the proxy server." + protocol: + type: "string" + description: "The protocol of the proxy server. Use \"http\"\ + \ or \"https\". Defaults to \"http\" if not specified." + principal: + type: "string" + description: "The principal (aka username) of the credentials\ + \ for the proxy server." + password: + type: "string" + description: "The password for the credentials for the proxy\ + \ server." + ntlmDomain: + type: "string" + description: "The ntlm domain for the proxy server." + encoding: + type: "string" + description: "The realm's charset." + nonProxyHosts: + type: "string" + description: "The non proxied hosts" + headers: + type: "object" + additionalProperties: + type: "string" + description: "Http header when fetching JWKS" + ttl: + type: "number" + description: "Cache ttl" + timeout: + type: "number" + description: "Timeout when fetching JWKS" + onlyExposedCerts: + type: "boolean" + description: "Use only exposed certs" + tags: + type: "array" items: type: "string" description: "Entity tags" - location: + id: + type: "string" + description: "Verifier id" + _loc: description: "Entity location" properties: tenant: description: "Organization of the current entity" - properties: - rawValue: - type: "string" - description: "???" - type: "object" + type: "string" teams: type: "array" items: - properties: - rawValue: - type: "string" - description: "???" - type: "object" + type: "string" description: "Teams of the current entity" type: "object" + strategy: + description: "The strategy of the verifier" + type: "object" + properties: + type: + type: "string" + description: "the kind of strategy" + strict: + type: "boolean" + description: "If the token already exists in the request, then\ + \ fail" + token: + type: "object" + description: "The default token" + verificationSettings: + description: "Verification settings" + properties: + fields: + type: "object" + additionalProperties: + type: "string" + description: "Fields validation" + arrayFields: + type: "object" + additionalProperties: + type: "string" + description: "Fields array validation" + type: "object" + algoSettings: + description: "Algorithm settings for re-signing token" + type: "object" + properties: + type: + type: "string" + description: "the kind of algosettings" + size: + type: "integer" + format: "int32" + description: "SHA function size" + publicKey: + type: "string" + description: "Public key (for verification)" + privateKey: + description: "null type" + type: "string" + nullable: true + certId: + type: "string" + description: "Certificate id" + secret: + type: "string" + description: "HMAC secret" + base64: + type: "boolean" + description: "The secret is base64 encoded" + url: + type: "string" + description: "JWKS url" + tlsConfig: + description: "TLS config" + properties: + mtls: + type: "boolean" + description: "???" + loose: + type: "boolean" + description: "???" + trustAll: + type: "boolean" + description: "???" + trustedCerts: + type: "array" + items: + type: "string" + description: "???" + certs: + type: "array" + items: + type: "string" + description: "???" + type: "object" + kty: + type: "string" + description: "Key type" + proxy: + description: "Web proxy for http client" + type: "object" + properties: + host: + type: "string" + description: "The hostname of the proxy server." + port: + type: "string" + description: "The port of the proxy server." + protocol: + type: "string" + description: "The protocol of the proxy server. Use \"\ + http\" or \"https\". Defaults to \"http\" if not specified." + principal: + type: "string" + description: "The principal (aka username) of the credentials\ + \ for the proxy server." + password: + type: "string" + description: "The password for the credentials for the\ + \ proxy server." + ntlmDomain: + type: "string" + description: "The ntlm domain for the proxy server." + encoding: + type: "string" + description: "The realm's charset." + nonProxyHosts: + type: "string" + description: "The non proxied hosts" + headers: + type: "object" + additionalProperties: + type: "string" + description: "Http header when fetching JWKS" + ttl: + type: "number" + description: "Cache ttl" + timeout: + type: "number" + description: "Timeout when fetching JWKS" + onlyExposedCerts: + type: "boolean" + description: "Use only exposed certs" + transformSettings: + description: "Transformation settings" + properties: + location: + description: "Location of the token" + properties: + type: + type: "string" + description: "the kind of location" + name: + type: "string" + description: "Query param name" + remove: + type: "string" + description: "Remove from value" + type: "object" + mappingSettings: + description: "Token mapping settings" + properties: + map: + type: "object" + additionalProperties: + type: "string" + description: "Change values" + values: + type: "object" + description: "Add values" + remove: + type: "array" + items: + type: "string" + description: "Remove some token claims" + type: "object" + type: "object" metadata: type: "object" additionalProperties: type: "string" description: "Entity metadata" - type: - type: "string" - description: "the kind of jwt verifier" --- apiVersion: "apiextensions.k8s.io/v1" kind: "CustomResourceDefinition" @@ -3366,8 +5231,7 @@ spec: schema: openAPIV3Schema: type: "object" - description: "Module to export otoroshi specific events to whatever destination\ - \ you want" + description: "Data exporter settings" properties: apiVersion: description: "APIVersion defines the versioned schema of this representation\ @@ -3383,51 +5247,41 @@ spec: type: "object" spec: type: "object" - description: "Module to export otoroshi specific events to whatever destination\ - \ you want" + description: "Data exporter settings" properties: desc: type: "string" description: "Description" - location: - description: "location" + _loc: + description: "Entity location" properties: tenant: description: "Organization of the current entity" - properties: - rawValue: - type: "string" - description: "???" - type: "object" + type: "string" teams: type: "array" items: - properties: - rawValue: - type: "string" - description: "???" - type: "object" + type: "string" description: "Teams of the current entity" type: "object" bufferSize: type: "integer" format: "int32" - description: "buffer size" + description: "Number of events in buffer" jsonWorkers: type: "integer" format: "int32" - description: "nb workers" + description: "Number of workers that transform events" groupDuration: type: "number" - description: "duration" + description: "The max duration before sending group" groupSize: type: "integer" format: "int32" - description: "Group size" + description: "The max size of events group before sending" type: - type: "object" - x-kubernetes-preserve-unknown-fields: true description: "Type of data exporter" + type: "string" tags: type: "array" items: @@ -3436,41 +5290,226 @@ spec: sendWorkers: type: "integer" format: "int32" - description: "send workers" + description: "Number of workers that sends events" id: type: "string" - description: "Id" + description: "Id of the exporter" name: type: "string" - description: "Name" + description: "Entity name" metadata: type: "object" additionalProperties: type: "string" - description: "Metadata" + description: "Entity metadata" config: + description: "Exporter config" + properties: + type: + type: "string" + description: "the kind of exporter" + sendEvents: + type: "boolean" + description: "Send events to it, or just connect" + truststore: + description: "null type" + type: "string" + nullable: true + hostValidation: + type: "boolean" + description: "Enabled TLS hostname validation" + servers: + type: "array" + items: + type: "string" + description: "URLs of the kafka servers" + mtlsConfig: + description: "TLS config when calling webhook" + properties: + mtls: + type: "boolean" + description: "???" + loose: + type: "boolean" + description: "???" + trustAll: + type: "boolean" + description: "???" + trustedCerts: + type: "array" + items: + type: "string" + description: "???" + certs: + type: "array" + items: + type: "string" + description: "???" + type: "object" + securityProtocol: + type: "string" + description: "Used security protocol" + keystore: + description: "null type" + type: "string" + nullable: true + topic: + type: "string" + description: "Pulsar topic" + keyPass: + description: "null type" + type: "string" + nullable: true + saslConfig: + description: "SASL configuration" + type: "object" + properties: + username: + type: "string" + description: "SASL username" + password: + type: "string" + description: "SASL password" + mechanism: + type: "string" + description: "SASL login mechanism" + tlsTrustCertsFilePath: + description: "null type" + type: "string" + nullable: true + tenant: + type: "string" + description: "Pulsar tenant" + uri: + type: "string" + description: "Pulsar access uri" + namespace: + type: "string" + description: "Pulsar namespace" + sendWorkers: + type: "integer" + format: "int32" + description: "???" + applyTemplate: + type: "boolean" + description: "Enable template creation/update" + uris: + type: "array" + items: + type: "string" + description: "???" + version: + description: "null type" + type: "string" + nullable: true + maxBulkSize: + type: "integer" + format: "int32" + description: "???" + headers: + type: "object" + additionalProperties: + type: "string" + description: "Sender headers" + indexSettings: + description: "Indexation settings" + properties: + clientSide: + type: "boolean" + description: "Enable index splitting on client side" + numberOfShards: + type: "integer" + format: "int32" + description: "???" + numberOfReplicas: + type: "integer" + format: "int32" + description: "???" + interval: + type: "string" + x-kubernetes-preserve-unknown-fields: true + description: "Index splitting interval" + type: "object" + user: + description: "null type" + type: "string" + nullable: true + index: + description: "null type" + type: "string" + nullable: true + password: + description: "null type" + type: "string" + nullable: true + ref: + type: "string" + description: "Reference to an exporter" + config: + type: "object" + description: "Exporter config." + path: + type: "string" + description: "File path" + maxFileSize: + type: "integer" + format: "int64" + description: "Max file size for rolling" + labels: + type: "object" + additionalProperties: + type: "string" + description: "Exported labels for prometheus" + url: + type: "string" + description: "Sender URL" + to: + type: "array" + items: + properties: + name: + type: "string" + description: "Destination name" + email: + type: "string" + description: "Email address" + type: "object" + description: "Destination email address" + eu: + type: "boolean" + description: "European tenant" + apiKey: + type: "string" + description: "Sendgrid apikey" + domain: + type: "string" + description: "Mailgun domain" + apiKeyPublic: + type: "string" + description: "Public key" + apiKeyPrivate: + type: "string" + description: "Private key" type: "object" - x-kubernetes-preserve-unknown-fields: true - description: "Data Exporter config" projection: type: "object" - description: "projection" + description: "Event projection" enabled: type: "boolean" - description: "Boolean" + description: "Is the exporter enabled" filtering: - description: "filtering" + description: "Filtering options" properties: include: type: "array" items: type: "object" - description: "Exclude the events matching one of those filters" + description: "Event include filter" exclude: type: "array" items: type: "object" - description: "Include the events matching one of those filters" + description: "Event exclude filter" type: "object" --- apiVersion: "apiextensions.k8s.io/v1" @@ -3558,11 +5597,7 @@ spec: domains: type: "array" items: - properties: - raw: - type: "string" - description: "the raw value of the domain and path" - type: "object" + type: "string" description: "The domain and path that will be matched" methods: type: "array" @@ -3576,24 +5611,16 @@ spec: type: "boolean" description: "Is path stripped from backend request" type: "object" - location: + _loc: description: "The location of the route" properties: tenant: description: "Organization of the current entity" - properties: - rawValue: - type: "string" - description: "???" - type: "object" + type: "string" teams: type: "array" items: - properties: - rawValue: - type: "string" - description: "???" - type: "object" + type: "string" description: "Teams of the current entity" type: "object" tags: @@ -3603,7 +5630,7 @@ spec: description: "The tags of the route" capture: type: "boolean" - description: "???" + description: "Capture http traffic" groups: type: "array" items: @@ -3624,16 +5651,15 @@ spec: description: "The root path of the backend or the full rewrite\ \ path" health_check: - description: "Healthcheck config og the backend" + description: "???" type: "object" properties: enabled: type: "boolean" - description: "Whether or not healthcheck is enabled on the\ - \ current service descriptor" + description: "???" url: type: "string" - description: "The URL to check" + description: "???" timeout: type: "integer" format: "int32" @@ -3729,9 +5755,36 @@ spec: description: "Specify the factor to multiply the delay for\ \ each retry" proxy: - type: "object" - x-kubernetes-preserve-unknown-fields: true description: "Web proxy settings for http client" + type: "object" + properties: + host: + type: "string" + description: "The hostname of the proxy server." + port: + type: "string" + description: "The port of the proxy server." + protocol: + type: "string" + description: "The protocol of the proxy server. Use \"\ + http\" or \"https\". Defaults to \"http\" if not specified." + principal: + type: "string" + description: "The principal (aka username) of the credentials\ + \ for the proxy server." + password: + type: "string" + description: "The password for the credentials for the\ + \ proxy server." + ntlmDomain: + type: "string" + description: "The ntlm domain for the proxy server." + encoding: + type: "string" + description: "The realm's charset." + nonProxyHosts: + type: "string" + description: "The non proxied hosts" retries: type: "integer" format: "int32" @@ -3745,9 +5798,14 @@ spec: \ the circuit breaker" type: "object" load_balancing: - type: "object" - x-kubernetes-preserve-unknown-fields: true description: "Loadbalancing config og the backend" + properties: + type: + type: "string" + ratio: + type: "number" + format: "double" + type: "object" rewrite: type: "boolean" description: "Does the backend performs a full url rewrite ?" @@ -3763,9 +5821,50 @@ spec: type: "string" description: "Protocol for the target" predicate: - type: "object" - x-kubernetes-preserve-unknown-fields: true description: "Predicate to choose this target" + properties: + type: + type: "string" + description: "the kind of predicate" + dc: + type: "string" + description: "???" + positions: + type: "array" + items: + properties: + latitude: + type: "number" + format: "double" + description: "???" + longitude: + type: "number" + format: "double" + description: "???" + radius: + type: "number" + format: "double" + description: "???" + type: "object" + description: "???" + provider: + description: "null type" + type: "string" + nullable: true + dataCenter: + description: "null type" + type: "string" + nullable: true + rack: + type: "string" + description: "???" + region: + type: "string" + description: "???" + zone: + type: "string" + description: "???" + type: "object" tls_config: description: "TLS settings to contact this target" properties: @@ -3856,35 +5955,32 @@ spec: type: "object" description: "An otoroshi admin user" properties: + type: + description: "Admin kind" + type: "string" username: type: "string" description: "User username" - password: + tags: + type: "array" + items: + type: "string" + description: "Entity tags" + label: type: "string" - description: "User password (bcrypt hashed)" - location: + description: "User label" + _loc: description: "Entity location" properties: tenant: description: "Organization of the current entity" - properties: - rawValue: - type: "string" - description: "???" - type: "object" + type: "string" teams: type: "array" items: - properties: - rawValue: - type: "string" - description: "???" - type: "object" + type: "string" description: "Teams of the current entity" type: "object" - label: - type: "string" - description: "User label" createdAt: type: "number" description: "User creation date" @@ -3893,11 +5989,6 @@ spec: additionalProperties: type: "string" description: "Entity metadata" - tags: - type: "array" - items: - type: "string" - description: "Entity tags" rights: description: "User rights" properties: @@ -3936,10 +6027,9 @@ spec: type: "object" description: "Access rights of a user" type: "object" - type: - type: "object" - x-kubernetes-preserve-unknown-fields: true - description: "Type of user" + password: + type: "string" + description: "User password (bcrypt hashed)" --- apiVersion: "apiextensions.k8s.io/v1" kind: "CustomResourceDefinition" @@ -4001,24 +6091,16 @@ spec: items: type: "string" description: "Entity tags" - location: + _loc: description: "Entity location" properties: tenant: description: "Organization of the current entity" - properties: - rawValue: - type: "string" - description: "???" - type: "object" + type: "string" teams: type: "array" items: - properties: - rawValue: - type: "string" - description: "???" - type: "object" + type: "string" description: "Teams of the current entity" type: "object" desc: @@ -4031,6 +6113,5 @@ spec: type: "string" description: "The id of the script" type: - type: "object" - x-kubernetes-preserve-unknown-fields: true - description: "Plugin type" + description: "Plugin kind" + type: "string" diff --git a/manual/src/main/paradox/code/openapi.json b/manual/src/main/paradox/code/openapi.json index a28e9a2af1..a4b4964f23 100644 --- a/manual/src/main/paradox/code/openapi.json +++ b/manual/src/main/paradox/code/openapi.json @@ -21631,7 +21631,13 @@ "description" : "???" }, "singleLogoutUrl" : { - "type" : "string", + "oneOf" : [ { + "type" : "string", + "nullable" : true, + "description" : "null type" + }, { + "type" : "string" + } ], "description" : "???" }, "id" : { diff --git a/otoroshi/app/auth/saml/SAMLClient.scala b/otoroshi/app/auth/saml/SAMLClient.scala index fc848654dc..bb5009430a 100644 --- a/otoroshi/app/auth/saml/SAMLClient.scala +++ b/otoroshi/app/auth/saml/SAMLClient.scala @@ -20,11 +20,7 @@ import org.opensaml.security.x509.BasicX509Credential import org.opensaml.xmlsec.SignatureSigningParameters import org.opensaml.xmlsec.encryption.support.InlineEncryptedKeyResolver import org.opensaml.xmlsec.keyinfo.KeyInfoCredentialResolver -import org.opensaml.xmlsec.keyinfo.impl.{ - ChainingKeyInfoCredentialResolver, - StaticKeyInfoCredentialResolver, - X509KeyInfoGeneratorFactory -} +import org.opensaml.xmlsec.keyinfo.impl.{ChainingKeyInfoCredentialResolver, StaticKeyInfoCredentialResolver, X509KeyInfoGeneratorFactory} import org.opensaml.xmlsec.signature.Signature import org.opensaml.xmlsec.signature.impl.SignatureBuilder import org.opensaml.xmlsec.signature.support.{SignatureConstants, SignatureException, SignatureSupport} @@ -39,9 +35,9 @@ import otoroshi.ssl.{DynamicSSLEngineProvider, PemHeaders} import otoroshi.utils.JsonPathValidator import otoroshi.utils.syntax.implicits._ import play.api.Logger -import play.api.libs.json.{Format, JsArray, JsError, JsObject, JsString, JsSuccess, JsValue, Json} +import play.api.libs.json.{Format, JsArray, JsError, JsNull, JsObject, JsString, JsSuccess, JsValue, Json} import play.api.mvc.Results.{BadRequest, Ok, Redirect} -import play.api.mvc.{AnyContent, Request, RequestHeader, Result} +import play.api.mvc.{AnyContent, Request, RequestHeader, Result, Results} import play.twirl.api.TwirlHelperImports.twirlJavaCollectionToScala import java.io.{ByteArrayInputStream, InputStreamReader, Reader, StringWriter, Writer} @@ -106,15 +102,19 @@ case class SAMLModule(authConfig: SamlAuthModuleConfig) extends AuthModule { )(implicit ec: ExecutionContext, env: Env): Future[Either[Result, Option[String]]] = { getLogoutRequest(env, authConfig, user.map(_.metadata.getOrElse("saml-id", ""))).map { case Left(_) => Right(None) - case Right(encoded) => - if (authConfig.singleLogoutProtocolBinding == SAMLProtocolBinding.Post) - Left(Ok(otoroshi.views.html.oto.saml(encoded, authConfig.singleLogoutUrl, env))) - else { - env.Ws - .url(s"${authConfig.singleLogoutUrl}?SAMLRequest=${URLEncoder.encode(encoded, "UTF-8")}") - .get() - Right(None) + case Right(encoded) => authConfig.singleLogoutUrl match { + case None => Left(Results.InternalServerError(Json.obj("error" -> "no logout url configured !"))) + case Some(singleLogoutUrl) => { + if (authConfig.singleLogoutProtocolBinding == SAMLProtocolBinding.Post) + Left(Ok(otoroshi.views.html.oto.saml(encoded, singleLogoutUrl, env))) + else { + env.Ws + .url(s"${singleLogoutUrl}?SAMLRequest=${URLEncoder.encode(encoded, "UTF-8")}") + .get() + Right(None) + } } + } } } @@ -209,15 +209,19 @@ case class SAMLModule(authConfig: SamlAuthModuleConfig) extends AuthModule { getLogoutRequest(env, authConfig, Some(user.metadata.getOrElse("saml-id", ""))).map { case Left(_) => Right(None) - case Right(encoded) => - if (authConfig.singleLogoutProtocolBinding == SAMLProtocolBinding.Post) - Left(Ok(otoroshi.views.html.oto.saml(encoded, authConfig.singleLogoutUrl, env))) - else { - env.Ws - .url(s"${authConfig.singleLogoutUrl}?SAMLRequest=${URLEncoder.encode(encoded, "UTF-8")}") - .get() - Right(None) + case Right(encoded) => authConfig.singleLogoutUrl match { + case None => Left(Results.InternalServerError(Json.obj("error" -> "no logout url configured !"))) + case Some(singleLogoutUrl) => { + if (authConfig.singleLogoutProtocolBinding == SAMLProtocolBinding.Post) + Left(Ok(otoroshi.views.html.oto.saml(encoded, singleLogoutUrl, env))) + else { + env.Ws + .url(s"${singleLogoutUrl}?SAMLRequest=${URLEncoder.encode(encoded, "UTF-8")}") + .get() + Right(None) + } } + } } } @@ -319,7 +323,7 @@ object SamlAuthModuleConfig extends FromJson[AuthModuleConfig] { desc = (json \ "desc").asOpt[String].getOrElse("--"), sessionMaxAge = (json \ "sessionMaxAge").asOpt[Int].getOrElse(86400), singleSignOnUrl = (json \ "singleSignOnUrl").as[String], - singleLogoutUrl = (json \ "singleLogoutUrl").as[String], + singleLogoutUrl = (json \ "singleLogoutUrl").asOpt[String].filter(_.nonEmpty), credentials = (json \ "credentials").as[SAMLCredentials](SAMLCredentials.fmt), tags = (json \ "tags").asOpt[Seq[String]].getOrElse(Seq.empty[String]), metadata = (json \ "metadata").asOpt[Map[String, String]].getOrElse(Map.empty), @@ -401,8 +405,8 @@ object SamlAuthModuleConfig extends FromJson[AuthModuleConfig] { else { if (idpssoDescriptor.getSingleSignOnServices.isEmpty) Left("Cannot find SSO binding in metadata") - else if (idpssoDescriptor.getSingleLogoutServices.isEmpty) - Left("Cannot find Single Logout Service in metadata") + // else if (idpssoDescriptor.getSingleLogoutServices.isEmpty) + // Left("Cannot find Single Logout Service in metadata") else { Right( SamlAuthModuleConfig( @@ -410,7 +414,7 @@ object SamlAuthModuleConfig extends FromJson[AuthModuleConfig] { name = "SAML Module", desc = "SAML Module", singleSignOnUrl = idpssoDescriptor.getSingleSignOnServices.get(0).getLocation, - singleLogoutUrl = idpssoDescriptor.getSingleLogoutServices.get(0).getLocation, + singleLogoutUrl = Try(idpssoDescriptor.getSingleLogoutServices.get(0).getLocation).filter(_ != null).toOption, issuer = entityDescriptor.getEntityID, ssoProtocolBinding = SAMLProtocolBinding(idpssoDescriptor.getSingleSignOnServices.get(0).getBinding), singleLogoutProtocolBinding = @@ -669,7 +673,7 @@ case class SamlAuthModuleConfig( sessionMaxAge: Int = 86400, userValidators: Seq[JsonPathValidator] = Seq.empty, singleSignOnUrl: String, - singleLogoutUrl: String, + singleLogoutUrl: Option[String], ssoProtocolBinding: SAMLProtocolBinding = SAMLProtocolBinding.Redirect, singleLogoutProtocolBinding: SAMLProtocolBinding = SAMLProtocolBinding.Redirect, credentials: SAMLCredentials = SAMLCredentials(Credential(), Credential()), @@ -711,7 +715,7 @@ case class SamlAuthModuleConfig( "clientSideSessionEnabled" -> this.clientSideSessionEnabled, "userValidators" -> JsArray(userValidators.map(_.json)), "singleSignOnUrl" -> this.singleSignOnUrl, - "singleLogoutUrl" -> this.singleLogoutUrl, + "singleLogoutUrl" -> this.singleLogoutUrl.map(JsString.apply).getOrElse(JsNull).asValue, "credentials" -> SAMLCredentials.fmt.writes(this.credentials), "tags" -> JsArray(tags.map(JsString.apply)), "metadata" -> this.metadata, @@ -748,7 +752,7 @@ object SAMLModule { tags = Seq.empty, metadata = Map.empty, singleSignOnUrl = "", - singleLogoutUrl = "", + singleLogoutUrl = None, issuer = "", sessionCookieValues = SessionCookieValues(), clientSideSessionEnabled = true diff --git a/otoroshi/app/controllers/BackOfficeController.scala b/otoroshi/app/controllers/BackOfficeController.scala index 3a1dc3a9ae..80196dee9d 100644 --- a/otoroshi/app/controllers/BackOfficeController.scala +++ b/otoroshi/app/controllers/BackOfficeController.scala @@ -1061,43 +1061,40 @@ class BackOfficeController( } def fetchSAMLConfiguration() = BackOfficeActionAuth.async(parse.json) { ctx => - { - import scala.xml.Elem - import scala.xml.XML._ - - Try { - val xmlContent: Either[String, Elem] = (ctx.request.body \ "url").asOpt[String] match { - case Some(url) => Right(load(url)) - case None => - (ctx.request.body \ "xml").asOpt[String] match { - case Some(content) => Right(loadString(content)) - case None => Left("Missing body content") - } - } + import scala.xml.Elem + import scala.xml.XML._ + Try { + val xmlContent: Either[String, Elem] = (ctx.request.body \ "url").asOpt[String] match { + case Some(url) => Right(load(url)) + case None => + (ctx.request.body \ "xml").asOpt[String] match { + case Some(content) => Right(loadString(content)) + case None => Left("Missing body content") + } + } - xmlContent match { - case Left(err) => FastFuture.successful(BadRequest(err)) - case Right(xmlContent) => - var metadata = (xmlContent \\ "EntitiesDescriptor").toString + xmlContent match { + case Left(err) => FastFuture.successful(BadRequest(err)) + case Right(xmlContent) => + var metadata = (xmlContent \\ "EntitiesDescriptor").toString - if (metadata.isEmpty) - metadata = xmlContent.toString + if (metadata.isEmpty) + metadata = xmlContent.toString - SamlAuthModuleConfig.fromDescriptor(metadata) match { - case Left(err) => FastFuture.successful(BadRequest(err)) - case Right(config) => FastFuture.successful(Ok(SamlAuthModuleConfig._fmt.writes(config))) - } - } - } recover { case e: Throwable => - FastFuture.successful( - BadRequest( - Json.obj( - "error" -> e.getMessage - ) + SamlAuthModuleConfig.fromDescriptor(metadata) match { + case Left(err) => FastFuture.successful(BadRequest(err)) + case Right(config) => FastFuture.successful(Ok(SamlAuthModuleConfig._fmt.writes(config))) + } + } + } recover { case e: Throwable => + FastFuture.successful( + BadRequest( + Json.obj( + "error" -> e.getMessage ) ) - } get - } + ) + } get } def fetchBodiesFor(serviceId: String, requestId: String) = diff --git a/otoroshi/conf/schemas/openapi-cfg.json b/otoroshi/conf/schemas/openapi-cfg.json index 7737aaa2a2..ee0c3a609c 100644 --- a/otoroshi/conf/schemas/openapi-cfg.json +++ b/otoroshi/conf/schemas/openapi-cfg.json @@ -634,7 +634,7 @@ "entity_description.otoroshi.wasm.WasmDataRights": "???", "entity_description.otoroshi.wasm.WasmSource": "???", "entity_description.otoroshi.wasm.WasmSourceKind": "???", - "entity_description.otoroshi.wasm.WasmVmLifetime": "???", + "entity_description.otoroshi.wasm.WasmVmKillOptions": "???", "entity_description.otoroshi.wasm.proxywasm.CorazaWafConfig": "???", "operations.otoroshi.controllers.PrivateAppsController.registerSession_privateapps": "Registers a private app session", "operations.otoroshi.controllers.PrivateAppsController.sendSelfUpdateLink_privateapps": "Send an email to a user to update its own settings", @@ -2983,7 +2983,7 @@ "otoroshi.next.plugins.WasmAccessValidator.config": "???", "otoroshi.next.plugins.WasmAccessValidator.functionName": "???", "otoroshi.next.plugins.WasmAccessValidator.instances": "???", - "otoroshi.next.plugins.WasmAccessValidator.lifetime": "???", + "otoroshi.next.plugins.WasmAccessValidator.killOptions": "???", "otoroshi.next.plugins.WasmAccessValidator.memoryPages": "???", "otoroshi.next.plugins.WasmAccessValidator.opa": "???", "otoroshi.next.plugins.WasmAccessValidator.source": "???", @@ -2994,7 +2994,7 @@ "otoroshi.next.plugins.WasmBackend.config": "???", "otoroshi.next.plugins.WasmBackend.functionName": "???", "otoroshi.next.plugins.WasmBackend.instances": "???", - "otoroshi.next.plugins.WasmBackend.lifetime": "???", + "otoroshi.next.plugins.WasmBackend.killOptions": "???", "otoroshi.next.plugins.WasmBackend.memoryPages": "???", "otoroshi.next.plugins.WasmBackend.opa": "???", "otoroshi.next.plugins.WasmBackend.source": "???", @@ -3015,7 +3015,7 @@ "otoroshi.next.plugins.WasmOPA.config": "???", "otoroshi.next.plugins.WasmOPA.functionName": "???", "otoroshi.next.plugins.WasmOPA.instances": "???", - "otoroshi.next.plugins.WasmOPA.lifetime": "???", + "otoroshi.next.plugins.WasmOPA.killOptions": "???", "otoroshi.next.plugins.WasmOPA.memoryPages": "???", "otoroshi.next.plugins.WasmOPA.opa": "???", "otoroshi.next.plugins.WasmOPA.source": "???", @@ -3026,7 +3026,7 @@ "otoroshi.next.plugins.WasmPreRoute.config": "???", "otoroshi.next.plugins.WasmPreRoute.functionName": "???", "otoroshi.next.plugins.WasmPreRoute.instances": "???", - "otoroshi.next.plugins.WasmPreRoute.lifetime": "???", + "otoroshi.next.plugins.WasmPreRoute.killOptions": "???", "otoroshi.next.plugins.WasmPreRoute.memoryPages": "???", "otoroshi.next.plugins.WasmPreRoute.opa": "???", "otoroshi.next.plugins.WasmPreRoute.source": "???", @@ -3037,7 +3037,7 @@ "otoroshi.next.plugins.WasmRequestTransformer.config": "???", "otoroshi.next.plugins.WasmRequestTransformer.functionName": "???", "otoroshi.next.plugins.WasmRequestTransformer.instances": "???", - "otoroshi.next.plugins.WasmRequestTransformer.lifetime": "???", + "otoroshi.next.plugins.WasmRequestTransformer.killOptions": "???", "otoroshi.next.plugins.WasmRequestTransformer.memoryPages": "???", "otoroshi.next.plugins.WasmRequestTransformer.opa": "???", "otoroshi.next.plugins.WasmRequestTransformer.source": "???", @@ -3048,7 +3048,7 @@ "otoroshi.next.plugins.WasmResponseTransformer.config": "???", "otoroshi.next.plugins.WasmResponseTransformer.functionName": "???", "otoroshi.next.plugins.WasmResponseTransformer.instances": "???", - "otoroshi.next.plugins.WasmResponseTransformer.lifetime": "???", + "otoroshi.next.plugins.WasmResponseTransformer.killOptions": "???", "otoroshi.next.plugins.WasmResponseTransformer.memoryPages": "???", "otoroshi.next.plugins.WasmResponseTransformer.opa": "???", "otoroshi.next.plugins.WasmResponseTransformer.source": "???", @@ -3059,7 +3059,7 @@ "otoroshi.next.plugins.WasmRouteMatcher.config": "???", "otoroshi.next.plugins.WasmRouteMatcher.functionName": "???", "otoroshi.next.plugins.WasmRouteMatcher.instances": "???", - "otoroshi.next.plugins.WasmRouteMatcher.lifetime": "???", + "otoroshi.next.plugins.WasmRouteMatcher.killOptions": "???", "otoroshi.next.plugins.WasmRouteMatcher.memoryPages": "???", "otoroshi.next.plugins.WasmRouteMatcher.opa": "???", "otoroshi.next.plugins.WasmRouteMatcher.source": "???", @@ -3070,7 +3070,7 @@ "otoroshi.next.plugins.WasmRouter.config": "???", "otoroshi.next.plugins.WasmRouter.functionName": "???", "otoroshi.next.plugins.WasmRouter.instances": "???", - "otoroshi.next.plugins.WasmRouter.lifetime": "???", + "otoroshi.next.plugins.WasmRouter.killOptions": "???", "otoroshi.next.plugins.WasmRouter.memoryPages": "???", "otoroshi.next.plugins.WasmRouter.opa": "???", "otoroshi.next.plugins.WasmRouter.source": "???", @@ -3081,7 +3081,7 @@ "otoroshi.next.plugins.WasmSink.config": "???", "otoroshi.next.plugins.WasmSink.functionName": "???", "otoroshi.next.plugins.WasmSink.instances": "???", - "otoroshi.next.plugins.WasmSink.lifetime": "???", + "otoroshi.next.plugins.WasmSink.killOptions": "???", "otoroshi.next.plugins.WasmSink.memoryPages": "???", "otoroshi.next.plugins.WasmSink.opa": "???", "otoroshi.next.plugins.WasmSink.source": "???", @@ -3454,7 +3454,7 @@ "otoroshi.wasm.WasmConfig.config": "???", "otoroshi.wasm.WasmConfig.functionName": "???", "otoroshi.wasm.WasmConfig.instances": "???", - "otoroshi.wasm.WasmConfig.lifetime": "???", + "otoroshi.wasm.WasmConfig.killOptions": "???", "otoroshi.wasm.WasmConfig.memoryPages": "???", "otoroshi.wasm.WasmConfig.opa": "???", "otoroshi.wasm.WasmConfig.source": "???", @@ -3464,6 +3464,11 @@ "otoroshi.wasm.WasmSource.kind": "???", "otoroshi.wasm.WasmSource.opts": "???", "otoroshi.wasm.WasmSource.path": "???", + "otoroshi.wasm.WasmVmKillOptions.immortal": "???", + "otoroshi.wasm.WasmVmKillOptions.maxAvgCallDuration": "???", + "otoroshi.wasm.WasmVmKillOptions.maxCalls": "???", + "otoroshi.wasm.WasmVmKillOptions.maxMemoryUsage": "???", + "otoroshi.wasm.WasmVmKillOptions.maxUnusedDuration": "???", "otoroshi.wasm.proxywasm.CorazaWafConfig.config": "???", "otoroshi.wasm.proxywasm.CorazaWafConfig.description": "???", "otoroshi.wasm.proxywasm.CorazaWafConfig.id": "???", @@ -3471,6 +3476,7 @@ "otoroshi.wasm.proxywasm.CorazaWafConfig.location": "???", "otoroshi.wasm.proxywasm.CorazaWafConfig.metadata": "???", "otoroshi.wasm.proxywasm.CorazaWafConfig.name": "???", + "otoroshi.wasm.proxywasm.CorazaWafConfig.poolCapacity": "???", "otoroshi.wasm.proxywasm.CorazaWafConfig.tags": "???", "tags.admin-sessions": "???", "tags.admins": "???", diff --git a/otoroshi/conf/schemas/openapi-flat.json b/otoroshi/conf/schemas/openapi-flat.json index 6c823b5610..46cecd2a17 100644 --- a/otoroshi/conf/schemas/openapi-flat.json +++ b/otoroshi/conf/schemas/openapi-flat.json @@ -298,6 +298,11 @@ "description" : "???", "properties" : { } }, + "otoroshi.wasm.WasmSourceKind" : { + "type" : "object", + "description" : "???", + "properties" : { } + }, "otoroshi.plugins.core.apikeys.JwtApikeyExtractor" : { "type" : "object", "description" : "???", @@ -478,12 +483,14 @@ "description" : "???" }, "provider" : { + "description" : "null type", "type" : "string", - "description" : "???" + "nullable" : true }, "dataCenter" : { + "description" : "null type", "type" : "string", - "description" : "???" + "nullable" : true }, "rack" : { "type" : "string", @@ -601,6 +608,53 @@ } } }, + "otoroshi.next.plugins.NgCertificateAsApikey" : { + "type" : "object", + "description" : "???", + "properties" : { + "daily_quota" : { + "type" : "integer", + "format" : "int64", + "description" : "???" + }, + "monthly_quota" : { + "type" : "integer", + "format" : "int64", + "description" : "???" + }, + "tags" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "???" + }, + "metadata" : { + "type" : "object", + "additionalProperties" : { + "type" : "string" + }, + "description" : "???" + }, + "read_only" : { + "type" : "boolean", + "description" : "???" + }, + "allow_client_id_only" : { + "type" : "boolean", + "description" : "???" + }, + "throttling_quota" : { + "type" : "integer", + "format" : "int64", + "description" : "???" + }, + "constrained_services_only" : { + "type" : "boolean", + "description" : "???" + } + } + }, "otoroshi.next.plugins.JwtVerification" : { "type" : "object", "description" : "???", @@ -859,17 +913,56 @@ "type" : "object", "description" : "???", "properties" : { - "memory_pages" : { + "allowedHosts" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "???" + }, + "memoryPages" : { "type" : "integer", "format" : "int32", "description" : "???" }, - "preserve" : { - "type" : "boolean", + "killOptions" : { + "description" : "???", + "properties" : { + "maxUnusedDuration" : { + "type" : "number", + "description" : "???" + }, + "immortal" : { + "type" : "boolean", + "description" : "???" + }, + "maxAvgCallDuration" : { + "type" : "number", + "description" : "???" + }, + "maxMemoryUsage" : { + "type" : "number", + "format" : "double", + "description" : "???" + }, + "maxCalls" : { + "type" : "integer", + "format" : "int32", + "description" : "???" + } + }, + "type" : "object" + }, + "allowedPaths" : { + "type" : "object", + "additionalProperties" : { + "type" : "string" + }, "description" : "???" }, - "opa" : { - "type" : "boolean", + "instances" : { + "type" : "integer", + "format" : "int32", "description" : "???" }, "config" : { @@ -879,10 +972,37 @@ }, "description" : "???" }, + "source" : { + "description" : "???", + "properties" : { + "kind" : { + "description" : "???", + "properties" : { }, + "type" : "object" + }, + "path" : { + "type" : "string", + "description" : "???" + }, + "opts" : { + "type" : "object", + "description" : "???" + } + }, + "type" : "object" + }, "authorizations" : { "description" : "???", "properties" : { - "global_map_access" : { + "proxyStateAccess" : { + "type" : "boolean", + "description" : "???" + }, + "httpAccess" : { + "type" : "boolean", + "description" : "???" + }, + "globalMapAccess" : { "description" : "???", "properties" : { "read" : { @@ -896,7 +1016,7 @@ }, "type" : "object" }, - "plugin_map_access" : { + "pluginDataStoreAccess" : { "description" : "???", "properties" : { "read" : { @@ -910,7 +1030,7 @@ }, "type" : "object" }, - "global_data_store_access" : { + "pluginMapAccess" : { "description" : "???", "properties" : { "read" : { @@ -924,20 +1044,16 @@ }, "type" : "object" }, - "http_access" : { - "type" : "boolean", + "proxyHttpCallTimeout" : { + "type" : "integer", + "format" : "int32", "description" : "???" }, - "configuration_access" : { + "configurationAccess" : { "type" : "boolean", "description" : "???" }, - "proxy_http_call_timeout" : { - "type" : "integer", - "format" : "int32", - "description" : "???" - }, - "plugin_data_store_access" : { + "globalDataStoreAccess" : { "description" : "???", "properties" : { "read" : { @@ -950,55 +1066,22 @@ } }, "type" : "object" - }, - "proxy_state_access" : { - "type" : "boolean", - "description" : "???" } }, "type" : "object" }, - "function_name" : { - "description" : "null type", - "type" : "string", - "nullable" : true - }, - "wasi" : { + "opa" : { "type" : "boolean", "description" : "???" }, - "source" : { - "description" : "???", - "properties" : { - "kind" : { - "description" : "???", - "properties" : { }, - "type" : "object" - }, - "path" : { - "type" : "string", - "description" : "???" - }, - "opts" : { - "type" : "object", - "description" : "???" - } - }, - "type" : "object" - }, - "allowed_paths" : { - "type" : "object", - "additionalProperties" : { - "type" : "string" - }, + "wasi" : { + "type" : "boolean", "description" : "???" }, - "allowed_hosts" : { - "type" : "array", - "items" : { - "type" : "string" - }, - "description" : "???" + "functionName" : { + "description" : "null type", + "type" : "string", + "nullable" : true } } }, @@ -1162,153 +1245,6 @@ } } }, - "otoroshi.next.plugins.WasmConfig" : { - "type" : "object", - "description" : "???", - "properties" : { - "memory_pages" : { - "type" : "integer", - "format" : "int32", - "description" : "???" - }, - "preserve" : { - "type" : "boolean", - "description" : "???" - }, - "opa" : { - "type" : "boolean", - "description" : "???" - }, - "config" : { - "type" : "object", - "additionalProperties" : { - "type" : "string" - }, - "description" : "???" - }, - "authorizations" : { - "description" : "???", - "properties" : { - "global_map_access" : { - "description" : "???", - "properties" : { - "read" : { - "type" : "boolean", - "description" : "???" - }, - "write" : { - "type" : "boolean", - "description" : "???" - } - }, - "type" : "object" - }, - "plugin_map_access" : { - "description" : "???", - "properties" : { - "read" : { - "type" : "boolean", - "description" : "???" - }, - "write" : { - "type" : "boolean", - "description" : "???" - } - }, - "type" : "object" - }, - "global_data_store_access" : { - "description" : "???", - "properties" : { - "read" : { - "type" : "boolean", - "description" : "???" - }, - "write" : { - "type" : "boolean", - "description" : "???" - } - }, - "type" : "object" - }, - "http_access" : { - "type" : "boolean", - "description" : "???" - }, - "configuration_access" : { - "type" : "boolean", - "description" : "???" - }, - "proxy_http_call_timeout" : { - "type" : "integer", - "format" : "int32", - "description" : "???" - }, - "plugin_data_store_access" : { - "description" : "???", - "properties" : { - "read" : { - "type" : "boolean", - "description" : "???" - }, - "write" : { - "type" : "boolean", - "description" : "???" - } - }, - "type" : "object" - }, - "proxy_state_access" : { - "type" : "boolean", - "description" : "???" - } - }, - "type" : "object" - }, - "function_name" : { - "description" : "null type", - "type" : "string", - "nullable" : true - }, - "wasi" : { - "type" : "boolean", - "description" : "???" - }, - "source" : { - "description" : "???", - "properties" : { - "kind" : { - "description" : "???", - "properties" : { }, - "type" : "object" - }, - "path" : { - "type" : "string", - "description" : "???" - }, - "opts" : { - "type" : "object", - "description" : "???" - } - }, - "type" : "object" - }, - "allowed_paths" : { - "type" : "object", - "additionalProperties" : { - "type" : "string" - }, - "description" : "???" - }, - "allowed_hosts" : { - "type" : "array", - "items" : { - "type" : "string" - }, - "description" : "???" - } - } - }, "otoroshi.auth.GroupRights" : { "type" : "object", "description" : "???", @@ -1841,6 +1777,11 @@ "url" : { "type" : "string", "description" : "???" + }, + "timeout" : { + "type" : "integer", + "format" : "int32", + "description" : "???" } }, "type" : "object" @@ -2529,12 +2470,14 @@ "description" : "???" }, "provider" : { + "description" : "null type", "type" : "string", - "description" : "???" + "nullable" : true }, "dataCenter" : { + "description" : "null type", "type" : "string", - "description" : "???" + "nullable" : true }, "rack" : { "type" : "string", @@ -3244,12 +3187,14 @@ "description" : "???" }, "provider" : { + "description" : "null type", "type" : "string", - "description" : "???" + "nullable" : true }, "dataCenter" : { + "description" : "null type", "type" : "string", - "description" : "???" + "nullable" : true }, "rack" : { "type" : "string", @@ -4307,6 +4252,182 @@ } } }, + "otoroshi.wasm.WasmConfig" : { + "type" : "object", + "description" : "???", + "properties" : { + "allowedHosts" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "???" + }, + "memoryPages" : { + "type" : "integer", + "format" : "int32", + "description" : "???" + }, + "killOptions" : { + "description" : "???", + "properties" : { + "maxUnusedDuration" : { + "type" : "number", + "description" : "???" + }, + "immortal" : { + "type" : "boolean", + "description" : "???" + }, + "maxAvgCallDuration" : { + "type" : "number", + "description" : "???" + }, + "maxMemoryUsage" : { + "type" : "number", + "format" : "double", + "description" : "???" + }, + "maxCalls" : { + "type" : "integer", + "format" : "int32", + "description" : "???" + } + }, + "type" : "object" + }, + "allowedPaths" : { + "type" : "object", + "additionalProperties" : { + "type" : "string" + }, + "description" : "???" + }, + "instances" : { + "type" : "integer", + "format" : "int32", + "description" : "???" + }, + "config" : { + "type" : "object", + "additionalProperties" : { + "type" : "string" + }, + "description" : "???" + }, + "source" : { + "description" : "???", + "properties" : { + "kind" : { + "description" : "???", + "properties" : { }, + "type" : "object" + }, + "path" : { + "type" : "string", + "description" : "???" + }, + "opts" : { + "type" : "object", + "description" : "???" + } + }, + "type" : "object" + }, + "authorizations" : { + "description" : "???", + "properties" : { + "proxyStateAccess" : { + "type" : "boolean", + "description" : "???" + }, + "httpAccess" : { + "type" : "boolean", + "description" : "???" + }, + "globalMapAccess" : { + "description" : "???", + "properties" : { + "read" : { + "type" : "boolean", + "description" : "???" + }, + "write" : { + "type" : "boolean", + "description" : "???" + } + }, + "type" : "object" + }, + "pluginDataStoreAccess" : { + "description" : "???", + "properties" : { + "read" : { + "type" : "boolean", + "description" : "???" + }, + "write" : { + "type" : "boolean", + "description" : "???" + } + }, + "type" : "object" + }, + "pluginMapAccess" : { + "description" : "???", + "properties" : { + "read" : { + "type" : "boolean", + "description" : "???" + }, + "write" : { + "type" : "boolean", + "description" : "???" + } + }, + "type" : "object" + }, + "proxyHttpCallTimeout" : { + "type" : "integer", + "format" : "int32", + "description" : "???" + }, + "configurationAccess" : { + "type" : "boolean", + "description" : "???" + }, + "globalDataStoreAccess" : { + "description" : "???", + "properties" : { + "read" : { + "type" : "boolean", + "description" : "???" + }, + "write" : { + "type" : "boolean", + "description" : "???" + } + }, + "type" : "object" + } + }, + "type" : "object" + }, + "opa" : { + "type" : "boolean", + "description" : "???" + }, + "wasi" : { + "type" : "boolean", + "description" : "???" + }, + "functionName" : { + "description" : "null type", + "type" : "string", + "nullable" : true + } + } + }, "otoroshi.next.plugins.JQResponseConfig" : { "type" : "object", "description" : "???", @@ -4349,10 +4470,35 @@ } } }, - "otoroshi.next.plugins.WasmSourceKind" : { + "otoroshi.next.plugins.NgClientCertChainHeader" : { "type" : "object", "description" : "???", - "properties" : { } + "properties" : { + "dns_header_name" : { + "type" : "string", + "description" : "???" + }, + "pem_header_name" : { + "type" : "string", + "description" : "???" + }, + "send_pem" : { + "type" : "boolean", + "description" : "???" + }, + "send_chain" : { + "type" : "boolean", + "description" : "???" + }, + "send_dns" : { + "type" : "boolean", + "description" : "???" + }, + "chain_header_name" : { + "type" : "string", + "description" : "???" + } + } }, "otoroshi.next.plugins.JwtSigner" : { "type" : "object", @@ -4373,6 +4519,60 @@ } } }, + "otoroshi.next.plugins.NgClientCredentialsConfig" : { + "type" : "object", + "description" : "???", + "properties" : { + "default_key_pair" : { + "type" : "string", + "description" : "???" + }, + "expiration" : { + "type" : "number", + "description" : "???" + }, + "secure" : { + "type" : "boolean", + "description" : "???" + }, + "biscuit" : { + "description" : "???", + "type" : "object", + "properties" : { + "privkey" : { + "description" : "null type", + "type" : "string", + "nullable" : true + }, + "checks" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "???" + }, + "facts" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "???" + }, + "rules" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "???" + } + } + }, + "domain" : { + "type" : "string", + "description" : "???" + } + } + }, "otoroshi.plugins.geoloc.IpStackGeolocationInfoExtractor" : { "type" : "object", "description" : "???", @@ -4817,17 +5017,56 @@ "config" : { "description" : "???", "properties" : { - "memory_pages" : { + "allowedHosts" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "???" + }, + "memoryPages" : { "type" : "integer", "format" : "int32", "description" : "???" }, - "preserve" : { - "type" : "boolean", + "killOptions" : { + "description" : "???", + "properties" : { + "maxUnusedDuration" : { + "type" : "number", + "description" : "???" + }, + "immortal" : { + "type" : "boolean", + "description" : "???" + }, + "maxAvgCallDuration" : { + "type" : "number", + "description" : "???" + }, + "maxMemoryUsage" : { + "type" : "number", + "format" : "double", + "description" : "???" + }, + "maxCalls" : { + "type" : "integer", + "format" : "int32", + "description" : "???" + } + }, + "type" : "object" + }, + "allowedPaths" : { + "type" : "object", + "additionalProperties" : { + "type" : "string" + }, "description" : "???" }, - "opa" : { - "type" : "boolean", + "instances" : { + "type" : "integer", + "format" : "int32", "description" : "???" }, "config" : { @@ -4837,10 +5076,37 @@ }, "description" : "???" }, + "source" : { + "description" : "???", + "properties" : { + "kind" : { + "description" : "???", + "properties" : { }, + "type" : "object" + }, + "path" : { + "type" : "string", + "description" : "???" + }, + "opts" : { + "type" : "object", + "description" : "???" + } + }, + "type" : "object" + }, "authorizations" : { "description" : "???", "properties" : { - "global_map_access" : { + "proxyStateAccess" : { + "type" : "boolean", + "description" : "???" + }, + "httpAccess" : { + "type" : "boolean", + "description" : "???" + }, + "globalMapAccess" : { "description" : "???", "properties" : { "read" : { @@ -4854,7 +5120,7 @@ }, "type" : "object" }, - "plugin_map_access" : { + "pluginDataStoreAccess" : { "description" : "???", "properties" : { "read" : { @@ -4868,7 +5134,7 @@ }, "type" : "object" }, - "global_data_store_access" : { + "pluginMapAccess" : { "description" : "???", "properties" : { "read" : { @@ -4882,20 +5148,16 @@ }, "type" : "object" }, - "http_access" : { - "type" : "boolean", + "proxyHttpCallTimeout" : { + "type" : "integer", + "format" : "int32", "description" : "???" }, - "configuration_access" : { + "configurationAccess" : { "type" : "boolean", "description" : "???" }, - "proxy_http_call_timeout" : { - "type" : "integer", - "format" : "int32", - "description" : "???" - }, - "plugin_data_store_access" : { + "globalDataStoreAccess" : { "description" : "???", "properties" : { "read" : { @@ -4908,55 +5170,22 @@ } }, "type" : "object" - }, - "proxy_state_access" : { - "type" : "boolean", - "description" : "???" } }, "type" : "object" }, - "function_name" : { - "description" : "null type", - "type" : "string", - "nullable" : true - }, - "wasi" : { + "opa" : { "type" : "boolean", "description" : "???" }, - "source" : { - "description" : "???", - "properties" : { - "kind" : { - "description" : "???", - "properties" : { }, - "type" : "object" - }, - "path" : { - "type" : "string", - "description" : "???" - }, - "opts" : { - "type" : "object", - "description" : "???" - } - }, - "type" : "object" - }, - "allowed_paths" : { - "type" : "object", - "additionalProperties" : { - "type" : "string" - }, + "wasi" : { + "type" : "boolean", "description" : "???" }, - "allowed_hosts" : { - "type" : "array", - "items" : { - "type" : "string" - }, - "description" : "???" + "functionName" : { + "description" : "null type", + "type" : "string", + "nullable" : true } }, "type" : "object" @@ -5044,6 +5273,11 @@ } } }, + "otoroshi.next.plugins.BodyHelper" : { + "type" : "object", + "description" : "???", + "properties" : { } + }, "otoroshi.next.plugins.AdditionalHeadersIn" : { "type" : "object", "description" : "???", @@ -5186,12 +5420,14 @@ "description" : "???" }, "provider" : { + "description" : "null type", "type" : "string", - "description" : "???" + "nullable" : true }, "dataCenter" : { + "description" : "null type", "type" : "string", - "description" : "???" + "nullable" : true }, "rack" : { "type" : "string", @@ -5496,10 +5732,96 @@ } } }, + "otoroshi.next.plugins.OIDCIDTokenHeader" : { + "type" : "object", + "description" : "???", + "properties" : { + "send" : { + "type" : "boolean", + "description" : "???" + }, + "name" : { + "type" : "string", + "description" : "???" + }, + "header_name" : { + "type" : "string", + "description" : "???" + }, + "jwt" : { + "type" : "boolean", + "description" : "???" + } + } + }, "LetsEncryptCertBody" : { "type" : "object", "description" : "PEM encoded certificate" }, + "otoroshi.next.plugins.OIDCHeaders" : { + "type" : "object", + "description" : "???", + "properties" : { + "profile" : { + "description" : "???", + "properties" : { + "send" : { + "type" : "boolean", + "description" : "???" + }, + "header_name" : { + "type" : "string", + "description" : "???" + } + }, + "type" : "object" + }, + "idtoken" : { + "description" : "???", + "properties" : { + "send" : { + "type" : "boolean", + "description" : "???" + }, + "name" : { + "type" : "string", + "description" : "???" + }, + "header_name" : { + "type" : "string", + "description" : "???" + }, + "jwt" : { + "type" : "boolean", + "description" : "???" + } + }, + "type" : "object" + }, + "access_token" : { + "description" : "???", + "properties" : { + "send" : { + "type" : "boolean", + "description" : "???" + }, + "name" : { + "type" : "string", + "description" : "???" + }, + "header_name" : { + "type" : "string", + "description" : "???" + }, + "jwt" : { + "type" : "boolean", + "description" : "???" + } + }, + "type" : "object" + } + } + }, "otoroshi.controllers.ServiceLike" : { "type" : "object", "description" : "???", @@ -5759,6 +6081,11 @@ "url" : { "type" : "string", "description" : "???" + }, + "timeout" : { + "type" : "integer", + "format" : "int32", + "description" : "???" } }, "type" : "object" @@ -6447,12 +6774,14 @@ "description" : "???" }, "provider" : { + "description" : "null type", "type" : "string", - "description" : "???" + "nullable" : true }, "dataCenter" : { + "description" : "null type", "type" : "string", - "description" : "???" + "nullable" : true }, "rack" : { "type" : "string", @@ -7162,12 +7491,14 @@ "description" : "???" }, "provider" : { + "description" : "null type", "type" : "string", - "description" : "???" + "nullable" : true }, "dataCenter" : { + "description" : "null type", "type" : "string", - "description" : "???" + "nullable" : true }, "rack" : { "type" : "string", @@ -8260,6 +8591,26 @@ "type" : "object", "description" : "jwt token transformation policy settings" }, + "otoroshi.next.plugins.NgIpStackGeolocationInfoExtractor" : { + "type" : "object", + "description" : "???", + "properties" : { + "apikey" : { + "description" : "null type", + "type" : "string", + "nullable" : true + }, + "timeout" : { + "type" : "integer", + "format" : "int64", + "description" : "???" + }, + "log" : { + "type" : "boolean", + "description" : "???" + } + } + }, "otoroshi.next.plugins.NgAuthModuleUserExtractor" : { "type" : "object", "description" : "???", @@ -8271,6 +8622,25 @@ } } }, + "otoroshi.next.plugins.OIDCAccessTokenValidator" : { + "type" : "object", + "description" : "???", + "properties" : { + "enabled" : { + "type" : "boolean", + "description" : "???" + }, + "at_least_one" : { + "type" : "boolean", + "description" : "???" + }, + "config" : { + "description" : "null type", + "type" : "string", + "nullable" : true + } + } + }, "otoroshi.models.KidAlgoSettings" : { "properties" : { "type" : { @@ -8499,14 +8869,84 @@ } } }, + "otoroshi.next.plugins.NgJwtUserExtractorConfig" : { + "type" : "object", + "description" : "???", + "properties" : { + "meta_path" : { + "description" : "null type", + "type" : "string", + "nullable" : true + }, + "strip" : { + "type" : "boolean", + "description" : "???" + }, + "verifier" : { + "type" : "string", + "description" : "???" + }, + "email_path" : { + "description" : "null type", + "type" : "string", + "nullable" : true + }, + "strict" : { + "type" : "boolean", + "description" : "???" + }, + "name_path" : { + "description" : "null type", + "type" : "string", + "nullable" : true + } + } + }, "otoroshi.models.TenantId" : { "type" : "string", "description" : "organization id" }, - "otoroshi.auth.SAMLCanocalizationMethod" : { + "otoroshi.next.plugins.BrotliResponseCompressor" : { "type" : "object", "description" : "???", - "properties" : { } + "properties" : { + "compression_level" : { + "type" : "integer", + "format" : "int32", + "description" : "???" + }, + "buffer_size" : { + "type" : "integer", + "format" : "int32", + "description" : "???" + }, + "chunked_threshold" : { + "type" : "integer", + "format" : "int32", + "description" : "???" + }, + "excluded_patterns" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "???" + }, + "white_list" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "???" + }, + "black_list" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "???" + } + } }, "otoroshi.next.models.NgTreeRouter_Test" : { "type" : "object", @@ -8942,85 +9382,6 @@ } } }, - "otoroshi.next.plugins.WasmAuthorizations" : { - "type" : "object", - "description" : "???", - "properties" : { - "global_map_access" : { - "description" : "???", - "properties" : { - "read" : { - "type" : "boolean", - "description" : "???" - }, - "write" : { - "type" : "boolean", - "description" : "???" - } - }, - "type" : "object" - }, - "plugin_map_access" : { - "description" : "???", - "properties" : { - "read" : { - "type" : "boolean", - "description" : "???" - }, - "write" : { - "type" : "boolean", - "description" : "???" - } - }, - "type" : "object" - }, - "global_data_store_access" : { - "description" : "???", - "properties" : { - "read" : { - "type" : "boolean", - "description" : "???" - }, - "write" : { - "type" : "boolean", - "description" : "???" - } - }, - "type" : "object" - }, - "http_access" : { - "type" : "boolean", - "description" : "???" - }, - "configuration_access" : { - "type" : "boolean", - "description" : "???" - }, - "proxy_http_call_timeout" : { - "type" : "integer", - "format" : "int32", - "description" : "???" - }, - "plugin_data_store_access" : { - "description" : "???", - "properties" : { - "read" : { - "type" : "boolean", - "description" : "???" - }, - "write" : { - "type" : "boolean", - "description" : "???" - } - }, - "type" : "object" - }, - "proxy_state_access" : { - "type" : "boolean", - "description" : "???" - } - } - }, "otoroshi.next.models.NgMatchedRoutes" : { "type" : "object", "description" : "???", @@ -9160,6 +9521,11 @@ "url" : { "type" : "string", "description" : "???" + }, + "timeout" : { + "type" : "integer", + "format" : "int32", + "description" : "???" } } }, @@ -9379,12 +9745,14 @@ "description" : "???" }, "provider" : { + "description" : "null type", "type" : "string", - "description" : "???" + "nullable" : true }, "dataCenter" : { + "description" : "null type", "type" : "string", - "description" : "???" + "nullable" : true }, "rack" : { "type" : "string", @@ -9744,6 +10112,11 @@ "value" : { "type" : "object", "description" : "???" + }, + "error" : { + "description" : "null type", + "type" : "string", + "nullable" : true } }, "type" : "object" @@ -10347,6 +10720,11 @@ "url" : { "type" : "string", "description" : "???" + }, + "timeout" : { + "type" : "integer", + "format" : "int32", + "description" : "???" } }, "type" : "object" @@ -11035,12 +11413,14 @@ "description" : "???" }, "provider" : { + "description" : "null type", "type" : "string", - "description" : "???" + "nullable" : true }, "dataCenter" : { + "description" : "null type", "type" : "string", - "description" : "???" + "nullable" : true }, "rack" : { "type" : "string", @@ -11750,12 +12130,14 @@ "description" : "???" }, "provider" : { + "description" : "null type", "type" : "string", - "description" : "???" + "nullable" : true }, "dataCenter" : { + "description" : "null type", "type" : "string", - "description" : "???" + "nullable" : true }, "rack" : { "type" : "string", @@ -12755,6 +13137,34 @@ "description" : "???", "properties" : { } }, + "otoroshi.wasm.WasmVmKillOptions" : { + "type" : "object", + "description" : "???", + "properties" : { + "maxUnusedDuration" : { + "type" : "number", + "description" : "???" + }, + "immortal" : { + "type" : "boolean", + "description" : "???" + }, + "maxAvgCallDuration" : { + "type" : "number", + "description" : "???" + }, + "maxMemoryUsage" : { + "type" : "number", + "format" : "double", + "description" : "???" + }, + "maxCalls" : { + "type" : "integer", + "format" : "int32", + "description" : "???" + } + } + }, "otoroshi.models.UserRight" : { "type" : "object", "description" : "Represent a user right (teams, organizations) in otoroshi-ui", @@ -13079,6 +13489,11 @@ "value" : { "type" : "object", "description" : "???" + }, + "error" : { + "description" : "null type", + "type" : "string", + "nullable" : true } }, "type" : "object" @@ -14081,12 +14496,14 @@ "description" : "???" }, "provider" : { + "description" : "null type", "type" : "string", - "description" : "???" + "nullable" : true }, "dataCenter" : { + "description" : "null type", "type" : "string", - "description" : "???" + "nullable" : true }, "rack" : { "type" : "string", @@ -14212,19 +14629,13 @@ } } }, - "otoroshi.auth.SAMLSignature" : { + "otoroshi.next.plugins.NgGeolocationInfoHeaderConfig" : { "type" : "object", "description" : "???", "properties" : { - "algorithm" : { - "description" : "???", - "properties" : { }, - "type" : "object" - }, - "canocalizationMethod" : { - "description" : "???", - "properties" : { }, - "type" : "object" + "header_name" : { + "type" : "string", + "description" : "???" } } }, @@ -14250,6 +14661,20 @@ } } }, + "otoroshi.next.plugins.NgMaxMindGeolocationInfoExtractorConfig" : { + "type" : "object", + "description" : "???", + "properties" : { + "path" : { + "type" : "string", + "description" : "???" + }, + "log" : { + "type" : "boolean", + "description" : "???" + } + } + }, "otoroshi.plugins.clientcert.HasClientCertMatchingHttpValidator" : { "type" : "object", "description" : "???", @@ -14621,6 +15046,39 @@ "description" : "???", "properties" : { } }, + "otoroshi.next.plugins.NgJwtUserExtractor" : { + "type" : "object", + "description" : "???", + "properties" : { + "meta_path" : { + "description" : "null type", + "type" : "string", + "nullable" : true + }, + "strip" : { + "type" : "boolean", + "description" : "???" + }, + "verifier" : { + "type" : "string", + "description" : "???" + }, + "email_path" : { + "description" : "null type", + "type" : "string", + "nullable" : true + }, + "strict" : { + "type" : "boolean", + "description" : "???" + }, + "name_path" : { + "description" : "null type", + "type" : "string", + "nullable" : true + } + } + }, "otoroshi.models.DataExporterConfigFiltering" : { "type" : "object", "description" : "Filter events to export", @@ -14759,6 +15217,11 @@ } } }, + "otoroshi.next.plugins.NgHasClientCertMatchingApikeyValidator" : { + "type" : "object", + "description" : "???", + "properties" : { } + }, "otoroshi.plugins.apikeys.CertificateAsApikey" : { "type" : "object", "description" : "???", @@ -14804,6 +15267,16 @@ } } }, + "otoroshi.next.plugins.NgDiscoverySelfRegistrationConfig" : { + "type" : "object", + "description" : "???", + "properties" : { + "raw" : { + "type" : "object", + "description" : "???" + } + } + }, "otoroshi.next.plugins.NgDefaultRequestBodyConfig" : { "type" : "object", "description" : "???", @@ -14873,6 +15346,77 @@ } } }, + "otoroshi.next.plugins.NgIpStackGeolocationInfoExtractorConfig" : { + "type" : "object", + "description" : "???", + "properties" : { + "apikey" : { + "description" : "null type", + "type" : "string", + "nullable" : true + }, + "timeout" : { + "type" : "integer", + "format" : "int64", + "description" : "???" + }, + "log" : { + "type" : "boolean", + "description" : "???" + } + } + }, + "otoroshi.next.plugins.NgHasClientCertMatchingValidatorConfig" : { + "type" : "object", + "description" : "???", + "properties" : { + "subject_dns" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "???" + }, + "serial_numbers" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "???" + }, + "issuer_dns" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "???" + }, + "regex_issuer_dns" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "???" + }, + "regex_subject_dns" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "???" + } + } + }, + "otoroshi.next.plugins.NgDiscoverySelfRegistrationSink" : { + "type" : "object", + "description" : "???", + "properties" : { + "raw" : { + "type" : "object", + "description" : "???" + } + } + }, "otoroshi.auth.OAuth1Provider" : { "type" : "object", "description" : "???", @@ -15076,34 +15620,95 @@ "enum" : [ "AlwaysMatch", "NetworkLocationMatch", "GeolocationMatch" ] }, "provider" : { + "description" : "null type", "type" : "string", - "description" : "???" + "nullable" : true }, "dataCenter" : { + "description" : "null type", "type" : "string", - "description" : "???" + "nullable" : true }, "rack" : { + "description" : "null type", "type" : "string", - "description" : "???" + "nullable" : true }, "region" : { + "description" : "null type", "type" : "string", - "description" : "???" + "nullable" : true }, "zone" : { + "description" : "null type", "type" : "string", - "description" : "???" + "nullable" : true } }, "type" : "object", "description" : "???" }, + "otoroshi.next.plugins.NgUserAgentInfoHeader" : { + "type" : "object", + "description" : "???", + "properties" : { + "header_name" : { + "type" : "string", + "description" : "???" + } + } + }, "otoroshi.script.PluginType" : { "type" : "string", "enum" : [ "app", "transformer", "validator", "preroute", "sink", "listener", "job", "exporter" ], "description" : "Plugin kind" }, + "otoroshi.next.plugins.MultiAuthModule" : { + "type" : "object", + "description" : "???", + "properties" : { + "modules" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "???" + }, + "pass_with_apikey" : { + "type" : "boolean", + "description" : "???" + }, + "use_email_prompt" : { + "type" : "boolean", + "description" : "???" + }, + "users_groups" : { + "type" : "object", + "description" : "???" + } + } + }, + "otoroshi.next.plugins.NgServiceQuotasConfig" : { + "type" : "object", + "description" : "???", + "properties" : { + "throttling_quota" : { + "type" : "integer", + "format" : "int64", + "description" : "???" + }, + "daily_quota" : { + "type" : "integer", + "format" : "int64", + "description" : "???" + }, + "monthly_quota" : { + "type" : "integer", + "format" : "int64", + "description" : "???" + } + } + }, "otoroshi.utils.mailer.ConsoleMailerSettings" : { "properties" : { "type" : { @@ -15136,6 +15741,48 @@ "enum" : [ "kafka", "pulsar", "elastic", "webhook", "file", "mailer", "custom", "none", "console", "metrics" ], "description" : "Type of data exporter" }, + "otoroshi.next.plugins.NgIzanamiV1CanaryRoutingConfig" : { + "type" : "object", + "description" : "???", + "properties" : { + "routes" : { + "type" : "array", + "items" : { + "properties" : { + "regex" : { + "type" : "boolean", + "description" : "???" + }, + "default" : { + "type" : "string", + "description" : "???" + }, + "route" : { + "type" : "string", + "description" : "???" + }, + "wildcard" : { + "type" : "boolean", + "description" : "???" + }, + "exact" : { + "type" : "boolean", + "description" : "???" + }, + "variants" : { + "type" : "object", + "additionalProperties" : { + "type" : "string" + }, + "description" : "???" + } + }, + "type" : "object" + }, + "description" : "???" + } + } + }, "otoroshi.plugins.jobs.kubernetes.FailedCrdParsing" : { "type" : "object", "description" : "???", @@ -15493,6 +16140,20 @@ "type" : "object", "description" : "Settings for the mailjet mailer" }, + "otoroshi.wasm.WasmDataRights" : { + "type" : "object", + "description" : "???", + "properties" : { + "read" : { + "type" : "boolean", + "description" : "???" + }, + "write" : { + "type" : "boolean", + "description" : "???" + } + } + }, "play.api.libs.ws.WSProxyServer" : { "type" : "object", "properties" : { @@ -15581,70 +16242,6 @@ } } }, - "otoroshi.auth.SAMLCredentials" : { - "type" : "object", - "description" : "???", - "properties" : { - "signingKey" : { - "description" : "???", - "properties" : { - "certificate" : { - "description" : "null type", - "type" : "string", - "nullable" : true - }, - "privateKey" : { - "description" : "null type", - "type" : "string", - "nullable" : true - }, - "certId" : { - "description" : "null type", - "type" : "string", - "nullable" : true - }, - "useOtoroshiCertificate" : { - "type" : "boolean", - "description" : "???" - } - }, - "type" : "object" - }, - "encryptionKey" : { - "description" : "???", - "properties" : { - "certificate" : { - "description" : "null type", - "type" : "string", - "nullable" : true - }, - "privateKey" : { - "description" : "null type", - "type" : "string", - "nullable" : true - }, - "certId" : { - "description" : "null type", - "type" : "string", - "nullable" : true - }, - "useOtoroshiCertificate" : { - "type" : "boolean", - "description" : "???" - } - }, - "type" : "object" - }, - "signedDocuments" : { - "type" : "boolean", - "description" : "???" - }, - "encryptedAssertions" : { - "type" : "boolean", - "description" : "???" - } - } - }, "otoroshi.next.plugins.NgApikeyExtractorCustomHeaders" : { "type" : "object", "description" : "???", @@ -15806,6 +16403,70 @@ } } }, + "otoroshi.next.plugins.OIDCHeadersConfig" : { + "type" : "object", + "description" : "???", + "properties" : { + "profile" : { + "description" : "???", + "properties" : { + "send" : { + "type" : "boolean", + "description" : "???" + }, + "header_name" : { + "type" : "string", + "description" : "???" + } + }, + "type" : "object" + }, + "idtoken" : { + "description" : "???", + "properties" : { + "send" : { + "type" : "boolean", + "description" : "???" + }, + "name" : { + "type" : "string", + "description" : "???" + }, + "header_name" : { + "type" : "string", + "description" : "???" + }, + "jwt" : { + "type" : "boolean", + "description" : "???" + } + }, + "type" : "object" + }, + "access_token" : { + "description" : "???", + "properties" : { + "send" : { + "type" : "boolean", + "description" : "???" + }, + "name" : { + "type" : "string", + "description" : "???" + }, + "header_name" : { + "type" : "string", + "description" : "???" + }, + "jwt" : { + "type" : "boolean", + "description" : "???" + } + }, + "type" : "object" + } + } + }, "otoroshi.models.ServiceDescriptor" : { "type" : "object", "description" : "???", @@ -16036,6 +16697,11 @@ "url" : { "type" : "string", "description" : "???" + }, + "timeout" : { + "type" : "integer", + "format" : "int32", + "description" : "???" } }, "type" : "object" @@ -16754,12 +17420,14 @@ "description" : "???" }, "provider" : { + "description" : "null type", "type" : "string", - "description" : "???" + "nullable" : true }, "dataCenter" : { + "description" : "null type", "type" : "string", - "description" : "???" + "nullable" : true }, "rack" : { "type" : "string", @@ -17499,12 +18167,14 @@ "description" : "???" }, "provider" : { + "description" : "null type", "type" : "string", - "description" : "???" + "nullable" : true }, "dataCenter" : { + "description" : "null type", "type" : "string", - "description" : "???" + "nullable" : true }, "rack" : { "type" : "string", @@ -18854,6 +19524,11 @@ } } }, + "otoroshi.next.plugins.NgUserAgentInfoEndpoint" : { + "type" : "object", + "description" : "???", + "properties" : { } + }, "otoroshi.plugins.geoloc.MaxMindGeolocationHelper" : { "type" : "object", "description" : "???", @@ -18869,10 +19544,26 @@ "description" : "???", "properties" : { } }, - "otoroshi.next.plugins.WasmUtils" : { + "otoroshi.next.plugins.NgServiceQuotas" : { "type" : "object", "description" : "???", - "properties" : { } + "properties" : { + "throttling_quota" : { + "type" : "integer", + "format" : "int64", + "description" : "???" + }, + "daily_quota" : { + "type" : "integer", + "format" : "int64", + "description" : "???" + }, + "monthly_quota" : { + "type" : "integer", + "format" : "int64", + "description" : "???" + } + } }, "otoroshi.next.plugins.Http3SwitchConfig" : { "type" : "object", @@ -18897,6 +19588,25 @@ } } }, + "otoroshi.next.plugins.NgLog4ShellFilter" : { + "type" : "object", + "description" : "???", + "properties" : { + "status" : { + "type" : "integer", + "format" : "int32", + "description" : "???" + }, + "body" : { + "type" : "string", + "description" : "???" + }, + "parse_body" : { + "type" : "boolean", + "description" : "???" + } + } + }, "otoroshi.models.CleverCloudSettings" : { "type" : "object", "description" : "Settings for connection to the clever-cloud api", @@ -18932,17 +19642,56 @@ "type" : "object", "description" : "???", "properties" : { - "memory_pages" : { + "allowedHosts" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "???" + }, + "memoryPages" : { "type" : "integer", "format" : "int32", "description" : "???" }, - "preserve" : { - "type" : "boolean", + "killOptions" : { + "description" : "???", + "properties" : { + "maxUnusedDuration" : { + "type" : "number", + "description" : "???" + }, + "immortal" : { + "type" : "boolean", + "description" : "???" + }, + "maxAvgCallDuration" : { + "type" : "number", + "description" : "???" + }, + "maxMemoryUsage" : { + "type" : "number", + "format" : "double", + "description" : "???" + }, + "maxCalls" : { + "type" : "integer", + "format" : "int32", + "description" : "???" + } + }, + "type" : "object" + }, + "allowedPaths" : { + "type" : "object", + "additionalProperties" : { + "type" : "string" + }, "description" : "???" }, - "opa" : { - "type" : "boolean", + "instances" : { + "type" : "integer", + "format" : "int32", "description" : "???" }, "config" : { @@ -18952,10 +19701,37 @@ }, "description" : "???" }, + "source" : { + "description" : "???", + "properties" : { + "kind" : { + "description" : "???", + "properties" : { }, + "type" : "object" + }, + "path" : { + "type" : "string", + "description" : "???" + }, + "opts" : { + "type" : "object", + "description" : "???" + } + }, + "type" : "object" + }, "authorizations" : { "description" : "???", "properties" : { - "global_map_access" : { + "proxyStateAccess" : { + "type" : "boolean", + "description" : "???" + }, + "httpAccess" : { + "type" : "boolean", + "description" : "???" + }, + "globalMapAccess" : { "description" : "???", "properties" : { "read" : { @@ -18969,7 +19745,7 @@ }, "type" : "object" }, - "plugin_map_access" : { + "pluginDataStoreAccess" : { "description" : "???", "properties" : { "read" : { @@ -18983,7 +19759,7 @@ }, "type" : "object" }, - "global_data_store_access" : { + "pluginMapAccess" : { "description" : "???", "properties" : { "read" : { @@ -18997,20 +19773,16 @@ }, "type" : "object" }, - "http_access" : { - "type" : "boolean", + "proxyHttpCallTimeout" : { + "type" : "integer", + "format" : "int32", "description" : "???" }, - "configuration_access" : { + "configurationAccess" : { "type" : "boolean", "description" : "???" }, - "proxy_http_call_timeout" : { - "type" : "integer", - "format" : "int32", - "description" : "???" - }, - "plugin_data_store_access" : { + "globalDataStoreAccess" : { "description" : "???", "properties" : { "read" : { @@ -19023,55 +19795,86 @@ } }, "type" : "object" - }, - "proxy_state_access" : { - "type" : "boolean", - "description" : "???" } }, "type" : "object" }, - "function_name" : { - "description" : "null type", - "type" : "string", - "nullable" : true + "opa" : { + "type" : "boolean", + "description" : "???" }, "wasi" : { "type" : "boolean", "description" : "???" }, - "source" : { + "functionName" : { + "description" : "null type", + "type" : "string", + "nullable" : true + } + } + }, + "otoroshi.next.plugins.NgBiscuitValidator" : { + "type" : "object", + "description" : "???", + "properties" : { + "legacy" : { "description" : "???", "properties" : { - "kind" : { - "description" : "???", - "properties" : { }, - "type" : "object" + "facts" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "???" }, - "path" : { + "publicKey" : { + "description" : "null type", "type" : "string", + "nullable" : true + }, + "resources" : { + "type" : "array", + "items" : { + "type" : "string" + }, "description" : "???" }, - "opts" : { - "type" : "object", + "enforce" : { + "type" : "boolean", + "description" : "???" + }, + "extractorName" : { + "type" : "string", + "description" : "???" + }, + "checks" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "???" + }, + "extractor" : { + "type" : "string", + "description" : "???" + }, + "revocation_ids" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "???" + }, + "rules" : { + "type" : "array", + "items" : { + "type" : "string" + }, "description" : "???" } }, "type" : "object" - }, - "allowed_paths" : { - "type" : "object", - "additionalProperties" : { - "type" : "string" - }, - "description" : "???" - }, - "allowed_hosts" : { - "type" : "array", - "items" : { - "type" : "string" - }, - "description" : "???" } } }, @@ -19244,6 +20047,11 @@ "url" : { "type" : "string", "description" : "???" + }, + "timeout" : { + "type" : "integer", + "format" : "int32", + "description" : "???" } } }, @@ -19463,12 +20271,14 @@ "description" : "???" }, "provider" : { + "description" : "null type", "type" : "string", - "description" : "???" + "nullable" : true }, "dataCenter" : { + "description" : "null type", "type" : "string", - "description" : "???" + "nullable" : true }, "rack" : { "type" : "string", @@ -19781,6 +20591,11 @@ "url" : { "type" : "string", "description" : "???" + }, + "timeout" : { + "type" : "integer", + "format" : "int32", + "description" : "???" } } }, @@ -20000,12 +20815,14 @@ "description" : "???" }, "provider" : { + "description" : "null type", "type" : "string", - "description" : "???" + "nullable" : true }, "dataCenter" : { + "description" : "null type", "type" : "string", - "description" : "???" + "nullable" : true }, "rack" : { "type" : "string", @@ -21223,12 +22040,14 @@ "description" : "???" }, "provider" : { + "description" : "null type", "type" : "string", - "description" : "???" + "nullable" : true }, "dataCenter" : { + "description" : "null type", "type" : "string", - "description" : "???" + "nullable" : true }, "rack" : { "type" : "string", @@ -21766,6 +22585,11 @@ "url" : { "type" : "string", "description" : "???" + }, + "timeout" : { + "type" : "integer", + "format" : "int32", + "description" : "???" } }, "type" : "object" @@ -22484,12 +23308,14 @@ "description" : "???" }, "provider" : { + "description" : "null type", "type" : "string", - "description" : "???" + "nullable" : true }, "dataCenter" : { + "description" : "null type", "type" : "string", - "description" : "???" + "nullable" : true }, "rack" : { "type" : "string", @@ -23229,12 +24055,14 @@ "description" : "???" }, "provider" : { + "description" : "null type", "type" : "string", - "description" : "???" + "nullable" : true }, "dataCenter" : { + "description" : "null type", "type" : "string", - "description" : "???" + "nullable" : true }, "rack" : { "type" : "string", @@ -25014,6 +25842,13 @@ }, "description" : "Possibles lines for Otoroshi" }, + "extensions" : { + "type" : "object", + "additionalProperties" : { + "type" : "object" + }, + "description" : "???" + }, "middleFingers" : { "type" : "boolean", "description" : "Use middle finger emoji as a response character for endless HTTP responses" @@ -25563,8 +26398,6 @@ "required" : [ "type", "extraMetadata", "desc", "name", "allowEmptyPassword", "groupFilters", "rightsOverride", "serverUrls", "clientSideSessionEnabled", "basicAuth", "searchBase", "groupRights", "tags", "superAdmins", "sessionMaxAge", "metadataField", "searchFilter", "adminUsername", "userValidators", "emailField", "extractProfileFilter", "userBase", "id", "_loc", "adminPassword", "metadata", "extractProfileFilterNot", "nameField", "extractProfile", "dataOverride", "sessionCookieValues" ] }, { "required" : [ "type", "accessTokenURL", "desc", "name", "authorizeURL", "rightsOverride", "consumerKey", "callbackURL", "profileURL", "clientSideSessionEnabled", "tags", "sessionMaxAge", "httpMethod", "userValidators", "id", "requestTokenURL", "_loc", "consumerSecret", "metadata", "sessionCookieValues" ] - }, { - "required" : [ "type", "desc", "name", "ssoProtocolBinding", "clientSideSessionEnabled", "emailAttributeName", "validatingCertificates", "tags", "singleLogoutProtocolBinding", "sessionMaxAge", "issuer", "signature", "userValidators", "singleLogoutUrl", "id", "_loc", "usedNameIDAsEmail", "singleSignOnUrl", "metadata", "validateAssertions", "nameIDFormat", "validateSignature", "credentials", "sessionCookieValues" ] } ], "properties" : { "type" : { @@ -25718,6 +26551,11 @@ "value" : { "type" : "object", "description" : "???" + }, + "error" : { + "description" : "null type", + "type" : "string", + "nullable" : true } }, "type" : "object" @@ -26362,137 +27200,6 @@ "consumerSecret" : { "type" : "string", "description" : "???" - }, - "ssoProtocolBinding" : { - "description" : "???", - "properties" : { }, - "type" : "object" - }, - "emailAttributeName" : { - "description" : "null type", - "type" : "string", - "nullable" : true - }, - "validatingCertificates" : { - "type" : "array", - "items" : { - "type" : "string" - }, - "description" : "???" - }, - "singleLogoutProtocolBinding" : { - "description" : "???", - "properties" : { }, - "type" : "object" - }, - "issuer" : { - "type" : "string", - "description" : "???" - }, - "signature" : { - "description" : "???", - "properties" : { - "algorithm" : { - "description" : "???", - "properties" : { }, - "type" : "object" - }, - "canocalizationMethod" : { - "description" : "???", - "properties" : { }, - "type" : "object" - } - }, - "type" : "object" - }, - "singleLogoutUrl" : { - "type" : "string", - "description" : "???" - }, - "usedNameIDAsEmail" : { - "type" : "boolean", - "description" : "???" - }, - "singleSignOnUrl" : { - "type" : "string", - "description" : "???" - }, - "validateAssertions" : { - "type" : "boolean", - "description" : "???" - }, - "nameIDFormat" : { - "description" : "???", - "properties" : { }, - "type" : "object" - }, - "validateSignature" : { - "type" : "boolean", - "description" : "???" - }, - "credentials" : { - "description" : "???", - "properties" : { - "signingKey" : { - "description" : "???", - "properties" : { - "certificate" : { - "description" : "null type", - "type" : "string", - "nullable" : true - }, - "privateKey" : { - "description" : "null type", - "type" : "string", - "nullable" : true - }, - "certId" : { - "description" : "null type", - "type" : "string", - "nullable" : true - }, - "useOtoroshiCertificate" : { - "type" : "boolean", - "description" : "???" - } - }, - "type" : "object" - }, - "encryptionKey" : { - "description" : "???", - "properties" : { - "certificate" : { - "description" : "null type", - "type" : "string", - "nullable" : true - }, - "privateKey" : { - "description" : "null type", - "type" : "string", - "nullable" : true - }, - "certId" : { - "description" : "null type", - "type" : "string", - "nullable" : true - }, - "useOtoroshiCertificate" : { - "type" : "boolean", - "description" : "???" - } - }, - "type" : "object" - }, - "signedDocuments" : { - "type" : "boolean", - "description" : "???" - }, - "encryptedAssertions" : { - "type" : "boolean", - "description" : "???" - } - }, - "type" : "object" } } }, @@ -26963,17 +27670,56 @@ "config" : { "description" : "???", "properties" : { - "memory_pages" : { + "allowedHosts" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "???" + }, + "memoryPages" : { "type" : "integer", "format" : "int32", "description" : "???" }, - "preserve" : { - "type" : "boolean", + "killOptions" : { + "description" : "???", + "properties" : { + "maxUnusedDuration" : { + "type" : "number", + "description" : "???" + }, + "immortal" : { + "type" : "boolean", + "description" : "???" + }, + "maxAvgCallDuration" : { + "type" : "number", + "description" : "???" + }, + "maxMemoryUsage" : { + "type" : "number", + "format" : "double", + "description" : "???" + }, + "maxCalls" : { + "type" : "integer", + "format" : "int32", + "description" : "???" + } + }, + "type" : "object" + }, + "allowedPaths" : { + "type" : "object", + "additionalProperties" : { + "type" : "string" + }, "description" : "???" }, - "opa" : { - "type" : "boolean", + "instances" : { + "type" : "integer", + "format" : "int32", "description" : "???" }, "config" : { @@ -26983,10 +27729,37 @@ }, "description" : "???" }, + "source" : { + "description" : "???", + "properties" : { + "kind" : { + "description" : "???", + "properties" : { }, + "type" : "object" + }, + "path" : { + "type" : "string", + "description" : "???" + }, + "opts" : { + "type" : "object", + "description" : "???" + } + }, + "type" : "object" + }, "authorizations" : { "description" : "???", "properties" : { - "global_map_access" : { + "proxyStateAccess" : { + "type" : "boolean", + "description" : "???" + }, + "httpAccess" : { + "type" : "boolean", + "description" : "???" + }, + "globalMapAccess" : { "description" : "???", "properties" : { "read" : { @@ -27000,7 +27773,7 @@ }, "type" : "object" }, - "plugin_map_access" : { + "pluginDataStoreAccess" : { "description" : "???", "properties" : { "read" : { @@ -27014,7 +27787,7 @@ }, "type" : "object" }, - "global_data_store_access" : { + "pluginMapAccess" : { "description" : "???", "properties" : { "read" : { @@ -27028,20 +27801,16 @@ }, "type" : "object" }, - "http_access" : { - "type" : "boolean", + "proxyHttpCallTimeout" : { + "type" : "integer", + "format" : "int32", "description" : "???" }, - "configuration_access" : { + "configurationAccess" : { "type" : "boolean", "description" : "???" }, - "proxy_http_call_timeout" : { - "type" : "integer", - "format" : "int32", - "description" : "???" - }, - "plugin_data_store_access" : { + "globalDataStoreAccess" : { "description" : "???", "properties" : { "read" : { @@ -27054,55 +27823,22 @@ } }, "type" : "object" - }, - "proxy_state_access" : { - "type" : "boolean", - "description" : "???" } }, "type" : "object" }, - "function_name" : { - "description" : "null type", - "type" : "string", - "nullable" : true - }, - "wasi" : { + "opa" : { "type" : "boolean", "description" : "???" }, - "source" : { - "description" : "???", - "properties" : { - "kind" : { - "description" : "???", - "properties" : { }, - "type" : "object" - }, - "path" : { - "type" : "string", - "description" : "???" - }, - "opts" : { - "type" : "object", - "description" : "???" - } - }, - "type" : "object" - }, - "allowed_paths" : { - "type" : "object", - "additionalProperties" : { - "type" : "string" - }, + "wasi" : { + "type" : "boolean", "description" : "???" }, - "allowed_hosts" : { - "type" : "array", - "items" : { - "type" : "string" - }, - "description" : "???" + "functionName" : { + "description" : "null type", + "type" : "string", + "nullable" : true } }, "type" : "object" @@ -27166,6 +27902,60 @@ } } }, + "otoroshi.next.plugins.NgClientCredentials" : { + "type" : "object", + "description" : "???", + "properties" : { + "default_key_pair" : { + "type" : "string", + "description" : "???" + }, + "expiration" : { + "type" : "number", + "description" : "???" + }, + "secure" : { + "type" : "boolean", + "description" : "???" + }, + "biscuit" : { + "description" : "???", + "type" : "object", + "properties" : { + "privkey" : { + "description" : "null type", + "type" : "string", + "nullable" : true + }, + "checks" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "???" + }, + "facts" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "???" + }, + "rules" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "???" + } + } + }, + "domain" : { + "type" : "string", + "description" : "???" + } + } + }, "otoroshi.models.Canary" : { "type" : "object", "description" : "???", @@ -27248,12 +28038,14 @@ "description" : "???" }, "provider" : { + "description" : "null type", "type" : "string", - "description" : "???" + "nullable" : true }, "dataCenter" : { + "description" : "null type", "type" : "string", - "description" : "???" + "nullable" : true }, "rack" : { "type" : "string", @@ -27322,6 +28114,73 @@ } } }, + "otoroshi.next.plugins.NgIzanamiV1CanaryConfig" : { + "type" : "object", + "description" : "???", + "properties" : { + "client_id" : { + "type" : "string", + "description" : "???" + }, + "experiment_id" : { + "type" : "string", + "description" : "???" + }, + "route_config" : { + "description" : "null type", + "type" : "string", + "nullable" : true + }, + "tls" : { + "description" : "???", + "properties" : { + "enabled" : { + "type" : "boolean", + "description" : "Enabled" + }, + "certs" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "Trusted cert. ids" + }, + "loose" : { + "type" : "boolean", + "description" : "Loose verification" + }, + "trust_all" : { + "type" : "boolean", + "description" : "Trust any certificate" + }, + "trusted_certs" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "Trusted cert. ids" + } + }, + "type" : "object" + }, + "timeout" : { + "type" : "number", + "description" : "???" + }, + "izanami_url" : { + "type" : "string", + "description" : "???" + }, + "client_secret" : { + "type" : "string", + "description" : "???" + }, + "config_id" : { + "type" : "string", + "description" : "???" + } + } + }, "otoroshi.next.models.NgRouteDomainAndPathWrapper" : { "type" : "object", "description" : "???", @@ -27460,6 +28319,11 @@ "url" : { "type" : "string", "description" : "???" + }, + "timeout" : { + "type" : "integer", + "format" : "int32", + "description" : "???" } } }, @@ -27679,12 +28543,14 @@ "description" : "???" }, "provider" : { + "description" : "null type", "type" : "string", - "description" : "???" + "nullable" : true }, "dataCenter" : { + "description" : "null type", "type" : "string", - "description" : "???" + "nullable" : true }, "rack" : { "type" : "string", @@ -27792,6 +28658,16 @@ } } }, + "otoroshi.next.plugins.NgDeferPlugin" : { + "type" : "object", + "description" : "???", + "properties" : { + "duration" : { + "type" : "number", + "description" : "???" + } + } + }, "otoroshi.next.plugins.EurekaServerConfig" : { "type" : "object", "description" : "???", @@ -27894,12 +28770,14 @@ "description" : "???" }, "provider" : { + "description" : "null type", "type" : "string", - "description" : "???" + "nullable" : true }, "dataCenter" : { + "description" : "null type", "type" : "string", - "description" : "???" + "nullable" : true }, "rack" : { "type" : "string", @@ -28038,6 +28916,61 @@ } } }, + "otoroshi.next.plugins.NgHasAllowedUsersValidator" : { + "type" : "object", + "description" : "???", + "properties" : { + "profile_not_match" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "???" + }, + "profile_match" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "???" + }, + "email_domains" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "???" + }, + "usernames" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "???" + }, + "metadata_match" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "???" + }, + "metadata_not_match" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "???" + }, + "emails" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "???" + } + } + }, "otoroshi.plugins.jwt.JwtUserExtractor" : { "type" : "object", "description" : "???", @@ -28178,6 +29111,11 @@ "url" : { "type" : "string", "description" : "???" + }, + "timeout" : { + "type" : "integer", + "format" : "int32", + "description" : "???" } } }, @@ -28397,12 +29335,14 @@ "description" : "???" }, "provider" : { + "description" : "null type", "type" : "string", - "description" : "???" + "nullable" : true }, "dataCenter" : { + "description" : "null type", "type" : "string", - "description" : "???" + "nullable" : true }, "rack" : { "type" : "string", @@ -28483,11 +29423,6 @@ } } }, - "otoroshi.auth.SAMLSignatureAlgorithm" : { - "type" : "object", - "description" : "???", - "properties" : { } - }, "otoroshi.next.plugins.ForceHttpsTraffic" : { "type" : "object", "description" : "???", @@ -29509,6 +30444,13 @@ }, "description" : "Possibles lines for Otoroshi" }, + "extensions" : { + "type" : "object", + "additionalProperties" : { + "type" : "object" + }, + "description" : "???" + }, "middleFingers" : { "type" : "boolean", "description" : "Use middle finger emoji as a response character for endless HTTP responses" @@ -30054,6 +30996,16 @@ "type" : "string" } }, + "otoroshi.next.plugins.NgUserAgentExtractorConfig" : { + "type" : "object", + "description" : "???", + "properties" : { + "log" : { + "type" : "boolean", + "description" : "???" + } + } + }, "otoroshi.plugins.discovery.DiscoverySelfRegistrationSink" : { "type" : "object", "description" : "???", @@ -30078,6 +31030,31 @@ "type" : "object", "description" : "Ref to an exporter id" }, + "otoroshi.next.plugins.NgMultiAuthModuleConfig" : { + "type" : "object", + "description" : "???", + "properties" : { + "modules" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "???" + }, + "pass_with_apikey" : { + "type" : "boolean", + "description" : "???" + }, + "use_email_prompt" : { + "type" : "boolean", + "description" : "???" + }, + "users_groups" : { + "type" : "object", + "description" : "???" + } + } + }, "otoroshi.ssl.pki.models.GenKeyPairQuery" : { "type" : "object", "description" : "Settings for generating a keypair", @@ -30107,6 +31084,17 @@ } } }, + "otoroshi.next.plugins.AccessValidatorContext" : { + "type" : "object", + "description" : "???", + "properties" : { + "ctx" : { + "description" : "???", + "properties" : { }, + "type" : "object" + } + } + }, "otoroshi.next.plugins.NgFaultConfig" : { "type" : "object", "description" : "???", @@ -30153,6 +31141,64 @@ "description" : "???", "properties" : { } }, + "otoroshi.next.plugins.NgHasClientCertMatchingHttpValidatorConfig" : { + "type" : "object", + "description" : "???", + "properties" : { + "method" : { + "type" : "string", + "description" : "???" + }, + "timeout" : { + "type" : "integer", + "format" : "int64", + "description" : "???" + }, + "tls" : { + "description" : "???", + "properties" : { + "enabled" : { + "type" : "boolean", + "description" : "Enabled" + }, + "certs" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "Trusted cert. ids" + }, + "loose" : { + "type" : "boolean", + "description" : "Loose verification" + }, + "trust_all" : { + "type" : "boolean", + "description" : "Trust any certificate" + }, + "trusted_certs" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "Trusted cert. ids" + } + }, + "type" : "object" + }, + "url" : { + "type" : "string", + "description" : "???" + }, + "headers" : { + "type" : "object", + "additionalProperties" : { + "type" : "string" + }, + "description" : "???" + } + } + }, "otoroshi.next.plugins.ReadOnlyCalls" : { "type" : "object", "description" : "???", @@ -30269,17 +31315,56 @@ "type" : "object", "description" : "???", "properties" : { - "memory_pages" : { + "allowedHosts" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "???" + }, + "memoryPages" : { "type" : "integer", "format" : "int32", "description" : "???" }, - "preserve" : { - "type" : "boolean", + "killOptions" : { + "description" : "???", + "properties" : { + "maxUnusedDuration" : { + "type" : "number", + "description" : "???" + }, + "immortal" : { + "type" : "boolean", + "description" : "???" + }, + "maxAvgCallDuration" : { + "type" : "number", + "description" : "???" + }, + "maxMemoryUsage" : { + "type" : "number", + "format" : "double", + "description" : "???" + }, + "maxCalls" : { + "type" : "integer", + "format" : "int32", + "description" : "???" + } + }, + "type" : "object" + }, + "allowedPaths" : { + "type" : "object", + "additionalProperties" : { + "type" : "string" + }, "description" : "???" }, - "opa" : { - "type" : "boolean", + "instances" : { + "type" : "integer", + "format" : "int32", "description" : "???" }, "config" : { @@ -30289,10 +31374,37 @@ }, "description" : "???" }, + "source" : { + "description" : "???", + "properties" : { + "kind" : { + "description" : "???", + "properties" : { }, + "type" : "object" + }, + "path" : { + "type" : "string", + "description" : "???" + }, + "opts" : { + "type" : "object", + "description" : "???" + } + }, + "type" : "object" + }, "authorizations" : { "description" : "???", "properties" : { - "global_map_access" : { + "proxyStateAccess" : { + "type" : "boolean", + "description" : "???" + }, + "httpAccess" : { + "type" : "boolean", + "description" : "???" + }, + "globalMapAccess" : { "description" : "???", "properties" : { "read" : { @@ -30306,7 +31418,7 @@ }, "type" : "object" }, - "plugin_map_access" : { + "pluginDataStoreAccess" : { "description" : "???", "properties" : { "read" : { @@ -30320,7 +31432,7 @@ }, "type" : "object" }, - "global_data_store_access" : { + "pluginMapAccess" : { "description" : "???", "properties" : { "read" : { @@ -30334,20 +31446,16 @@ }, "type" : "object" }, - "http_access" : { - "type" : "boolean", + "proxyHttpCallTimeout" : { + "type" : "integer", + "format" : "int32", "description" : "???" }, - "configuration_access" : { + "configurationAccess" : { "type" : "boolean", "description" : "???" }, - "proxy_http_call_timeout" : { - "type" : "integer", - "format" : "int32", - "description" : "???" - }, - "plugin_data_store_access" : { + "globalDataStoreAccess" : { "description" : "???", "properties" : { "read" : { @@ -30360,55 +31468,22 @@ } }, "type" : "object" - }, - "proxy_state_access" : { - "type" : "boolean", - "description" : "???" } }, "type" : "object" }, - "function_name" : { - "description" : "null type", - "type" : "string", - "nullable" : true - }, - "wasi" : { + "opa" : { "type" : "boolean", "description" : "???" }, - "source" : { - "description" : "???", - "properties" : { - "kind" : { - "description" : "???", - "properties" : { }, - "type" : "object" - }, - "path" : { - "type" : "string", - "description" : "???" - }, - "opts" : { - "type" : "object", - "description" : "???" - } - }, - "type" : "object" - }, - "allowed_paths" : { - "type" : "object", - "additionalProperties" : { - "type" : "string" - }, + "wasi" : { + "type" : "boolean", "description" : "???" }, - "allowed_hosts" : { - "type" : "array", - "items" : { - "type" : "string" - }, - "description" : "???" + "functionName" : { + "description" : "null type", + "type" : "string", + "nullable" : true } } }, @@ -30820,17 +31895,56 @@ "type" : "object", "description" : "???", "properties" : { - "memory_pages" : { + "allowedHosts" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "???" + }, + "memoryPages" : { "type" : "integer", "format" : "int32", "description" : "???" }, - "preserve" : { - "type" : "boolean", + "killOptions" : { + "description" : "???", + "properties" : { + "maxUnusedDuration" : { + "type" : "number", + "description" : "???" + }, + "immortal" : { + "type" : "boolean", + "description" : "???" + }, + "maxAvgCallDuration" : { + "type" : "number", + "description" : "???" + }, + "maxMemoryUsage" : { + "type" : "number", + "format" : "double", + "description" : "???" + }, + "maxCalls" : { + "type" : "integer", + "format" : "int32", + "description" : "???" + } + }, + "type" : "object" + }, + "allowedPaths" : { + "type" : "object", + "additionalProperties" : { + "type" : "string" + }, "description" : "???" }, - "opa" : { - "type" : "boolean", + "instances" : { + "type" : "integer", + "format" : "int32", "description" : "???" }, "config" : { @@ -30840,10 +31954,37 @@ }, "description" : "???" }, + "source" : { + "description" : "???", + "properties" : { + "kind" : { + "description" : "???", + "properties" : { }, + "type" : "object" + }, + "path" : { + "type" : "string", + "description" : "???" + }, + "opts" : { + "type" : "object", + "description" : "???" + } + }, + "type" : "object" + }, "authorizations" : { "description" : "???", "properties" : { - "global_map_access" : { + "proxyStateAccess" : { + "type" : "boolean", + "description" : "???" + }, + "httpAccess" : { + "type" : "boolean", + "description" : "???" + }, + "globalMapAccess" : { "description" : "???", "properties" : { "read" : { @@ -30857,7 +31998,7 @@ }, "type" : "object" }, - "plugin_map_access" : { + "pluginDataStoreAccess" : { "description" : "???", "properties" : { "read" : { @@ -30871,7 +32012,7 @@ }, "type" : "object" }, - "global_data_store_access" : { + "pluginMapAccess" : { "description" : "???", "properties" : { "read" : { @@ -30885,20 +32026,16 @@ }, "type" : "object" }, - "http_access" : { - "type" : "boolean", + "proxyHttpCallTimeout" : { + "type" : "integer", + "format" : "int32", "description" : "???" }, - "configuration_access" : { + "configurationAccess" : { "type" : "boolean", "description" : "???" }, - "proxy_http_call_timeout" : { - "type" : "integer", - "format" : "int32", - "description" : "???" - }, - "plugin_data_store_access" : { + "globalDataStoreAccess" : { "description" : "???", "properties" : { "read" : { @@ -30911,55 +32048,22 @@ } }, "type" : "object" - }, - "proxy_state_access" : { - "type" : "boolean", - "description" : "???" } }, "type" : "object" }, - "function_name" : { - "description" : "null type", - "type" : "string", - "nullable" : true - }, - "wasi" : { + "opa" : { "type" : "boolean", "description" : "???" }, - "source" : { - "description" : "???", - "properties" : { - "kind" : { - "description" : "???", - "properties" : { }, - "type" : "object" - }, - "path" : { - "type" : "string", - "description" : "???" - }, - "opts" : { - "type" : "object", - "description" : "???" - } - }, - "type" : "object" - }, - "allowed_paths" : { - "type" : "object", - "additionalProperties" : { - "type" : "string" - }, + "wasi" : { + "type" : "boolean", "description" : "???" }, - "allowed_hosts" : { - "type" : "array", - "items" : { - "type" : "string" - }, - "description" : "???" + "functionName" : { + "description" : "null type", + "type" : "string", + "nullable" : true } } }, @@ -31526,6 +32630,22 @@ "description" : "???", "properties" : { } }, + "otoroshi.next.plugins.NgTrafficMirroringConfig" : { + "type" : "object", + "description" : "???", + "properties" : { + "legacy" : { + "description" : "???", + "properties" : { + "conf" : { + "type" : "object", + "description" : "???" + } + }, + "type" : "object" + } + } + }, "otoroshi.next.plugins.WasmException" : { "type" : "object", "description" : "???", @@ -31693,6 +32813,70 @@ "type" : "string", "description" : "A string representation of a Distinguished Name" }, + "otoroshi.next.plugins.NgDiscoveryTargetsSelector" : { + "type" : "object", + "description" : "???", + "properties" : { + "raw" : { + "type" : "object", + "description" : "???" + } + } + }, + "otoroshi.next.plugins.NgResponseCache" : { + "type" : "object", + "description" : "???", + "properties" : { + "ttl" : { + "type" : "integer", + "format" : "int64", + "description" : "???" + }, + "max_size" : { + "type" : "integer", + "format" : "int64", + "description" : "???" + }, + "auto_clean" : { + "type" : "boolean", + "description" : "???" + }, + "filter" : { + "description" : "???", + "type" : "object", + "properties" : { + "paths" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "???" + }, + "methods" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "???" + }, + "not_methods" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "???" + }, + "not_paths" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "???" + } + } + } + } + }, "Any" : { "type" : "object" }, @@ -31845,6 +33029,11 @@ "value" : { "type" : "object", "description" : "???" + }, + "error" : { + "description" : "null type", + "type" : "string", + "nullable" : true } }, "type" : "object" @@ -31874,6 +33063,88 @@ } } }, + "otoroshi.next.plugins.NgIzanamiV1ProxyConfig" : { + "type" : "object", + "description" : "???", + "properties" : { + "features_enabled" : { + "type" : "boolean", + "description" : "???" + }, + "client_secret" : { + "type" : "string", + "description" : "???" + }, + "features_with_context_enabled" : { + "type" : "boolean", + "description" : "???" + }, + "config_pattern" : { + "type" : "string", + "description" : "???" + }, + "feature_pattern" : { + "type" : "string", + "description" : "???" + }, + "client_id" : { + "type" : "string", + "description" : "???" + }, + "tls" : { + "description" : "???", + "properties" : { + "enabled" : { + "type" : "boolean", + "description" : "Enabled" + }, + "certs" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "Trusted cert. ids" + }, + "loose" : { + "type" : "boolean", + "description" : "Loose verification" + }, + "trust_all" : { + "type" : "boolean", + "description" : "Trust any certificate" + }, + "trusted_certs" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "Trusted cert. ids" + } + }, + "type" : "object" + }, + "izanami_url" : { + "type" : "string", + "description" : "???" + }, + "timeout" : { + "type" : "number", + "description" : "???" + }, + "path" : { + "type" : "string", + "description" : "???" + }, + "auto_context" : { + "type" : "boolean", + "description" : "???" + }, + "configuration_enabled" : { + "type" : "boolean", + "description" : "???" + } + } + }, "otoroshi.next.plugins.EurekaTargetConfig" : { "type" : "object", "description" : "???", @@ -31952,234 +33223,707 @@ } } }, - "otoroshi.ssl.pki.models.SignCertResponse" : { - "type" : "object", - "description" : "Response for a certificate signing operation", - "properties" : { - "cert" : { - "type" : "string", - "description" : "Cert (PEM encoded)" - }, - "csr" : { - "type" : "string", - "description" : "CSR (PEM encoded)" - }, - "ca" : { - "description" : "null type", - "type" : "string", - "nullable" : true - } - } - }, - "otoroshi.plugins.discovery.DiscoveryTargetsSelector" : { - "type" : "object", - "description" : "???", - "properties" : { } - }, - "otoroshi.next.models.NgDomainAndPath" : { - "type" : "string", - "description" : "A string representing a domain and an optional path" - }, - "otoroshi.next.plugins.JQ" : { + "otoroshi.next.plugins.NgRequestContext" : { "type" : "object", "description" : "???", "properties" : { - "request" : { - "type" : "string", - "description" : "???" - }, - "response" : { + "id" : { "type" : "string", "description" : "???" - } - } - }, - "otoroshi.events.KafkaConfig" : { - "properties" : { - "type" : { - "type" : "string", - "description" : "the kind of exporter", - "enum" : [ "elastic", "webhook", "kafka", "pulsar", "file", "mailer", "custom", "console", "metrics" ] - }, - "sendEvents" : { - "type" : "boolean", - "description" : "Send events to it, or just connect" - }, - "truststore" : { - "description" : "null type", - "type" : "string", - "nullable" : true - }, - "hostValidation" : { - "type" : "boolean", - "description" : "Enabled TLS hostname validation" }, - "servers" : { - "type" : "array", - "items" : { - "type" : "string" + "config" : { + "description" : "???", + "properties" : { + "legacy" : { + "description" : "???", + "properties" : { + "conf" : { + "type" : "object", + "description" : "???" + } + }, + "type" : "object" + } }, - "description" : "URLs of the kafka servers" + "type" : "object" }, - "mtlsConfig" : { - "description" : "TLS config to access the cluster", + "route" : { + "description" : "???", "properties" : { - "mtls" : { + "debug_flow" : { "type" : "boolean", - "description" : "???" + "description" : "Enable report debugging" }, - "loose" : { + "enabled" : { "type" : "boolean", - "description" : "???" + "description" : "Is the route enabled" }, - "trustAll" : { + "name" : { + "type" : "string", + "description" : "The name of the route" + }, + "id" : { + "type" : "string", + "description" : "The ud of the route" + }, + "export_reporting" : { "type" : "boolean", - "description" : "???" + "description" : "Export the execution reporting through standard data exporter" }, - "trustedCerts" : { + "metadata" : { + "type" : "object", + "additionalProperties" : { + "type" : "string" + }, + "description" : "The metadata of the route" + }, + "frontend" : { + "description" : "The frontend of the route", + "properties" : { + "headers" : { + "type" : "object", + "additionalProperties" : { + "type" : "string" + }, + "description" : "the headers that will be matched" + }, + "query" : { + "type" : "object", + "additionalProperties" : { + "type" : "string" + }, + "description" : "the query params that will be matched" + }, + "domains" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "The domain and path that will be matched" + }, + "methods" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "the http methods that will be matched" + }, + "exact" : { + "type" : "boolean", + "description" : "Match on exact path ?" + }, + "strip_path" : { + "type" : "boolean", + "description" : "Is path stripped from backend request" + } + }, + "type" : "object" + }, + "_loc" : { + "description" : "The location of the route", + "properties" : { + "tenant" : { + "description" : "Organization of the current entity", + "type" : "string" + }, + "teams" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "Teams of the current entity" + } + }, + "type" : "object" + }, + "tags" : { "type" : "array", "items" : { "type" : "string" }, - "description" : "???" + "description" : "The tags of the route" }, - "certs" : { + "capture" : { + "type" : "boolean", + "description" : "Capture http traffic" + }, + "groups" : { "type" : "array", "items" : { "type" : "string" }, - "description" : "???" - } - }, - "type" : "object" - }, - "securityProtocol" : { - "type" : "string", - "description" : "Used security protocol" - }, - "keystore" : { - "description" : "null type", - "type" : "string", - "nullable" : true - }, - "topic" : { - "type" : "string", - "description" : "Optional kafka topic (otoroshi-events by default)" - }, - "keyPass" : { - "description" : "null type", - "type" : "string", - "nullable" : true - }, - "saslConfig" : { - "description" : "SASL configuration", - "type" : "object", - "properties" : { - "username" : { - "type" : "string", - "description" : "SASL username" + "description" : "The groups of the route" }, - "password" : { + "backend_ref" : { + "description" : "null type", "type" : "string", - "description" : "SASL password" + "nullable" : true }, - "mechanism" : { + "description" : { "type" : "string", - "description" : "SASL login mechanism" - } - } - } - }, - "type" : "object", - "description" : "???" - }, - "otoroshi.next.plugins.SnowMonkeyChaos" : { - "type" : "object", - "description" : "???", - "properties" : { - "large_request_fault_config" : { - "description" : "???", - "type" : "object", - "properties" : { - "ratio" : { - "type" : "number", - "format" : "double", - "description" : "???" - }, - "additional_request_size" : { - "type" : "integer", - "format" : "int32", - "description" : "???" - } - } - }, - "large_response_fault_config" : { - "description" : "???", - "type" : "object", - "properties" : { - "ratio" : { - "type" : "number", - "format" : "double", - "description" : "???" - }, - "additional_response_size" : { - "type" : "integer", - "format" : "int32", - "description" : "???" - } - } - }, - "latency_injection_fault_config" : { - "description" : "???", - "type" : "object", - "properties" : { - "ratio" : { - "type" : "number", - "format" : "double", - "description" : "???" - }, - "from" : { - "type" : "number", - "description" : "???" - }, - "to" : { - "type" : "number", - "description" : "???" - } - } - }, - "bad_responses_fault_config" : { - "description" : "???", - "type" : "object", - "properties" : { - "ratio" : { - "type" : "number", - "format" : "double", - "description" : "???" + "description" : "The description of the route" }, - "responses" : { - "type" : "array", - "items" : { - "properties" : { - "status" : { - "type" : "integer", - "format" : "int32", - "description" : "???" - }, - "headers" : { - "type" : "object", - "additionalProperties" : { - "type" : "string" - }, - "description" : "???" - }, - "body" : { - "type" : "string", - "description" : "???" - } + "backend" : { + "description" : "The backend of the route", + "properties" : { + "root" : { + "type" : "string", + "description" : "The root path of the backend or the full rewrite path" }, - "type" : "object" - }, + "health_check" : { + "description" : "???", + "type" : "object", + "properties" : { + "enabled" : { + "type" : "boolean", + "description" : "???" + }, + "url" : { + "type" : "string", + "description" : "???" + }, + "timeout" : { + "type" : "integer", + "format" : "int32", + "description" : "???" + } + } + }, + "client" : { + "description" : "Client config. of the backend", + "properties" : { + "idle_timeout" : { + "type" : "integer", + "format" : "int64", + "description" : "Timeout on idle connection" + }, + "sample_interval" : { + "type" : "integer", + "format" : "int64", + "description" : "Specify the sliding window time for the circuit breaker in milliseconds, after this time, error count will be reseted" + }, + "cache_connection_settings" : { + "description" : "Cached connection settings", + "properties" : { + "queue_size" : { + "type" : "integer", + "format" : "int32", + "description" : "How much request can be queue before dropping it" + }, + "enabled" : { + "type" : "boolean", + "description" : "Is cached connection enabled" + } + }, + "type" : "object" + }, + "call_and_stream_timeout" : { + "type" : "integer", + "format" : "int64", + "description" : "Specify how long each call should last at most in milliseconds (hard timeout, connection will be closed after that duration)" + }, + "custom_timeouts" : { + "type" : "array", + "items" : { + "properties" : { + "connection_timeout" : { + "type" : "integer", + "format" : "int64", + "description" : "Timeout at connection" + }, + "call_and_stream_timeout" : { + "type" : "integer", + "format" : "int64", + "description" : "Specify how long each call should last at most in milliseconds (hard timeout, connection will be closed after that duration)" + }, + "path" : { + "type" : "string", + "description" : "path on which this configuration works" + }, + "call_timeout" : { + "type" : "integer", + "format" : "int64", + "description" : "Specify how long each call should last at most in milliseconds (soft timeout as it's enforced by the circuit breaker)" + }, + "idle_timeout" : { + "type" : "integer", + "format" : "int64", + "description" : "Timeout on idle connection" + }, + "global_timeout" : { + "type" : "integer", + "format" : "int64", + "description" : "Specify how long the global call (with retries) should last at most in milliseconds" + } + }, + "type" : "object" + }, + "description" : "Custom timeouts per path" + }, + "connection_timeout" : { + "type" : "integer", + "format" : "int64", + "description" : "Timeout at connection" + }, + "call_timeout" : { + "type" : "integer", + "format" : "int64", + "description" : "Specify how long each call should last at most in milliseconds (soft timeout as it's enforced by the circuit breaker)" + }, + "global_timeout" : { + "type" : "integer", + "format" : "int64", + "description" : "Specify how long the global call (with retries) should last at most in milliseconds" + }, + "retry_initial_delay" : { + "type" : "integer", + "format" : "int64", + "description" : "Specify the delay between two retries. Each retry, the delay is multiplied by the backoff factor" + }, + "backoff_factor" : { + "type" : "integer", + "format" : "int64", + "description" : "Specify the factor to multiply the delay for each retry" + }, + "proxy" : { + "description" : "Web proxy settings for http client", + "type" : "object", + "properties" : { + "host" : { + "type" : "string", + "description" : "The hostname of the proxy server." + }, + "port" : { + "type" : "string", + "description" : "The port of the proxy server." + }, + "protocol" : { + "type" : "string", + "description" : "The protocol of the proxy server. Use \"http\" or \"https\". Defaults to \"http\" if not specified." + }, + "principal" : { + "type" : "string", + "description" : "The principal (aka username) of the credentials for the proxy server." + }, + "password" : { + "type" : "string", + "description" : "The password for the credentials for the proxy server." + }, + "ntlmDomain" : { + "type" : "string", + "description" : "The ntlm domain for the proxy server." + }, + "encoding" : { + "type" : "string", + "description" : "The realm's charset." + }, + "nonProxyHosts" : { + "type" : "string", + "description" : "The non proxied hosts" + } + } + }, + "retries" : { + "type" : "integer", + "format" : "int32", + "description" : "Specify how many times the client will try to fetch the result of the request after an error before giving up." + }, + "max_errors" : { + "type" : "integer", + "format" : "int32", + "description" : "Specify how many errors can pass before opening the circuit breaker" + } + }, + "type" : "object" + }, + "load_balancing" : { + "description" : "Loadbalancing config og the backend", + "properties" : { + "type" : { + "type" : "string", + "enum" : [ "BestResponseTime", "IpAddressHash", "Random", "RoundRobin", "Sticky", "WeightedBestResponseTime" ] + }, + "ratio" : { + "type" : "number", + "format" : "double" + } + }, + "type" : "object" + }, + "rewrite" : { + "type" : "boolean", + "description" : "Does the backend performs a full url rewrite ?" + }, + "targets" : { + "type" : "array", + "items" : { + "properties" : { + "ip_address" : { + "description" : "null type", + "type" : "string", + "nullable" : true + }, + "protocol" : { + "type" : "string", + "enum" : [ "HTTP/1.0", "HTTP/1.1", "HTTP/2.0", "HTTP/3.0" ], + "description" : "Protocol for the target" + }, + "predicate" : { + "description" : "Predicate to choose this target", + "properties" : { + "type" : { + "type" : "string", + "description" : "the kind of predicate", + "enum" : [ "AlwaysMatch", "NetworkLocationMatch", "GeolocationMatch" ] + }, + "dc" : { + "type" : "string", + "description" : "???" + }, + "positions" : { + "type" : "array", + "items" : { + "properties" : { + "latitude" : { + "type" : "number", + "format" : "double", + "description" : "???" + }, + "longitude" : { + "type" : "number", + "format" : "double", + "description" : "???" + }, + "radius" : { + "type" : "number", + "format" : "double", + "description" : "???" + } + }, + "type" : "object" + }, + "description" : "???" + }, + "provider" : { + "description" : "null type", + "type" : "string", + "nullable" : true + }, + "dataCenter" : { + "description" : "null type", + "type" : "string", + "nullable" : true + }, + "rack" : { + "type" : "string", + "description" : "???" + }, + "region" : { + "type" : "string", + "description" : "???" + }, + "zone" : { + "type" : "string", + "description" : "???" + } + }, + "type" : "object" + }, + "tls_config" : { + "description" : "TLS settings to contact this target", + "properties" : { + "enabled" : { + "type" : "boolean", + "description" : "Enabled" + }, + "certs" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "Trusted cert. ids" + }, + "loose" : { + "type" : "boolean", + "description" : "Loose verification" + }, + "trust_all" : { + "type" : "boolean", + "description" : "Trust any certificate" + }, + "trusted_certs" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "Trusted cert. ids" + } + }, + "type" : "object" + }, + "tls" : { + "type" : "boolean", + "description" : "Does the target uses TLS" + }, + "port" : { + "type" : "integer", + "format" : "int32", + "description" : "port of the target" + }, + "id" : { + "type" : "string", + "description" : "id of the target" + }, + "weight" : { + "type" : "integer", + "format" : "int32", + "description" : "The weight of the target when choosing" + }, + "hostname" : { + "type" : "string", + "description" : "hostname of the target" + } + }, + "type" : "object" + }, + "description" : "The targets of the backend" + } + }, + "type" : "object" + } + }, + "type" : "object" + } + } + }, + "otoroshi.ssl.pki.models.SignCertResponse" : { + "type" : "object", + "description" : "Response for a certificate signing operation", + "properties" : { + "cert" : { + "type" : "string", + "description" : "Cert (PEM encoded)" + }, + "csr" : { + "type" : "string", + "description" : "CSR (PEM encoded)" + }, + "ca" : { + "description" : "null type", + "type" : "string", + "nullable" : true + } + } + }, + "otoroshi.plugins.discovery.DiscoveryTargetsSelector" : { + "type" : "object", + "description" : "???", + "properties" : { } + }, + "otoroshi.next.models.NgDomainAndPath" : { + "type" : "string", + "description" : "A string representing a domain and an optional path" + }, + "otoroshi.next.plugins.JQ" : { + "type" : "object", + "description" : "???", + "properties" : { + "request" : { + "type" : "string", + "description" : "???" + }, + "response" : { + "type" : "string", + "description" : "???" + } + } + }, + "otoroshi.events.KafkaConfig" : { + "properties" : { + "type" : { + "type" : "string", + "description" : "the kind of exporter", + "enum" : [ "elastic", "webhook", "kafka", "pulsar", "file", "mailer", "custom", "console", "metrics" ] + }, + "sendEvents" : { + "type" : "boolean", + "description" : "Send events to it, or just connect" + }, + "truststore" : { + "description" : "null type", + "type" : "string", + "nullable" : true + }, + "hostValidation" : { + "type" : "boolean", + "description" : "Enabled TLS hostname validation" + }, + "servers" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "URLs of the kafka servers" + }, + "mtlsConfig" : { + "description" : "TLS config to access the cluster", + "properties" : { + "mtls" : { + "type" : "boolean", + "description" : "???" + }, + "loose" : { + "type" : "boolean", + "description" : "???" + }, + "trustAll" : { + "type" : "boolean", + "description" : "???" + }, + "trustedCerts" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "???" + }, + "certs" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "???" + } + }, + "type" : "object" + }, + "securityProtocol" : { + "type" : "string", + "description" : "Used security protocol" + }, + "keystore" : { + "description" : "null type", + "type" : "string", + "nullable" : true + }, + "topic" : { + "type" : "string", + "description" : "Optional kafka topic (otoroshi-events by default)" + }, + "keyPass" : { + "description" : "null type", + "type" : "string", + "nullable" : true + }, + "saslConfig" : { + "description" : "SASL configuration", + "type" : "object", + "properties" : { + "username" : { + "type" : "string", + "description" : "SASL username" + }, + "password" : { + "type" : "string", + "description" : "SASL password" + }, + "mechanism" : { + "type" : "string", + "description" : "SASL login mechanism" + } + } + } + }, + "type" : "object", + "description" : "???" + }, + "otoroshi.next.plugins.SnowMonkeyChaos" : { + "type" : "object", + "description" : "???", + "properties" : { + "large_request_fault_config" : { + "description" : "???", + "type" : "object", + "properties" : { + "ratio" : { + "type" : "number", + "format" : "double", + "description" : "???" + }, + "additional_request_size" : { + "type" : "integer", + "format" : "int32", + "description" : "???" + } + } + }, + "large_response_fault_config" : { + "description" : "???", + "type" : "object", + "properties" : { + "ratio" : { + "type" : "number", + "format" : "double", + "description" : "???" + }, + "additional_response_size" : { + "type" : "integer", + "format" : "int32", + "description" : "???" + } + } + }, + "latency_injection_fault_config" : { + "description" : "???", + "type" : "object", + "properties" : { + "ratio" : { + "type" : "number", + "format" : "double", + "description" : "???" + }, + "from" : { + "type" : "number", + "description" : "???" + }, + "to" : { + "type" : "number", + "description" : "???" + } + } + }, + "bad_responses_fault_config" : { + "description" : "???", + "type" : "object", + "properties" : { + "ratio" : { + "type" : "number", + "format" : "double", + "description" : "???" + }, + "responses" : { + "type" : "array", + "items" : { + "properties" : { + "status" : { + "type" : "integer", + "format" : "int32", + "description" : "???" + }, + "headers" : { + "type" : "object", + "additionalProperties" : { + "type" : "string" + }, + "description" : "???" + }, + "body" : { + "type" : "string", + "description" : "???" + } + }, + "type" : "object" + }, "description" : "???" } } @@ -32215,17 +33959,56 @@ "config" : { "description" : "???", "properties" : { - "memory_pages" : { + "allowedHosts" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "???" + }, + "memoryPages" : { "type" : "integer", "format" : "int32", "description" : "???" }, - "preserve" : { - "type" : "boolean", + "killOptions" : { + "description" : "???", + "properties" : { + "maxUnusedDuration" : { + "type" : "number", + "description" : "???" + }, + "immortal" : { + "type" : "boolean", + "description" : "???" + }, + "maxAvgCallDuration" : { + "type" : "number", + "description" : "???" + }, + "maxMemoryUsage" : { + "type" : "number", + "format" : "double", + "description" : "???" + }, + "maxCalls" : { + "type" : "integer", + "format" : "int32", + "description" : "???" + } + }, + "type" : "object" + }, + "allowedPaths" : { + "type" : "object", + "additionalProperties" : { + "type" : "string" + }, "description" : "???" }, - "opa" : { - "type" : "boolean", + "instances" : { + "type" : "integer", + "format" : "int32", "description" : "???" }, "config" : { @@ -32235,10 +34018,37 @@ }, "description" : "???" }, + "source" : { + "description" : "???", + "properties" : { + "kind" : { + "description" : "???", + "properties" : { }, + "type" : "object" + }, + "path" : { + "type" : "string", + "description" : "???" + }, + "opts" : { + "type" : "object", + "description" : "???" + } + }, + "type" : "object" + }, "authorizations" : { "description" : "???", "properties" : { - "global_map_access" : { + "proxyStateAccess" : { + "type" : "boolean", + "description" : "???" + }, + "httpAccess" : { + "type" : "boolean", + "description" : "???" + }, + "globalMapAccess" : { "description" : "???", "properties" : { "read" : { @@ -32252,7 +34062,7 @@ }, "type" : "object" }, - "plugin_map_access" : { + "pluginDataStoreAccess" : { "description" : "???", "properties" : { "read" : { @@ -32266,7 +34076,7 @@ }, "type" : "object" }, - "global_data_store_access" : { + "pluginMapAccess" : { "description" : "???", "properties" : { "read" : { @@ -32280,20 +34090,16 @@ }, "type" : "object" }, - "http_access" : { - "type" : "boolean", + "proxyHttpCallTimeout" : { + "type" : "integer", + "format" : "int32", "description" : "???" }, - "configuration_access" : { + "configurationAccess" : { "type" : "boolean", "description" : "???" }, - "proxy_http_call_timeout" : { - "type" : "integer", - "format" : "int32", - "description" : "???" - }, - "plugin_data_store_access" : { + "globalDataStoreAccess" : { "description" : "???", "properties" : { "read" : { @@ -32306,55 +34112,22 @@ } }, "type" : "object" - }, - "proxy_state_access" : { - "type" : "boolean", - "description" : "???" } }, "type" : "object" }, - "function_name" : { - "description" : "null type", - "type" : "string", - "nullable" : true - }, - "wasi" : { + "opa" : { "type" : "boolean", "description" : "???" }, - "source" : { - "description" : "???", - "properties" : { - "kind" : { - "description" : "???", - "properties" : { }, - "type" : "object" - }, - "path" : { - "type" : "string", - "description" : "???" - }, - "opts" : { - "type" : "object", - "description" : "???" - } - }, - "type" : "object" - }, - "allowed_paths" : { - "type" : "object", - "additionalProperties" : { - "type" : "string" - }, + "wasi" : { + "type" : "boolean", "description" : "???" }, - "allowed_hosts" : { - "type" : "array", - "items" : { - "type" : "string" - }, - "description" : "???" + "functionName" : { + "description" : "null type", + "type" : "string", + "nullable" : true } }, "type" : "object" @@ -32486,6 +34259,20 @@ } } }, + "otoroshi.next.plugins.NgMaxMindGeolocationInfoExtractor" : { + "type" : "object", + "description" : "???", + "properties" : { + "path" : { + "type" : "string", + "description" : "???" + }, + "log" : { + "type" : "boolean", + "description" : "???" + } + } + }, "otoroshi.next.plugins.wrappers.AccessValidatorWrapper" : { "type" : "object", "description" : "???", @@ -32764,6 +34551,24 @@ } } }, + "otoroshi.next.plugins.SubIss" : { + "type" : "object", + "description" : "???", + "properties" : { + "sn" : { + "type" : "string", + "description" : "???" + }, + "subject" : { + "description" : "???", + "type" : "string" + }, + "issuer" : { + "description" : "???", + "type" : "string" + } + } + }, "otoroshi.script.plugins.Plugins" : { "type" : "object", "description" : "Settings for plugins (of any kind)", @@ -32861,12 +34666,14 @@ "description" : "???" }, "provider" : { + "description" : "null type", "type" : "string", - "description" : "???" + "nullable" : true }, "dataCenter" : { + "description" : "null type", "type" : "string", - "description" : "???" + "nullable" : true }, "rack" : { "type" : "string", @@ -32967,6 +34774,16 @@ "description" : "???", "properties" : { } }, + "otoroshi.next.plugins.NgDeferPluginConfig" : { + "type" : "object", + "description" : "???", + "properties" : { + "duration" : { + "type" : "number", + "description" : "???" + } + } + }, "otoroshi.plugins.workflow.WorkflowJob" : { "type" : "object", "description" : "???", @@ -33102,112 +34919,63 @@ "type" : "object", "description" : "???", "properties" : { - "memory_pages" : { - "type" : "integer", - "format" : "int32", - "description" : "???" - }, - "preserve" : { - "type" : "boolean", - "description" : "???" - }, - "opa" : { - "type" : "boolean", - "description" : "???" - }, - "config" : { - "type" : "object", - "additionalProperties" : { + "allowedHosts" : { + "type" : "array", + "items" : { "type" : "string" }, "description" : "???" }, - "authorizations" : { + "memoryPages" : { + "type" : "integer", + "format" : "int32", + "description" : "???" + }, + "killOptions" : { "description" : "???", "properties" : { - "global_map_access" : { - "description" : "???", - "properties" : { - "read" : { - "type" : "boolean", - "description" : "???" - }, - "write" : { - "type" : "boolean", - "description" : "???" - } - }, - "type" : "object" - }, - "plugin_map_access" : { - "description" : "???", - "properties" : { - "read" : { - "type" : "boolean", - "description" : "???" - }, - "write" : { - "type" : "boolean", - "description" : "???" - } - }, - "type" : "object" - }, - "global_data_store_access" : { - "description" : "???", - "properties" : { - "read" : { - "type" : "boolean", - "description" : "???" - }, - "write" : { - "type" : "boolean", - "description" : "???" - } - }, - "type" : "object" - }, - "http_access" : { - "type" : "boolean", + "maxUnusedDuration" : { + "type" : "number", "description" : "???" }, - "configuration_access" : { + "immortal" : { "type" : "boolean", "description" : "???" }, - "proxy_http_call_timeout" : { - "type" : "integer", - "format" : "int32", + "maxAvgCallDuration" : { + "type" : "number", "description" : "???" }, - "plugin_data_store_access" : { - "description" : "???", - "properties" : { - "read" : { - "type" : "boolean", - "description" : "???" - }, - "write" : { - "type" : "boolean", - "description" : "???" - } - }, - "type" : "object" + "maxMemoryUsage" : { + "type" : "number", + "format" : "double", + "description" : "???" }, - "proxy_state_access" : { - "type" : "boolean", + "maxCalls" : { + "type" : "integer", + "format" : "int32", "description" : "???" } }, "type" : "object" }, - "function_name" : { - "description" : "null type", - "type" : "string", - "nullable" : true + "allowedPaths" : { + "type" : "object", + "additionalProperties" : { + "type" : "string" + }, + "description" : "???" }, - "wasi" : { - "type" : "boolean", + "instances" : { + "type" : "integer", + "format" : "int32", + "description" : "???" + }, + "config" : { + "type" : "object", + "additionalProperties" : { + "type" : "string" + }, "description" : "???" }, "source" : { @@ -33229,18 +34997,163 @@ }, "type" : "object" }, - "allowed_paths" : { - "type" : "object", - "additionalProperties" : { - "type" : "string" + "authorizations" : { + "description" : "???", + "properties" : { + "proxyStateAccess" : { + "type" : "boolean", + "description" : "???" + }, + "httpAccess" : { + "type" : "boolean", + "description" : "???" + }, + "globalMapAccess" : { + "description" : "???", + "properties" : { + "read" : { + "type" : "boolean", + "description" : "???" + }, + "write" : { + "type" : "boolean", + "description" : "???" + } + }, + "type" : "object" + }, + "pluginDataStoreAccess" : { + "description" : "???", + "properties" : { + "read" : { + "type" : "boolean", + "description" : "???" + }, + "write" : { + "type" : "boolean", + "description" : "???" + } + }, + "type" : "object" + }, + "pluginMapAccess" : { + "description" : "???", + "properties" : { + "read" : { + "type" : "boolean", + "description" : "???" + }, + "write" : { + "type" : "boolean", + "description" : "???" + } + }, + "type" : "object" + }, + "proxyHttpCallTimeout" : { + "type" : "integer", + "format" : "int32", + "description" : "???" + }, + "configurationAccess" : { + "type" : "boolean", + "description" : "???" + }, + "globalDataStoreAccess" : { + "description" : "???", + "properties" : { + "read" : { + "type" : "boolean", + "description" : "???" + }, + "write" : { + "type" : "boolean", + "description" : "???" + } + }, + "type" : "object" + } }, + "type" : "object" + }, + "opa" : { + "type" : "boolean", "description" : "???" }, - "allowed_hosts" : { - "type" : "array", - "items" : { - "type" : "string" + "wasi" : { + "type" : "boolean", + "description" : "???" + }, + "functionName" : { + "description" : "null type", + "type" : "string", + "nullable" : true + } + } + }, + "otoroshi.next.plugins.NgIzanamiV1Canary" : { + "type" : "object", + "description" : "???", + "properties" : { + "client_id" : { + "type" : "string", + "description" : "???" + }, + "experiment_id" : { + "type" : "string", + "description" : "???" + }, + "route_config" : { + "description" : "null type", + "type" : "string", + "nullable" : true + }, + "tls" : { + "description" : "???", + "properties" : { + "enabled" : { + "type" : "boolean", + "description" : "Enabled" + }, + "certs" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "Trusted cert. ids" + }, + "loose" : { + "type" : "boolean", + "description" : "Loose verification" + }, + "trust_all" : { + "type" : "boolean", + "description" : "Trust any certificate" + }, + "trusted_certs" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "Trusted cert. ids" + } }, + "type" : "object" + }, + "timeout" : { + "type" : "number", + "description" : "???" + }, + "izanami_url" : { + "type" : "string", + "description" : "???" + }, + "client_secret" : { + "type" : "string", + "description" : "???" + }, + "config_id" : { + "type" : "string", "description" : "???" } } @@ -33286,6 +35199,47 @@ } } }, + "otoroshi.next.plugins.NgHasClientCertMatchingHttpValidator" : { + "type" : "object", + "description" : "???", + "properties" : { + "subject_dns" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "???" + }, + "serial_numbers" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "???" + }, + "issuer_dns" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "???" + }, + "regex_issuer_dns" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "???" + }, + "regex_subject_dns" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "???" + } + } + }, "otoroshi.models.InCookie" : { "properties" : { "type" : { @@ -33301,6 +35255,85 @@ "type" : "object", "description" : "JWT token location (cookie)" }, + "otoroshi.wasm.WasmAuthorizations" : { + "type" : "object", + "description" : "???", + "properties" : { + "proxyStateAccess" : { + "type" : "boolean", + "description" : "???" + }, + "httpAccess" : { + "type" : "boolean", + "description" : "???" + }, + "globalMapAccess" : { + "description" : "???", + "properties" : { + "read" : { + "type" : "boolean", + "description" : "???" + }, + "write" : { + "type" : "boolean", + "description" : "???" + } + }, + "type" : "object" + }, + "pluginDataStoreAccess" : { + "description" : "???", + "properties" : { + "read" : { + "type" : "boolean", + "description" : "???" + }, + "write" : { + "type" : "boolean", + "description" : "???" + } + }, + "type" : "object" + }, + "pluginMapAccess" : { + "description" : "???", + "properties" : { + "read" : { + "type" : "boolean", + "description" : "???" + }, + "write" : { + "type" : "boolean", + "description" : "???" + } + }, + "type" : "object" + }, + "proxyHttpCallTimeout" : { + "type" : "integer", + "format" : "int32", + "description" : "???" + }, + "configurationAccess" : { + "type" : "boolean", + "description" : "???" + }, + "globalDataStoreAccess" : { + "description" : "???", + "properties" : { + "read" : { + "type" : "boolean", + "description" : "???" + }, + "write" : { + "type" : "boolean", + "description" : "???" + } + }, + "type" : "object" + } + } + }, "otoroshi.plugins.oidc.OIDCHeaders" : { "type" : "object", "description" : "???", @@ -34381,6 +36414,11 @@ } } }, + "otoroshi.next.plugins.NgHasClientCertValidator" : { + "type" : "object", + "description" : "???", + "properties" : { } + }, "otoroshi.models.RemainingQuotas" : { "type" : "object", "description" : "Remaining quotas for an apikey", @@ -34573,6 +36611,20 @@ "description" : "???", "properties" : { } }, + "otoroshi.next.plugins.OIDCProfileHeader" : { + "type" : "object", + "description" : "???", + "properties" : { + "send" : { + "type" : "boolean", + "description" : "???" + }, + "header_name" : { + "type" : "string", + "description" : "???" + } + } + }, "otoroshi.next.models.StoredNgBackend" : { "type" : "object", "description" : "A backend that can be stored in the otoroshi datastore", @@ -34613,6 +36665,11 @@ "url" : { "type" : "string", "description" : "???" + }, + "timeout" : { + "type" : "integer", + "format" : "int32", + "description" : "???" } } }, @@ -34832,12 +36889,14 @@ "description" : "???" }, "provider" : { + "description" : "null type", "type" : "string", - "description" : "???" + "nullable" : true }, "dataCenter" : { + "description" : "null type", "type" : "string", - "description" : "???" + "nullable" : true }, "rack" : { "type" : "string", @@ -35263,6 +37322,11 @@ "url" : { "type" : "string", "description" : "???" + }, + "timeout" : { + "type" : "integer", + "format" : "int32", + "description" : "???" } } }, @@ -35297,17 +37361,56 @@ "type" : "object", "description" : "???", "properties" : { - "memory_pages" : { + "allowedHosts" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "???" + }, + "memoryPages" : { "type" : "integer", "format" : "int32", "description" : "???" }, - "preserve" : { - "type" : "boolean", + "killOptions" : { + "description" : "???", + "properties" : { + "maxUnusedDuration" : { + "type" : "number", + "description" : "???" + }, + "immortal" : { + "type" : "boolean", + "description" : "???" + }, + "maxAvgCallDuration" : { + "type" : "number", + "description" : "???" + }, + "maxMemoryUsage" : { + "type" : "number", + "format" : "double", + "description" : "???" + }, + "maxCalls" : { + "type" : "integer", + "format" : "int32", + "description" : "???" + } + }, + "type" : "object" + }, + "allowedPaths" : { + "type" : "object", + "additionalProperties" : { + "type" : "string" + }, "description" : "???" }, - "opa" : { - "type" : "boolean", + "instances" : { + "type" : "integer", + "format" : "int32", "description" : "???" }, "config" : { @@ -35317,10 +37420,37 @@ }, "description" : "???" }, + "source" : { + "description" : "???", + "properties" : { + "kind" : { + "description" : "???", + "properties" : { }, + "type" : "object" + }, + "path" : { + "type" : "string", + "description" : "???" + }, + "opts" : { + "type" : "object", + "description" : "???" + } + }, + "type" : "object" + }, "authorizations" : { "description" : "???", "properties" : { - "global_map_access" : { + "proxyStateAccess" : { + "type" : "boolean", + "description" : "???" + }, + "httpAccess" : { + "type" : "boolean", + "description" : "???" + }, + "globalMapAccess" : { "description" : "???", "properties" : { "read" : { @@ -35334,7 +37464,7 @@ }, "type" : "object" }, - "plugin_map_access" : { + "pluginDataStoreAccess" : { "description" : "???", "properties" : { "read" : { @@ -35348,7 +37478,7 @@ }, "type" : "object" }, - "global_data_store_access" : { + "pluginMapAccess" : { "description" : "???", "properties" : { "read" : { @@ -35362,20 +37492,16 @@ }, "type" : "object" }, - "http_access" : { - "type" : "boolean", + "proxyHttpCallTimeout" : { + "type" : "integer", + "format" : "int32", "description" : "???" }, - "configuration_access" : { + "configurationAccess" : { "type" : "boolean", "description" : "???" }, - "proxy_http_call_timeout" : { - "type" : "integer", - "format" : "int32", - "description" : "???" - }, - "plugin_data_store_access" : { + "globalDataStoreAccess" : { "description" : "???", "properties" : { "read" : { @@ -35388,55 +37514,22 @@ } }, "type" : "object" - }, - "proxy_state_access" : { - "type" : "boolean", - "description" : "???" } }, "type" : "object" }, - "function_name" : { - "description" : "null type", - "type" : "string", - "nullable" : true - }, - "wasi" : { + "opa" : { "type" : "boolean", "description" : "???" }, - "source" : { - "description" : "???", - "properties" : { - "kind" : { - "description" : "???", - "properties" : { }, - "type" : "object" - }, - "path" : { - "type" : "string", - "description" : "???" - }, - "opts" : { - "type" : "object", - "description" : "???" - } - }, - "type" : "object" - }, - "allowed_paths" : { - "type" : "object", - "additionalProperties" : { - "type" : "string" - }, + "wasi" : { + "type" : "boolean", "description" : "???" }, - "allowed_hosts" : { - "type" : "array", - "items" : { - "type" : "string" - }, - "description" : "???" + "functionName" : { + "description" : "null type", + "type" : "string", + "nullable" : true } } }, @@ -35458,6 +37551,41 @@ } } }, + "otoroshi.next.plugins.NgSecurityTxt" : { + "type" : "object", + "description" : "???", + "properties" : { + "preferred_languages" : { + "description" : "null type", + "type" : "string", + "nullable" : true + }, + "encryption" : { + "description" : "null type", + "type" : "string", + "nullable" : true + }, + "policy" : { + "description" : "null type", + "type" : "string", + "nullable" : true + }, + "acknowledgments" : { + "description" : "null type", + "type" : "string", + "nullable" : true + }, + "hiring" : { + "description" : "null type", + "type" : "string", + "nullable" : true + }, + "contact" : { + "type" : "string", + "description" : "???" + } + } + }, "otoroshi.models.SnowMonkeyConfig" : { "type" : "object", "description" : "Settings for the snow monkey (chaos engineering)", @@ -35631,11 +37759,6 @@ } } }, - "otoroshi.auth.NameIDFormat" : { - "type" : "object", - "description" : "???", - "properties" : { } - }, "otoroshi.next.plugins.GraphQLQuery" : { "type" : "object", "description" : "???", @@ -35699,6 +37822,11 @@ "type" : "array", "items" : { "properties" : { + "instance_id" : { + "type" : "integer", + "format" : "int32", + "description" : "???" + }, "debug" : { "type" : "boolean", "description" : "???" @@ -36012,6 +38140,11 @@ "url" : { "type" : "string", "description" : "???" + }, + "timeout" : { + "type" : "integer", + "format" : "int32", + "description" : "???" } }, "type" : "object" @@ -36730,12 +38863,14 @@ "description" : "???" }, "provider" : { + "description" : "null type", "type" : "string", - "description" : "???" + "nullable" : true }, "dataCenter" : { + "description" : "null type", "type" : "string", - "description" : "???" + "nullable" : true }, "rack" : { "type" : "string", @@ -37475,12 +39610,14 @@ "description" : "???" }, "provider" : { + "description" : "null type", "type" : "string", - "description" : "???" + "nullable" : true }, "dataCenter" : { + "description" : "null type", "type" : "string", - "description" : "???" + "nullable" : true }, "rack" : { "type" : "string", @@ -38522,6 +40659,11 @@ "url" : { "type" : "string", "description" : "???" + }, + "timeout" : { + "type" : "integer", + "format" : "int32", + "description" : "???" } }, "type" : "object" @@ -39210,12 +41352,14 @@ "description" : "???" }, "provider" : { + "description" : "null type", "type" : "string", - "description" : "???" + "nullable" : true }, "dataCenter" : { + "description" : "null type", "type" : "string", - "description" : "???" + "nullable" : true }, "rack" : { "type" : "string", @@ -39925,12 +42069,14 @@ "description" : "???" }, "provider" : { + "description" : "null type", "type" : "string", - "description" : "???" + "nullable" : true }, "dataCenter" : { + "description" : "null type", "type" : "string", - "description" : "???" + "nullable" : true }, "rack" : { "type" : "string", @@ -40994,17 +43140,6 @@ } } }, - "otoroshi.next.plugins.CachedWasmScript" : { - "type" : "object", - "description" : "???", - "properties" : { - "create_at" : { - "type" : "integer", - "format" : "int64", - "description" : "???" - } - } - }, "otoroshi.plugins.loggers.BodyLoggerFilterConfig" : { "type" : "object", "description" : "???", @@ -41243,10 +43378,70 @@ "type" : "object", "description" : "???" }, + "otoroshi.next.plugins.NgGeolocationInfoEndpoint" : { + "type" : "object", + "description" : "???", + "properties" : { } + }, "BulkResponseBody" : { "type" : "object", "description" : "BulkResponseBody object" }, + "otoroshi.next.plugins.NgHasAllowedUsersValidatorConfig" : { + "type" : "object", + "description" : "???", + "properties" : { + "profile_not_match" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "???" + }, + "profile_match" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "???" + }, + "email_domains" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "???" + }, + "usernames" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "???" + }, + "metadata_match" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "???" + }, + "metadata_not_match" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "???" + }, + "emails" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "???" + } + } + }, "otoroshi.models.BadResponsesFaultConfig" : { "type" : "object", "description" : "List of bad response settings", @@ -41395,12 +43590,14 @@ "description" : "???" }, "provider" : { + "description" : "null type", "type" : "string", - "description" : "???" + "nullable" : true }, "dataCenter" : { + "description" : "null type", "type" : "string", - "description" : "???" + "nullable" : true }, "rack" : { "type" : "string", @@ -41500,6 +43697,11 @@ "value" : { "type" : "object", "description" : "???" + }, + "error" : { + "description" : "null type", + "type" : "string", + "nullable" : true } }, "type" : "object" @@ -43010,6 +45212,16 @@ } } }, + "otoroshi.next.plugins.NgUserAgentExtractor" : { + "type" : "object", + "description" : "???", + "properties" : { + "log" : { + "type" : "boolean", + "description" : "???" + } + } + }, "otoroshi.next.plugins.MockFormData" : { "type" : "object", "description" : "???", @@ -43096,11 +45308,6 @@ } } }, - "otoroshi.next.plugins.WasmContext" : { - "type" : "object", - "description" : "???", - "properties" : { } - }, "otoroshi.plugins.jsoup.HtmlPatcher" : { "type" : "object", "description" : "???", @@ -43286,6 +45493,11 @@ "value" : { "type" : "object", "description" : "???" + }, + "error" : { + "description" : "null type", + "type" : "string", + "nullable" : true } }, "type" : "object" @@ -43343,6 +45555,110 @@ "description" : "???", "properties" : { } }, + "otoroshi.auth.WasmAuthModuleConfig" : { + "properties" : { + "type" : { + "type" : "string", + "description" : "the type of the module", + "enum" : [ "saml", "oauth1", "oauth2", "ldap", "basic" ] + }, + "wasmRef" : { + "description" : "null type", + "type" : "string", + "nullable" : true + }, + "name" : { + "type" : "string", + "description" : "???" + }, + "clientSideSessionEnabled" : { + "type" : "boolean", + "description" : "???" + }, + "description" : { + "type" : "string", + "description" : "???" + }, + "tags" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "???" + }, + "sessionMaxAge" : { + "type" : "integer", + "format" : "int32", + "description" : "???" + }, + "userValidators" : { + "type" : "array", + "items" : { + "properties" : { + "path" : { + "type" : "string", + "description" : "???" + }, + "value" : { + "type" : "object", + "description" : "???" + }, + "error" : { + "description" : "null type", + "type" : "string", + "nullable" : true + } + }, + "type" : "object" + }, + "description" : "???" + }, + "id" : { + "type" : "string", + "description" : "???" + }, + "_loc" : { + "description" : "???", + "properties" : { + "tenant" : { + "description" : "Organization of the current entity", + "type" : "string" + }, + "teams" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "Teams of the current entity" + } + }, + "type" : "object" + }, + "metadata" : { + "type" : "object", + "additionalProperties" : { + "type" : "string" + }, + "description" : "???" + }, + "sessionCookieValues" : { + "description" : "???", + "properties" : { + "httpOnly" : { + "type" : "boolean", + "description" : "???" + }, + "secure" : { + "type" : "boolean", + "description" : "???" + } + }, + "type" : "object" + } + }, + "type" : "object", + "description" : "???" + }, "otoroshi.plugins.izanami.IzanamiProxyConfig" : { "type" : "object", "description" : "???", @@ -43662,6 +45978,28 @@ "description" : "???", "properties" : { } }, + "otoroshi.next.plugins.OIDCAccessTokenHeader" : { + "type" : "object", + "description" : "???", + "properties" : { + "send" : { + "type" : "boolean", + "description" : "???" + }, + "name" : { + "type" : "string", + "description" : "???" + }, + "header_name" : { + "type" : "string", + "description" : "???" + }, + "jwt" : { + "type" : "boolean", + "description" : "???" + } + } + }, "otoroshi.models.NoneGeolocationSettings" : { "type" : "object", "description" : "No geolocation extraction", @@ -43672,6 +46010,25 @@ } } }, + "otoroshi.next.plugins.NgLog4ShellFilterConfig" : { + "type" : "object", + "description" : "???", + "properties" : { + "status" : { + "type" : "integer", + "format" : "int32", + "description" : "???" + }, + "body" : { + "type" : "string", + "description" : "???" + }, + "parse_body" : { + "type" : "boolean", + "description" : "???" + } + } + }, "otoroshi.next.plugins.GraphQLProxy" : { "type" : "object", "description" : "???", @@ -43725,6 +46082,11 @@ "type" : "object", "description" : "???", "properties" : { + "instance_id" : { + "type" : "integer", + "format" : "int32", + "description" : "???" + }, "debug" : { "type" : "boolean", "description" : "???" @@ -43763,6 +46125,16 @@ } } }, + "otoroshi.next.plugins.NgGeolocationInfoHeader" : { + "type" : "object", + "description" : "???", + "properties" : { + "header_name" : { + "type" : "string", + "description" : "???" + } + } + }, "otoroshi.next.plugins.ReactorResponse" : { "type" : "object", "description" : "???", @@ -43838,62 +46210,541 @@ "type" : "string", "description" : "???" }, - "path" : { - "type" : "string", - "description" : "???" - } - }, - "type" : "object" - }, - "description" : "???" - } - } - }, - "otoroshi.next.plugins.NgHtmlPatcherConfig" : { - "type" : "object", - "description" : "???", - "properties" : { - "append_head" : { - "type" : "array", - "items" : { - "type" : "string" - }, - "description" : "???" - }, - "append_body" : { - "type" : "array", - "items" : { - "type" : "string" + "path" : { + "type" : "string", + "description" : "???" + } + }, + "type" : "object" + }, + "description" : "???" + } + } + }, + "otoroshi.next.plugins.NgHtmlPatcherConfig" : { + "type" : "object", + "description" : "???", + "properties" : { + "append_head" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "???" + }, + "append_body" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "???" + } + } + }, + "WebAuthnRegistrationStartBody" : { + "type" : "object", + "description" : "" + }, + "PatchDocument" : { + "type" : "object", + "description" : "A JSONPatch document as defined by RFC 6902", + "required" : [ "op", "path" ], + "properties" : { + "op" : { + "type" : "string", + "description" : "The operation to be performed", + "enum" : [ "add", "remove", "replace", "move", "copy", "test" ] + }, + "path" : { + "type" : "string", + "description" : "A JSON-Pointer" + }, + "value" : { + "type" : "object", + "description" : "The value to be used within the operations." + }, + "from" : { + "type" : "string", + "description" : "A string containing a JSON Pointer value." + } + } + }, + "otoroshi.next.plugins.NgMirroringEvent" : { + "type" : "object", + "description" : "???", + "properties" : { + "ctx" : { + "description" : "???", + "properties" : { + "id" : { + "type" : "string", + "description" : "???" + }, + "config" : { + "description" : "???", + "properties" : { + "legacy" : { + "description" : "???", + "properties" : { + "conf" : { + "type" : "object", + "description" : "???" + } + }, + "type" : "object" + } + }, + "type" : "object" + }, + "route" : { + "description" : "???", + "properties" : { + "debug_flow" : { + "type" : "boolean", + "description" : "Enable report debugging" + }, + "enabled" : { + "type" : "boolean", + "description" : "Is the route enabled" + }, + "name" : { + "type" : "string", + "description" : "The name of the route" + }, + "id" : { + "type" : "string", + "description" : "The ud of the route" + }, + "export_reporting" : { + "type" : "boolean", + "description" : "Export the execution reporting through standard data exporter" + }, + "metadata" : { + "type" : "object", + "additionalProperties" : { + "type" : "string" + }, + "description" : "The metadata of the route" + }, + "frontend" : { + "description" : "The frontend of the route", + "properties" : { + "headers" : { + "type" : "object", + "additionalProperties" : { + "type" : "string" + }, + "description" : "the headers that will be matched" + }, + "query" : { + "type" : "object", + "additionalProperties" : { + "type" : "string" + }, + "description" : "the query params that will be matched" + }, + "domains" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "The domain and path that will be matched" + }, + "methods" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "the http methods that will be matched" + }, + "exact" : { + "type" : "boolean", + "description" : "Match on exact path ?" + }, + "strip_path" : { + "type" : "boolean", + "description" : "Is path stripped from backend request" + } + }, + "type" : "object" + }, + "_loc" : { + "description" : "The location of the route", + "properties" : { + "tenant" : { + "description" : "Organization of the current entity", + "type" : "string" + }, + "teams" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "Teams of the current entity" + } + }, + "type" : "object" + }, + "tags" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "The tags of the route" + }, + "capture" : { + "type" : "boolean", + "description" : "Capture http traffic" + }, + "groups" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "The groups of the route" + }, + "backend_ref" : { + "description" : "null type", + "type" : "string", + "nullable" : true + }, + "description" : { + "type" : "string", + "description" : "The description of the route" + }, + "backend" : { + "description" : "The backend of the route", + "properties" : { + "root" : { + "type" : "string", + "description" : "The root path of the backend or the full rewrite path" + }, + "health_check" : { + "description" : "???", + "type" : "object", + "properties" : { + "enabled" : { + "type" : "boolean", + "description" : "???" + }, + "url" : { + "type" : "string", + "description" : "???" + }, + "timeout" : { + "type" : "integer", + "format" : "int32", + "description" : "???" + } + } + }, + "client" : { + "description" : "Client config. of the backend", + "properties" : { + "idle_timeout" : { + "type" : "integer", + "format" : "int64", + "description" : "Timeout on idle connection" + }, + "sample_interval" : { + "type" : "integer", + "format" : "int64", + "description" : "Specify the sliding window time for the circuit breaker in milliseconds, after this time, error count will be reseted" + }, + "cache_connection_settings" : { + "description" : "Cached connection settings", + "properties" : { + "queue_size" : { + "type" : "integer", + "format" : "int32", + "description" : "How much request can be queue before dropping it" + }, + "enabled" : { + "type" : "boolean", + "description" : "Is cached connection enabled" + } + }, + "type" : "object" + }, + "call_and_stream_timeout" : { + "type" : "integer", + "format" : "int64", + "description" : "Specify how long each call should last at most in milliseconds (hard timeout, connection will be closed after that duration)" + }, + "custom_timeouts" : { + "type" : "array", + "items" : { + "properties" : { + "connection_timeout" : { + "type" : "integer", + "format" : "int64", + "description" : "Timeout at connection" + }, + "call_and_stream_timeout" : { + "type" : "integer", + "format" : "int64", + "description" : "Specify how long each call should last at most in milliseconds (hard timeout, connection will be closed after that duration)" + }, + "path" : { + "type" : "string", + "description" : "path on which this configuration works" + }, + "call_timeout" : { + "type" : "integer", + "format" : "int64", + "description" : "Specify how long each call should last at most in milliseconds (soft timeout as it's enforced by the circuit breaker)" + }, + "idle_timeout" : { + "type" : "integer", + "format" : "int64", + "description" : "Timeout on idle connection" + }, + "global_timeout" : { + "type" : "integer", + "format" : "int64", + "description" : "Specify how long the global call (with retries) should last at most in milliseconds" + } + }, + "type" : "object" + }, + "description" : "Custom timeouts per path" + }, + "connection_timeout" : { + "type" : "integer", + "format" : "int64", + "description" : "Timeout at connection" + }, + "call_timeout" : { + "type" : "integer", + "format" : "int64", + "description" : "Specify how long each call should last at most in milliseconds (soft timeout as it's enforced by the circuit breaker)" + }, + "global_timeout" : { + "type" : "integer", + "format" : "int64", + "description" : "Specify how long the global call (with retries) should last at most in milliseconds" + }, + "retry_initial_delay" : { + "type" : "integer", + "format" : "int64", + "description" : "Specify the delay between two retries. Each retry, the delay is multiplied by the backoff factor" + }, + "backoff_factor" : { + "type" : "integer", + "format" : "int64", + "description" : "Specify the factor to multiply the delay for each retry" + }, + "proxy" : { + "description" : "Web proxy settings for http client", + "type" : "object", + "properties" : { + "host" : { + "type" : "string", + "description" : "The hostname of the proxy server." + }, + "port" : { + "type" : "string", + "description" : "The port of the proxy server." + }, + "protocol" : { + "type" : "string", + "description" : "The protocol of the proxy server. Use \"http\" or \"https\". Defaults to \"http\" if not specified." + }, + "principal" : { + "type" : "string", + "description" : "The principal (aka username) of the credentials for the proxy server." + }, + "password" : { + "type" : "string", + "description" : "The password for the credentials for the proxy server." + }, + "ntlmDomain" : { + "type" : "string", + "description" : "The ntlm domain for the proxy server." + }, + "encoding" : { + "type" : "string", + "description" : "The realm's charset." + }, + "nonProxyHosts" : { + "type" : "string", + "description" : "The non proxied hosts" + } + } + }, + "retries" : { + "type" : "integer", + "format" : "int32", + "description" : "Specify how many times the client will try to fetch the result of the request after an error before giving up." + }, + "max_errors" : { + "type" : "integer", + "format" : "int32", + "description" : "Specify how many errors can pass before opening the circuit breaker" + } + }, + "type" : "object" + }, + "load_balancing" : { + "description" : "Loadbalancing config og the backend", + "properties" : { + "type" : { + "type" : "string", + "enum" : [ "BestResponseTime", "IpAddressHash", "Random", "RoundRobin", "Sticky", "WeightedBestResponseTime" ] + }, + "ratio" : { + "type" : "number", + "format" : "double" + } + }, + "type" : "object" + }, + "rewrite" : { + "type" : "boolean", + "description" : "Does the backend performs a full url rewrite ?" + }, + "targets" : { + "type" : "array", + "items" : { + "properties" : { + "ip_address" : { + "description" : "null type", + "type" : "string", + "nullable" : true + }, + "protocol" : { + "type" : "string", + "enum" : [ "HTTP/1.0", "HTTP/1.1", "HTTP/2.0", "HTTP/3.0" ], + "description" : "Protocol for the target" + }, + "predicate" : { + "description" : "Predicate to choose this target", + "properties" : { + "type" : { + "type" : "string", + "description" : "the kind of predicate", + "enum" : [ "AlwaysMatch", "NetworkLocationMatch", "GeolocationMatch" ] + }, + "dc" : { + "type" : "string", + "description" : "???" + }, + "positions" : { + "type" : "array", + "items" : { + "properties" : { + "latitude" : { + "type" : "number", + "format" : "double", + "description" : "???" + }, + "longitude" : { + "type" : "number", + "format" : "double", + "description" : "???" + }, + "radius" : { + "type" : "number", + "format" : "double", + "description" : "???" + } + }, + "type" : "object" + }, + "description" : "???" + }, + "provider" : { + "description" : "null type", + "type" : "string", + "nullable" : true + }, + "dataCenter" : { + "description" : "null type", + "type" : "string", + "nullable" : true + }, + "rack" : { + "type" : "string", + "description" : "???" + }, + "region" : { + "type" : "string", + "description" : "???" + }, + "zone" : { + "type" : "string", + "description" : "???" + } + }, + "type" : "object" + }, + "tls_config" : { + "description" : "TLS settings to contact this target", + "properties" : { + "enabled" : { + "type" : "boolean", + "description" : "Enabled" + }, + "certs" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "Trusted cert. ids" + }, + "loose" : { + "type" : "boolean", + "description" : "Loose verification" + }, + "trust_all" : { + "type" : "boolean", + "description" : "Trust any certificate" + }, + "trusted_certs" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "Trusted cert. ids" + } + }, + "type" : "object" + }, + "tls" : { + "type" : "boolean", + "description" : "Does the target uses TLS" + }, + "port" : { + "type" : "integer", + "format" : "int32", + "description" : "port of the target" + }, + "id" : { + "type" : "string", + "description" : "id of the target" + }, + "weight" : { + "type" : "integer", + "format" : "int32", + "description" : "The weight of the target when choosing" + }, + "hostname" : { + "type" : "string", + "description" : "hostname of the target" + } + }, + "type" : "object" + }, + "description" : "The targets of the backend" + } + }, + "type" : "object" + } + }, + "type" : "object" + } }, - "description" : "???" - } - } - }, - "WebAuthnRegistrationStartBody" : { - "type" : "object", - "description" : "" - }, - "PatchDocument" : { - "type" : "object", - "description" : "A JSONPatch document as defined by RFC 6902", - "required" : [ "op", "path" ], - "properties" : { - "op" : { - "type" : "string", - "description" : "The operation to be performed", - "enum" : [ "add", "remove", "replace", "move", "copy", "test" ] - }, - "path" : { - "type" : "string", - "description" : "A JSON-Pointer" - }, - "value" : { - "type" : "object", - "description" : "The value to be used within the operations." - }, - "from" : { - "type" : "string", - "description" : "A string containing a JSON Pointer value." + "type" : "object" } } }, @@ -44070,6 +46921,11 @@ } } }, + "otoroshi.next.plugins.NgResponseCacheCleanupJob" : { + "type" : "object", + "description" : "???", + "properties" : { } + }, "otoroshi.next.plugins.NoopSpanExporter" : { "type" : "object", "description" : "???", @@ -44116,17 +46972,56 @@ "type" : "object", "description" : "???", "properties" : { - "memory_pages" : { + "allowedHosts" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "???" + }, + "memoryPages" : { "type" : "integer", "format" : "int32", "description" : "???" }, - "preserve" : { - "type" : "boolean", + "killOptions" : { + "description" : "???", + "properties" : { + "maxUnusedDuration" : { + "type" : "number", + "description" : "???" + }, + "immortal" : { + "type" : "boolean", + "description" : "???" + }, + "maxAvgCallDuration" : { + "type" : "number", + "description" : "???" + }, + "maxMemoryUsage" : { + "type" : "number", + "format" : "double", + "description" : "???" + }, + "maxCalls" : { + "type" : "integer", + "format" : "int32", + "description" : "???" + } + }, + "type" : "object" + }, + "allowedPaths" : { + "type" : "object", + "additionalProperties" : { + "type" : "string" + }, "description" : "???" }, - "opa" : { - "type" : "boolean", + "instances" : { + "type" : "integer", + "format" : "int32", "description" : "???" }, "config" : { @@ -44136,10 +47031,37 @@ }, "description" : "???" }, + "source" : { + "description" : "???", + "properties" : { + "kind" : { + "description" : "???", + "properties" : { }, + "type" : "object" + }, + "path" : { + "type" : "string", + "description" : "???" + }, + "opts" : { + "type" : "object", + "description" : "???" + } + }, + "type" : "object" + }, "authorizations" : { "description" : "???", "properties" : { - "global_map_access" : { + "proxyStateAccess" : { + "type" : "boolean", + "description" : "???" + }, + "httpAccess" : { + "type" : "boolean", + "description" : "???" + }, + "globalMapAccess" : { "description" : "???", "properties" : { "read" : { @@ -44153,7 +47075,7 @@ }, "type" : "object" }, - "plugin_map_access" : { + "pluginDataStoreAccess" : { "description" : "???", "properties" : { "read" : { @@ -44167,7 +47089,7 @@ }, "type" : "object" }, - "global_data_store_access" : { + "pluginMapAccess" : { "description" : "???", "properties" : { "read" : { @@ -44181,20 +47103,16 @@ }, "type" : "object" }, - "http_access" : { - "type" : "boolean", + "proxyHttpCallTimeout" : { + "type" : "integer", + "format" : "int32", "description" : "???" }, - "configuration_access" : { + "configurationAccess" : { "type" : "boolean", "description" : "???" }, - "proxy_http_call_timeout" : { - "type" : "integer", - "format" : "int32", - "description" : "???" - }, - "plugin_data_store_access" : { + "globalDataStoreAccess" : { "description" : "???", "properties" : { "read" : { @@ -44207,55 +47125,22 @@ } }, "type" : "object" - }, - "proxy_state_access" : { - "type" : "boolean", - "description" : "???" } }, "type" : "object" }, - "function_name" : { - "description" : "null type", - "type" : "string", - "nullable" : true - }, - "wasi" : { + "opa" : { "type" : "boolean", "description" : "???" }, - "source" : { - "description" : "???", - "properties" : { - "kind" : { - "description" : "???", - "properties" : { }, - "type" : "object" - }, - "path" : { - "type" : "string", - "description" : "???" - }, - "opts" : { - "type" : "object", - "description" : "???" - } - }, - "type" : "object" - }, - "allowed_paths" : { - "type" : "object", - "additionalProperties" : { - "type" : "string" - }, + "wasi" : { + "type" : "boolean", "description" : "???" }, - "allowed_hosts" : { - "type" : "array", - "items" : { - "type" : "string" - }, - "description" : "???" + "functionName" : { + "description" : "null type", + "type" : "string", + "nullable" : true } } }, @@ -44479,6 +47364,95 @@ } } }, + "otoroshi.next.plugins.NgBrotliConfig" : { + "type" : "object", + "description" : "???", + "properties" : { + "buffer_size" : { + "type" : "integer", + "format" : "int32", + "description" : "???" + }, + "black_list" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "???" + }, + "white_list" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "???" + }, + "compression_level" : { + "type" : "integer", + "format" : "int32", + "description" : "???" + }, + "chunked_threshold" : { + "type" : "integer", + "format" : "int32", + "description" : "???" + } + } + }, + "otoroshi.next.plugins.NgResponseCacheConfig" : { + "type" : "object", + "description" : "???", + "properties" : { + "ttl" : { + "type" : "integer", + "format" : "int64", + "description" : "???" + }, + "max_size" : { + "type" : "integer", + "format" : "int64", + "description" : "???" + }, + "auto_clean" : { + "type" : "boolean", + "description" : "???" + }, + "filter" : { + "description" : "???", + "type" : "object", + "properties" : { + "paths" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "???" + }, + "methods" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "???" + }, + "not_methods" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "???" + }, + "not_paths" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "???" + } + } + } + } + }, "otoroshi.models.ApiKeyRouteMatcher" : { "type" : "object", "description" : "???", @@ -44659,6 +47633,70 @@ } } }, + "otoroshi.next.plugins.NgBiscuitExtractor" : { + "type" : "object", + "description" : "???", + "properties" : { + "legacy" : { + "description" : "???", + "properties" : { + "facts" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "???" + }, + "publicKey" : { + "description" : "null type", + "type" : "string", + "nullable" : true + }, + "resources" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "???" + }, + "enforce" : { + "type" : "boolean", + "description" : "???" + }, + "extractorName" : { + "type" : "string", + "description" : "???" + }, + "checks" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "???" + }, + "extractor" : { + "type" : "string", + "description" : "???" + }, + "revocation_ids" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "???" + }, + "rules" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "???" + } + }, + "type" : "object" + } + } + }, "otoroshi.utils.JsonPathValidator" : { "type" : "object", "description" : "???", @@ -44670,6 +47708,11 @@ "value" : { "type" : "object", "description" : "???" + }, + "error" : { + "description" : "null type", + "type" : "string", + "nullable" : true } } }, @@ -44870,6 +47913,101 @@ } } }, + "otoroshi.next.plugins.NgIzanamiV1CanaryRoutingConfigRoute" : { + "type" : "object", + "description" : "???", + "properties" : { + "regex" : { + "type" : "boolean", + "description" : "???" + }, + "default" : { + "type" : "string", + "description" : "???" + }, + "route" : { + "type" : "string", + "description" : "???" + }, + "wildcard" : { + "type" : "boolean", + "description" : "???" + }, + "exact" : { + "type" : "boolean", + "description" : "???" + }, + "variants" : { + "type" : "object", + "additionalProperties" : { + "type" : "string" + }, + "description" : "???" + } + } + }, + "otoroshi.next.plugins.BiscuitConf" : { + "type" : "object", + "description" : "???", + "properties" : { + "privkey" : { + "description" : "null type", + "type" : "string", + "nullable" : true + }, + "checks" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "???" + }, + "facts" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "???" + }, + "rules" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "???" + } + } + }, + "otoroshi.next.plugins.NgClientCertChainHeaderConfig" : { + "type" : "object", + "description" : "???", + "properties" : { + "dns_header_name" : { + "type" : "string", + "description" : "???" + }, + "pem_header_name" : { + "type" : "string", + "description" : "???" + }, + "send_pem" : { + "type" : "boolean", + "description" : "???" + }, + "send_chain" : { + "type" : "boolean", + "description" : "???" + }, + "send_dns" : { + "type" : "boolean", + "description" : "???" + }, + "chain_header_name" : { + "type" : "string", + "description" : "???" + } + } + }, "otoroshi.next.plugins.EurekaInstance" : { "type" : "object", "description" : "???", @@ -44955,6 +48093,40 @@ } } }, + "otoroshi.next.plugins.NgResponseCacheFilterConfig" : { + "type" : "object", + "description" : "???", + "properties" : { + "paths" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "???" + }, + "methods" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "???" + }, + "not_methods" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "???" + }, + "not_paths" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "???" + } + } + }, "otoroshi.utils.mailer.SendgridSettings" : { "properties" : { "type" : { @@ -45147,6 +48319,88 @@ "description" : "???", "properties" : { } }, + "otoroshi.next.plugins.NgIzanamiV1Proxy" : { + "type" : "object", + "description" : "???", + "properties" : { + "features_enabled" : { + "type" : "boolean", + "description" : "???" + }, + "client_secret" : { + "type" : "string", + "description" : "???" + }, + "features_with_context_enabled" : { + "type" : "boolean", + "description" : "???" + }, + "config_pattern" : { + "type" : "string", + "description" : "???" + }, + "feature_pattern" : { + "type" : "string", + "description" : "???" + }, + "client_id" : { + "type" : "string", + "description" : "???" + }, + "tls" : { + "description" : "???", + "properties" : { + "enabled" : { + "type" : "boolean", + "description" : "Enabled" + }, + "certs" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "Trusted cert. ids" + }, + "loose" : { + "type" : "boolean", + "description" : "Loose verification" + }, + "trust_all" : { + "type" : "boolean", + "description" : "Trust any certificate" + }, + "trusted_certs" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "Trusted cert. ids" + } + }, + "type" : "object" + }, + "izanami_url" : { + "type" : "string", + "description" : "???" + }, + "timeout" : { + "type" : "number", + "description" : "???" + }, + "path" : { + "type" : "string", + "description" : "???" + }, + "auto_context" : { + "type" : "boolean", + "description" : "???" + }, + "configuration_enabled" : { + "type" : "boolean", + "description" : "???" + } + } + }, "otoroshi.plugins.biscuit.AccessValidatorContext" : { "type" : "object", "description" : "???", @@ -45392,6 +48646,11 @@ "url" : { "type" : "string", "description" : "???" + }, + "timeout" : { + "type" : "integer", + "format" : "int32", + "description" : "???" } }, "type" : "object" @@ -46080,12 +49339,14 @@ "description" : "???" }, "provider" : { + "description" : "null type", "type" : "string", - "description" : "???" + "nullable" : true }, "dataCenter" : { + "description" : "null type", "type" : "string", - "description" : "???" + "nullable" : true }, "rack" : { "type" : "string", @@ -46795,12 +50056,14 @@ "description" : "???" }, "provider" : { + "description" : "null type", "type" : "string", - "description" : "???" + "nullable" : true }, "dataCenter" : { + "description" : "null type", "type" : "string", - "description" : "???" + "nullable" : true }, "rack" : { "type" : "string", @@ -47935,6 +51198,11 @@ "url" : { "type" : "string", "description" : "???" + }, + "timeout" : { + "type" : "integer", + "format" : "int32", + "description" : "???" } } }, @@ -48154,12 +51422,14 @@ "description" : "???" }, "provider" : { + "description" : "null type", "type" : "string", - "description" : "???" + "nullable" : true }, "dataCenter" : { + "description" : "null type", "type" : "string", - "description" : "???" + "nullable" : true }, "rack" : { "type" : "string", @@ -48261,6 +51531,11 @@ } } }, + "otoroshi.next.plugins.AttrsHelper" : { + "type" : "object", + "description" : "???", + "properties" : { } + }, "OutagesList" : { "type" : "array", "items" : { @@ -48303,6 +51578,41 @@ "type" : "array", "items" : { } }, + "otoroshi.next.plugins.NgSecurityTxtConfig" : { + "type" : "object", + "description" : "???", + "properties" : { + "preferred_languages" : { + "description" : "null type", + "type" : "string", + "nullable" : true + }, + "encryption" : { + "description" : "null type", + "type" : "string", + "nullable" : true + }, + "policy" : { + "description" : "null type", + "type" : "string", + "nullable" : true + }, + "acknowledgments" : { + "description" : "null type", + "type" : "string", + "nullable" : true + }, + "hiring" : { + "description" : "null type", + "type" : "string", + "nullable" : true + }, + "contact" : { + "type" : "string", + "description" : "???" + } + } + }, "otoroshi.script.PreRoutingRef" : { "type" : "object", "description" : "???", @@ -48901,11 +52211,6 @@ "type" : "string", "description" : "PEM encoded csr" }, - "otoroshi.next.plugins.WasmContextSlot" : { - "type" : "object", - "description" : "???", - "properties" : { } - }, "otoroshi.next.plugins.WasmJobsConfig" : { "type" : "object", "description" : "???", @@ -48932,17 +52237,56 @@ "config" : { "description" : "???", "properties" : { - "memory_pages" : { + "allowedHosts" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "???" + }, + "memoryPages" : { "type" : "integer", "format" : "int32", "description" : "???" }, - "preserve" : { - "type" : "boolean", + "killOptions" : { + "description" : "???", + "properties" : { + "maxUnusedDuration" : { + "type" : "number", + "description" : "???" + }, + "immortal" : { + "type" : "boolean", + "description" : "???" + }, + "maxAvgCallDuration" : { + "type" : "number", + "description" : "???" + }, + "maxMemoryUsage" : { + "type" : "number", + "format" : "double", + "description" : "???" + }, + "maxCalls" : { + "type" : "integer", + "format" : "int32", + "description" : "???" + } + }, + "type" : "object" + }, + "allowedPaths" : { + "type" : "object", + "additionalProperties" : { + "type" : "string" + }, "description" : "???" }, - "opa" : { - "type" : "boolean", + "instances" : { + "type" : "integer", + "format" : "int32", "description" : "???" }, "config" : { @@ -48952,10 +52296,37 @@ }, "description" : "???" }, + "source" : { + "description" : "???", + "properties" : { + "kind" : { + "description" : "???", + "properties" : { }, + "type" : "object" + }, + "path" : { + "type" : "string", + "description" : "???" + }, + "opts" : { + "type" : "object", + "description" : "???" + } + }, + "type" : "object" + }, "authorizations" : { "description" : "???", "properties" : { - "global_map_access" : { + "proxyStateAccess" : { + "type" : "boolean", + "description" : "???" + }, + "httpAccess" : { + "type" : "boolean", + "description" : "???" + }, + "globalMapAccess" : { "description" : "???", "properties" : { "read" : { @@ -48969,7 +52340,7 @@ }, "type" : "object" }, - "plugin_map_access" : { + "pluginDataStoreAccess" : { "description" : "???", "properties" : { "read" : { @@ -48983,7 +52354,7 @@ }, "type" : "object" }, - "global_data_store_access" : { + "pluginMapAccess" : { "description" : "???", "properties" : { "read" : { @@ -48997,20 +52368,16 @@ }, "type" : "object" }, - "http_access" : { - "type" : "boolean", + "proxyHttpCallTimeout" : { + "type" : "integer", + "format" : "int32", "description" : "???" }, - "configuration_access" : { + "configurationAccess" : { "type" : "boolean", "description" : "???" }, - "proxy_http_call_timeout" : { - "type" : "integer", - "format" : "int32", - "description" : "???" - }, - "plugin_data_store_access" : { + "globalDataStoreAccess" : { "description" : "???", "properties" : { "read" : { @@ -49023,55 +52390,22 @@ } }, "type" : "object" - }, - "proxy_state_access" : { - "type" : "boolean", - "description" : "???" } }, "type" : "object" }, - "function_name" : { - "description" : "null type", - "type" : "string", - "nullable" : true - }, - "wasi" : { + "opa" : { "type" : "boolean", "description" : "???" }, - "source" : { - "description" : "???", - "properties" : { - "kind" : { - "description" : "???", - "properties" : { }, - "type" : "object" - }, - "path" : { - "type" : "string", - "description" : "???" - }, - "opts" : { - "type" : "object", - "description" : "???" - } - }, - "type" : "object" - }, - "allowed_paths" : { - "type" : "object", - "additionalProperties" : { - "type" : "string" - }, + "wasi" : { + "type" : "boolean", "description" : "???" }, - "allowed_hosts" : { - "type" : "array", - "items" : { - "type" : "string" - }, - "description" : "???" + "functionName" : { + "description" : "null type", + "type" : "string", + "nullable" : true } }, "type" : "object" @@ -49096,6 +52430,70 @@ "type" : "object", "description" : "value used by the openapi generator when no matching type found. Should be fixed in a near future." }, + "otoroshi.next.plugins.NgBiscuitConfig" : { + "type" : "object", + "description" : "???", + "properties" : { + "legacy" : { + "description" : "???", + "properties" : { + "facts" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "???" + }, + "publicKey" : { + "description" : "null type", + "type" : "string", + "nullable" : true + }, + "resources" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "???" + }, + "enforce" : { + "type" : "boolean", + "description" : "???" + }, + "extractorName" : { + "type" : "string", + "description" : "???" + }, + "checks" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "???" + }, + "extractor" : { + "type" : "string", + "description" : "???" + }, + "revocation_ids" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "???" + }, + "rules" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "???" + } + }, + "type" : "object" + } + } + }, "otoroshi.plugins.authcallers.OAuth2CallerConfig" : { "type" : "object", "description" : "???", @@ -49239,6 +52637,66 @@ } } }, + "otoroshi.next.plugins.OIDCAccessTokenConfig" : { + "type" : "object", + "description" : "???", + "properties" : { + "enabled" : { + "type" : "boolean", + "description" : "???" + }, + "at_least_one" : { + "type" : "boolean", + "description" : "???" + }, + "config" : { + "description" : "null type", + "type" : "string", + "nullable" : true + } + } + }, + "otoroshi.next.plugins.NgHasClientCertMatchingValidator" : { + "type" : "object", + "description" : "???", + "properties" : { + "subject_dns" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "???" + }, + "serial_numbers" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "???" + }, + "issuer_dns" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "???" + }, + "regex_issuer_dns" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "???" + }, + "regex_subject_dns" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "???" + } + } + }, "otoroshi.models.TlsSettings" : { "type" : "object", "description" : "Global TLS settings. The default domain that will be picked if no certificate matches the current request", @@ -49287,6 +52745,25 @@ "type" : "object", "description" : "Settings to export to otoroshi metrics" }, + "otoroshi.next.plugins.OIDCAccessTokenAsApikey" : { + "type" : "object", + "description" : "???", + "properties" : { + "enabled" : { + "type" : "boolean", + "description" : "???" + }, + "at_least_one" : { + "type" : "boolean", + "description" : "???" + }, + "config" : { + "description" : "null type", + "type" : "string", + "nullable" : true + } + } + }, "otoroshi.models.Sign" : { "properties" : { "type" : { @@ -49688,6 +53165,11 @@ "url" : { "type" : "string", "description" : "???" + }, + "timeout" : { + "type" : "integer", + "format" : "int32", + "description" : "???" } }, "type" : "object" @@ -50406,12 +53888,14 @@ "description" : "???" }, "provider" : { + "description" : "null type", "type" : "string", - "description" : "???" + "nullable" : true }, "dataCenter" : { + "description" : "null type", "type" : "string", - "description" : "???" + "nullable" : true }, "rack" : { "type" : "string", @@ -51151,12 +54635,14 @@ "description" : "???" }, "provider" : { + "description" : "null type", "type" : "string", - "description" : "???" + "nullable" : true }, "dataCenter" : { + "description" : "null type", "type" : "string", - "description" : "???" + "nullable" : true }, "rack" : { "type" : "string", @@ -51998,25 +55484,73 @@ } } }, - "otoroshi.plugins.geoloc.MaxMindGeolocationInfoExtractor" : { - "type" : "object", - "description" : "???", - "properties" : { } - }, - "otoroshi.next.plugins.WasmDataRights" : { + "otoroshi.wasm.proxywasm.CorazaWafConfig" : { "type" : "object", "description" : "???", "properties" : { - "read" : { - "type" : "boolean", + "tags" : { + "type" : "array", + "items" : { + "type" : "string" + }, "description" : "???" }, - "write" : { + "inspectBody" : { "type" : "boolean", "description" : "???" + }, + "metadata" : { + "type" : "object", + "additionalProperties" : { + "type" : "string" + }, + "description" : "???" + }, + "poolCapacity" : { + "type" : "integer", + "format" : "int32", + "description" : "???" + }, + "id" : { + "type" : "string", + "description" : "???" + }, + "name" : { + "type" : "string", + "description" : "???" + }, + "_loc" : { + "description" : "???", + "properties" : { + "tenant" : { + "description" : "Organization of the current entity", + "type" : "string" + }, + "teams" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "Teams of the current entity" + } + }, + "type" : "object" + }, + "config" : { + "type" : "object", + "description" : "???" + }, + "description" : { + "type" : "string", + "description" : "???" } } }, + "otoroshi.plugins.geoloc.MaxMindGeolocationInfoExtractor" : { + "type" : "object", + "description" : "???", + "properties" : { } + }, "otoroshi.next.plugins.NgHeaderNamesConfig" : { "type" : "object", "description" : "???", @@ -52099,231 +55633,6 @@ "type" : "object", "description" : "Settings for connection to a pulsar cluster" }, - "otoroshi.auth.SamlAuthModuleConfig" : { - "properties" : { - "type" : { - "type" : "string", - "description" : "the type of the module", - "enum" : [ "saml", "oauth1", "oauth2", "ldap", "basic" ] - }, - "desc" : { - "type" : "string", - "description" : "???" - }, - "name" : { - "type" : "string", - "description" : "???" - }, - "ssoProtocolBinding" : { - "description" : "???", - "properties" : { }, - "type" : "object" - }, - "clientSideSessionEnabled" : { - "type" : "boolean", - "description" : "???" - }, - "emailAttributeName" : { - "description" : "null type", - "type" : "string", - "nullable" : true - }, - "validatingCertificates" : { - "type" : "array", - "items" : { - "type" : "string" - }, - "description" : "???" - }, - "tags" : { - "type" : "array", - "items" : { - "type" : "string" - }, - "description" : "???" - }, - "singleLogoutProtocolBinding" : { - "description" : "???", - "properties" : { }, - "type" : "object" - }, - "sessionMaxAge" : { - "type" : "integer", - "format" : "int32", - "description" : "???" - }, - "issuer" : { - "type" : "string", - "description" : "???" - }, - "signature" : { - "description" : "???", - "properties" : { - "algorithm" : { - "description" : "???", - "properties" : { }, - "type" : "object" - }, - "canocalizationMethod" : { - "description" : "???", - "properties" : { }, - "type" : "object" - } - }, - "type" : "object" - }, - "userValidators" : { - "type" : "array", - "items" : { - "properties" : { - "path" : { - "type" : "string", - "description" : "???" - }, - "value" : { - "type" : "object", - "description" : "???" - } - }, - "type" : "object" - }, - "description" : "???" - }, - "singleLogoutUrl" : { - "type" : "string", - "description" : "???" - }, - "id" : { - "type" : "string", - "description" : "???" - }, - "_loc" : { - "description" : "???", - "properties" : { - "tenant" : { - "description" : "Organization of the current entity", - "type" : "string" - }, - "teams" : { - "type" : "array", - "items" : { - "type" : "string" - }, - "description" : "Teams of the current entity" - } - }, - "type" : "object" - }, - "usedNameIDAsEmail" : { - "type" : "boolean", - "description" : "???" - }, - "singleSignOnUrl" : { - "type" : "string", - "description" : "???" - }, - "metadata" : { - "type" : "object", - "additionalProperties" : { - "type" : "string" - }, - "description" : "???" - }, - "validateAssertions" : { - "type" : "boolean", - "description" : "???" - }, - "nameIDFormat" : { - "description" : "???", - "properties" : { }, - "type" : "object" - }, - "validateSignature" : { - "type" : "boolean", - "description" : "???" - }, - "credentials" : { - "description" : "???", - "properties" : { - "signingKey" : { - "description" : "???", - "properties" : { - "certificate" : { - "description" : "null type", - "type" : "string", - "nullable" : true - }, - "privateKey" : { - "description" : "null type", - "type" : "string", - "nullable" : true - }, - "certId" : { - "description" : "null type", - "type" : "string", - "nullable" : true - }, - "useOtoroshiCertificate" : { - "type" : "boolean", - "description" : "???" - } - }, - "type" : "object" - }, - "encryptionKey" : { - "description" : "???", - "properties" : { - "certificate" : { - "description" : "null type", - "type" : "string", - "nullable" : true - }, - "privateKey" : { - "description" : "null type", - "type" : "string", - "nullable" : true - }, - "certId" : { - "description" : "null type", - "type" : "string", - "nullable" : true - }, - "useOtoroshiCertificate" : { - "type" : "boolean", - "description" : "???" - } - }, - "type" : "object" - }, - "signedDocuments" : { - "type" : "boolean", - "description" : "???" - }, - "encryptedAssertions" : { - "type" : "boolean", - "description" : "???" - } - }, - "type" : "object" - }, - "sessionCookieValues" : { - "description" : "???", - "properties" : { - "httpOnly" : { - "type" : "boolean", - "description" : "???" - }, - "secure" : { - "type" : "boolean", - "description" : "???" - } - }, - "type" : "object" - } - }, - "type" : "object", - "description" : "???" - }, "otoroshi.api.TweakedGlobalConfig" : { "type" : "object", "description" : "???", @@ -53343,6 +56652,13 @@ }, "description" : "Possibles lines for Otoroshi" }, + "extensions" : { + "type" : "object", + "additionalProperties" : { + "type" : "object" + }, + "description" : "???" + }, "middleFingers" : { "type" : "boolean", "description" : "Use middle finger emoji as a response character for endless HTTP responses" @@ -54141,12 +57457,14 @@ "description" : "???" }, "provider" : { + "description" : "null type", "type" : "string", - "description" : "???" + "nullable" : true }, "dataCenter" : { + "description" : "null type", "type" : "string", - "description" : "???" + "nullable" : true }, "rack" : { "type" : "string", @@ -54348,6 +57666,22 @@ } } }, + "otoroshi.next.plugins.NgTrafficMirroring" : { + "type" : "object", + "description" : "???", + "properties" : { + "legacy" : { + "description" : "???", + "properties" : { + "conf" : { + "type" : "object", + "description" : "???" + } + }, + "type" : "object" + } + } + }, "otoroshi.next.plugins.GraphlCallException" : { "type" : "object", "description" : "???", @@ -54609,6 +57943,11 @@ "url" : { "type" : "string", "description" : "???" + }, + "timeout" : { + "type" : "integer", + "format" : "int32", + "description" : "???" } } }, @@ -54828,12 +58167,14 @@ "description" : "???" }, "provider" : { + "description" : "null type", "type" : "string", - "description" : "???" + "nullable" : true }, "dataCenter" : { + "description" : "null type", "type" : "string", - "description" : "???" + "nullable" : true }, "rack" : { "type" : "string", @@ -54944,10 +58285,15 @@ } } }, - "otoroshi.auth.SAMLProtocolBinding" : { + "otoroshi.next.plugins.NgUserAgentInfoHeaderConfig" : { "type" : "object", "description" : "???", - "properties" : { } + "properties" : { + "header_name" : { + "type" : "string", + "description" : "???" + } + } }, "otoroshi.models.MaxmindGeolocationSettings" : { "properties" : { @@ -55069,17 +58415,56 @@ "type" : "object", "description" : "???", "properties" : { - "memory_pages" : { + "allowedHosts" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "???" + }, + "memoryPages" : { "type" : "integer", "format" : "int32", "description" : "???" }, - "preserve" : { - "type" : "boolean", + "killOptions" : { + "description" : "???", + "properties" : { + "maxUnusedDuration" : { + "type" : "number", + "description" : "???" + }, + "immortal" : { + "type" : "boolean", + "description" : "???" + }, + "maxAvgCallDuration" : { + "type" : "number", + "description" : "???" + }, + "maxMemoryUsage" : { + "type" : "number", + "format" : "double", + "description" : "???" + }, + "maxCalls" : { + "type" : "integer", + "format" : "int32", + "description" : "???" + } + }, + "type" : "object" + }, + "allowedPaths" : { + "type" : "object", + "additionalProperties" : { + "type" : "string" + }, "description" : "???" }, - "opa" : { - "type" : "boolean", + "instances" : { + "type" : "integer", + "format" : "int32", "description" : "???" }, "config" : { @@ -55089,10 +58474,37 @@ }, "description" : "???" }, + "source" : { + "description" : "???", + "properties" : { + "kind" : { + "description" : "???", + "properties" : { }, + "type" : "object" + }, + "path" : { + "type" : "string", + "description" : "???" + }, + "opts" : { + "type" : "object", + "description" : "???" + } + }, + "type" : "object" + }, "authorizations" : { "description" : "???", "properties" : { - "global_map_access" : { + "proxyStateAccess" : { + "type" : "boolean", + "description" : "???" + }, + "httpAccess" : { + "type" : "boolean", + "description" : "???" + }, + "globalMapAccess" : { "description" : "???", "properties" : { "read" : { @@ -55106,7 +58518,7 @@ }, "type" : "object" }, - "plugin_map_access" : { + "pluginDataStoreAccess" : { "description" : "???", "properties" : { "read" : { @@ -55120,7 +58532,7 @@ }, "type" : "object" }, - "global_data_store_access" : { + "pluginMapAccess" : { "description" : "???", "properties" : { "read" : { @@ -55134,20 +58546,16 @@ }, "type" : "object" }, - "http_access" : { - "type" : "boolean", + "proxyHttpCallTimeout" : { + "type" : "integer", + "format" : "int32", "description" : "???" }, - "configuration_access" : { + "configurationAccess" : { "type" : "boolean", "description" : "???" }, - "proxy_http_call_timeout" : { - "type" : "integer", - "format" : "int32", - "description" : "???" - }, - "plugin_data_store_access" : { + "globalDataStoreAccess" : { "description" : "???", "properties" : { "read" : { @@ -55160,55 +58568,22 @@ } }, "type" : "object" - }, - "proxy_state_access" : { - "type" : "boolean", - "description" : "???" } }, "type" : "object" }, - "function_name" : { - "description" : "null type", - "type" : "string", - "nullable" : true - }, - "wasi" : { + "opa" : { "type" : "boolean", "description" : "???" }, - "source" : { - "description" : "???", - "properties" : { - "kind" : { - "description" : "???", - "properties" : { }, - "type" : "object" - }, - "path" : { - "type" : "string", - "description" : "???" - }, - "opts" : { - "type" : "object", - "description" : "???" - } - }, - "type" : "object" - }, - "allowed_paths" : { - "type" : "object", - "additionalProperties" : { - "type" : "string" - }, + "wasi" : { + "type" : "boolean", "description" : "???" }, - "allowed_hosts" : { - "type" : "array", - "items" : { - "type" : "string" - }, - "description" : "???" + "functionName" : { + "description" : "null type", + "type" : "string", + "nullable" : true } } }, @@ -55407,6 +58782,11 @@ "value" : { "type" : "object", "description" : "???" + }, + "error" : { + "description" : "null type", + "type" : "string", + "nullable" : true } }, "type" : "object" @@ -55667,6 +59047,16 @@ } } }, + "otoroshi.next.plugins.NgDiscoverySelfRegistrationTransformer" : { + "type" : "object", + "description" : "???", + "properties" : { + "raw" : { + "type" : "object", + "description" : "???" + } + } + }, "otoroshi.events.AuditEvent" : { "type" : "object", "description" : "Audit trail event" @@ -56080,6 +59470,11 @@ "config" : { "type" : "object", "description" : "???" + }, + "idx" : { + "type" : "integer", + "format" : "int32", + "description" : "???" } } }, @@ -56164,12 +59559,14 @@ "description" : "???" }, "provider" : { + "description" : "null type", "type" : "string", - "description" : "???" + "nullable" : true }, "dataCenter" : { + "description" : "null type", "type" : "string", - "description" : "???" + "nullable" : true }, "rack" : { "type" : "string", @@ -56274,8 +59671,6 @@ "required" : [ "type", "extraMetadata", "desc", "name", "allowEmptyPassword", "groupFilters", "rightsOverride", "serverUrls", "clientSideSessionEnabled", "basicAuth", "searchBase", "groupRights", "tags", "superAdmins", "sessionMaxAge", "metadataField", "searchFilter", "adminUsername", "userValidators", "emailField", "extractProfileFilter", "userBase", "id", "_loc", "adminPassword", "metadata", "extractProfileFilterNot", "nameField", "extractProfile", "dataOverride", "sessionCookieValues" ] }, { "required" : [ "type", "accessTokenURL", "desc", "name", "authorizeURL", "rightsOverride", "consumerKey", "callbackURL", "profileURL", "clientSideSessionEnabled", "tags", "sessionMaxAge", "httpMethod", "userValidators", "id", "requestTokenURL", "_loc", "consumerSecret", "metadata", "sessionCookieValues" ] - }, { - "required" : [ "type", "desc", "name", "ssoProtocolBinding", "clientSideSessionEnabled", "emailAttributeName", "validatingCertificates", "tags", "singleLogoutProtocolBinding", "sessionMaxAge", "issuer", "signature", "userValidators", "singleLogoutUrl", "id", "_loc", "usedNameIDAsEmail", "singleSignOnUrl", "metadata", "validateAssertions", "nameIDFormat", "validateSignature", "credentials", "sessionCookieValues" ] } ], "properties" : { "type" : { @@ -56429,6 +59824,11 @@ "value" : { "type" : "object", "description" : "???" + }, + "error" : { + "description" : "null type", + "type" : "string", + "nullable" : true } }, "type" : "object" @@ -57073,137 +60473,6 @@ "consumerSecret" : { "type" : "string", "description" : "???" - }, - "ssoProtocolBinding" : { - "description" : "???", - "properties" : { }, - "type" : "object" - }, - "emailAttributeName" : { - "description" : "null type", - "type" : "string", - "nullable" : true - }, - "validatingCertificates" : { - "type" : "array", - "items" : { - "type" : "string" - }, - "description" : "???" - }, - "singleLogoutProtocolBinding" : { - "description" : "???", - "properties" : { }, - "type" : "object" - }, - "issuer" : { - "type" : "string", - "description" : "???" - }, - "signature" : { - "description" : "???", - "properties" : { - "algorithm" : { - "description" : "???", - "properties" : { }, - "type" : "object" - }, - "canocalizationMethod" : { - "description" : "???", - "properties" : { }, - "type" : "object" - } - }, - "type" : "object" - }, - "singleLogoutUrl" : { - "type" : "string", - "description" : "???" - }, - "usedNameIDAsEmail" : { - "type" : "boolean", - "description" : "???" - }, - "singleSignOnUrl" : { - "type" : "string", - "description" : "???" - }, - "validateAssertions" : { - "type" : "boolean", - "description" : "???" - }, - "nameIDFormat" : { - "description" : "???", - "properties" : { }, - "type" : "object" - }, - "validateSignature" : { - "type" : "boolean", - "description" : "???" - }, - "credentials" : { - "description" : "???", - "properties" : { - "signingKey" : { - "description" : "???", - "properties" : { - "certificate" : { - "description" : "null type", - "type" : "string", - "nullable" : true - }, - "privateKey" : { - "description" : "null type", - "type" : "string", - "nullable" : true - }, - "certId" : { - "description" : "null type", - "type" : "string", - "nullable" : true - }, - "useOtoroshiCertificate" : { - "type" : "boolean", - "description" : "???" - } - }, - "type" : "object" - }, - "encryptionKey" : { - "description" : "???", - "properties" : { - "certificate" : { - "description" : "null type", - "type" : "string", - "nullable" : true - }, - "privateKey" : { - "description" : "null type", - "type" : "string", - "nullable" : true - }, - "certId" : { - "description" : "null type", - "type" : "string", - "nullable" : true - }, - "useOtoroshiCertificate" : { - "type" : "boolean", - "description" : "???" - } - }, - "type" : "object" - }, - "signedDocuments" : { - "type" : "boolean", - "description" : "???" - }, - "encryptedAssertions" : { - "type" : "boolean", - "description" : "???" - } - }, - "type" : "object" } } }, @@ -57253,25 +60522,6 @@ } } }, - "otoroshi.next.plugins.WasmSource" : { - "type" : "object", - "description" : "???", - "properties" : { - "kind" : { - "description" : "???", - "properties" : { }, - "type" : "object" - }, - "path" : { - "type" : "string", - "description" : "???" - }, - "opts" : { - "type" : "object", - "description" : "???" - } - } - }, "otoroshi.utils.mailer.GenericMailerSettings" : { "properties" : { "type" : { @@ -57530,12 +60780,14 @@ "description" : "???" }, "provider" : { + "description" : "null type", "type" : "string", - "description" : "???" + "nullable" : true }, "dataCenter" : { + "description" : "null type", "type" : "string", - "description" : "???" + "nullable" : true }, "rack" : { "type" : "string", @@ -57597,27 +60849,21 @@ "type" : "object" } }, - "otoroshi.auth.Credential" : { + "otoroshi.wasm.WasmSource" : { "type" : "object", "description" : "???", "properties" : { - "certificate" : { - "description" : "null type", - "type" : "string", - "nullable" : true - }, - "privateKey" : { - "description" : "null type", - "type" : "string", - "nullable" : true + "kind" : { + "description" : "???", + "properties" : { }, + "type" : "object" }, - "certId" : { - "description" : "null type", + "path" : { "type" : "string", - "nullable" : true + "description" : "???" }, - "useOtoroshiCertificate" : { - "type" : "boolean", + "opts" : { + "type" : "object", "description" : "???" } } @@ -57645,6 +60891,53 @@ } } }, + "otoroshi.next.plugins.NgCertificateAsApikeyConfig" : { + "type" : "object", + "description" : "???", + "properties" : { + "daily_quota" : { + "type" : "integer", + "format" : "int64", + "description" : "???" + }, + "monthly_quota" : { + "type" : "integer", + "format" : "int64", + "description" : "???" + }, + "tags" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "???" + }, + "metadata" : { + "type" : "object", + "additionalProperties" : { + "type" : "string" + }, + "description" : "???" + }, + "read_only" : { + "type" : "boolean", + "description" : "???" + }, + "allow_client_id_only" : { + "type" : "boolean", + "description" : "???" + }, + "throttling_quota" : { + "type" : "integer", + "format" : "int64", + "description" : "???" + }, + "constrained_services_only" : { + "type" : "boolean", + "description" : "???" + } + } + }, "otoroshi.next.plugins.NgRedirectionSettings" : { "type" : "object", "description" : "???", @@ -57817,6 +61110,203 @@ "type" : "array", "items" : { } }, + "otoroshi.next.plugins.PreRoutingVerifierContext" : { + "type" : "object", + "description" : "???", + "properties" : { + "ctx" : { + "description" : "???", + "properties" : { }, + "type" : "object" + }, + "apk" : { + "description" : "???", + "properties" : { + "dailyQuota" : { + "type" : "integer", + "format" : "int64", + "description" : "Authorized number of calls per day" + }, + "metadata" : { + "type" : "object", + "additionalProperties" : { + "type" : "string" + }, + "description" : "Bunch of metadata for the key" + }, + "throttlingQuota" : { + "type" : "integer", + "format" : "int64", + "description" : "Authorized number of calls per second, measured on 10 seconds" + }, + "constrainedServicesOnly" : { + "type" : "boolean", + "description" : "This apikey can only be used on services that constrained their apikey routing" + }, + "allowClientIdOnly" : { + "type" : "boolean", + "description" : "This apikey can be used juste with the client_id value" + }, + "_loc" : { + "description" : "The location of the apikey", + "properties" : { + "tenant" : { + "description" : "Organization of the current entity", + "type" : "string" + }, + "teams" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "Teams of the current entity" + } + }, + "type" : "object" + }, + "restrictions" : { + "description" : "Apikey restrictions settings", + "properties" : { + "forbidden" : { + "type" : "array", + "items" : { + "properties" : { + "method" : { + "type" : "string", + "description" : "???" + }, + "path" : { + "type" : "string", + "description" : "???" + } + }, + "type" : "object" + }, + "description" : "???" + }, + "allowed" : { + "type" : "array", + "items" : { + "properties" : { + "method" : { + "type" : "string", + "description" : "???" + }, + "path" : { + "type" : "string", + "description" : "???" + } + }, + "type" : "object" + }, + "description" : "???" + }, + "notFound" : { + "type" : "array", + "items" : { + "properties" : { + "method" : { + "type" : "string", + "description" : "???" + }, + "path" : { + "type" : "string", + "description" : "???" + } + }, + "type" : "object" + }, + "description" : "???" + }, + "allowLast" : { + "type" : "boolean", + "description" : "???" + }, + "enabled" : { + "type" : "boolean", + "description" : "???" + } + }, + "type" : "object" + }, + "tags" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "Apikey tags" + }, + "enabled" : { + "type" : "boolean", + "description" : "Whether or not the key is enabled. If disabled, resources won't be available to calls using this key" + }, + "readOnly" : { + "type" : "boolean", + "description" : "The apikey only allow access for GET, HEAD and OPTIONS verbs" + }, + "clientSecret" : { + "type" : "string", + "description" : "The secret of the Api Key. Usually 64 random alpha numerical characters, but can be anything" + }, + "validUntil" : { + "description" : "null type", + "type" : "string", + "nullable" : true + }, + "clientName" : { + "type" : "string", + "description" : "The name of the api key, for humans ;-)" + }, + "monthlyQuota" : { + "type" : "integer", + "format" : "int64", + "description" : "Authorized number of calls per month" + }, + "description" : { + "type" : "string", + "description" : "Description of this apikey" + }, + "rotation" : { + "description" : "Apikey rotation settings", + "properties" : { + "enabled" : { + "type" : "boolean", + "description" : "Rotation enabled" + }, + "rotationEvery" : { + "type" : "integer", + "format" : "int64", + "description" : "Rotate every n hours" + }, + "gracePeriod" : { + "type" : "integer", + "format" : "int64", + "description" : "period (in hours) during which both secrets works" + }, + "nextSecret" : { + "description" : "null type", + "type" : "string", + "nullable" : true + } + }, + "type" : "object" + }, + "authorizedEntities" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "The group/service ids (prefixed by group_ or service_ on which the key is authorized" + }, + "clientId" : { + "type" : "string", + "description" : "The unique id of the Api Key. Usually 16 random alpha numerical characters, but can be anything" + } + }, + "type" : "object" + } + } + }, "otoroshi.plugins.jobs.kubernetes.OtoAnnotationConfig" : { "type" : "object", "description" : "???", @@ -57937,17 +61427,56 @@ "type" : "object", "description" : "???", "properties" : { - "memory_pages" : { + "allowedHosts" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "???" + }, + "memoryPages" : { "type" : "integer", "format" : "int32", "description" : "???" }, - "preserve" : { - "type" : "boolean", + "killOptions" : { + "description" : "???", + "properties" : { + "maxUnusedDuration" : { + "type" : "number", + "description" : "???" + }, + "immortal" : { + "type" : "boolean", + "description" : "???" + }, + "maxAvgCallDuration" : { + "type" : "number", + "description" : "???" + }, + "maxMemoryUsage" : { + "type" : "number", + "format" : "double", + "description" : "???" + }, + "maxCalls" : { + "type" : "integer", + "format" : "int32", + "description" : "???" + } + }, + "type" : "object" + }, + "allowedPaths" : { + "type" : "object", + "additionalProperties" : { + "type" : "string" + }, "description" : "???" }, - "opa" : { - "type" : "boolean", + "instances" : { + "type" : "integer", + "format" : "int32", "description" : "???" }, "config" : { @@ -57957,10 +61486,37 @@ }, "description" : "???" }, + "source" : { + "description" : "???", + "properties" : { + "kind" : { + "description" : "???", + "properties" : { }, + "type" : "object" + }, + "path" : { + "type" : "string", + "description" : "???" + }, + "opts" : { + "type" : "object", + "description" : "???" + } + }, + "type" : "object" + }, "authorizations" : { "description" : "???", "properties" : { - "global_map_access" : { + "proxyStateAccess" : { + "type" : "boolean", + "description" : "???" + }, + "httpAccess" : { + "type" : "boolean", + "description" : "???" + }, + "globalMapAccess" : { "description" : "???", "properties" : { "read" : { @@ -57974,7 +61530,7 @@ }, "type" : "object" }, - "plugin_map_access" : { + "pluginDataStoreAccess" : { "description" : "???", "properties" : { "read" : { @@ -57988,7 +61544,7 @@ }, "type" : "object" }, - "global_data_store_access" : { + "pluginMapAccess" : { "description" : "???", "properties" : { "read" : { @@ -58002,20 +61558,16 @@ }, "type" : "object" }, - "http_access" : { - "type" : "boolean", + "proxyHttpCallTimeout" : { + "type" : "integer", + "format" : "int32", "description" : "???" }, - "configuration_access" : { + "configurationAccess" : { "type" : "boolean", "description" : "???" }, - "proxy_http_call_timeout" : { - "type" : "integer", - "format" : "int32", - "description" : "???" - }, - "plugin_data_store_access" : { + "globalDataStoreAccess" : { "description" : "???", "properties" : { "read" : { @@ -58028,55 +61580,22 @@ } }, "type" : "object" - }, - "proxy_state_access" : { - "type" : "boolean", - "description" : "???" } }, "type" : "object" }, - "function_name" : { - "description" : "null type", - "type" : "string", - "nullable" : true - }, - "wasi" : { + "opa" : { "type" : "boolean", "description" : "???" }, - "source" : { - "description" : "???", - "properties" : { - "kind" : { - "description" : "???", - "properties" : { }, - "type" : "object" - }, - "path" : { - "type" : "string", - "description" : "???" - }, - "opts" : { - "type" : "object", - "description" : "???" - } - }, - "type" : "object" - }, - "allowed_paths" : { - "type" : "object", - "additionalProperties" : { - "type" : "string" - }, + "wasi" : { + "type" : "boolean", "description" : "???" }, - "allowed_hosts" : { - "type" : "array", - "items" : { - "type" : "string" - }, - "description" : "???" + "functionName" : { + "description" : "null type", + "type" : "string", + "nullable" : true } } }, @@ -58155,12 +61674,14 @@ "description" : "???" }, "provider" : { + "description" : "null type", "type" : "string", - "description" : "???" + "nullable" : true }, "dataCenter" : { + "description" : "null type", "type" : "string", - "description" : "???" + "nullable" : true }, "rack" : { "type" : "string", diff --git a/otoroshi/conf/schemas/openapi-forms.json b/otoroshi/conf/schemas/openapi-forms.json index 419deab6aa..6a567c554f 100644 --- a/otoroshi/conf/schemas/openapi-forms.json +++ b/otoroshi/conf/schemas/openapi-forms.json @@ -61,26 +61,9 @@ }, "flow" : [ "headers" ] }, - "otoroshi.auth.Credential" : { - "schema" : { - "certificate" : { - "label" : "certificate", - "type" : "string" - }, - "privateKey" : { - "label" : "privateKey", - "type" : "string" - }, - "certId" : { - "label" : "certId", - "type" : "string" - }, - "useOtoroshiCertificate" : { - "label" : "useOtoroshiCertificate", - "type" : "bool" - } - }, - "flow" : [ "useOtoroshiCertificate", "certId", "privateKey", "certificate" ] + "otoroshi.next.plugins.NgResponseCacheCleanupJob" : { + "schema" : { }, + "flow" : [ ] }, "otoroshi.models.CustomHeadersAuthConstraints" : { "schema" : { @@ -347,6 +330,41 @@ }, "flow" : [ "validatorConfig", "preRouteConfig", "sinkRefs", "validatorRefs", "jobRefs", "sinkConfig", "preRouteRefs", "transformersRefs", "transformersConfig", "enabled", "jobConfig" ] }, + "otoroshi.next.plugins.NgHasClientCertMatchingValidator" : { + "schema" : { + "subject_dns" : { + "label" : "subject_dns", + "type" : "array", + "array" : true, + "format" : null + }, + "serial_numbers" : { + "label" : "serial_numbers", + "type" : "array", + "array" : true, + "format" : null + }, + "issuer_dns" : { + "label" : "issuer_dns", + "type" : "array", + "array" : true, + "format" : null + }, + "regex_issuer_dns" : { + "label" : "regex_issuer_dns", + "type" : "array", + "array" : true, + "format" : null + }, + "regex_subject_dns" : { + "label" : "regex_subject_dns", + "type" : "array", + "array" : true, + "format" : null + } + }, + "flow" : [ "regex_subject_dns", "regex_issuer_dns", "issuer_dns", "serial_numbers", "subject_dns" ] + }, "otoroshi.models.UserRights" : { "schema" : { "rights" : { @@ -713,48 +731,255 @@ "schema" : { }, "flow" : [ ] }, + "otoroshi.next.plugins.NgBiscuitValidator" : { + "schema" : { + "legacy" : { + "label" : "legacy", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "facts" : { + "label" : "facts", + "type" : "array", + "array" : true, + "format" : null + }, + "publicKey" : { + "label" : "publicKey", + "type" : "string" + }, + "resources" : { + "label" : "resources", + "type" : "array", + "array" : true, + "format" : null + }, + "enforce" : { + "label" : "enforce", + "type" : "bool" + }, + "extractorName" : { + "label" : "extractorName", + "type" : "string" + }, + "checks" : { + "label" : "checks", + "type" : "array", + "array" : true, + "format" : null + }, + "extractor" : { + "label" : "extractor", + "type" : "string" + }, + "revocation_ids" : { + "label" : "revocation_ids", + "type" : "array", + "array" : true, + "format" : null + }, + "rules" : { + "label" : "rules", + "type" : "array", + "array" : true, + "format" : null + } + }, + "flow" : [ "facts", "publicKey", "resources", "enforce", "extractorName", "checks", "extractor", "revocation_ids", "rules" ] + } + }, + "flow" : [ "legacy" ] + }, "otoroshi.tcp.TlsMode" : { "schema" : { }, "flow" : [ ] }, "otoroshi.next.plugins.WasmSink" : { "schema" : { - "proxy_http_call_timeout" : { - "label" : "proxy_http_call_timeout", - "type" : "number" + "allowedHosts" : { + "label" : "allowedHosts", + "type" : "array", + "array" : true, + "format" : null }, - "raw_source" : { - "label" : "raw_source", - "type" : "string" + "memoryPages" : { + "label" : "memoryPages", + "type" : "number" }, - "wasi" : { - "label" : "wasi", - "type" : "bool" + "killOptions" : { + "label" : "killOptions", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "maxUnusedDuration" : { + "label" : "maxUnusedDuration", + "type" : "number" + }, + "immortal" : { + "label" : "immortal", + "type" : "bool" + }, + "maxAvgCallDuration" : { + "label" : "maxAvgCallDuration", + "type" : "number" + }, + "maxMemoryUsage" : { + "label" : "maxMemoryUsage", + "type" : "number" + }, + "maxCalls" : { + "label" : "maxCalls", + "type" : "number" + } + }, + "flow" : [ "maxUnusedDuration", "immortal", "maxAvgCallDuration", "maxMemoryUsage", "maxCalls" ] }, - "function_name" : { - "label" : "function_name", - "type" : "string" + "allowedPaths" : { + "label" : "allowedPaths", + "type" : "object" }, - "compiler_source" : { - "label" : "compiler_source", - "type" : "string" + "instances" : { + "label" : "instances", + "type" : "number" }, "config" : { "label" : "config", "type" : "object" }, - "memory_pages" : { - "label" : "memory_pages", - "type" : "number" + "source" : { + "label" : "source", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "kind" : { + "label" : "kind", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { }, + "flow" : [ ] + }, + "path" : { + "label" : "path", + "type" : "string" + }, + "opts" : { + "label" : "opts", + "type" : "object" + } + }, + "flow" : [ "kind", "path", "opts" ] }, - "allowed_hosts" : { - "label" : "allowed_hosts", - "type" : "array", - "array" : true, - "format" : null + "authorizations" : { + "label" : "authorizations", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "proxyStateAccess" : { + "label" : "proxyStateAccess", + "type" : "bool" + }, + "httpAccess" : { + "label" : "httpAccess", + "type" : "bool" + }, + "globalMapAccess" : { + "label" : "globalMapAccess", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "read" : { + "label" : "read", + "type" : "bool" + }, + "write" : { + "label" : "write", + "type" : "bool" + } + }, + "flow" : [ "read", "write" ] + }, + "pluginDataStoreAccess" : { + "label" : "pluginDataStoreAccess", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "read" : { + "label" : "read", + "type" : "bool" + }, + "write" : { + "label" : "write", + "type" : "bool" + } + }, + "flow" : [ "read", "write" ] + }, + "pluginMapAccess" : { + "label" : "pluginMapAccess", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "read" : { + "label" : "read", + "type" : "bool" + }, + "write" : { + "label" : "write", + "type" : "bool" + } + }, + "flow" : [ "read", "write" ] + }, + "proxyHttpCallTimeout" : { + "label" : "proxyHttpCallTimeout", + "type" : "number" + }, + "configurationAccess" : { + "label" : "configurationAccess", + "type" : "bool" + }, + "globalDataStoreAccess" : { + "label" : "globalDataStoreAccess", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "read" : { + "label" : "read", + "type" : "bool" + }, + "write" : { + "label" : "write", + "type" : "bool" + } + }, + "flow" : [ "read", "write" ] + } + }, + "flow" : [ "proxyStateAccess", "httpAccess", "globalMapAccess", "pluginDataStoreAccess", "pluginMapAccess", "proxyHttpCallTimeout", "configurationAccess", "globalDataStoreAccess" ] + }, + "opa" : { + "label" : "opa", + "type" : "bool" + }, + "wasi" : { + "label" : "wasi", + "type" : "bool" + }, + "functionName" : { + "label" : "functionName", + "type" : "string" } }, - "flow" : [ "allowed_hosts", "memory_pages", "config", "compiler_source", "function_name", "wasi", "raw_source", "proxy_http_call_timeout" ] + "flow" : [ "functionName", "wasi", "opa", "config", "instances", "allowedPaths", "memoryPages", "allowedHosts", "killOptions", "source", "authorizations" ] }, "otoroshi.next.models.NgTarget" : { "schema" : { @@ -918,6 +1143,99 @@ "schema" : { }, "flow" : [ ] }, + "otoroshi.next.plugins.OAuth2Caller" : { + "schema" : { + "cache_token_seconds" : { + "label" : "cache_token_seconds", + "type" : "number" + }, + "client_id" : { + "label" : "client_id", + "type" : "string" + }, + "client_secret" : { + "label" : "client_secret", + "type" : "string" + }, + "scope" : { + "label" : "scope", + "type" : "string" + }, + "password" : { + "label" : "password", + "type" : "string" + }, + "header_name" : { + "label" : "header_name", + "type" : "string" + }, + "method" : { + "label" : "method", + "type" : "string" + }, + "user" : { + "label" : "user", + "type" : "string" + }, + "kind" : { + "type" : "select", + "props" : { + "label" : "kind", + "options" : [ "client_credentials", "password" ] + } + }, + "header_value_format" : { + "label" : "header_value_format", + "type" : "string" + }, + "json_payload" : { + "label" : "json_payload", + "type" : "bool" + }, + "audience" : { + "label" : "audience", + "type" : "string" + }, + "url" : { + "label" : "url", + "type" : "string" + }, + "tls_config" : { + "label" : "tls_config", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "mtls" : { + "label" : "mtls", + "type" : "bool" + }, + "loose" : { + "label" : "loose", + "type" : "bool" + }, + "trustAll" : { + "label" : "trustAll", + "type" : "bool" + }, + "trustedCerts" : { + "label" : "trustedCerts", + "type" : "array", + "array" : true, + "format" : null + }, + "certs" : { + "label" : "certs", + "type" : "array", + "array" : true, + "format" : null + } + }, + "flow" : [ "mtls", "loose", "trustAll", "trustedCerts", "certs" ] + } + }, + "flow" : [ "url", "audience", "json_payload", "header_value_format", "kind", "user", "method", "header_name", "password", "scope", "client_secret", "client_id", "cache_token_seconds", "tls_config" ] + }, "otoroshi.next.plugins.SnowMonkeyChaos" : { "schema" : { "large_request_fault_config" : { @@ -1025,6 +1343,23 @@ }, "flow" : [ "message" ] }, + "otoroshi.next.plugins.OIDCAccessTokenAsApikey" : { + "schema" : { + "enabled" : { + "label" : "enabled", + "type" : "bool" + }, + "at_least_one" : { + "label" : "at_least_one", + "type" : "bool" + }, + "config" : { + "label" : "config", + "type" : "string" + } + }, + "flow" : [ "config", "at_least_one", "enabled" ] + }, "otoroshi.plugins.discovery.DiscoveryTargetsSelector" : { "schema" : { }, "flow" : [ ] @@ -1051,9 +1386,31 @@ }, "flow" : [ "value" ] }, - "otoroshi.auth.NameIDFormat" : { - "schema" : { }, - "flow" : [ ] + "otoroshi.next.plugins.NgIpStackGeolocationInfoExtractor" : { + "schema" : { + "apikey" : { + "label" : "apikey", + "type" : "string" + }, + "timeout" : { + "label" : "timeout", + "type" : "number" + }, + "log" : { + "label" : "log", + "type" : "bool" + } + }, + "flow" : [ "log", "timeout", "apikey" ] + }, + "otoroshi.next.plugins.NgGeolocationInfoHeaderConfig" : { + "schema" : { + "header_name" : { + "label" : "header_name", + "type" : "string" + } + }, + "flow" : [ "header_name" ] }, "otoroshi.next.plugins.ApikeyQuotas" : { "schema" : { }, @@ -1100,10 +1457,56 @@ "schema" : { }, "flow" : [ ] }, + "otoroshi.next.plugins.NgResponseCacheFilterConfig" : { + "schema" : { + "paths" : { + "label" : "paths", + "type" : "array", + "array" : true, + "format" : null + }, + "methods" : { + "label" : "methods", + "type" : "array", + "array" : true, + "format" : null + }, + "not_methods" : { + "label" : "not_methods", + "type" : "array", + "array" : true, + "format" : null + }, + "not_paths" : { + "label" : "not_paths", + "type" : "array", + "array" : true, + "format" : null + } + }, + "flow" : [ "not_paths", "not_methods", "methods", "paths" ] + }, "otoroshi.plugins.external.ExternalHttpValidator" : { "schema" : { }, "flow" : [ ] }, + "otoroshi.next.plugins.NgServiceQuotas" : { + "schema" : { + "throttling_quota" : { + "label" : "throttling_quota", + "type" : "number" + }, + "daily_quota" : { + "label" : "daily_quota", + "type" : "number" + }, + "monthly_quota" : { + "label" : "monthly_quota", + "type" : "number" + } + }, + "flow" : [ "monthly_quota", "daily_quota", "throttling_quota" ] + }, "HealthCheckEventList" : { "schema" : { }, "flow" : [ ] @@ -1137,6 +1540,237 @@ }, "flow" : [ "max_depth", "endpoint", "headers", "path", "schema", "max_complexity" ] }, + "otoroshi.next.plugins.WasmJobsConfig" : { + "schema" : { + "unique_id" : { + "label" : "unique_id", + "type" : "string" + }, + "instantiation" : { + "label" : "instantiation", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { }, + "flow" : [ ] + }, + "cron_expression" : { + "label" : "cron_expression", + "type" : "string" + }, + "kind" : { + "label" : "kind", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { }, + "flow" : [ ] + }, + "config" : { + "label" : "config", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "allowedHosts" : { + "label" : "allowedHosts", + "type" : "array", + "array" : true, + "format" : null + }, + "memoryPages" : { + "label" : "memoryPages", + "type" : "number" + }, + "killOptions" : { + "label" : "killOptions", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "maxUnusedDuration" : { + "label" : "maxUnusedDuration", + "type" : "number" + }, + "immortal" : { + "label" : "immortal", + "type" : "bool" + }, + "maxAvgCallDuration" : { + "label" : "maxAvgCallDuration", + "type" : "number" + }, + "maxMemoryUsage" : { + "label" : "maxMemoryUsage", + "type" : "number" + }, + "maxCalls" : { + "label" : "maxCalls", + "type" : "number" + } + }, + "flow" : [ "maxUnusedDuration", "immortal", "maxAvgCallDuration", "maxMemoryUsage", "maxCalls" ] + }, + "allowedPaths" : { + "label" : "allowedPaths", + "type" : "object" + }, + "instances" : { + "label" : "instances", + "type" : "number" + }, + "config" : { + "label" : "config", + "type" : "object" + }, + "source" : { + "label" : "source", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "kind" : { + "label" : "kind", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { }, + "flow" : [ ] + }, + "path" : { + "label" : "path", + "type" : "string" + }, + "opts" : { + "label" : "opts", + "type" : "object" + } + }, + "flow" : [ "kind", "path", "opts" ] + }, + "authorizations" : { + "label" : "authorizations", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "proxyStateAccess" : { + "label" : "proxyStateAccess", + "type" : "bool" + }, + "httpAccess" : { + "label" : "httpAccess", + "type" : "bool" + }, + "globalMapAccess" : { + "label" : "globalMapAccess", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "read" : { + "label" : "read", + "type" : "bool" + }, + "write" : { + "label" : "write", + "type" : "bool" + } + }, + "flow" : [ "read", "write" ] + }, + "pluginDataStoreAccess" : { + "label" : "pluginDataStoreAccess", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "read" : { + "label" : "read", + "type" : "bool" + }, + "write" : { + "label" : "write", + "type" : "bool" + } + }, + "flow" : [ "read", "write" ] + }, + "pluginMapAccess" : { + "label" : "pluginMapAccess", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "read" : { + "label" : "read", + "type" : "bool" + }, + "write" : { + "label" : "write", + "type" : "bool" + } + }, + "flow" : [ "read", "write" ] + }, + "proxyHttpCallTimeout" : { + "label" : "proxyHttpCallTimeout", + "type" : "number" + }, + "configurationAccess" : { + "label" : "configurationAccess", + "type" : "bool" + }, + "globalDataStoreAccess" : { + "label" : "globalDataStoreAccess", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "read" : { + "label" : "read", + "type" : "bool" + }, + "write" : { + "label" : "write", + "type" : "bool" + } + }, + "flow" : [ "read", "write" ] + } + }, + "flow" : [ "proxyStateAccess", "httpAccess", "globalMapAccess", "pluginDataStoreAccess", "pluginMapAccess", "proxyHttpCallTimeout", "configurationAccess", "globalDataStoreAccess" ] + }, + "opa" : { + "label" : "opa", + "type" : "bool" + }, + "wasi" : { + "label" : "wasi", + "type" : "bool" + }, + "functionName" : { + "label" : "functionName", + "type" : "string" + } + }, + "flow" : [ "allowedHosts", "memoryPages", "killOptions", "allowedPaths", "instances", "config", "source", "authorizations", "opa", "wasi", "functionName" ] + }, + "interval" : { + "label" : "interval", + "type" : "string" + }, + "initial_delay" : { + "label" : "initial_delay", + "type" : "string" + }, + "raw_config" : { + "label" : "raw_config", + "type" : "object" + } + }, + "flow" : [ "raw_config", "initial_delay", "interval", "cron_expression", "unique_id", "instantiation", "kind", "config" ] + }, "otoroshi.models.RefJwtVerifier" : { "schema" : { "type" : { @@ -1415,42 +2049,189 @@ }, "otoroshi.next.plugins.WasmBackend" : { "schema" : { - "proxy_http_call_timeout" : { - "label" : "proxy_http_call_timeout", - "type" : "number" + "allowedHosts" : { + "label" : "allowedHosts", + "type" : "array", + "array" : true, + "format" : null }, - "raw_source" : { - "label" : "raw_source", - "type" : "string" + "memoryPages" : { + "label" : "memoryPages", + "type" : "number" }, - "wasi" : { - "label" : "wasi", - "type" : "bool" + "killOptions" : { + "label" : "killOptions", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "maxUnusedDuration" : { + "label" : "maxUnusedDuration", + "type" : "number" + }, + "immortal" : { + "label" : "immortal", + "type" : "bool" + }, + "maxAvgCallDuration" : { + "label" : "maxAvgCallDuration", + "type" : "number" + }, + "maxMemoryUsage" : { + "label" : "maxMemoryUsage", + "type" : "number" + }, + "maxCalls" : { + "label" : "maxCalls", + "type" : "number" + } + }, + "flow" : [ "maxUnusedDuration", "immortal", "maxAvgCallDuration", "maxMemoryUsage", "maxCalls" ] }, - "function_name" : { - "label" : "function_name", - "type" : "string" + "allowedPaths" : { + "label" : "allowedPaths", + "type" : "object" }, - "compiler_source" : { - "label" : "compiler_source", - "type" : "string" + "instances" : { + "label" : "instances", + "type" : "number" }, "config" : { "label" : "config", "type" : "object" }, - "memory_pages" : { - "label" : "memory_pages", - "type" : "number" + "source" : { + "label" : "source", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "kind" : { + "label" : "kind", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { }, + "flow" : [ ] + }, + "path" : { + "label" : "path", + "type" : "string" + }, + "opts" : { + "label" : "opts", + "type" : "object" + } + }, + "flow" : [ "kind", "path", "opts" ] }, - "allowed_hosts" : { - "label" : "allowed_hosts", - "type" : "array", - "array" : true, - "format" : null + "authorizations" : { + "label" : "authorizations", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "proxyStateAccess" : { + "label" : "proxyStateAccess", + "type" : "bool" + }, + "httpAccess" : { + "label" : "httpAccess", + "type" : "bool" + }, + "globalMapAccess" : { + "label" : "globalMapAccess", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "read" : { + "label" : "read", + "type" : "bool" + }, + "write" : { + "label" : "write", + "type" : "bool" + } + }, + "flow" : [ "read", "write" ] + }, + "pluginDataStoreAccess" : { + "label" : "pluginDataStoreAccess", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "read" : { + "label" : "read", + "type" : "bool" + }, + "write" : { + "label" : "write", + "type" : "bool" + } + }, + "flow" : [ "read", "write" ] + }, + "pluginMapAccess" : { + "label" : "pluginMapAccess", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "read" : { + "label" : "read", + "type" : "bool" + }, + "write" : { + "label" : "write", + "type" : "bool" + } + }, + "flow" : [ "read", "write" ] + }, + "proxyHttpCallTimeout" : { + "label" : "proxyHttpCallTimeout", + "type" : "number" + }, + "configurationAccess" : { + "label" : "configurationAccess", + "type" : "bool" + }, + "globalDataStoreAccess" : { + "label" : "globalDataStoreAccess", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "read" : { + "label" : "read", + "type" : "bool" + }, + "write" : { + "label" : "write", + "type" : "bool" + } + }, + "flow" : [ "read", "write" ] + } + }, + "flow" : [ "proxyStateAccess", "httpAccess", "globalMapAccess", "pluginDataStoreAccess", "pluginMapAccess", "proxyHttpCallTimeout", "configurationAccess", "globalDataStoreAccess" ] + }, + "opa" : { + "label" : "opa", + "type" : "bool" + }, + "wasi" : { + "label" : "wasi", + "type" : "bool" + }, + "functionName" : { + "label" : "functionName", + "type" : "string" } }, - "flow" : [ "allowed_hosts", "memory_pages", "config", "compiler_source", "function_name", "wasi", "raw_source", "proxy_http_call_timeout" ] + "flow" : [ "functionName", "wasi", "opa", "config", "instances", "allowedPaths", "memoryPages", "allowedHosts", "killOptions", "source", "authorizations" ] }, "PemCsrBody" : { "schema" : { }, @@ -1612,9 +2393,13 @@ "value" : { "label" : "value", "type" : "object" + }, + "error" : { + "label" : "error", + "type" : "string" } }, - "flow" : [ "path", "value" ] + "flow" : [ "path", "error", "value" ] }, "emailField" : { "label" : "emailField", @@ -1740,9 +2525,13 @@ "value" : { "label" : "value", "type" : "object" + }, + "error" : { + "label" : "error", + "type" : "string" } }, - "flow" : [ "path", "value" ] + "flow" : [ "path", "error", "value" ] } }, "flow" : [ "validators" ] @@ -1769,6 +2558,72 @@ }, "flow" : [ "token" ] }, + "otoroshi.next.plugins.NgIzanamiV1Canary" : { + "schema" : { + "client_id" : { + "label" : "client_id", + "type" : "string" + }, + "experiment_id" : { + "label" : "experiment_id", + "type" : "string" + }, + "route_config" : { + "label" : "route_config", + "type" : "string" + }, + "tls" : { + "label" : "tls", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "enabled" : { + "label" : "enabled", + "type" : "bool" + }, + "certs" : { + "label" : "certs", + "type" : "array", + "array" : true, + "format" : null + }, + "loose" : { + "label" : "loose", + "type" : "bool" + }, + "trust_all" : { + "label" : "trust_all", + "type" : "bool" + }, + "trusted_certs" : { + "label" : "trusted_certs", + "type" : "array", + "array" : true, + "format" : null + } + }, + "flow" : [ "enabled", "certs", "loose", "trust_all", "trusted_certs" ] + }, + "timeout" : { + "label" : "timeout", + "type" : "number" + }, + "izanami_url" : { + "label" : "izanami_url", + "type" : "string" + }, + "client_secret" : { + "label" : "client_secret", + "type" : "string" + }, + "config_id" : { + "label" : "config_id", + "type" : "string" + } + }, + "flow" : [ "config_id", "client_secret", "izanami_url", "timeout", "route_config", "experiment_id", "client_id", "tls" ] + }, "otoroshi.plugins.hmac.HMACUtils" : { "schema" : { }, "flow" : [ ] @@ -1809,6 +2664,138 @@ "schema" : { }, "flow" : [ ] }, + "otoroshi.next.plugins.OAuth2CallerConfig" : { + "schema" : { + "cache_token_seconds" : { + "label" : "cache_token_seconds", + "type" : "number" + }, + "client_id" : { + "label" : "client_id", + "type" : "string" + }, + "client_secret" : { + "label" : "client_secret", + "type" : "string" + }, + "scope" : { + "label" : "scope", + "type" : "string" + }, + "password" : { + "label" : "password", + "type" : "string" + }, + "header_name" : { + "label" : "header_name", + "type" : "string" + }, + "method" : { + "label" : "method", + "type" : "string" + }, + "user" : { + "label" : "user", + "type" : "string" + }, + "kind" : { + "type" : "select", + "props" : { + "label" : "kind", + "options" : [ "client_credentials", "password" ] + } + }, + "header_value_format" : { + "label" : "header_value_format", + "type" : "string" + }, + "json_payload" : { + "label" : "json_payload", + "type" : "bool" + }, + "audience" : { + "label" : "audience", + "type" : "string" + }, + "url" : { + "label" : "url", + "type" : "string" + }, + "tls_config" : { + "label" : "tls_config", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "mtls" : { + "label" : "mtls", + "type" : "bool" + }, + "loose" : { + "label" : "loose", + "type" : "bool" + }, + "trustAll" : { + "label" : "trustAll", + "type" : "bool" + }, + "trustedCerts" : { + "label" : "trustedCerts", + "type" : "array", + "array" : true, + "format" : null + }, + "certs" : { + "label" : "certs", + "type" : "array", + "array" : true, + "format" : null + } + }, + "flow" : [ "mtls", "loose", "trustAll", "trustedCerts", "certs" ] + } + }, + "flow" : [ "url", "audience", "json_payload", "header_value_format", "kind", "user", "method", "header_name", "password", "scope", "client_secret", "client_id", "cache_token_seconds", "tls_config" ] + }, + "otoroshi.next.plugins.NgCertificateAsApikeyConfig" : { + "schema" : { + "daily_quota" : { + "label" : "daily_quota", + "type" : "number" + }, + "monthly_quota" : { + "label" : "monthly_quota", + "type" : "number" + }, + "tags" : { + "label" : "tags", + "type" : "array", + "array" : true, + "format" : null + }, + "metadata" : { + "label" : "metadata", + "type" : "object" + }, + "read_only" : { + "label" : "read_only", + "type" : "bool" + }, + "allow_client_id_only" : { + "label" : "allow_client_id_only", + "type" : "bool" + }, + "throttling_quota" : { + "label" : "throttling_quota", + "type" : "number" + }, + "constrained_services_only" : { + "label" : "constrained_services_only", + "type" : "bool" + } + }, + "flow" : [ "constrained_services_only", "throttling_quota", "allow_client_id_only", "read_only", "metadata", "tags", "monthly_quota", "daily_quota" ] + }, "otoroshi.plugins.geoloc.IpStackGeolocationInfoExtractor" : { "schema" : { }, "flow" : [ ] @@ -1824,6 +2811,19 @@ }, "flow" : [ "names" ] }, + "otoroshi.wasm.WasmDataRights" : { + "schema" : { + "read" : { + "label" : "read", + "type" : "bool" + }, + "write" : { + "label" : "write", + "type" : "bool" + } + }, + "flow" : [ "write", "read" ] + }, "otoroshi.plugins.clientcert.HasClientCertMatchingValidator" : { "schema" : { }, "flow" : [ ] @@ -1836,6 +2836,10 @@ "schema" : { }, "flow" : [ ] }, + "otoroshi.plugins.AttributeSetter" : { + "schema" : { }, + "flow" : [ ] + }, "otoroshi.next.models.NgPlugins" : { "schema" : { "slots" : { @@ -1844,6 +2848,10 @@ "array" : true, "format" : "form", "schema" : { + "instance_id" : { + "label" : "instance_id", + "type" : "number" + }, "debug" : { "label" : "debug", "type" : "bool" @@ -1881,7 +2889,7 @@ "type" : "bool" } }, - "flow" : [ "debug", "exclude", "plugin_index", "include", "plugin", "enabled", "config" ] + "flow" : [ "instance_id", "debug", "exclude", "plugin_index", "include", "plugin", "enabled", "config" ] } }, "flow" : [ "slots" ] @@ -2219,10 +3227,209 @@ }, "flow" : [ "ratio", "type" ] }, + "otoroshi.next.plugins.NgMaxMindGeolocationInfoExtractor" : { + "schema" : { + "path" : { + "label" : "path", + "type" : "string" + }, + "log" : { + "label" : "log", + "type" : "bool" + } + }, + "flow" : [ "log", "path" ] + }, "TargetsList" : { "schema" : { }, "flow" : [ ] }, + "otoroshi.next.plugins.WasmPreRoute" : { + "schema" : { + "allowedHosts" : { + "label" : "allowedHosts", + "type" : "array", + "array" : true, + "format" : null + }, + "memoryPages" : { + "label" : "memoryPages", + "type" : "number" + }, + "killOptions" : { + "label" : "killOptions", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "maxUnusedDuration" : { + "label" : "maxUnusedDuration", + "type" : "number" + }, + "immortal" : { + "label" : "immortal", + "type" : "bool" + }, + "maxAvgCallDuration" : { + "label" : "maxAvgCallDuration", + "type" : "number" + }, + "maxMemoryUsage" : { + "label" : "maxMemoryUsage", + "type" : "number" + }, + "maxCalls" : { + "label" : "maxCalls", + "type" : "number" + } + }, + "flow" : [ "maxUnusedDuration", "immortal", "maxAvgCallDuration", "maxMemoryUsage", "maxCalls" ] + }, + "allowedPaths" : { + "label" : "allowedPaths", + "type" : "object" + }, + "instances" : { + "label" : "instances", + "type" : "number" + }, + "config" : { + "label" : "config", + "type" : "object" + }, + "source" : { + "label" : "source", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "kind" : { + "label" : "kind", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { }, + "flow" : [ ] + }, + "path" : { + "label" : "path", + "type" : "string" + }, + "opts" : { + "label" : "opts", + "type" : "object" + } + }, + "flow" : [ "kind", "path", "opts" ] + }, + "authorizations" : { + "label" : "authorizations", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "proxyStateAccess" : { + "label" : "proxyStateAccess", + "type" : "bool" + }, + "httpAccess" : { + "label" : "httpAccess", + "type" : "bool" + }, + "globalMapAccess" : { + "label" : "globalMapAccess", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "read" : { + "label" : "read", + "type" : "bool" + }, + "write" : { + "label" : "write", + "type" : "bool" + } + }, + "flow" : [ "read", "write" ] + }, + "pluginDataStoreAccess" : { + "label" : "pluginDataStoreAccess", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "read" : { + "label" : "read", + "type" : "bool" + }, + "write" : { + "label" : "write", + "type" : "bool" + } + }, + "flow" : [ "read", "write" ] + }, + "pluginMapAccess" : { + "label" : "pluginMapAccess", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "read" : { + "label" : "read", + "type" : "bool" + }, + "write" : { + "label" : "write", + "type" : "bool" + } + }, + "flow" : [ "read", "write" ] + }, + "proxyHttpCallTimeout" : { + "label" : "proxyHttpCallTimeout", + "type" : "number" + }, + "configurationAccess" : { + "label" : "configurationAccess", + "type" : "bool" + }, + "globalDataStoreAccess" : { + "label" : "globalDataStoreAccess", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "read" : { + "label" : "read", + "type" : "bool" + }, + "write" : { + "label" : "write", + "type" : "bool" + } + }, + "flow" : [ "read", "write" ] + } + }, + "flow" : [ "proxyStateAccess", "httpAccess", "globalMapAccess", "pluginDataStoreAccess", "pluginMapAccess", "proxyHttpCallTimeout", "configurationAccess", "globalDataStoreAccess" ] + }, + "opa" : { + "label" : "opa", + "type" : "bool" + }, + "wasi" : { + "label" : "wasi", + "type" : "bool" + }, + "functionName" : { + "label" : "functionName", + "type" : "string" + } + }, + "flow" : [ "functionName", "wasi", "opa", "config", "instances", "allowedPaths", "memoryPages", "allowedHosts", "killOptions", "source", "authorizations" ] + }, "otoroshi.models.RouteIdentifier" : { "schema" : { "id" : { @@ -2524,9 +3731,13 @@ "value" : { "label" : "value", "type" : "object" + }, + "error" : { + "label" : "error", + "type" : "string" } }, - "flow" : [ "path", "value" ] + "flow" : [ "path", "error", "value" ] }, "id" : { "label" : "id", @@ -2826,10 +4037,6 @@ }, "flow" : [ "addresses", "finger" ] }, - "otoroshi.auth.SAMLCanocalizationMethod" : { - "schema" : { }, - "flow" : [ ] - }, "otoroshi.plugins.core.apikeys.ClientIdApikeyExtractor" : { "schema" : { }, "flow" : [ ] @@ -2851,6 +4058,64 @@ }, "flow" : [ "fail_if_present", "replace_if_present", "verifier" ] }, + "otoroshi.next.plugins.NgHasClientCertMatchingHttpValidator" : { + "schema" : { + "subject_dns" : { + "label" : "subject_dns", + "type" : "array", + "array" : true, + "format" : null + }, + "serial_numbers" : { + "label" : "serial_numbers", + "type" : "array", + "array" : true, + "format" : null + }, + "issuer_dns" : { + "label" : "issuer_dns", + "type" : "array", + "array" : true, + "format" : null + }, + "regex_issuer_dns" : { + "label" : "regex_issuer_dns", + "type" : "array", + "array" : true, + "format" : null + }, + "regex_subject_dns" : { + "label" : "regex_subject_dns", + "type" : "array", + "array" : true, + "format" : null + } + }, + "flow" : [ "regex_subject_dns", "regex_issuer_dns", "issuer_dns", "serial_numbers", "subject_dns" ] + }, + "otoroshi.next.plugins.MultiAuthModule" : { + "schema" : { + "modules" : { + "label" : "modules", + "type" : "array", + "array" : true, + "format" : null + }, + "pass_with_apikey" : { + "label" : "pass_with_apikey", + "type" : "bool" + }, + "use_email_prompt" : { + "label" : "use_email_prompt", + "type" : "bool" + }, + "users_groups" : { + "label" : "users_groups", + "type" : "object" + } + }, + "flow" : [ "users_groups", "use_email_prompt", "pass_with_apikey", "modules" ] + }, "otoroshi.models.BasicAuthConstraints" : { "schema" : { "enabled" : { @@ -3311,9 +4576,13 @@ "url" : { "label" : "url", "type" : "string" + }, + "timeout" : { + "label" : "timeout", + "type" : "number" } }, - "flow" : [ "enabled", "url" ] + "flow" : [ "enabled", "url", "timeout" ] }, "strictlyPrivate" : { "label" : "strictlyPrivate", @@ -5516,6 +6785,24 @@ "schema" : { }, "flow" : [ ] }, + "otoroshi.next.plugins.NgTrafficMirroringConfig" : { + "schema" : { + "legacy" : { + "label" : "legacy", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "conf" : { + "label" : "conf", + "type" : "object" + } + }, + "flow" : [ "conf" ] + } + }, + "flow" : [ "legacy" ] + }, "otoroshi.models.SnowMonkeyConfig" : { "schema" : { "dryRun" : { @@ -5716,6 +7003,19 @@ }, "flow" : [ "nextSecret", "gracePeriod", "rotationEvery", "enabled" ] }, + "otoroshi.next.plugins.FakeWasmContext" : { + "schema" : { + "config" : { + "label" : "config", + "type" : "object" + }, + "idx" : { + "label" : "idx", + "type" : "number" + } + }, + "flow" : [ "idx", "config" ] + }, "otoroshi.plugins.izanami.IzanamiProxyConfig" : { "schema" : { "izanamiClientId" : { @@ -6332,6 +7632,35 @@ }, "flow" : [ "server", "publicKey", "enabled", "emails", "contacts", "privateKey" ] }, + "otoroshi.next.plugins.NgBrotliConfig" : { + "schema" : { + "buffer_size" : { + "label" : "buffer_size", + "type" : "number" + }, + "black_list" : { + "label" : "black_list", + "type" : "array", + "array" : true, + "format" : null + }, + "white_list" : { + "label" : "white_list", + "type" : "array", + "array" : true, + "format" : null + }, + "compression_level" : { + "label" : "compression_level", + "type" : "number" + }, + "chunked_threshold" : { + "label" : "chunked_threshold", + "type" : "number" + } + }, + "flow" : [ "chunked_threshold", "compression_level", "white_list", "black_list", "buffer_size" ] + }, "otoroshi.next.plugins.NgHtmlPatcher" : { "schema" : { "append_head" : { @@ -6428,6 +7757,56 @@ }, "flow" : [ "mechanism", "password", "username" ] }, + "otoroshi.next.plugins.NgResponseCacheConfig" : { + "schema" : { + "ttl" : { + "label" : "ttl", + "type" : "number" + }, + "max_size" : { + "label" : "max_size", + "type" : "number" + }, + "auto_clean" : { + "label" : "auto_clean", + "type" : "bool" + }, + "filter" : { + "label" : "filter", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "paths" : { + "label" : "paths", + "type" : "array", + "array" : true, + "format" : null + }, + "methods" : { + "label" : "methods", + "type" : "array", + "array" : true, + "format" : null + }, + "not_methods" : { + "label" : "not_methods", + "type" : "array", + "array" : true, + "format" : null + }, + "not_paths" : { + "label" : "not_paths", + "type" : "array", + "array" : true, + "format" : null + } + }, + "flow" : [ "paths", "methods", "not_methods", "not_paths" ] + } + }, + "flow" : [ "auto_clean", "max_size", "ttl", "filter" ] + }, "otoroshi.plugins.geoloc.GeolocationInfoHeader" : { "schema" : { }, "flow" : [ ] @@ -7051,6 +8430,23 @@ }, "flow" : [ "content_encoding", "content_type" ] }, + "otoroshi.next.plugins.OIDCAccessTokenValidator" : { + "schema" : { + "enabled" : { + "label" : "enabled", + "type" : "bool" + }, + "at_least_one" : { + "label" : "at_least_one", + "type" : "bool" + }, + "config" : { + "label" : "config", + "type" : "string" + } + }, + "flow" : [ "config", "at_least_one", "enabled" ] + }, "otoroshi.next.plugins.NgLegacyApikeyCallConfig" : { "schema" : { "public_patterns" : { @@ -7408,6 +8804,27 @@ }, "flow" : [ "headers" ] }, + "otoroshi.next.plugins.BasicAuthCallerConfig" : { + "schema" : { + "username" : { + "label" : "username", + "type" : "string" + }, + "password" : { + "label" : "password", + "type" : "string" + }, + "header_name" : { + "label" : "header_name", + "type" : "string" + }, + "header_value_format" : { + "label" : "header_value_format", + "type" : "string" + } + }, + "flow" : [ "header_value_format", "header_name", "password", "username" ] + }, "otoroshi.events.KafkaConfig" : { "schema" : { "type" : { @@ -7597,10 +9014,6 @@ }, "otoroshi.models.GlobalConfig" : { "schema" : { - "anonymousTelemetry" : { - "label" : "anonymousTelemetry", - "type" : "bool" - }, "geolocationSettings" : { "label" : "geolocationSettings", "type" : "form", @@ -7643,10 +9056,18 @@ "label" : "throttlingQuota", "type" : "number" }, + "anonymousReporting" : { + "label" : "anonymousReporting", + "type" : "bool" + }, "maxWebhookSize" : { "label" : "maxWebhookSize", "type" : "number" }, + "env" : { + "label" : "env", + "type" : "object" + }, "maxConcurrentRequests" : { "label" : "maxConcurrentRequests", "type" : "number" @@ -8599,6 +10020,10 @@ "array" : true, "format" : null }, + "extensions" : { + "label" : "extensions", + "type" : "object" + }, "middleFingers" : { "label" : "middleFingers", "type" : "bool" @@ -9150,7 +10575,7 @@ "flow" : [ "enabled" ] } }, - "flow" : [ "u2fLoginOnly", "alertsWebhooks", "autoLinkToDefaultGroup", "maxHttp10ResponseSize", "useCircuitBreakers", "perIpThrottlingQuota", "initWithNewEngine", "maintenanceMode", "analyticsWebhooks", "middleFingers", "lines", "otoroshiId", "streamEntityOnly", "backOfficeAuthRef", "apiReadOnly", "metadata", "logAnalyticsOnServer", "elasticWritesConfigs", "useAkkaHttpClient", "limitConcurrentRequests", "tags", "trustXForwarded", "enableEmbeddedMetrics", "maxLogsSize", "endlessIpAddresses", "maxConcurrentRequests", "maxWebhookSize", "throttlingQuota", "alertsEmails", "anonymousTelemetry", "geolocationSettings", "cleverSettings", "templates", "plugins", "kafkaConfig", "proxies", "elasticReadsConfig", "quotasSettings", "mailerSettings", "autoCert", "wasmManagerSettings", "letsEncryptSettings", "snowMonkeyConfig", "scripts", "tlsSettings", "statsdConfig", "ipFiltering", "userAgentSettings" ] + "flow" : [ "u2fLoginOnly", "alertsWebhooks", "autoLinkToDefaultGroup", "maxHttp10ResponseSize", "useCircuitBreakers", "perIpThrottlingQuota", "initWithNewEngine", "maintenanceMode", "analyticsWebhooks", "middleFingers", "extensions", "lines", "otoroshiId", "streamEntityOnly", "backOfficeAuthRef", "apiReadOnly", "metadata", "logAnalyticsOnServer", "elasticWritesConfigs", "useAkkaHttpClient", "limitConcurrentRequests", "tags", "trustXForwarded", "enableEmbeddedMetrics", "maxLogsSize", "endlessIpAddresses", "maxConcurrentRequests", "env", "maxWebhookSize", "anonymousReporting", "throttlingQuota", "alertsEmails", "geolocationSettings", "cleverSettings", "templates", "plugins", "kafkaConfig", "proxies", "elasticReadsConfig", "quotasSettings", "mailerSettings", "autoCert", "wasmManagerSettings", "letsEncryptSettings", "snowMonkeyConfig", "scripts", "tlsSettings", "statsdConfig", "ipFiltering", "userAgentSettings" ] }, "otoroshi.plugins.users.HasAllowedUsersValidator" : { "schema" : { }, @@ -9388,6 +10813,15 @@ "schema" : { }, "flow" : [ ] }, + "otoroshi.next.plugins.NgUserAgentExtractorConfig" : { + "schema" : { + "log" : { + "label" : "log", + "type" : "bool" + } + }, + "flow" : [ "log" ] + }, "otoroshi.next.plugins.NgBadResponse" : { "schema" : { "status" : { @@ -9465,9 +10899,13 @@ "value" : { "label" : "value", "type" : "object" + }, + "error" : { + "label" : "error", + "type" : "string" } }, - "flow" : [ "value", "path" ] + "flow" : [ "error", "value", "path" ] }, "otoroshi.models.MappingSettings" : { "schema" : { @@ -9534,6 +10972,72 @@ }, "flow" : [ "strip_path", "exact", "methods", "domains", "query", "headers" ] }, + "otoroshi.next.plugins.ApikeyAuthModuleConfig" : { + "schema" : { + "realm" : { + "label" : "realm", + "type" : "string" + }, + "matcher" : { + "label" : "matcher", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "oneTagIn" : { + "label" : "oneTagIn", + "type" : "array", + "array" : true, + "format" : null + }, + "noneMetaKeysIn" : { + "label" : "noneMetaKeysIn", + "type" : "array", + "array" : true, + "format" : null + }, + "oneMetaIn" : { + "label" : "oneMetaIn", + "type" : "object" + }, + "oneMetaKeyIn" : { + "label" : "oneMetaKeyIn", + "type" : "array", + "array" : true, + "format" : null + }, + "allMetaKeysIn" : { + "label" : "allMetaKeysIn", + "type" : "array", + "array" : true, + "format" : null + }, + "noneTagIn" : { + "label" : "noneTagIn", + "type" : "array", + "array" : true, + "format" : null + }, + "allTagsIn" : { + "label" : "allTagsIn", + "type" : "array", + "array" : true, + "format" : null + }, + "allMetaIn" : { + "label" : "allMetaIn", + "type" : "object" + }, + "noneMetaIn" : { + "label" : "noneMetaIn", + "type" : "object" + } + }, + "flow" : [ "oneTagIn", "noneMetaKeysIn", "oneMetaIn", "oneMetaKeyIn", "allMetaKeysIn", "noneTagIn", "allTagsIn", "allMetaIn", "noneMetaIn" ] + } + }, + "flow" : [ "realm", "matcher" ] + }, "OutagesList" : { "schema" : { }, "flow" : [ ] @@ -9652,6 +11156,10 @@ }, "flow" : [ "deny_all", "user_path", "deny", "apikey_path", "jwt_path", "role_prefix", "allow_all", "allow", "roles" ] }, + "otoroshi.next.plugins.NgUserAgentInfoEndpoint" : { + "schema" : { }, + "flow" : [ ] + }, "otoroshi.next.models.StoredNgBackend" : { "schema" : { "description" : { @@ -9691,9 +11199,13 @@ "url" : { "label" : "url", "type" : "string" + }, + "timeout" : { + "label" : "timeout", + "type" : "number" } }, - "flow" : [ "enabled", "url" ] + "flow" : [ "enabled", "url", "timeout" ] }, "client" : { "label" : "client", @@ -10049,10 +11561,87 @@ }, "flow" : [ "protocols", "domain", "ma" ] }, + "otoroshi.next.plugins.WasmException" : { + "schema" : { + "message" : { + "label" : "message", + "type" : "string" + } + }, + "flow" : [ "message" ] + }, "otoroshi.plugins.jobs.kubernetes.KubernetesIngressToDescriptor" : { "schema" : { }, "flow" : [ ] }, + "otoroshi.next.plugins.NgGeolocationInfoEndpoint" : { + "schema" : { }, + "flow" : [ ] + }, + "otoroshi.next.plugins.NgHasClientCertMatchingApikeyValidator" : { + "schema" : { }, + "flow" : [ ] + }, + "otoroshi.next.plugins.NgBiscuitExtractor" : { + "schema" : { + "legacy" : { + "label" : "legacy", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "facts" : { + "label" : "facts", + "type" : "array", + "array" : true, + "format" : null + }, + "publicKey" : { + "label" : "publicKey", + "type" : "string" + }, + "resources" : { + "label" : "resources", + "type" : "array", + "array" : true, + "format" : null + }, + "enforce" : { + "label" : "enforce", + "type" : "bool" + }, + "extractorName" : { + "label" : "extractorName", + "type" : "string" + }, + "checks" : { + "label" : "checks", + "type" : "array", + "array" : true, + "format" : null + }, + "extractor" : { + "label" : "extractor", + "type" : "string" + }, + "revocation_ids" : { + "label" : "revocation_ids", + "type" : "array", + "array" : true, + "format" : null + }, + "rules" : { + "label" : "rules", + "type" : "array", + "array" : true, + "format" : null + } + }, + "flow" : [ "facts", "publicKey", "resources", "enforce", "extractorName", "checks", "extractor", "revocation_ids", "rules" ] + } + }, + "flow" : [ "legacy" ] + }, "otoroshi.models.OutageStrategy" : { "schema" : { }, "flow" : [ ] @@ -10235,6 +11824,58 @@ }, "flow" : [ "certId", "size", "type" ] }, + "otoroshi.next.plugins.NgClientCredentialsConfig" : { + "schema" : { + "default_key_pair" : { + "label" : "default_key_pair", + "type" : "string" + }, + "expiration" : { + "label" : "expiration", + "type" : "number" + }, + "secure" : { + "label" : "secure", + "type" : "bool" + }, + "biscuit" : { + "label" : "biscuit", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "privkey" : { + "label" : "privkey", + "type" : "string" + }, + "checks" : { + "label" : "checks", + "type" : "array", + "array" : true, + "format" : null + }, + "facts" : { + "label" : "facts", + "type" : "array", + "array" : true, + "format" : null + }, + "rules" : { + "label" : "rules", + "type" : "array", + "array" : true, + "format" : null + } + }, + "flow" : [ "privkey", "checks", "facts", "rules" ] + }, + "domain" : { + "label" : "domain", + "type" : "string" + } + }, + "flow" : [ "domain", "secure", "expiration", "default_key_pair", "biscuit" ] + }, "otoroshi.plugins.biscuit.vavr_implicits" : { "schema" : { }, "flow" : [ ] @@ -10854,6 +12495,41 @@ }, "flow" : [ "additionalResponseSize", "ratio" ] }, + "otoroshi.next.plugins.BrotliResponseCompressor" : { + "schema" : { + "compression_level" : { + "label" : "compression_level", + "type" : "number" + }, + "buffer_size" : { + "label" : "buffer_size", + "type" : "number" + }, + "chunked_threshold" : { + "label" : "chunked_threshold", + "type" : "number" + }, + "excluded_patterns" : { + "label" : "excluded_patterns", + "type" : "array", + "array" : true, + "format" : null + }, + "white_list" : { + "label" : "white_list", + "type" : "array", + "array" : true, + "format" : null + }, + "black_list" : { + "label" : "black_list", + "type" : "array", + "array" : true, + "format" : null + } + }, + "flow" : [ "black_list", "white_list", "excluded_patterns", "chunked_threshold", "buffer_size", "compression_level" ] + }, "otoroshi.models.RegionMatch" : { "schema" : { "type" : { @@ -10870,6 +12546,246 @@ }, "flow" : [ "region", "type" ] }, + "otoroshi.next.plugins.WasmJob" : { + "schema" : { + "config" : { + "label" : "config", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "unique_id" : { + "label" : "unique_id", + "type" : "string" + }, + "instantiation" : { + "label" : "instantiation", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { }, + "flow" : [ ] + }, + "cron_expression" : { + "label" : "cron_expression", + "type" : "string" + }, + "kind" : { + "label" : "kind", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { }, + "flow" : [ ] + }, + "config" : { + "label" : "config", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "allowedHosts" : { + "label" : "allowedHosts", + "type" : "array", + "array" : true, + "format" : null + }, + "memoryPages" : { + "label" : "memoryPages", + "type" : "number" + }, + "killOptions" : { + "label" : "killOptions", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "maxUnusedDuration" : { + "label" : "maxUnusedDuration", + "type" : "number" + }, + "immortal" : { + "label" : "immortal", + "type" : "bool" + }, + "maxAvgCallDuration" : { + "label" : "maxAvgCallDuration", + "type" : "number" + }, + "maxMemoryUsage" : { + "label" : "maxMemoryUsage", + "type" : "number" + }, + "maxCalls" : { + "label" : "maxCalls", + "type" : "number" + } + }, + "flow" : [ "maxUnusedDuration", "immortal", "maxAvgCallDuration", "maxMemoryUsage", "maxCalls" ] + }, + "allowedPaths" : { + "label" : "allowedPaths", + "type" : "object" + }, + "instances" : { + "label" : "instances", + "type" : "number" + }, + "config" : { + "label" : "config", + "type" : "object" + }, + "source" : { + "label" : "source", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "kind" : { + "label" : "kind", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { }, + "flow" : [ ] + }, + "path" : { + "label" : "path", + "type" : "string" + }, + "opts" : { + "label" : "opts", + "type" : "object" + } + }, + "flow" : [ "kind", "path", "opts" ] + }, + "authorizations" : { + "label" : "authorizations", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "proxyStateAccess" : { + "label" : "proxyStateAccess", + "type" : "bool" + }, + "httpAccess" : { + "label" : "httpAccess", + "type" : "bool" + }, + "globalMapAccess" : { + "label" : "globalMapAccess", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "read" : { + "label" : "read", + "type" : "bool" + }, + "write" : { + "label" : "write", + "type" : "bool" + } + }, + "flow" : [ "read", "write" ] + }, + "pluginDataStoreAccess" : { + "label" : "pluginDataStoreAccess", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "read" : { + "label" : "read", + "type" : "bool" + }, + "write" : { + "label" : "write", + "type" : "bool" + } + }, + "flow" : [ "read", "write" ] + }, + "pluginMapAccess" : { + "label" : "pluginMapAccess", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "read" : { + "label" : "read", + "type" : "bool" + }, + "write" : { + "label" : "write", + "type" : "bool" + } + }, + "flow" : [ "read", "write" ] + }, + "proxyHttpCallTimeout" : { + "label" : "proxyHttpCallTimeout", + "type" : "number" + }, + "configurationAccess" : { + "label" : "configurationAccess", + "type" : "bool" + }, + "globalDataStoreAccess" : { + "label" : "globalDataStoreAccess", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "read" : { + "label" : "read", + "type" : "bool" + }, + "write" : { + "label" : "write", + "type" : "bool" + } + }, + "flow" : [ "read", "write" ] + } + }, + "flow" : [ "proxyStateAccess", "httpAccess", "globalMapAccess", "pluginDataStoreAccess", "pluginMapAccess", "proxyHttpCallTimeout", "configurationAccess", "globalDataStoreAccess" ] + }, + "opa" : { + "label" : "opa", + "type" : "bool" + }, + "wasi" : { + "label" : "wasi", + "type" : "bool" + }, + "functionName" : { + "label" : "functionName", + "type" : "string" + } + }, + "flow" : [ "allowedHosts", "memoryPages", "killOptions", "allowedPaths", "instances", "config", "source", "authorizations", "opa", "wasi", "functionName" ] + }, + "interval" : { + "label" : "interval", + "type" : "string" + }, + "initial_delay" : { + "label" : "initial_delay", + "type" : "string" + }, + "raw_config" : { + "label" : "raw_config", + "type" : "object" + } + }, + "flow" : [ "unique_id", "instantiation", "cron_expression", "kind", "config", "interval", "initial_delay", "raw_config" ] + } + }, + "flow" : [ "config" ] + }, "otoroshi.models.AutoCert" : { "schema" : { "allowed" : { @@ -10940,6 +12856,31 @@ }, "flow" : [ "envelope", "action", "url", "charset", "convert_request_body_to_xml", "preserve_query", "jq_request_filter", "jq_response_filter" ] }, + "otoroshi.next.plugins.OAuth1Caller" : { + "schema" : { + "token_secret" : { + "label" : "token_secret", + "type" : "string" + }, + "consumer_secret" : { + "label" : "consumer_secret", + "type" : "string" + }, + "algo" : { + "label" : "algo", + "type" : "string" + }, + "token" : { + "label" : "token", + "type" : "string" + }, + "consumer_key" : { + "label" : "consumer_key", + "type" : "string" + } + }, + "flow" : [ "consumer_key", "token", "algo", "consumer_secret", "token_secret" ] + }, "otoroshi.next.plugins.EurekaServerConfig" : { "schema" : { "eviction_timeout" : { @@ -10953,6 +12894,23 @@ "schema" : { }, "flow" : [ ] }, + "otoroshi.next.plugins.SubIss" : { + "schema" : { + "sn" : { + "label" : "sn", + "type" : "string" + }, + "subject" : { + "label" : "subject", + "type" : "string" + }, + "issuer" : { + "label" : "issuer", + "type" : "string" + } + }, + "flow" : [ "issuer", "subject", "sn" ] + }, "otoroshi.models.DataExporterConfig" : { "schema" : { "desc" : { @@ -11307,6 +13265,78 @@ "schema" : { }, "flow" : [ ] }, + "otoroshi.next.plugins.OIDCHeadersConfig" : { + "schema" : { + "profile" : { + "label" : "profile", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "send" : { + "label" : "send", + "type" : "bool" + }, + "header_name" : { + "label" : "header_name", + "type" : "string" + } + }, + "flow" : [ "send", "header_name" ] + }, + "idtoken" : { + "label" : "idtoken", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "send" : { + "label" : "send", + "type" : "bool" + }, + "name" : { + "label" : "name", + "type" : "string" + }, + "header_name" : { + "label" : "header_name", + "type" : "string" + }, + "jwt" : { + "label" : "jwt", + "type" : "bool" + } + }, + "flow" : [ "send", "name", "header_name", "jwt" ] + }, + "access_token" : { + "label" : "access_token", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "send" : { + "label" : "send", + "type" : "bool" + }, + "name" : { + "label" : "name", + "type" : "string" + }, + "header_name" : { + "label" : "header_name", + "type" : "string" + }, + "jwt" : { + "label" : "jwt", + "type" : "bool" + } + }, + "flow" : [ "send", "name", "header_name", "jwt" ] + } + }, + "flow" : [ "profile", "idtoken", "access_token" ] + }, "otoroshi.plugins.biscuit.SealedBiscuitToken" : { "schema" : { "token" : { @@ -11707,9 +13737,13 @@ "url" : { "label" : "url", "type" : "string" + }, + "timeout" : { + "label" : "timeout", + "type" : "number" } }, - "flow" : [ "enabled", "url" ] + "flow" : [ "enabled", "url", "timeout" ] }, "client" : { "label" : "client", @@ -12199,9 +14233,13 @@ "url" : { "label" : "url", "type" : "string" + }, + "timeout" : { + "label" : "timeout", + "type" : "number" } }, - "flow" : [ "enabled", "url" ] + "flow" : [ "enabled", "url", "timeout" ] }, "client" : { "label" : "client", @@ -12535,6 +14573,31 @@ "schema" : { }, "flow" : [ ] }, + "otoroshi.next.plugins.OAuth1CallerConfig" : { + "schema" : { + "token_secret" : { + "label" : "token_secret", + "type" : "string" + }, + "consumer_secret" : { + "label" : "consumer_secret", + "type" : "string" + }, + "algo" : { + "label" : "algo", + "type" : "string" + }, + "token" : { + "label" : "token", + "type" : "string" + }, + "consumer_key" : { + "label" : "consumer_key", + "type" : "string" + } + }, + "flow" : [ "consumer_key", "token", "algo", "consumer_secret", "token_secret" ] + }, "otoroshi.plugins.clientcert.ClientCertChainHeader" : { "schema" : { }, "flow" : [ ] @@ -12711,6 +14774,23 @@ }, "flow" : [ "conf" ] }, + "otoroshi.next.plugins.NgServiceQuotasConfig" : { + "schema" : { + "throttling_quota" : { + "label" : "throttling_quota", + "type" : "number" + }, + "daily_quota" : { + "label" : "daily_quota", + "type" : "number" + }, + "monthly_quota" : { + "label" : "monthly_quota", + "type" : "number" + } + }, + "flow" : [ "monthly_quota", "daily_quota", "throttling_quota" ] + }, "otoroshi.next.plugins.QueryTransformer" : { "schema" : { "remove" : { @@ -12855,9 +14935,13 @@ "url" : { "label" : "url", "type" : "string" + }, + "timeout" : { + "label" : "timeout", + "type" : "number" } }, - "flow" : [ "enabled", "url" ] + "flow" : [ "enabled", "url", "timeout" ] }, "client" : { "label" : "client", @@ -13163,6 +15247,87 @@ }, "flow" : [ "description", "backend_ref", "groups", "capture", "tags", "metadata", "export_reporting", "id", "name", "enabled", "debug_flow", "frontend", "_loc", "backend" ] }, + "otoroshi.next.plugins.NgMultiAuthModuleConfig" : { + "schema" : { + "modules" : { + "label" : "modules", + "type" : "array", + "array" : true, + "format" : null + }, + "pass_with_apikey" : { + "label" : "pass_with_apikey", + "type" : "bool" + }, + "use_email_prompt" : { + "label" : "use_email_prompt", + "type" : "bool" + }, + "users_groups" : { + "label" : "users_groups", + "type" : "object" + } + }, + "flow" : [ "users_groups", "use_email_prompt", "pass_with_apikey", "modules" ] + }, + "otoroshi.next.plugins.NgSecurityTxtConfig" : { + "schema" : { + "preferred_languages" : { + "label" : "preferred_languages", + "type" : "string" + }, + "encryption" : { + "label" : "encryption", + "type" : "string" + }, + "policy" : { + "label" : "policy", + "type" : "string" + }, + "acknowledgments" : { + "label" : "acknowledgments", + "type" : "string" + }, + "hiring" : { + "label" : "hiring", + "type" : "string" + }, + "contact" : { + "label" : "contact", + "type" : "string" + } + }, + "flow" : [ "contact", "hiring", "acknowledgments", "policy", "encryption", "preferred_languages" ] + }, + "otoroshi.next.plugins.NgJwtUserExtractor" : { + "schema" : { + "meta_path" : { + "label" : "meta_path", + "type" : "string" + }, + "strip" : { + "label" : "strip", + "type" : "bool" + }, + "verifier" : { + "label" : "verifier", + "type" : "string" + }, + "email_path" : { + "label" : "email_path", + "type" : "string" + }, + "strict" : { + "label" : "strict", + "type" : "bool" + }, + "name_path" : { + "label" : "name_path", + "type" : "string" + } + }, + "flow" : [ "name_path", "strict", "email_path", "verifier", "strip", "meta_path" ] + }, "otoroshi.next.plugins.NgApikeyExtractors" : { "schema" : { "basic" : { @@ -13268,6 +15433,72 @@ }, "flow" : [ "basic", "custom_headers", "client_id", "jwt" ] }, + "otoroshi.next.plugins.NgIzanamiV1CanaryConfig" : { + "schema" : { + "client_id" : { + "label" : "client_id", + "type" : "string" + }, + "experiment_id" : { + "label" : "experiment_id", + "type" : "string" + }, + "route_config" : { + "label" : "route_config", + "type" : "string" + }, + "tls" : { + "label" : "tls", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "enabled" : { + "label" : "enabled", + "type" : "bool" + }, + "certs" : { + "label" : "certs", + "type" : "array", + "array" : true, + "format" : null + }, + "loose" : { + "label" : "loose", + "type" : "bool" + }, + "trust_all" : { + "label" : "trust_all", + "type" : "bool" + }, + "trusted_certs" : { + "label" : "trusted_certs", + "type" : "array", + "array" : true, + "format" : null + } + }, + "flow" : [ "enabled", "certs", "loose", "trust_all", "trusted_certs" ] + }, + "timeout" : { + "label" : "timeout", + "type" : "number" + }, + "izanami_url" : { + "label" : "izanami_url", + "type" : "string" + }, + "client_secret" : { + "label" : "client_secret", + "type" : "string" + }, + "config_id" : { + "label" : "config_id", + "type" : "string" + } + }, + "flow" : [ "config_id", "client_secret", "izanami_url", "timeout", "route_config", "experiment_id", "client_id", "tls" ] + }, "PatchBody" : { "schema" : { }, "flow" : [ ] @@ -13587,9 +15818,14 @@ "schema" : { }, "flow" : [ ] }, - "otoroshi.next.plugins.WasmUtils" : { - "schema" : { }, - "flow" : [ ] + "otoroshi.next.plugins.NgUserAgentInfoHeaderConfig" : { + "schema" : { + "header_name" : { + "label" : "header_name", + "type" : "string" + } + }, + "flow" : [ "header_name" ] }, "otoroshi.next.plugins.TailscaleSelectTargetByName" : { "schema" : { @@ -13849,9 +16085,13 @@ "url" : { "label" : "url", "type" : "string" + }, + "timeout" : { + "label" : "timeout", + "type" : "number" } }, - "flow" : [ "enabled", "url" ] + "flow" : [ "enabled", "url", "timeout" ] }, "strictlyPrivate" : { "label" : "strictlyPrivate", @@ -17024,9 +19264,13 @@ "url" : { "label" : "url", "type" : "string" + }, + "timeout" : { + "label" : "timeout", + "type" : "number" } }, - "flow" : [ "enabled", "url" ] + "flow" : [ "enabled", "url", "timeout" ] }, "strictlyPrivate" : { "label" : "strictlyPrivate", @@ -19626,6 +21870,109 @@ "schema" : { }, "flow" : [ ] }, + "otoroshi.auth.WasmAuthModuleConfig" : { + "schema" : { + "type" : { + "type" : "select", + "props" : { + "label" : "type", + "options" : [ "saml", "oauth1", "oauth2", "ldap", "basic" ] + } + }, + "wasmRef" : { + "label" : "wasmRef", + "type" : "string" + }, + "name" : { + "label" : "name", + "type" : "string" + }, + "clientSideSessionEnabled" : { + "label" : "clientSideSessionEnabled", + "type" : "bool" + }, + "description" : { + "label" : "description", + "type" : "string" + }, + "tags" : { + "label" : "tags", + "type" : "array", + "array" : true, + "format" : null + }, + "sessionMaxAge" : { + "label" : "sessionMaxAge", + "type" : "number" + }, + "userValidators" : { + "label" : "userValidators", + "type" : "array", + "array" : true, + "format" : "form", + "schema" : { + "path" : { + "label" : "path", + "type" : "string" + }, + "value" : { + "label" : "value", + "type" : "object" + }, + "error" : { + "label" : "error", + "type" : "string" + } + }, + "flow" : [ "path", "error", "value" ] + }, + "id" : { + "label" : "id", + "type" : "string" + }, + "_loc" : { + "label" : "_loc", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "tenant" : { + "label" : "tenant", + "type" : "string" + }, + "teams" : { + "label" : "teams", + "type" : "array", + "array" : true, + "format" : null + } + }, + "flow" : [ "tenant", "teams" ] + }, + "metadata" : { + "label" : "metadata", + "type" : "object" + }, + "sessionCookieValues" : { + "label" : "sessionCookieValues", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "httpOnly" : { + "label" : "httpOnly", + "type" : "bool" + }, + "secure" : { + "label" : "secure", + "type" : "bool" + } + }, + "flow" : [ "httpOnly", "secure" ] + } + }, + "flow" : [ "metadata", "id", "userValidators", "sessionMaxAge", "tags", "description", "clientSideSessionEnabled", "name", "wasmRef", "type", "_loc", "sessionCookieValues" ] + }, "otoroshi.utils.gzip.GzipConfig" : { "schema" : { "compressionLevel" : { @@ -19669,6 +22016,10 @@ "schema" : { }, "flow" : [ ] }, + "otoroshi.next.plugins.NgHasClientCertValidator" : { + "schema" : { }, + "flow" : [ ] + }, "otoroshi.models.TeamId" : { "schema" : { }, "flow" : [ ] @@ -19681,6 +22032,72 @@ "schema" : { }, "flow" : [ ] }, + "otoroshi.next.plugins.ApikeyAuthModule" : { + "schema" : { + "realm" : { + "label" : "realm", + "type" : "string" + }, + "matcher" : { + "label" : "matcher", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "oneTagIn" : { + "label" : "oneTagIn", + "type" : "array", + "array" : true, + "format" : null + }, + "noneMetaKeysIn" : { + "label" : "noneMetaKeysIn", + "type" : "array", + "array" : true, + "format" : null + }, + "oneMetaIn" : { + "label" : "oneMetaIn", + "type" : "object" + }, + "oneMetaKeyIn" : { + "label" : "oneMetaKeyIn", + "type" : "array", + "array" : true, + "format" : null + }, + "allMetaKeysIn" : { + "label" : "allMetaKeysIn", + "type" : "array", + "array" : true, + "format" : null + }, + "noneTagIn" : { + "label" : "noneTagIn", + "type" : "array", + "array" : true, + "format" : null + }, + "allTagsIn" : { + "label" : "allTagsIn", + "type" : "array", + "array" : true, + "format" : null + }, + "allMetaIn" : { + "label" : "allMetaIn", + "type" : "object" + }, + "noneMetaIn" : { + "label" : "noneMetaIn", + "type" : "object" + } + }, + "flow" : [ "oneTagIn", "noneMetaKeysIn", "oneMetaIn", "oneMetaKeyIn", "allMetaKeysIn", "noneTagIn", "allTagsIn", "allMetaIn", "noneMetaIn" ] + } + }, + "flow" : [ "realm", "matcher" ] + }, "otoroshi.next.plugins.NgAuthModuleExpectedUserConfig" : { "schema" : { "only_from" : { @@ -19805,6 +22222,58 @@ "schema" : { }, "flow" : [ ] }, + "otoroshi.next.plugins.NgClientCredentials" : { + "schema" : { + "default_key_pair" : { + "label" : "default_key_pair", + "type" : "string" + }, + "expiration" : { + "label" : "expiration", + "type" : "number" + }, + "secure" : { + "label" : "secure", + "type" : "bool" + }, + "biscuit" : { + "label" : "biscuit", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "privkey" : { + "label" : "privkey", + "type" : "string" + }, + "checks" : { + "label" : "checks", + "type" : "array", + "array" : true, + "format" : null + }, + "facts" : { + "label" : "facts", + "type" : "array", + "array" : true, + "format" : null + }, + "rules" : { + "label" : "rules", + "type" : "array", + "array" : true, + "format" : null + } + }, + "flow" : [ "privkey", "checks", "facts", "rules" ] + }, + "domain" : { + "label" : "domain", + "type" : "string" + } + }, + "flow" : [ "domain", "secure", "expiration", "default_key_pair", "biscuit" ] + }, "otoroshi.plugins.accesslog.AccessLog" : { "schema" : { }, "flow" : [ ] @@ -20086,42 +22555,189 @@ }, "otoroshi.next.plugins.WasmResponseTransformer" : { "schema" : { - "proxy_http_call_timeout" : { - "label" : "proxy_http_call_timeout", - "type" : "number" + "allowedHosts" : { + "label" : "allowedHosts", + "type" : "array", + "array" : true, + "format" : null }, - "raw_source" : { - "label" : "raw_source", - "type" : "string" + "memoryPages" : { + "label" : "memoryPages", + "type" : "number" }, - "wasi" : { - "label" : "wasi", - "type" : "bool" + "killOptions" : { + "label" : "killOptions", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "maxUnusedDuration" : { + "label" : "maxUnusedDuration", + "type" : "number" + }, + "immortal" : { + "label" : "immortal", + "type" : "bool" + }, + "maxAvgCallDuration" : { + "label" : "maxAvgCallDuration", + "type" : "number" + }, + "maxMemoryUsage" : { + "label" : "maxMemoryUsage", + "type" : "number" + }, + "maxCalls" : { + "label" : "maxCalls", + "type" : "number" + } + }, + "flow" : [ "maxUnusedDuration", "immortal", "maxAvgCallDuration", "maxMemoryUsage", "maxCalls" ] }, - "function_name" : { - "label" : "function_name", - "type" : "string" + "allowedPaths" : { + "label" : "allowedPaths", + "type" : "object" }, - "compiler_source" : { - "label" : "compiler_source", - "type" : "string" + "instances" : { + "label" : "instances", + "type" : "number" }, "config" : { "label" : "config", "type" : "object" }, - "memory_pages" : { - "label" : "memory_pages", - "type" : "number" + "source" : { + "label" : "source", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "kind" : { + "label" : "kind", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { }, + "flow" : [ ] + }, + "path" : { + "label" : "path", + "type" : "string" + }, + "opts" : { + "label" : "opts", + "type" : "object" + } + }, + "flow" : [ "kind", "path", "opts" ] }, - "allowed_hosts" : { - "label" : "allowed_hosts", - "type" : "array", - "array" : true, - "format" : null + "authorizations" : { + "label" : "authorizations", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "proxyStateAccess" : { + "label" : "proxyStateAccess", + "type" : "bool" + }, + "httpAccess" : { + "label" : "httpAccess", + "type" : "bool" + }, + "globalMapAccess" : { + "label" : "globalMapAccess", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "read" : { + "label" : "read", + "type" : "bool" + }, + "write" : { + "label" : "write", + "type" : "bool" + } + }, + "flow" : [ "read", "write" ] + }, + "pluginDataStoreAccess" : { + "label" : "pluginDataStoreAccess", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "read" : { + "label" : "read", + "type" : "bool" + }, + "write" : { + "label" : "write", + "type" : "bool" + } + }, + "flow" : [ "read", "write" ] + }, + "pluginMapAccess" : { + "label" : "pluginMapAccess", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "read" : { + "label" : "read", + "type" : "bool" + }, + "write" : { + "label" : "write", + "type" : "bool" + } + }, + "flow" : [ "read", "write" ] + }, + "proxyHttpCallTimeout" : { + "label" : "proxyHttpCallTimeout", + "type" : "number" + }, + "configurationAccess" : { + "label" : "configurationAccess", + "type" : "bool" + }, + "globalDataStoreAccess" : { + "label" : "globalDataStoreAccess", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "read" : { + "label" : "read", + "type" : "bool" + }, + "write" : { + "label" : "write", + "type" : "bool" + } + }, + "flow" : [ "read", "write" ] + } + }, + "flow" : [ "proxyStateAccess", "httpAccess", "globalMapAccess", "pluginDataStoreAccess", "pluginMapAccess", "proxyHttpCallTimeout", "configurationAccess", "globalDataStoreAccess" ] + }, + "opa" : { + "label" : "opa", + "type" : "bool" + }, + "wasi" : { + "label" : "wasi", + "type" : "bool" + }, + "functionName" : { + "label" : "functionName", + "type" : "string" } }, - "flow" : [ "allowed_hosts", "memory_pages", "config", "compiler_source", "function_name", "wasi", "raw_source", "proxy_http_call_timeout" ] + "flow" : [ "functionName", "wasi", "opa", "config", "instances", "allowedPaths", "memoryPages", "allowedHosts", "killOptions", "source", "authorizations" ] }, "otoroshi.plugins.jobs.kubernetes.KubernetesToOtoroshiCertSyncJob" : { "schema" : { }, @@ -20131,10 +22747,209 @@ "schema" : { }, "flow" : [ ] }, + "otoroshi.next.plugins.NgUserAgentExtractor" : { + "schema" : { + "log" : { + "label" : "log", + "type" : "bool" + } + }, + "flow" : [ "log" ] + }, + "otoroshi.next.plugins.WasmRouteMatcher" : { + "schema" : { + "allowedHosts" : { + "label" : "allowedHosts", + "type" : "array", + "array" : true, + "format" : null + }, + "memoryPages" : { + "label" : "memoryPages", + "type" : "number" + }, + "killOptions" : { + "label" : "killOptions", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "maxUnusedDuration" : { + "label" : "maxUnusedDuration", + "type" : "number" + }, + "immortal" : { + "label" : "immortal", + "type" : "bool" + }, + "maxAvgCallDuration" : { + "label" : "maxAvgCallDuration", + "type" : "number" + }, + "maxMemoryUsage" : { + "label" : "maxMemoryUsage", + "type" : "number" + }, + "maxCalls" : { + "label" : "maxCalls", + "type" : "number" + } + }, + "flow" : [ "maxUnusedDuration", "immortal", "maxAvgCallDuration", "maxMemoryUsage", "maxCalls" ] + }, + "allowedPaths" : { + "label" : "allowedPaths", + "type" : "object" + }, + "instances" : { + "label" : "instances", + "type" : "number" + }, + "config" : { + "label" : "config", + "type" : "object" + }, + "source" : { + "label" : "source", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "kind" : { + "label" : "kind", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { }, + "flow" : [ ] + }, + "path" : { + "label" : "path", + "type" : "string" + }, + "opts" : { + "label" : "opts", + "type" : "object" + } + }, + "flow" : [ "kind", "path", "opts" ] + }, + "authorizations" : { + "label" : "authorizations", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "proxyStateAccess" : { + "label" : "proxyStateAccess", + "type" : "bool" + }, + "httpAccess" : { + "label" : "httpAccess", + "type" : "bool" + }, + "globalMapAccess" : { + "label" : "globalMapAccess", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "read" : { + "label" : "read", + "type" : "bool" + }, + "write" : { + "label" : "write", + "type" : "bool" + } + }, + "flow" : [ "read", "write" ] + }, + "pluginDataStoreAccess" : { + "label" : "pluginDataStoreAccess", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "read" : { + "label" : "read", + "type" : "bool" + }, + "write" : { + "label" : "write", + "type" : "bool" + } + }, + "flow" : [ "read", "write" ] + }, + "pluginMapAccess" : { + "label" : "pluginMapAccess", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "read" : { + "label" : "read", + "type" : "bool" + }, + "write" : { + "label" : "write", + "type" : "bool" + } + }, + "flow" : [ "read", "write" ] + }, + "proxyHttpCallTimeout" : { + "label" : "proxyHttpCallTimeout", + "type" : "number" + }, + "configurationAccess" : { + "label" : "configurationAccess", + "type" : "bool" + }, + "globalDataStoreAccess" : { + "label" : "globalDataStoreAccess", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "read" : { + "label" : "read", + "type" : "bool" + }, + "write" : { + "label" : "write", + "type" : "bool" + } + }, + "flow" : [ "read", "write" ] + } + }, + "flow" : [ "proxyStateAccess", "httpAccess", "globalMapAccess", "pluginDataStoreAccess", "pluginMapAccess", "proxyHttpCallTimeout", "configurationAccess", "globalDataStoreAccess" ] + }, + "opa" : { + "label" : "opa", + "type" : "bool" + }, + "wasi" : { + "label" : "wasi", + "type" : "bool" + }, + "functionName" : { + "label" : "functionName", + "type" : "string" + } + }, + "flow" : [ "functionName", "wasi", "opa", "config", "instances", "allowedPaths", "memoryPages", "allowedHosts", "killOptions", "source", "authorizations" ] + }, "otoroshi.script.PluginType" : { "schema" : { }, "flow" : [ ] }, + "otoroshi.next.plugins.AttrsHelper" : { + "schema" : { }, + "flow" : [ ] + }, "Done" : { "schema" : { "done" : { @@ -20144,6 +22959,15 @@ }, "flow" : [ "done" ] }, + "otoroshi.next.plugins.NgDeferPluginConfig" : { + "schema" : { + "duration" : { + "label" : "duration", + "type" : "number" + } + }, + "flow" : [ "duration" ] + }, "otoroshi.next.plugins.RoutingRestrictions" : { "schema" : { "allow_last" : { @@ -20204,6 +23028,66 @@ }, "flow" : [ "not_found", "forbidden", "allowed", "allow_last" ] }, + "otoroshi.next.plugins.NgBiscuitConfig" : { + "schema" : { + "legacy" : { + "label" : "legacy", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "facts" : { + "label" : "facts", + "type" : "array", + "array" : true, + "format" : null + }, + "publicKey" : { + "label" : "publicKey", + "type" : "string" + }, + "resources" : { + "label" : "resources", + "type" : "array", + "array" : true, + "format" : null + }, + "enforce" : { + "label" : "enforce", + "type" : "bool" + }, + "extractorName" : { + "label" : "extractorName", + "type" : "string" + }, + "checks" : { + "label" : "checks", + "type" : "array", + "array" : true, + "format" : null + }, + "extractor" : { + "label" : "extractor", + "type" : "string" + }, + "revocation_ids" : { + "label" : "revocation_ids", + "type" : "array", + "array" : true, + "format" : null + }, + "rules" : { + "label" : "rules", + "type" : "array", + "array" : true, + "format" : null + } + }, + "flow" : [ "facts", "publicKey", "resources", "enforce", "extractorName", "checks", "extractor", "revocation_ids", "rules" ] + } + }, + "flow" : [ "legacy" ] + }, "otoroshi.models.ClientIdAuthConstraints" : { "schema" : { "enabled" : { @@ -20229,6 +23113,192 @@ "schema" : { }, "flow" : [ ] }, + "otoroshi.next.plugins.WasmOPA" : { + "schema" : { + "allowedHosts" : { + "label" : "allowedHosts", + "type" : "array", + "array" : true, + "format" : null + }, + "memoryPages" : { + "label" : "memoryPages", + "type" : "number" + }, + "killOptions" : { + "label" : "killOptions", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "maxUnusedDuration" : { + "label" : "maxUnusedDuration", + "type" : "number" + }, + "immortal" : { + "label" : "immortal", + "type" : "bool" + }, + "maxAvgCallDuration" : { + "label" : "maxAvgCallDuration", + "type" : "number" + }, + "maxMemoryUsage" : { + "label" : "maxMemoryUsage", + "type" : "number" + }, + "maxCalls" : { + "label" : "maxCalls", + "type" : "number" + } + }, + "flow" : [ "maxUnusedDuration", "immortal", "maxAvgCallDuration", "maxMemoryUsage", "maxCalls" ] + }, + "allowedPaths" : { + "label" : "allowedPaths", + "type" : "object" + }, + "instances" : { + "label" : "instances", + "type" : "number" + }, + "config" : { + "label" : "config", + "type" : "object" + }, + "source" : { + "label" : "source", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "kind" : { + "label" : "kind", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { }, + "flow" : [ ] + }, + "path" : { + "label" : "path", + "type" : "string" + }, + "opts" : { + "label" : "opts", + "type" : "object" + } + }, + "flow" : [ "kind", "path", "opts" ] + }, + "authorizations" : { + "label" : "authorizations", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "proxyStateAccess" : { + "label" : "proxyStateAccess", + "type" : "bool" + }, + "httpAccess" : { + "label" : "httpAccess", + "type" : "bool" + }, + "globalMapAccess" : { + "label" : "globalMapAccess", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "read" : { + "label" : "read", + "type" : "bool" + }, + "write" : { + "label" : "write", + "type" : "bool" + } + }, + "flow" : [ "read", "write" ] + }, + "pluginDataStoreAccess" : { + "label" : "pluginDataStoreAccess", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "read" : { + "label" : "read", + "type" : "bool" + }, + "write" : { + "label" : "write", + "type" : "bool" + } + }, + "flow" : [ "read", "write" ] + }, + "pluginMapAccess" : { + "label" : "pluginMapAccess", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "read" : { + "label" : "read", + "type" : "bool" + }, + "write" : { + "label" : "write", + "type" : "bool" + } + }, + "flow" : [ "read", "write" ] + }, + "proxyHttpCallTimeout" : { + "label" : "proxyHttpCallTimeout", + "type" : "number" + }, + "configurationAccess" : { + "label" : "configurationAccess", + "type" : "bool" + }, + "globalDataStoreAccess" : { + "label" : "globalDataStoreAccess", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "read" : { + "label" : "read", + "type" : "bool" + }, + "write" : { + "label" : "write", + "type" : "bool" + } + }, + "flow" : [ "read", "write" ] + } + }, + "flow" : [ "proxyStateAccess", "httpAccess", "globalMapAccess", "pluginDataStoreAccess", "pluginMapAccess", "proxyHttpCallTimeout", "configurationAccess", "globalDataStoreAccess" ] + }, + "opa" : { + "label" : "opa", + "type" : "bool" + }, + "wasi" : { + "label" : "wasi", + "type" : "bool" + }, + "functionName" : { + "label" : "functionName", + "type" : "string" + } + }, + "flow" : [ "functionName", "wasi", "opa", "config", "instances", "allowedPaths", "memoryPages", "allowedHosts", "killOptions", "source", "authorizations" ] + }, "otoroshi.plugins.geoloc.MaxMindGeolocationHelper" : { "schema" : { }, "flow" : [ ] @@ -20372,9 +23442,13 @@ "url" : { "label" : "url", "type" : "string" - } - }, - "flow" : [ "enabled", "url" ] + }, + "timeout" : { + "label" : "timeout", + "type" : "number" + } + }, + "flow" : [ "enabled", "url", "timeout" ] }, "client" : { "label" : "client", @@ -20908,9 +23982,13 @@ "url" : { "label" : "url", "type" : "string" + }, + "timeout" : { + "label" : "timeout", + "type" : "number" } }, - "flow" : [ "enabled", "url" ] + "flow" : [ "enabled", "url", "timeout" ] }, "client" : { "label" : "client", @@ -22840,9 +25918,13 @@ "url" : { "label" : "url", "type" : "string" + }, + "timeout" : { + "label" : "timeout", + "type" : "number" } }, - "flow" : [ "enabled", "url" ] + "flow" : [ "enabled", "url", "timeout" ] }, "strictlyPrivate" : { "label" : "strictlyPrivate", @@ -25028,10 +28110,6 @@ "array" : true, "format" : "form", "schema" : { - "anonymousTelemetry" : { - "label" : "anonymousTelemetry", - "type" : "bool" - }, "geolocationSettings" : { "label" : "geolocationSettings", "type" : "form", @@ -25074,10 +28152,18 @@ "label" : "throttlingQuota", "type" : "number" }, + "anonymousReporting" : { + "label" : "anonymousReporting", + "type" : "bool" + }, "maxWebhookSize" : { "label" : "maxWebhookSize", "type" : "number" }, + "env" : { + "label" : "env", + "type" : "object" + }, "maxConcurrentRequests" : { "label" : "maxConcurrentRequests", "type" : "number" @@ -26030,6 +29116,10 @@ "array" : true, "format" : null }, + "extensions" : { + "label" : "extensions", + "type" : "object" + }, "middleFingers" : { "label" : "middleFingers", "type" : "bool" @@ -26581,7 +29671,7 @@ "flow" : [ "enabled" ] } }, - "flow" : [ "anonymousTelemetry", "geolocationSettings", "alertsEmails", "throttlingQuota", "maxWebhookSize", "maxConcurrentRequests", "cleverSettings", "templates", "endlessIpAddresses", "plugins", "kafkaConfig", "maxLogsSize", "proxies", "enableEmbeddedMetrics", "elasticReadsConfig", "trustXForwarded", "quotasSettings", "tags", "limitConcurrentRequests", "useAkkaHttpClient", "elasticWritesConfigs", "logAnalyticsOnServer", "apiReadOnly", "backOfficeAuthRef", "streamEntityOnly", "otoroshiId", "mailerSettings", "lines", "middleFingers", "analyticsWebhooks", "autoCert", "wasmManagerSettings", "maintenanceMode", "initWithNewEngine", "letsEncryptSettings", "snowMonkeyConfig", "scripts", "perIpThrottlingQuota", "useCircuitBreakers", "maxHttp10ResponseSize", "tlsSettings", "statsdConfig", "autoLinkToDefaultGroup", "alertsWebhooks", "ipFiltering", "u2fLoginOnly", "userAgentSettings", "metadata" ] + "flow" : [ "geolocationSettings", "alertsEmails", "throttlingQuota", "anonymousReporting", "maxWebhookSize", "maxConcurrentRequests", "cleverSettings", "templates", "endlessIpAddresses", "plugins", "kafkaConfig", "maxLogsSize", "proxies", "enableEmbeddedMetrics", "elasticReadsConfig", "trustXForwarded", "quotasSettings", "tags", "limitConcurrentRequests", "useAkkaHttpClient", "elasticWritesConfigs", "logAnalyticsOnServer", "apiReadOnly", "backOfficeAuthRef", "streamEntityOnly", "otoroshiId", "mailerSettings", "lines", "middleFingers", "analyticsWebhooks", "autoCert", "wasmManagerSettings", "maintenanceMode", "initWithNewEngine", "letsEncryptSettings", "snowMonkeyConfig", "scripts", "perIpThrottlingQuota", "useCircuitBreakers", "maxHttp10ResponseSize", "tlsSettings", "statsdConfig", "autoLinkToDefaultGroup", "alertsWebhooks", "ipFiltering", "u2fLoginOnly", "userAgentSettings", "env", "metadata", "extensions" ] }, "authModules" : { "label" : "authModules", @@ -26747,9 +29837,13 @@ "value" : { "label" : "value", "type" : "object" + }, + "error" : { + "label" : "error", + "type" : "string" } }, - "flow" : [ "path", "value" ] + "flow" : [ "path", "error", "value" ] }, "id" : { "label" : "id", @@ -27263,159 +30357,9 @@ "consumerSecret" : { "label" : "consumerSecret", "type" : "string" - }, - "ssoProtocolBinding" : { - "label" : "ssoProtocolBinding", - "type" : "form", - "collapsable" : true, - "collapsed" : true, - "schema" : { }, - "flow" : [ ] - }, - "emailAttributeName" : { - "label" : "emailAttributeName", - "type" : "string" - }, - "validatingCertificates" : { - "label" : "validatingCertificates", - "type" : "array", - "array" : true, - "format" : null - }, - "singleLogoutProtocolBinding" : { - "label" : "singleLogoutProtocolBinding", - "type" : "form", - "collapsable" : true, - "collapsed" : true, - "schema" : { }, - "flow" : [ ] - }, - "issuer" : { - "label" : "issuer", - "type" : "string" - }, - "signature" : { - "label" : "signature", - "type" : "form", - "collapsable" : true, - "collapsed" : true, - "schema" : { - "algorithm" : { - "label" : "algorithm", - "type" : "form", - "collapsable" : true, - "collapsed" : true, - "schema" : { }, - "flow" : [ ] - }, - "canocalizationMethod" : { - "label" : "canocalizationMethod", - "type" : "form", - "collapsable" : true, - "collapsed" : true, - "schema" : { }, - "flow" : [ ] - } - }, - "flow" : [ "algorithm", "canocalizationMethod" ] - }, - "singleLogoutUrl" : { - "label" : "singleLogoutUrl", - "type" : "string" - }, - "usedNameIDAsEmail" : { - "label" : "usedNameIDAsEmail", - "type" : "bool" - }, - "singleSignOnUrl" : { - "label" : "singleSignOnUrl", - "type" : "string" - }, - "validateAssertions" : { - "label" : "validateAssertions", - "type" : "bool" - }, - "nameIDFormat" : { - "label" : "nameIDFormat", - "type" : "form", - "collapsable" : true, - "collapsed" : true, - "schema" : { }, - "flow" : [ ] - }, - "validateSignature" : { - "label" : "validateSignature", - "type" : "bool" - }, - "credentials" : { - "label" : "credentials", - "type" : "form", - "collapsable" : true, - "collapsed" : true, - "schema" : { - "signingKey" : { - "label" : "signingKey", - "type" : "form", - "collapsable" : true, - "collapsed" : true, - "schema" : { - "certificate" : { - "label" : "certificate", - "type" : "string" - }, - "privateKey" : { - "label" : "privateKey", - "type" : "string" - }, - "certId" : { - "label" : "certId", - "type" : "string" - }, - "useOtoroshiCertificate" : { - "label" : "useOtoroshiCertificate", - "type" : "bool" - } - }, - "flow" : [ "certificate", "privateKey", "certId", "useOtoroshiCertificate" ] - }, - "encryptionKey" : { - "label" : "encryptionKey", - "type" : "form", - "collapsable" : true, - "collapsed" : true, - "schema" : { - "certificate" : { - "label" : "certificate", - "type" : "string" - }, - "privateKey" : { - "label" : "privateKey", - "type" : "string" - }, - "certId" : { - "label" : "certId", - "type" : "string" - }, - "useOtoroshiCertificate" : { - "label" : "useOtoroshiCertificate", - "type" : "bool" - } - }, - "flow" : [ "certificate", "privateKey", "certId", "useOtoroshiCertificate" ] - }, - "signedDocuments" : { - "label" : "signedDocuments", - "type" : "bool" - }, - "encryptedAssertions" : { - "label" : "encryptedAssertions", - "type" : "bool" - } - }, - "flow" : [ "signingKey", "encryptionKey", "signedDocuments", "encryptedAssertions" ] } }, - "flow" : [ "type", "desc", "name", "clientSideSessionEnabled", "basicAuth", "tags", "users", "sessionMaxAge", "webauthn", "userValidators", "id", "_loc", "sessionCookieValues", "clientId", "otoroshiRightsField", "scope", "accessTokenField", "superAdmins", "refreshTokens", "loginUrl", "apiKeyTagsField", "otoroshiDataField", "emailField", "mtlsConfig", "tokenUrl", "useCookie", "pkce", "authorizeUrl", "callbackUrl", "proxy", "apiKeyMetaField", "clientSecret", "useJson", "oidConfig", "claims", "noWildcardRedirectURI", "nameField", "introspectionUrl", "logoutUrl", "userInfoUrl", "jwtVerifier", "readProfileFromToken", "allowEmptyPassword", "groupFilters", "serverUrls", "searchBase", "metadataField", "searchFilter", "adminUsername", "extractProfileFilter", "userBase", "adminPassword", "extractProfileFilterNot", "extractProfile", "accessTokenURL", "authorizeURL", "consumerKey", "callbackURL", "profileURL", "httpMethod", "requestTokenURL", "consumerSecret", "ssoProtocolBinding", "emailAttributeName", "validatingCertificates", "singleLogoutProtocolBinding", "issuer", "signature", "singleLogoutUrl", "usedNameIDAsEmail", "singleSignOnUrl", "validateAssertions", "nameIDFormat", "validateSignature", "credentials", "metadata", "extraMetadata", "rightsOverride", "dataOverride", "groupRights" ] + "flow" : [ "type", "desc", "name", "clientSideSessionEnabled", "basicAuth", "tags", "users", "sessionMaxAge", "webauthn", "userValidators", "id", "_loc", "sessionCookieValues", "clientId", "otoroshiRightsField", "scope", "accessTokenField", "superAdmins", "refreshTokens", "loginUrl", "apiKeyTagsField", "otoroshiDataField", "emailField", "mtlsConfig", "tokenUrl", "useCookie", "pkce", "authorizeUrl", "callbackUrl", "proxy", "apiKeyMetaField", "clientSecret", "useJson", "oidConfig", "claims", "noWildcardRedirectURI", "nameField", "introspectionUrl", "logoutUrl", "userInfoUrl", "jwtVerifier", "readProfileFromToken", "allowEmptyPassword", "groupFilters", "serverUrls", "searchBase", "metadataField", "searchFilter", "adminUsername", "extractProfileFilter", "userBase", "adminPassword", "extractProfileFilterNot", "extractProfile", "accessTokenURL", "authorizeURL", "consumerKey", "callbackURL", "profileURL", "httpMethod", "requestTokenURL", "consumerSecret", "metadata", "extraMetadata", "rightsOverride", "dataOverride", "groupRights" ] }, "tcpServices" : { "label" : "tcpServices", @@ -27832,6 +30776,254 @@ }, "flow" : [ "type", "username", "tags", "label", "_loc", "typ", "createdAt", "rights", "password", "metadata" ] }, + "wasmPlugins" : { + "label" : "wasmPlugins", + "type" : "array", + "array" : true, + "format" : "form", + "schema" : { + "_loc" : { + "label" : "_loc", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "tenant" : { + "label" : "tenant", + "type" : "string" + }, + "teams" : { + "label" : "teams", + "type" : "array", + "array" : true, + "format" : null + } + }, + "flow" : [ "tenant", "teams" ] + }, + "name" : { + "label" : "name", + "type" : "string" + }, + "tags" : { + "label" : "tags", + "type" : "array", + "array" : true, + "format" : null + }, + "steps" : { + "label" : "steps", + "type" : "array", + "array" : true, + "format" : "form", + "schema" : { }, + "flow" : [ ] + }, + "id" : { + "label" : "id", + "type" : "string" + }, + "metadata" : { + "label" : "metadata", + "type" : "object" + }, + "description" : { + "label" : "description", + "type" : "string" + }, + "config" : { + "label" : "config", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "allowedHosts" : { + "label" : "allowedHosts", + "type" : "array", + "array" : true, + "format" : null + }, + "memoryPages" : { + "label" : "memoryPages", + "type" : "number" + }, + "killOptions" : { + "label" : "killOptions", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "maxUnusedDuration" : { + "label" : "maxUnusedDuration", + "type" : "number" + }, + "immortal" : { + "label" : "immortal", + "type" : "bool" + }, + "maxAvgCallDuration" : { + "label" : "maxAvgCallDuration", + "type" : "number" + }, + "maxMemoryUsage" : { + "label" : "maxMemoryUsage", + "type" : "number" + }, + "maxCalls" : { + "label" : "maxCalls", + "type" : "number" + } + }, + "flow" : [ "maxUnusedDuration", "immortal", "maxAvgCallDuration", "maxMemoryUsage", "maxCalls" ] + }, + "allowedPaths" : { + "label" : "allowedPaths", + "type" : "object" + }, + "instances" : { + "label" : "instances", + "type" : "number" + }, + "config" : { + "label" : "config", + "type" : "object" + }, + "source" : { + "label" : "source", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "kind" : { + "label" : "kind", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { }, + "flow" : [ ] + }, + "path" : { + "label" : "path", + "type" : "string" + }, + "opts" : { + "label" : "opts", + "type" : "object" + } + }, + "flow" : [ "kind", "path", "opts" ] + }, + "authorizations" : { + "label" : "authorizations", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "proxyStateAccess" : { + "label" : "proxyStateAccess", + "type" : "bool" + }, + "httpAccess" : { + "label" : "httpAccess", + "type" : "bool" + }, + "globalMapAccess" : { + "label" : "globalMapAccess", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "read" : { + "label" : "read", + "type" : "bool" + }, + "write" : { + "label" : "write", + "type" : "bool" + } + }, + "flow" : [ "read", "write" ] + }, + "pluginDataStoreAccess" : { + "label" : "pluginDataStoreAccess", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "read" : { + "label" : "read", + "type" : "bool" + }, + "write" : { + "label" : "write", + "type" : "bool" + } + }, + "flow" : [ "read", "write" ] + }, + "pluginMapAccess" : { + "label" : "pluginMapAccess", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "read" : { + "label" : "read", + "type" : "bool" + }, + "write" : { + "label" : "write", + "type" : "bool" + } + }, + "flow" : [ "read", "write" ] + }, + "proxyHttpCallTimeout" : { + "label" : "proxyHttpCallTimeout", + "type" : "number" + }, + "configurationAccess" : { + "label" : "configurationAccess", + "type" : "bool" + }, + "globalDataStoreAccess" : { + "label" : "globalDataStoreAccess", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "read" : { + "label" : "read", + "type" : "bool" + }, + "write" : { + "label" : "write", + "type" : "bool" + } + }, + "flow" : [ "read", "write" ] + } + }, + "flow" : [ "proxyStateAccess", "httpAccess", "globalMapAccess", "pluginDataStoreAccess", "pluginMapAccess", "proxyHttpCallTimeout", "configurationAccess", "globalDataStoreAccess" ] + }, + "opa" : { + "label" : "opa", + "type" : "bool" + }, + "wasi" : { + "label" : "wasi", + "type" : "bool" + }, + "functionName" : { + "label" : "functionName", + "type" : "string" + } + }, + "flow" : [ "allowedHosts", "memoryPages", "killOptions", "allowedPaths", "instances", "config", "source", "authorizations", "opa", "wasi", "functionName" ] + } + }, + "flow" : [ "_loc", "name", "tags", "steps", "id", "description", "config", "metadata" ] + }, "serviceGroups" : { "label" : "serviceGroups", "type" : "array", @@ -27883,7 +31075,7 @@ "flow" : [ "id", "_loc", "name", "description", "tags", "metadata" ] } }, - "flow" : [ "serviceGroups", "simpleAdmins", "certificates", "tcpServices", "authModules", "globalConfigs", "serviceDescriptors", "routeCompositions", "teams", "dataExporters", "tenants", "jwtVerifiers", "scripts", "backends", "apiKeys", "routes" ] + "flow" : [ "serviceGroups", "wasmPlugins", "simpleAdmins", "certificates", "tcpServices", "authModules", "globalConfigs", "serviceDescriptors", "routeCompositions", "teams", "dataExporters", "tenants", "jwtVerifiers", "scripts", "backends", "apiKeys", "routes" ] }, "otoroshi.models.BadResponse" : { "schema" : { @@ -27910,6 +31102,36 @@ "schema" : { }, "flow" : [ ] }, + "otoroshi.next.plugins.AccessValidatorContext" : { + "schema" : { + "ctx" : { + "label" : "ctx", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { }, + "flow" : [ ] + } + }, + "flow" : [ "ctx" ] + }, + "otoroshi.next.plugins.OIDCAccessTokenConfig" : { + "schema" : { + "enabled" : { + "label" : "enabled", + "type" : "bool" + }, + "at_least_one" : { + "label" : "at_least_one", + "type" : "bool" + }, + "config" : { + "label" : "config", + "type" : "string" + } + }, + "flow" : [ "config", "at_least_one", "enabled" ] + }, "ExperimentalFormResponse" : { "schema" : { }, "flow" : [ ] @@ -28250,6 +31472,19 @@ }, "flow" : [ "targets", "root", "traffic" ] }, + "otoroshi.next.plugins.NgDiscoverySelfRegistrationConfig" : { + "schema" : { + "raw" : { + "type" : "code", + "props" : { + "label" : "raw", + "editorOnly" : true, + "mode" : "json" + } + } + }, + "flow" : [ "raw" ] + }, "otoroshi.next.plugins.JwtVerifierUtils" : { "schema" : { }, "flow" : [ ] @@ -28271,6 +31506,27 @@ "schema" : { }, "flow" : [ ] }, + "otoroshi.next.plugins.OIDCAccessTokenHeader" : { + "schema" : { + "send" : { + "label" : "send", + "type" : "bool" + }, + "name" : { + "label" : "name", + "type" : "string" + }, + "header_name" : { + "label" : "header_name", + "type" : "string" + }, + "jwt" : { + "label" : "jwt", + "type" : "bool" + } + }, + "flow" : [ "jwt", "header_name", "name", "send" ] + }, "otoroshi.next.plugins.NgFaultConfig" : { "schema" : { }, "flow" : [ ] @@ -28365,6 +31621,15 @@ "schema" : { }, "flow" : [ ] }, + "otoroshi.next.plugins.NgGeolocationInfoHeader" : { + "schema" : { + "header_name" : { + "label" : "header_name", + "type" : "string" + } + }, + "flow" : [ "header_name" ] + }, "otoroshi.plugins.biscuit.PreRoutingVerifierContext" : { "schema" : { "ctx" : { @@ -28602,9 +31867,13 @@ "url" : { "label" : "url", "type" : "string" + }, + "timeout" : { + "label" : "timeout", + "type" : "number" } }, - "flow" : [ "enabled", "url" ] + "flow" : [ "enabled", "url", "timeout" ] }, "strictlyPrivate" : { "label" : "strictlyPrivate", @@ -30991,6 +34260,23 @@ }, "flow" : [ "ctx", "apk" ] }, + "otoroshi.next.plugins.HMACCaller" : { + "schema" : { + "secret" : { + "label" : "secret", + "type" : "string" + }, + "algo" : { + "label" : "algo", + "type" : "string" + }, + "authorization_header" : { + "label" : "authorization_header", + "type" : "string" + } + }, + "flow" : [ "authorization_header", "algo", "secret" ] + }, "otoroshi.ssl.pki.models.GenKeyPairResponse" : { "schema" : { "publicKey" : { @@ -31174,6 +34460,10 @@ }, "otoroshi.next.models.NgPluginInstance" : { "schema" : { + "instance_id" : { + "label" : "instance_id", + "type" : "number" + }, "debug" : { "label" : "debug", "type" : "bool" @@ -31211,7 +34501,7 @@ "type" : "bool" } }, - "flow" : [ "enabled", "plugin", "include", "exclude", "config", "debug", "plugin_index" ] + "flow" : [ "enabled", "plugin", "include", "exclude", "config", "debug", "instance_id", "plugin_index" ] }, "otoroshi.models.HealthCheck" : { "schema" : { @@ -31222,9 +34512,22 @@ "url" : { "label" : "url", "type" : "string" + }, + "timeout" : { + "label" : "timeout", + "type" : "number" + } + }, + "flow" : [ "timeout", "url", "enabled" ] + }, + "otoroshi.next.plugins.NgDeferPlugin" : { + "schema" : { + "duration" : { + "label" : "duration", + "type" : "number" } }, - "flow" : [ "url", "enabled" ] + "flow" : [ "duration" ] }, "otoroshi.plugins.oidc.ThirdPartyApiKeyConfig" : { "schema" : { }, @@ -31378,6 +34681,88 @@ }, "flow" : [ "metadata", "otoroshiData", "name", "tags", "authConfigId", "createdAt", "email", "randomId", "lastRefresh", "profile", "expiredAt", "token", "realm", "_loc" ] }, + "otoroshi.next.plugins.NgIzanamiV1ProxyConfig" : { + "schema" : { + "features_enabled" : { + "label" : "features_enabled", + "type" : "bool" + }, + "client_secret" : { + "label" : "client_secret", + "type" : "string" + }, + "features_with_context_enabled" : { + "label" : "features_with_context_enabled", + "type" : "bool" + }, + "config_pattern" : { + "label" : "config_pattern", + "type" : "string" + }, + "feature_pattern" : { + "label" : "feature_pattern", + "type" : "string" + }, + "client_id" : { + "label" : "client_id", + "type" : "string" + }, + "tls" : { + "label" : "tls", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "enabled" : { + "label" : "enabled", + "type" : "bool" + }, + "certs" : { + "label" : "certs", + "type" : "array", + "array" : true, + "format" : null + }, + "loose" : { + "label" : "loose", + "type" : "bool" + }, + "trust_all" : { + "label" : "trust_all", + "type" : "bool" + }, + "trusted_certs" : { + "label" : "trusted_certs", + "type" : "array", + "array" : true, + "format" : null + } + }, + "flow" : [ "enabled", "certs", "loose", "trust_all", "trusted_certs" ] + }, + "izanami_url" : { + "label" : "izanami_url", + "type" : "string" + }, + "timeout" : { + "label" : "timeout", + "type" : "number" + }, + "path" : { + "label" : "path", + "type" : "string" + }, + "auto_context" : { + "label" : "auto_context", + "type" : "bool" + }, + "configuration_enabled" : { + "label" : "configuration_enabled", + "type" : "bool" + } + }, + "flow" : [ "configuration_enabled", "auto_context", "path", "timeout", "izanami_url", "client_id", "feature_pattern", "config_pattern", "features_with_context_enabled", "client_secret", "features_enabled", "tls" ] + }, "otoroshi.plugins.core.apikeys.CustomHeadersApikeyExtractor" : { "schema" : { }, "flow" : [ ] @@ -31447,10 +34832,6 @@ }, "flow" : [ "namespace", "topic", "uri", "tenant", "tlsTrustCertsFilePath", "type", "mtlsConfig" ] }, - "otoroshi.auth.SAMLProtocolBinding" : { - "schema" : { }, - "flow" : [ ] - }, "otoroshi.plugins.jobs.kubernetes.KubernetesEntity" : { "schema" : { }, "flow" : [ ] @@ -31739,6 +35120,10 @@ }, "flow" : [ "filter" ] }, + "otoroshi.script.JobInstantiation" : { + "schema" : { }, + "flow" : [ ] + }, "otoroshi.plugins.discovery.DiscoveryJobServiceId" : { "schema" : { "id" : { @@ -32625,9 +36010,13 @@ "url" : { "label" : "url", "type" : "string" + }, + "timeout" : { + "label" : "timeout", + "type" : "number" } }, - "flow" : [ "enabled", "url" ] + "flow" : [ "enabled", "url", "timeout" ] }, "strictlyPrivate" : { "label" : "strictlyPrivate", @@ -34921,6 +38310,35 @@ "schema" : { }, "flow" : [ ] }, + "otoroshi.next.plugins.NgJwtUserExtractorConfig" : { + "schema" : { + "meta_path" : { + "label" : "meta_path", + "type" : "string" + }, + "strip" : { + "label" : "strip", + "type" : "bool" + }, + "verifier" : { + "label" : "verifier", + "type" : "string" + }, + "email_path" : { + "label" : "email_path", + "type" : "string" + }, + "strict" : { + "label" : "strict", + "type" : "bool" + }, + "name_path" : { + "label" : "name_path", + "type" : "string" + } + }, + "flow" : [ "name_path", "strict", "email_path", "verifier", "strip", "meta_path" ] + }, "otoroshi.plugins.biscuit.VerificationContext" : { "schema" : { }, "flow" : [ ] @@ -35222,9 +38640,13 @@ "value" : { "label" : "value", "type" : "object" + }, + "error" : { + "label" : "error", + "type" : "string" } }, - "flow" : [ "path", "value" ] + "flow" : [ "path", "error", "value" ] }, "id" : { "label" : "id", @@ -35738,168 +39160,68 @@ "consumerSecret" : { "label" : "consumerSecret", "type" : "string" - }, - "ssoProtocolBinding" : { - "label" : "ssoProtocolBinding", - "type" : "form", - "collapsable" : true, - "collapsed" : true, - "schema" : { }, - "flow" : [ ] - }, - "emailAttributeName" : { - "label" : "emailAttributeName", - "type" : "string" - }, - "validatingCertificates" : { - "label" : "validatingCertificates", - "type" : "array", - "array" : true, - "format" : null - }, - "singleLogoutProtocolBinding" : { - "label" : "singleLogoutProtocolBinding", - "type" : "form", - "collapsable" : true, - "collapsed" : true, - "schema" : { }, - "flow" : [ ] - }, - "issuer" : { - "label" : "issuer", - "type" : "string" - }, - "signature" : { - "label" : "signature", - "type" : "form", - "collapsable" : true, - "collapsed" : true, - "schema" : { - "algorithm" : { - "label" : "algorithm", - "type" : "form", - "collapsable" : true, - "collapsed" : true, - "schema" : { }, - "flow" : [ ] - }, - "canocalizationMethod" : { - "label" : "canocalizationMethod", - "type" : "form", - "collapsable" : true, - "collapsed" : true, - "schema" : { }, - "flow" : [ ] - } - }, - "flow" : [ "algorithm", "canocalizationMethod" ] - }, - "singleLogoutUrl" : { - "label" : "singleLogoutUrl", - "type" : "string" - }, - "usedNameIDAsEmail" : { - "label" : "usedNameIDAsEmail", - "type" : "bool" - }, - "singleSignOnUrl" : { - "label" : "singleSignOnUrl", + } + }, + "flow" : [ "consumerSecret", "requestTokenURL", "profileURL", "callbackURL", "consumerKey", "authorizeURL", "accessTokenURL", "extractProfile", "extractProfileFilterNot", "adminPassword", "userBase", "extractProfileFilter", "adminUsername", "searchFilter", "metadataField", "groupRights", "searchBase", "serverUrls", "groupFilters", "allowEmptyPassword", "readProfileFromToken", "userInfoUrl", "dataOverride", "logoutUrl", "introspectionUrl", "nameField", "noWildcardRedirectURI", "claims", "oidConfig", "useJson", "clientSecret", "apiKeyMetaField", "callbackUrl", "authorizeUrl", "useCookie", "tokenUrl", "emailField", "otoroshiDataField", "apiKeyTagsField", "loginUrl", "refreshTokens", "superAdmins", "accessTokenField", "scope", "otoroshiRightsField", "clientId", "rightsOverride", "extraMetadata", "metadata", "id", "userValidators", "webauthn", "sessionMaxAge", "users", "tags", "basicAuth", "clientSideSessionEnabled", "name", "desc", "type", "_loc", "sessionCookieValues", "mtlsConfig", "pkce", "proxy", "jwtVerifier", "httpMethod" ] + }, + "otoroshi.next.plugins.JQResponse" : { + "schema" : { + "filter" : { + "label" : "filter", "type" : "string" + } + }, + "flow" : [ "filter" ] + }, + "otoroshi.next.plugins.NgResponseCache" : { + "schema" : { + "ttl" : { + "label" : "ttl", + "type" : "number" }, - "validateAssertions" : { - "label" : "validateAssertions", - "type" : "bool" - }, - "nameIDFormat" : { - "label" : "nameIDFormat", - "type" : "form", - "collapsable" : true, - "collapsed" : true, - "schema" : { }, - "flow" : [ ] + "max_size" : { + "label" : "max_size", + "type" : "number" }, - "validateSignature" : { - "label" : "validateSignature", + "auto_clean" : { + "label" : "auto_clean", "type" : "bool" }, - "credentials" : { - "label" : "credentials", + "filter" : { + "label" : "filter", "type" : "form", "collapsable" : true, "collapsed" : true, "schema" : { - "signingKey" : { - "label" : "signingKey", - "type" : "form", - "collapsable" : true, - "collapsed" : true, - "schema" : { - "certificate" : { - "label" : "certificate", - "type" : "string" - }, - "privateKey" : { - "label" : "privateKey", - "type" : "string" - }, - "certId" : { - "label" : "certId", - "type" : "string" - }, - "useOtoroshiCertificate" : { - "label" : "useOtoroshiCertificate", - "type" : "bool" - } - }, - "flow" : [ "certificate", "privateKey", "certId", "useOtoroshiCertificate" ] + "paths" : { + "label" : "paths", + "type" : "array", + "array" : true, + "format" : null }, - "encryptionKey" : { - "label" : "encryptionKey", - "type" : "form", - "collapsable" : true, - "collapsed" : true, - "schema" : { - "certificate" : { - "label" : "certificate", - "type" : "string" - }, - "privateKey" : { - "label" : "privateKey", - "type" : "string" - }, - "certId" : { - "label" : "certId", - "type" : "string" - }, - "useOtoroshiCertificate" : { - "label" : "useOtoroshiCertificate", - "type" : "bool" - } - }, - "flow" : [ "certificate", "privateKey", "certId", "useOtoroshiCertificate" ] + "methods" : { + "label" : "methods", + "type" : "array", + "array" : true, + "format" : null }, - "signedDocuments" : { - "label" : "signedDocuments", - "type" : "bool" + "not_methods" : { + "label" : "not_methods", + "type" : "array", + "array" : true, + "format" : null }, - "encryptedAssertions" : { - "label" : "encryptedAssertions", - "type" : "bool" + "not_paths" : { + "label" : "not_paths", + "type" : "array", + "array" : true, + "format" : null } }, - "flow" : [ "signingKey", "encryptionKey", "signedDocuments", "encryptedAssertions" ] - } - }, - "flow" : [ "validateSignature", "validateAssertions", "singleSignOnUrl", "usedNameIDAsEmail", "singleLogoutUrl", "issuer", "validatingCertificates", "emailAttributeName", "consumerSecret", "requestTokenURL", "profileURL", "callbackURL", "consumerKey", "authorizeURL", "accessTokenURL", "extractProfile", "extractProfileFilterNot", "adminPassword", "userBase", "extractProfileFilter", "adminUsername", "searchFilter", "metadataField", "groupRights", "searchBase", "serverUrls", "groupFilters", "allowEmptyPassword", "readProfileFromToken", "userInfoUrl", "dataOverride", "logoutUrl", "introspectionUrl", "nameField", "noWildcardRedirectURI", "claims", "oidConfig", "useJson", "clientSecret", "apiKeyMetaField", "callbackUrl", "authorizeUrl", "useCookie", "tokenUrl", "emailField", "otoroshiDataField", "apiKeyTagsField", "loginUrl", "refreshTokens", "superAdmins", "accessTokenField", "scope", "otoroshiRightsField", "clientId", "rightsOverride", "extraMetadata", "metadata", "id", "userValidators", "webauthn", "sessionMaxAge", "users", "tags", "basicAuth", "clientSideSessionEnabled", "name", "desc", "type", "_loc", "sessionCookieValues", "mtlsConfig", "pkce", "proxy", "jwtVerifier", "httpMethod", "ssoProtocolBinding", "singleLogoutProtocolBinding", "signature", "nameIDFormat", "credentials" ] - }, - "otoroshi.next.plugins.JQResponse" : { - "schema" : { - "filter" : { - "label" : "filter", - "type" : "string" + "flow" : [ "paths", "methods", "not_methods", "not_paths" ] } }, - "flow" : [ "filter" ] + "flow" : [ "auto_clean", "max_size", "ttl", "filter" ] }, "otoroshi.next.models.GraphQLFormats" : { "schema" : { }, @@ -36040,9 +39362,13 @@ "url" : { "label" : "url", "type" : "string" + }, + "timeout" : { + "label" : "timeout", + "type" : "number" } }, - "flow" : [ "enabled", "url" ] + "flow" : [ "enabled", "url", "timeout" ] }, "client" : { "label" : "client", @@ -36376,6 +39702,192 @@ "schema" : { }, "flow" : [ ] }, + "otoroshi.next.plugins.WasmRouter" : { + "schema" : { + "allowedHosts" : { + "label" : "allowedHosts", + "type" : "array", + "array" : true, + "format" : null + }, + "memoryPages" : { + "label" : "memoryPages", + "type" : "number" + }, + "killOptions" : { + "label" : "killOptions", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "maxUnusedDuration" : { + "label" : "maxUnusedDuration", + "type" : "number" + }, + "immortal" : { + "label" : "immortal", + "type" : "bool" + }, + "maxAvgCallDuration" : { + "label" : "maxAvgCallDuration", + "type" : "number" + }, + "maxMemoryUsage" : { + "label" : "maxMemoryUsage", + "type" : "number" + }, + "maxCalls" : { + "label" : "maxCalls", + "type" : "number" + } + }, + "flow" : [ "maxUnusedDuration", "immortal", "maxAvgCallDuration", "maxMemoryUsage", "maxCalls" ] + }, + "allowedPaths" : { + "label" : "allowedPaths", + "type" : "object" + }, + "instances" : { + "label" : "instances", + "type" : "number" + }, + "config" : { + "label" : "config", + "type" : "object" + }, + "source" : { + "label" : "source", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "kind" : { + "label" : "kind", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { }, + "flow" : [ ] + }, + "path" : { + "label" : "path", + "type" : "string" + }, + "opts" : { + "label" : "opts", + "type" : "object" + } + }, + "flow" : [ "kind", "path", "opts" ] + }, + "authorizations" : { + "label" : "authorizations", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "proxyStateAccess" : { + "label" : "proxyStateAccess", + "type" : "bool" + }, + "httpAccess" : { + "label" : "httpAccess", + "type" : "bool" + }, + "globalMapAccess" : { + "label" : "globalMapAccess", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "read" : { + "label" : "read", + "type" : "bool" + }, + "write" : { + "label" : "write", + "type" : "bool" + } + }, + "flow" : [ "read", "write" ] + }, + "pluginDataStoreAccess" : { + "label" : "pluginDataStoreAccess", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "read" : { + "label" : "read", + "type" : "bool" + }, + "write" : { + "label" : "write", + "type" : "bool" + } + }, + "flow" : [ "read", "write" ] + }, + "pluginMapAccess" : { + "label" : "pluginMapAccess", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "read" : { + "label" : "read", + "type" : "bool" + }, + "write" : { + "label" : "write", + "type" : "bool" + } + }, + "flow" : [ "read", "write" ] + }, + "proxyHttpCallTimeout" : { + "label" : "proxyHttpCallTimeout", + "type" : "number" + }, + "configurationAccess" : { + "label" : "configurationAccess", + "type" : "bool" + }, + "globalDataStoreAccess" : { + "label" : "globalDataStoreAccess", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "read" : { + "label" : "read", + "type" : "bool" + }, + "write" : { + "label" : "write", + "type" : "bool" + } + }, + "flow" : [ "read", "write" ] + } + }, + "flow" : [ "proxyStateAccess", "httpAccess", "globalMapAccess", "pluginDataStoreAccess", "pluginMapAccess", "proxyHttpCallTimeout", "configurationAccess", "globalDataStoreAccess" ] + }, + "opa" : { + "label" : "opa", + "type" : "bool" + }, + "wasi" : { + "label" : "wasi", + "type" : "bool" + }, + "functionName" : { + "label" : "functionName", + "type" : "string" + } + }, + "flow" : [ "functionName", "wasi", "opa", "config", "instances", "allowedPaths", "memoryPages", "allowedHosts", "killOptions", "source", "authorizations" ] + }, "otoroshi.next.plugins.NgJwtVerificationOnlyConfig" : { "schema" : { "verifier" : { @@ -36487,6 +39999,15 @@ }, "flow" : [ "large_request_fault_config", "large_response_fault_config", "latency_injection_fault_config", "bad_responses_fault_config" ] }, + "otoroshi.next.plugins.HMACValidatorConfig" : { + "schema" : { + "secret" : { + "label" : "secret", + "type" : "string" + } + }, + "flow" : [ "secret" ] + }, "otoroshi.models.NoneGeolocationSettings" : { "schema" : { "type" : { @@ -36659,6 +40180,95 @@ "schema" : { }, "flow" : [ ] }, + "otoroshi.wasm.WasmAuthorizations" : { + "schema" : { + "proxyStateAccess" : { + "label" : "proxyStateAccess", + "type" : "bool" + }, + "httpAccess" : { + "label" : "httpAccess", + "type" : "bool" + }, + "globalMapAccess" : { + "label" : "globalMapAccess", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "read" : { + "label" : "read", + "type" : "bool" + }, + "write" : { + "label" : "write", + "type" : "bool" + } + }, + "flow" : [ "read", "write" ] + }, + "pluginDataStoreAccess" : { + "label" : "pluginDataStoreAccess", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "read" : { + "label" : "read", + "type" : "bool" + }, + "write" : { + "label" : "write", + "type" : "bool" + } + }, + "flow" : [ "read", "write" ] + }, + "pluginMapAccess" : { + "label" : "pluginMapAccess", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "read" : { + "label" : "read", + "type" : "bool" + }, + "write" : { + "label" : "write", + "type" : "bool" + } + }, + "flow" : [ "read", "write" ] + }, + "proxyHttpCallTimeout" : { + "label" : "proxyHttpCallTimeout", + "type" : "number" + }, + "configurationAccess" : { + "label" : "configurationAccess", + "type" : "bool" + }, + "globalDataStoreAccess" : { + "label" : "globalDataStoreAccess", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "read" : { + "label" : "read", + "type" : "bool" + }, + "write" : { + "label" : "write", + "type" : "bool" + } + }, + "flow" : [ "read", "write" ] + } + }, + "flow" : [ "configurationAccess", "proxyHttpCallTimeout", "httpAccess", "proxyStateAccess", "globalMapAccess", "pluginDataStoreAccess", "pluginMapAccess", "globalDataStoreAccess" ] + }, "otoroshi.models.ApiKeyRouteMatcher" : { "schema" : { "oneTagIn" : { @@ -36735,10 +40345,27 @@ "schema" : { }, "flow" : [ ] }, + "otoroshi.wasm.WasmSourceKind" : { + "schema" : { }, + "flow" : [ ] + }, "otoroshi.plugins.clientcert.HasClientCertMatchingHttpValidator" : { "schema" : { }, "flow" : [ ] }, + "otoroshi.next.plugins.NgMaxMindGeolocationInfoExtractorConfig" : { + "schema" : { + "path" : { + "label" : "path", + "type" : "string" + }, + "log" : { + "label" : "log", + "type" : "bool" + } + }, + "flow" : [ "log", "path" ] + }, "otoroshi.models.UserAgentSettings" : { "schema" : { "enabled" : { @@ -37077,6 +40704,15 @@ }, "flow" : [ "positions", "type" ] }, + "otoroshi.next.plugins.HMACValidator" : { + "schema" : { + "secret" : { + "label" : "secret", + "type" : "string" + } + }, + "flow" : [ "secret" ] + }, "otoroshi.next.plugins.MockResponse" : { "schema" : { "path" : { @@ -37191,6 +40827,19 @@ }, "flow" : [ "eureka_app", "service_url_default_zone" ] }, + "otoroshi.next.plugins.NgDiscoverySelfRegistrationSink" : { + "schema" : { + "raw" : { + "type" : "code", + "props" : { + "label" : "raw", + "editorOnly" : true, + "mode" : "json" + } + } + }, + "flow" : [ "raw" ] + }, "otoroshi.next.plugins.CanaryMode" : { "schema" : { "traffic" : { @@ -37668,6 +41317,23 @@ }, "flow" : [ "cb_start", "attempts", "target" ] }, + "otoroshi.next.plugins.NgIpStackGeolocationInfoExtractorConfig" : { + "schema" : { + "apikey" : { + "label" : "apikey", + "type" : "string" + }, + "timeout" : { + "label" : "timeout", + "type" : "number" + }, + "log" : { + "label" : "log", + "type" : "bool" + } + }, + "flow" : [ "log", "timeout", "apikey" ] + }, "otoroshi.next.plugins.NgAuthModuleUserExtractorConfig" : { "schema" : { "module" : { @@ -37783,6 +41449,66 @@ }, "flow" : [ "timeout", "ttl", "headers", "kty", "url", "type", "tlsConfig", "proxy" ] }, + "otoroshi.next.plugins.NgHasAllowedUsersValidatorConfig" : { + "schema" : { + "profile_not_match" : { + "label" : "profile_not_match", + "type" : "array", + "array" : true, + "format" : null + }, + "profile_match" : { + "label" : "profile_match", + "type" : "array", + "array" : true, + "format" : null + }, + "email_domains" : { + "label" : "email_domains", + "type" : "array", + "array" : true, + "format" : null + }, + "usernames" : { + "label" : "usernames", + "type" : "array", + "array" : true, + "format" : null + }, + "metadata_match" : { + "label" : "metadata_match", + "type" : "array", + "array" : true, + "format" : null + }, + "metadata_not_match" : { + "label" : "metadata_not_match", + "type" : "array", + "array" : true, + "format" : null + }, + "emails" : { + "label" : "emails", + "type" : "array", + "array" : true, + "format" : null + } + }, + "flow" : [ "emails", "metadata_not_match", "metadata_match", "usernames", "email_domains", "profile_match", "profile_not_match" ] + }, + "otoroshi.next.plugins.NgDiscoverySelfRegistrationTransformer" : { + "schema" : { + "raw" : { + "type" : "code", + "props" : { + "label" : "raw", + "editorOnly" : true, + "mode" : "json" + } + } + }, + "flow" : [ "raw" ] + }, "otoroshi.next.plugins.NgApikeyExtractorJwt" : { "schema" : { "cookie_name" : { @@ -37939,6 +41665,101 @@ }, "flow" : [ "content_encoding", "content_type" ] }, + "otoroshi.next.plugins.NgDiscoveryTargetsSelector" : { + "schema" : { + "raw" : { + "type" : "code", + "props" : { + "label" : "raw", + "editorOnly" : true, + "mode" : "json" + } + } + }, + "flow" : [ "raw" ] + }, + "otoroshi.next.plugins.NgIzanamiV1Proxy" : { + "schema" : { + "features_enabled" : { + "label" : "features_enabled", + "type" : "bool" + }, + "client_secret" : { + "label" : "client_secret", + "type" : "string" + }, + "features_with_context_enabled" : { + "label" : "features_with_context_enabled", + "type" : "bool" + }, + "config_pattern" : { + "label" : "config_pattern", + "type" : "string" + }, + "feature_pattern" : { + "label" : "feature_pattern", + "type" : "string" + }, + "client_id" : { + "label" : "client_id", + "type" : "string" + }, + "tls" : { + "label" : "tls", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "enabled" : { + "label" : "enabled", + "type" : "bool" + }, + "certs" : { + "label" : "certs", + "type" : "array", + "array" : true, + "format" : null + }, + "loose" : { + "label" : "loose", + "type" : "bool" + }, + "trust_all" : { + "label" : "trust_all", + "type" : "bool" + }, + "trusted_certs" : { + "label" : "trusted_certs", + "type" : "array", + "array" : true, + "format" : null + } + }, + "flow" : [ "enabled", "certs", "loose", "trust_all", "trusted_certs" ] + }, + "izanami_url" : { + "label" : "izanami_url", + "type" : "string" + }, + "timeout" : { + "label" : "timeout", + "type" : "number" + }, + "path" : { + "label" : "path", + "type" : "string" + }, + "auto_context" : { + "label" : "auto_context", + "type" : "bool" + }, + "configuration_enabled" : { + "label" : "configuration_enabled", + "type" : "bool" + } + }, + "flow" : [ "configuration_enabled", "auto_context", "path", "timeout", "izanami_url", "client_id", "feature_pattern", "config_pattern", "features_with_context_enabled", "client_secret", "features_enabled", "tls" ] + }, "otoroshi.next.models.StoredNgBackendDataStore" : { "schema" : { }, "flow" : [ ] @@ -38179,145 +42000,1709 @@ "format" : null } }, - "flow" : [ "none_meta_keys_in", "all_meta_keys_in", "all_meta_in", "none_meta_in", "one_tag_in", "enabled", "one_meta_in", "all_tags_in", "one_meta_key_in", "none_tag_in" ] - }, - "update_quotas" : { - "label" : "update_quotas", - "type" : "bool" - } - }, - "flow" : [ "update_quotas", "validate", "wipe_backend_request", "pass_with_user", "mandatory", "extractors", "routing" ] - }, - "otoroshi.next.plugins.NgCorsSettings" : { - "schema" : { - "allow_credentials" : { - "label" : "allow_credentials", - "type" : "bool" - }, - "max_age" : { - "label" : "max_age", - "type" : "string" - }, - "allow_origin" : { - "label" : "allow_origin", - "type" : "string" - }, - "allow_methods" : { - "label" : "allow_methods", - "type" : "array", - "array" : true, - "format" : null - }, - "excluded_patterns" : { - "label" : "excluded_patterns", - "type" : "array", - "array" : true, - "format" : null - }, - "allow_headers" : { - "label" : "allow_headers", - "type" : "array", - "array" : true, - "format" : null - }, - "expose_headers" : { - "label" : "expose_headers", - "type" : "array", - "array" : true, - "format" : null + "flow" : [ "none_meta_keys_in", "all_meta_keys_in", "all_meta_in", "none_meta_in", "one_tag_in", "enabled", "one_meta_in", "all_tags_in", "one_meta_key_in", "none_tag_in" ] + }, + "update_quotas" : { + "label" : "update_quotas", + "type" : "bool" + } + }, + "flow" : [ "update_quotas", "validate", "wipe_backend_request", "pass_with_user", "mandatory", "extractors", "routing" ] + }, + "otoroshi.next.plugins.BiscuitConf" : { + "schema" : { + "privkey" : { + "label" : "privkey", + "type" : "string" + }, + "checks" : { + "label" : "checks", + "type" : "array", + "array" : true, + "format" : null + }, + "facts" : { + "label" : "facts", + "type" : "array", + "array" : true, + "format" : null + }, + "rules" : { + "label" : "rules", + "type" : "array", + "array" : true, + "format" : null + } + }, + "flow" : [ "rules", "facts", "checks", "privkey" ] + }, + "otoroshi.next.plugins.NgCorsSettings" : { + "schema" : { + "allow_credentials" : { + "label" : "allow_credentials", + "type" : "bool" + }, + "max_age" : { + "label" : "max_age", + "type" : "string" + }, + "allow_origin" : { + "label" : "allow_origin", + "type" : "string" + }, + "allow_methods" : { + "label" : "allow_methods", + "type" : "array", + "array" : true, + "format" : null + }, + "excluded_patterns" : { + "label" : "excluded_patterns", + "type" : "array", + "array" : true, + "format" : null + }, + "allow_headers" : { + "label" : "allow_headers", + "type" : "array", + "array" : true, + "format" : null + }, + "expose_headers" : { + "label" : "expose_headers", + "type" : "array", + "array" : true, + "format" : null + } + }, + "flow" : [ "expose_headers", "allow_headers", "excluded_patterns", "allow_methods", "allow_origin", "max_age", "allow_credentials" ] + }, + "otoroshi.plugins.biscuit.BiscuitConfig" : { + "schema" : { + "facts" : { + "label" : "facts", + "type" : "array", + "array" : true, + "format" : null + }, + "publicKey" : { + "label" : "publicKey", + "type" : "string" + }, + "resources" : { + "label" : "resources", + "type" : "array", + "array" : true, + "format" : null + }, + "enforce" : { + "label" : "enforce", + "type" : "bool" + }, + "extractorName" : { + "label" : "extractorName", + "type" : "string" + }, + "checks" : { + "label" : "checks", + "type" : "array", + "array" : true, + "format" : null + }, + "extractor" : { + "label" : "extractor", + "type" : "string" + }, + "revocation_ids" : { + "label" : "revocation_ids", + "type" : "array", + "array" : true, + "format" : null + }, + "rules" : { + "label" : "rules", + "type" : "array", + "array" : true, + "format" : null + } + }, + "flow" : [ "rules", "revocation_ids", "extractor", "checks", "extractorName", "enforce", "resources", "publicKey", "facts" ] + }, + "otoroshi.utils.mailer.MailjetSettings" : { + "schema" : { + "type" : { + "type" : "select", + "props" : { + "label" : "type", + "options" : [ "elastic", "webhook", "kafka", "pulsar", "file", "mailer", "custom", "console", "metrics" ] + } + }, + "apiKeyPublic" : { + "label" : "apiKeyPublic", + "type" : "string" + }, + "apiKeyPrivate" : { + "label" : "apiKeyPrivate", + "type" : "string" + }, + "to" : { + "label" : "to", + "type" : "array", + "array" : true, + "format" : "form", + "schema" : { + "name" : { + "label" : "name", + "type" : "string" + }, + "email" : { + "label" : "email", + "type" : "string" + } + }, + "flow" : [ "name", "email" ] + } + }, + "flow" : [ "to", "apiKeyPrivate", "apiKeyPublic", "type" ] + }, + "otoroshi.models.ConsoleSettings" : { + "schema" : { + "type" : { + "type" : "select", + "props" : { + "label" : "type", + "options" : [ "elastic", "webhook", "kafka", "pulsar", "file", "mailer", "custom", "console", "metrics" ] + } + } + }, + "flow" : [ "type" ] + }, + "otoroshi.next.plugins.NgLargeResponseFaultConfig" : { + "schema" : { + "ratio" : { + "label" : "ratio", + "type" : "number" + }, + "additional_response_size" : { + "label" : "additional_response_size", + "type" : "number" + } + }, + "flow" : [ "additional_response_size", "ratio" ] + }, + "otoroshi.utils.mailer.MailerSettings" : { + "schema" : { + "type" : { + "type" : "select", + "props" : { + "label" : "type", + "options" : [ "elastic", "webhook", "kafka", "pulsar", "file", "mailer", "custom", "console", "metrics" ] + } + }, + "url" : { + "label" : "url", + "type" : "string" + }, + "headers" : { + "label" : "headers", + "type" : "object" + }, + "to" : { + "label" : "to", + "type" : "array", + "array" : true, + "format" : "form", + "schema" : { + "name" : { + "label" : "name", + "type" : "string" + }, + "email" : { + "label" : "email", + "type" : "string" + } + }, + "flow" : [ "name", "email" ] + }, + "eu" : { + "label" : "eu", + "type" : "bool" + }, + "apiKey" : { + "label" : "apiKey", + "type" : "string" + }, + "domain" : { + "label" : "domain", + "type" : "string" + }, + "apiKeyPublic" : { + "label" : "apiKeyPublic", + "type" : "string" + }, + "apiKeyPrivate" : { + "label" : "apiKeyPrivate", + "type" : "string" + } + }, + "flow" : [ "apiKeyPrivate", "apiKeyPublic", "domain", "apiKey", "eu", "to", "headers", "url", "type" ] + }, + "otoroshi.next.plugins.NgTrafficMirroring" : { + "schema" : { + "legacy" : { + "label" : "legacy", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "conf" : { + "label" : "conf", + "type" : "object" + } + }, + "flow" : [ "conf" ] + } + }, + "flow" : [ "legacy" ] + }, + "ErrorTemplateList" : { + "schema" : { }, + "flow" : [ ] + }, + "otoroshi.next.plugins.NgHasClientCertMatchingHttpValidatorConfig" : { + "schema" : { + "method" : { + "label" : "method", + "type" : "string" + }, + "timeout" : { + "label" : "timeout", + "type" : "number" + }, + "tls" : { + "label" : "tls", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "enabled" : { + "label" : "enabled", + "type" : "bool" + }, + "certs" : { + "label" : "certs", + "type" : "array", + "array" : true, + "format" : null + }, + "loose" : { + "label" : "loose", + "type" : "bool" + }, + "trust_all" : { + "label" : "trust_all", + "type" : "bool" + }, + "trusted_certs" : { + "label" : "trusted_certs", + "type" : "array", + "array" : true, + "format" : null + } + }, + "flow" : [ "enabled", "certs", "loose", "trust_all", "trusted_certs" ] + }, + "url" : { + "label" : "url", + "type" : "string" + }, + "headers" : { + "label" : "headers", + "type" : "object" + } + }, + "flow" : [ "headers", "url", "timeout", "method", "tls" ] + }, + "otoroshi.next.models.NgContextualPlugins" : { + "schema" : { + "_env" : { + "label" : "_env", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "circuitBeakersHolder" : { + "label" : "circuitBeakersHolder", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { }, + "flow" : [ ] + } + }, + "flow" : [ "circuitBeakersHolder" ] + }, + "next_plugins_merge" : { + "label" : "next_plugins_merge", + "type" : "bool" + } + }, + "flow" : [ "next_plugins_merge", "_env" ] + }, + "otoroshi.next.plugins.NgRequestContext" : { + "schema" : { + "id" : { + "label" : "id", + "type" : "string" + }, + "config" : { + "label" : "config", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "legacy" : { + "label" : "legacy", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "conf" : { + "label" : "conf", + "type" : "object" + } + }, + "flow" : [ "conf" ] + } + }, + "flow" : [ "legacy" ] + }, + "route" : { + "label" : "route", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "debug_flow" : { + "label" : "debug_flow", + "type" : "bool" + }, + "enabled" : { + "label" : "enabled", + "type" : "bool" + }, + "name" : { + "label" : "name", + "type" : "string" + }, + "id" : { + "label" : "id", + "type" : "string" + }, + "export_reporting" : { + "label" : "export_reporting", + "type" : "bool" + }, + "metadata" : { + "label" : "metadata", + "type" : "object" + }, + "frontend" : { + "label" : "frontend", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "headers" : { + "label" : "headers", + "type" : "object" + }, + "query" : { + "label" : "query", + "type" : "object" + }, + "domains" : { + "label" : "domains", + "type" : "array", + "array" : true, + "format" : null + }, + "methods" : { + "label" : "methods", + "type" : "array", + "array" : true, + "format" : null + }, + "exact" : { + "label" : "exact", + "type" : "bool" + }, + "strip_path" : { + "label" : "strip_path", + "type" : "bool" + } + }, + "flow" : [ "headers", "query", "domains", "methods", "exact", "strip_path" ] + }, + "_loc" : { + "label" : "_loc", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "tenant" : { + "label" : "tenant", + "type" : "string" + }, + "teams" : { + "label" : "teams", + "type" : "array", + "array" : true, + "format" : null + } + }, + "flow" : [ "tenant", "teams" ] + }, + "tags" : { + "label" : "tags", + "type" : "array", + "array" : true, + "format" : null + }, + "capture" : { + "label" : "capture", + "type" : "bool" + }, + "groups" : { + "label" : "groups", + "type" : "array", + "array" : true, + "format" : null + }, + "backend_ref" : { + "label" : "backend_ref", + "type" : "string" + }, + "description" : { + "label" : "description", + "type" : "string" + }, + "backend" : { + "label" : "backend", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "root" : { + "label" : "root", + "type" : "string" + }, + "health_check" : { + "label" : "health_check", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "enabled" : { + "label" : "enabled", + "type" : "bool" + }, + "url" : { + "label" : "url", + "type" : "string" + }, + "timeout" : { + "label" : "timeout", + "type" : "number" + } + }, + "flow" : [ "enabled", "url", "timeout" ] + }, + "client" : { + "label" : "client", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "idle_timeout" : { + "label" : "idle_timeout", + "type" : "number" + }, + "sample_interval" : { + "label" : "sample_interval", + "type" : "number" + }, + "cache_connection_settings" : { + "label" : "cache_connection_settings", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "queue_size" : { + "label" : "queue_size", + "type" : "number" + }, + "enabled" : { + "label" : "enabled", + "type" : "bool" + } + }, + "flow" : [ "queue_size", "enabled" ] + }, + "call_and_stream_timeout" : { + "label" : "call_and_stream_timeout", + "type" : "number" + }, + "custom_timeouts" : { + "label" : "custom_timeouts", + "type" : "array", + "array" : true, + "format" : "form", + "schema" : { + "connection_timeout" : { + "label" : "connection_timeout", + "type" : "number" + }, + "call_and_stream_timeout" : { + "label" : "call_and_stream_timeout", + "type" : "number" + }, + "path" : { + "label" : "path", + "type" : "string" + }, + "call_timeout" : { + "label" : "call_timeout", + "type" : "number" + }, + "idle_timeout" : { + "label" : "idle_timeout", + "type" : "number" + }, + "global_timeout" : { + "label" : "global_timeout", + "type" : "number" + } + }, + "flow" : [ "connection_timeout", "call_and_stream_timeout", "path", "call_timeout", "idle_timeout", "global_timeout" ] + }, + "connection_timeout" : { + "label" : "connection_timeout", + "type" : "number" + }, + "call_timeout" : { + "label" : "call_timeout", + "type" : "number" + }, + "global_timeout" : { + "label" : "global_timeout", + "type" : "number" + }, + "retry_initial_delay" : { + "label" : "retry_initial_delay", + "type" : "number" + }, + "backoff_factor" : { + "label" : "backoff_factor", + "type" : "number" + }, + "proxy" : { + "label" : "proxy", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "host" : { + "label" : "host", + "type" : "string" + }, + "port" : { + "label" : "port", + "type" : "string" + }, + "protocol" : { + "label" : "protocol", + "type" : "string" + }, + "principal" : { + "label" : "principal", + "type" : "string" + }, + "password" : { + "label" : "password", + "type" : "string" + }, + "ntlmDomain" : { + "label" : "ntlmDomain", + "type" : "string" + }, + "encoding" : { + "label" : "encoding", + "type" : "string" + }, + "nonProxyHosts" : { + "label" : "nonProxyHosts", + "type" : "string" + } + }, + "flow" : [ "host", "port", "protocol", "principal", "password", "ntlmDomain", "encoding", "nonProxyHosts" ] + }, + "retries" : { + "label" : "retries", + "type" : "number" + }, + "max_errors" : { + "label" : "max_errors", + "type" : "number" + } + }, + "flow" : [ "idle_timeout", "sample_interval", "cache_connection_settings", "call_and_stream_timeout", "custom_timeouts", "connection_timeout", "call_timeout", "global_timeout", "retry_initial_delay", "backoff_factor", "proxy", "retries", "max_errors" ] + }, + "load_balancing" : { + "label" : "load_balancing", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "type" : { + "type" : "select", + "props" : { + "label" : "type", + "options" : [ "BestResponseTime", "IpAddressHash", "Random", "RoundRobin", "Sticky", "WeightedBestResponseTime" ] + } + }, + "ratio" : { + "label" : "ratio", + "type" : "number" + } + }, + "flow" : [ "type", "ratio" ] + }, + "rewrite" : { + "label" : "rewrite", + "type" : "bool" + }, + "targets" : { + "label" : "targets", + "type" : "array", + "array" : true, + "format" : "form", + "schema" : { + "ip_address" : { + "label" : "ip_address", + "type" : "string" + }, + "protocol" : { + "type" : "select", + "props" : { + "label" : "protocol", + "options" : [ "HTTP/1.0", "HTTP/1.1", "HTTP/2.0", "HTTP/3.0" ] + } + }, + "predicate" : { + "label" : "predicate", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "type" : { + "type" : "select", + "props" : { + "label" : "type", + "options" : [ "AlwaysMatch", "NetworkLocationMatch", "GeolocationMatch" ] + } + }, + "dc" : { + "label" : "dc", + "type" : "string" + }, + "positions" : { + "label" : "positions", + "type" : "array", + "array" : true, + "format" : "form", + "schema" : { + "latitude" : { + "label" : "latitude", + "type" : "number" + }, + "longitude" : { + "label" : "longitude", + "type" : "number" + }, + "radius" : { + "label" : "radius", + "type" : "number" + } + }, + "flow" : [ "latitude", "longitude", "radius" ] + }, + "provider" : { + "label" : "provider", + "type" : "string" + }, + "dataCenter" : { + "label" : "dataCenter", + "type" : "string" + }, + "rack" : { + "label" : "rack", + "type" : "string" + }, + "region" : { + "label" : "region", + "type" : "string" + }, + "zone" : { + "label" : "zone", + "type" : "string" + } + }, + "flow" : [ "type", "dc", "positions", "provider", "dataCenter", "rack", "region", "zone" ] + }, + "tls_config" : { + "label" : "tls_config", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "enabled" : { + "label" : "enabled", + "type" : "bool" + }, + "certs" : { + "label" : "certs", + "type" : "array", + "array" : true, + "format" : null + }, + "loose" : { + "label" : "loose", + "type" : "bool" + }, + "trust_all" : { + "label" : "trust_all", + "type" : "bool" + }, + "trusted_certs" : { + "label" : "trusted_certs", + "type" : "array", + "array" : true, + "format" : null + } + }, + "flow" : [ "enabled", "certs", "loose", "trust_all", "trusted_certs" ] + }, + "tls" : { + "label" : "tls", + "type" : "bool" + }, + "port" : { + "label" : "port", + "type" : "number" + }, + "id" : { + "label" : "id", + "type" : "string" + }, + "weight" : { + "label" : "weight", + "type" : "number" + }, + "hostname" : { + "label" : "hostname", + "type" : "string" + } + }, + "flow" : [ "ip_address", "protocol", "predicate", "tls_config", "tls", "port", "id", "weight", "hostname" ] + } + }, + "flow" : [ "root", "health_check", "client", "load_balancing", "rewrite", "targets" ] + } + }, + "flow" : [ "debug_flow", "enabled", "name", "id", "export_reporting", "metadata", "frontend", "_loc", "tags", "capture", "groups", "backend_ref", "description", "backend" ] + } + }, + "flow" : [ "id", "config", "route" ] + }, + "otoroshi.next.plugins.NgGzipConfig" : { + "schema" : { + "compression_level" : { + "label" : "compression_level", + "type" : "number" + }, + "buffer_size" : { + "label" : "buffer_size", + "type" : "number" + }, + "chunked_threshold" : { + "label" : "chunked_threshold", + "type" : "number" + }, + "excluded_patterns" : { + "label" : "excluded_patterns", + "type" : "array", + "array" : true, + "format" : null + }, + "white_list" : { + "label" : "white_list", + "type" : "array", + "array" : true, + "format" : null + }, + "black_list" : { + "label" : "black_list", + "type" : "array", + "array" : true, + "format" : null + } + }, + "flow" : [ "black_list", "white_list", "excluded_patterns", "chunked_threshold", "buffer_size", "compression_level" ] + }, + "otoroshi.next.plugins.ForceHttpsTraffic" : { + "schema" : { }, + "flow" : [ ] + }, + "otoroshi.models.WasmPlugin" : { + "schema" : { + "_loc" : { + "label" : "_loc", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "tenant" : { + "label" : "tenant", + "type" : "string" + }, + "teams" : { + "label" : "teams", + "type" : "array", + "array" : true, + "format" : null + } + }, + "flow" : [ "tenant", "teams" ] + }, + "name" : { + "label" : "name", + "type" : "string" + }, + "tags" : { + "label" : "tags", + "type" : "array", + "array" : true, + "format" : null + }, + "steps" : { + "label" : "steps", + "type" : "array", + "array" : true, + "format" : "form", + "schema" : { }, + "flow" : [ ] + }, + "id" : { + "label" : "id", + "type" : "string" + }, + "metadata" : { + "label" : "metadata", + "type" : "object" + }, + "description" : { + "label" : "description", + "type" : "string" + }, + "config" : { + "label" : "config", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "allowedHosts" : { + "label" : "allowedHosts", + "type" : "array", + "array" : true, + "format" : null + }, + "memoryPages" : { + "label" : "memoryPages", + "type" : "number" + }, + "killOptions" : { + "label" : "killOptions", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "maxUnusedDuration" : { + "label" : "maxUnusedDuration", + "type" : "number" + }, + "immortal" : { + "label" : "immortal", + "type" : "bool" + }, + "maxAvgCallDuration" : { + "label" : "maxAvgCallDuration", + "type" : "number" + }, + "maxMemoryUsage" : { + "label" : "maxMemoryUsage", + "type" : "number" + }, + "maxCalls" : { + "label" : "maxCalls", + "type" : "number" + } + }, + "flow" : [ "maxUnusedDuration", "immortal", "maxAvgCallDuration", "maxMemoryUsage", "maxCalls" ] + }, + "allowedPaths" : { + "label" : "allowedPaths", + "type" : "object" + }, + "instances" : { + "label" : "instances", + "type" : "number" + }, + "config" : { + "label" : "config", + "type" : "object" + }, + "source" : { + "label" : "source", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "kind" : { + "label" : "kind", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { }, + "flow" : [ ] + }, + "path" : { + "label" : "path", + "type" : "string" + }, + "opts" : { + "label" : "opts", + "type" : "object" + } + }, + "flow" : [ "kind", "path", "opts" ] + }, + "authorizations" : { + "label" : "authorizations", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "proxyStateAccess" : { + "label" : "proxyStateAccess", + "type" : "bool" + }, + "httpAccess" : { + "label" : "httpAccess", + "type" : "bool" + }, + "globalMapAccess" : { + "label" : "globalMapAccess", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "read" : { + "label" : "read", + "type" : "bool" + }, + "write" : { + "label" : "write", + "type" : "bool" + } + }, + "flow" : [ "read", "write" ] + }, + "pluginDataStoreAccess" : { + "label" : "pluginDataStoreAccess", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "read" : { + "label" : "read", + "type" : "bool" + }, + "write" : { + "label" : "write", + "type" : "bool" + } + }, + "flow" : [ "read", "write" ] + }, + "pluginMapAccess" : { + "label" : "pluginMapAccess", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "read" : { + "label" : "read", + "type" : "bool" + }, + "write" : { + "label" : "write", + "type" : "bool" + } + }, + "flow" : [ "read", "write" ] + }, + "proxyHttpCallTimeout" : { + "label" : "proxyHttpCallTimeout", + "type" : "number" + }, + "configurationAccess" : { + "label" : "configurationAccess", + "type" : "bool" + }, + "globalDataStoreAccess" : { + "label" : "globalDataStoreAccess", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "read" : { + "label" : "read", + "type" : "bool" + }, + "write" : { + "label" : "write", + "type" : "bool" + } + }, + "flow" : [ "read", "write" ] + } + }, + "flow" : [ "proxyStateAccess", "httpAccess", "globalMapAccess", "pluginDataStoreAccess", "pluginMapAccess", "proxyHttpCallTimeout", "configurationAccess", "globalDataStoreAccess" ] + }, + "opa" : { + "label" : "opa", + "type" : "bool" + }, + "wasi" : { + "label" : "wasi", + "type" : "bool" + }, + "functionName" : { + "label" : "functionName", + "type" : "string" + } + }, + "flow" : [ "allowedHosts", "memoryPages", "killOptions", "allowedPaths", "instances", "config", "source", "authorizations", "opa", "wasi", "functionName" ] + } + }, + "flow" : [ "description", "metadata", "id", "steps", "tags", "name", "_loc", "config" ] + }, + "otoroshi.models.UserRight" : { + "schema" : { + "tenant" : { + "label" : "tenant", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "canWrite" : { + "label" : "canWrite", + "type" : "bool" + }, + "value" : { + "label" : "value", + "type" : "string" + }, + "canRead" : { + "label" : "canRead", + "type" : "bool" + } + }, + "flow" : [ "canWrite", "value", "canRead" ] + }, + "teams" : { + "label" : "teams", + "type" : "array", + "array" : true, + "format" : "form", + "schema" : { + "canRead" : { + "label" : "canRead", + "type" : "bool" + }, + "value" : { + "label" : "value", + "type" : "string" + }, + "canWrite" : { + "label" : "canWrite", + "type" : "bool" + } + }, + "flow" : [ "canRead", "value", "canWrite" ] + } + }, + "flow" : [ "teams", "tenant" ] + }, + "otoroshi.next.plugins.NgHasClientCertMatchingValidatorConfig" : { + "schema" : { + "subject_dns" : { + "label" : "subject_dns", + "type" : "array", + "array" : true, + "format" : null + }, + "serial_numbers" : { + "label" : "serial_numbers", + "type" : "array", + "array" : true, + "format" : null + }, + "issuer_dns" : { + "label" : "issuer_dns", + "type" : "array", + "array" : true, + "format" : null + }, + "regex_issuer_dns" : { + "label" : "regex_issuer_dns", + "type" : "array", + "array" : true, + "format" : null + }, + "regex_subject_dns" : { + "label" : "regex_subject_dns", + "type" : "array", + "array" : true, + "format" : null + } + }, + "flow" : [ "regex_subject_dns", "regex_issuer_dns", "issuer_dns", "serial_numbers", "subject_dns" ] + }, + "otoroshi.next.plugins.BodyHelper" : { + "schema" : { }, + "flow" : [ ] + }, + "otoroshi.next.plugins.NgMirroringEvent" : { + "schema" : { + "ctx" : { + "label" : "ctx", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "id" : { + "label" : "id", + "type" : "string" + }, + "config" : { + "label" : "config", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "legacy" : { + "label" : "legacy", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "conf" : { + "label" : "conf", + "type" : "object" + } + }, + "flow" : [ "conf" ] + } + }, + "flow" : [ "legacy" ] + }, + "route" : { + "label" : "route", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "debug_flow" : { + "label" : "debug_flow", + "type" : "bool" + }, + "enabled" : { + "label" : "enabled", + "type" : "bool" + }, + "name" : { + "label" : "name", + "type" : "string" + }, + "id" : { + "label" : "id", + "type" : "string" + }, + "export_reporting" : { + "label" : "export_reporting", + "type" : "bool" + }, + "metadata" : { + "label" : "metadata", + "type" : "object" + }, + "frontend" : { + "label" : "frontend", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "headers" : { + "label" : "headers", + "type" : "object" + }, + "query" : { + "label" : "query", + "type" : "object" + }, + "domains" : { + "label" : "domains", + "type" : "array", + "array" : true, + "format" : null + }, + "methods" : { + "label" : "methods", + "type" : "array", + "array" : true, + "format" : null + }, + "exact" : { + "label" : "exact", + "type" : "bool" + }, + "strip_path" : { + "label" : "strip_path", + "type" : "bool" + } + }, + "flow" : [ "headers", "query", "domains", "methods", "exact", "strip_path" ] + }, + "_loc" : { + "label" : "_loc", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "tenant" : { + "label" : "tenant", + "type" : "string" + }, + "teams" : { + "label" : "teams", + "type" : "array", + "array" : true, + "format" : null + } + }, + "flow" : [ "tenant", "teams" ] + }, + "tags" : { + "label" : "tags", + "type" : "array", + "array" : true, + "format" : null + }, + "capture" : { + "label" : "capture", + "type" : "bool" + }, + "groups" : { + "label" : "groups", + "type" : "array", + "array" : true, + "format" : null + }, + "backend_ref" : { + "label" : "backend_ref", + "type" : "string" + }, + "description" : { + "label" : "description", + "type" : "string" + }, + "backend" : { + "label" : "backend", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "root" : { + "label" : "root", + "type" : "string" + }, + "health_check" : { + "label" : "health_check", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "enabled" : { + "label" : "enabled", + "type" : "bool" + }, + "url" : { + "label" : "url", + "type" : "string" + }, + "timeout" : { + "label" : "timeout", + "type" : "number" + } + }, + "flow" : [ "enabled", "url", "timeout" ] + }, + "client" : { + "label" : "client", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "idle_timeout" : { + "label" : "idle_timeout", + "type" : "number" + }, + "sample_interval" : { + "label" : "sample_interval", + "type" : "number" + }, + "cache_connection_settings" : { + "label" : "cache_connection_settings", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "queue_size" : { + "label" : "queue_size", + "type" : "number" + }, + "enabled" : { + "label" : "enabled", + "type" : "bool" + } + }, + "flow" : [ "queue_size", "enabled" ] + }, + "call_and_stream_timeout" : { + "label" : "call_and_stream_timeout", + "type" : "number" + }, + "custom_timeouts" : { + "label" : "custom_timeouts", + "type" : "array", + "array" : true, + "format" : "form", + "schema" : { + "connection_timeout" : { + "label" : "connection_timeout", + "type" : "number" + }, + "call_and_stream_timeout" : { + "label" : "call_and_stream_timeout", + "type" : "number" + }, + "path" : { + "label" : "path", + "type" : "string" + }, + "call_timeout" : { + "label" : "call_timeout", + "type" : "number" + }, + "idle_timeout" : { + "label" : "idle_timeout", + "type" : "number" + }, + "global_timeout" : { + "label" : "global_timeout", + "type" : "number" + } + }, + "flow" : [ "connection_timeout", "call_and_stream_timeout", "path", "call_timeout", "idle_timeout", "global_timeout" ] + }, + "connection_timeout" : { + "label" : "connection_timeout", + "type" : "number" + }, + "call_timeout" : { + "label" : "call_timeout", + "type" : "number" + }, + "global_timeout" : { + "label" : "global_timeout", + "type" : "number" + }, + "retry_initial_delay" : { + "label" : "retry_initial_delay", + "type" : "number" + }, + "backoff_factor" : { + "label" : "backoff_factor", + "type" : "number" + }, + "proxy" : { + "label" : "proxy", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "host" : { + "label" : "host", + "type" : "string" + }, + "port" : { + "label" : "port", + "type" : "string" + }, + "protocol" : { + "label" : "protocol", + "type" : "string" + }, + "principal" : { + "label" : "principal", + "type" : "string" + }, + "password" : { + "label" : "password", + "type" : "string" + }, + "ntlmDomain" : { + "label" : "ntlmDomain", + "type" : "string" + }, + "encoding" : { + "label" : "encoding", + "type" : "string" + }, + "nonProxyHosts" : { + "label" : "nonProxyHosts", + "type" : "string" + } + }, + "flow" : [ "host", "port", "protocol", "principal", "password", "ntlmDomain", "encoding", "nonProxyHosts" ] + }, + "retries" : { + "label" : "retries", + "type" : "number" + }, + "max_errors" : { + "label" : "max_errors", + "type" : "number" + } + }, + "flow" : [ "idle_timeout", "sample_interval", "cache_connection_settings", "call_and_stream_timeout", "custom_timeouts", "connection_timeout", "call_timeout", "global_timeout", "retry_initial_delay", "backoff_factor", "proxy", "retries", "max_errors" ] + }, + "load_balancing" : { + "label" : "load_balancing", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "type" : { + "type" : "select", + "props" : { + "label" : "type", + "options" : [ "BestResponseTime", "IpAddressHash", "Random", "RoundRobin", "Sticky", "WeightedBestResponseTime" ] + } + }, + "ratio" : { + "label" : "ratio", + "type" : "number" + } + }, + "flow" : [ "type", "ratio" ] + }, + "rewrite" : { + "label" : "rewrite", + "type" : "bool" + }, + "targets" : { + "label" : "targets", + "type" : "array", + "array" : true, + "format" : "form", + "schema" : { + "ip_address" : { + "label" : "ip_address", + "type" : "string" + }, + "protocol" : { + "type" : "select", + "props" : { + "label" : "protocol", + "options" : [ "HTTP/1.0", "HTTP/1.1", "HTTP/2.0", "HTTP/3.0" ] + } + }, + "predicate" : { + "label" : "predicate", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "type" : { + "type" : "select", + "props" : { + "label" : "type", + "options" : [ "AlwaysMatch", "NetworkLocationMatch", "GeolocationMatch" ] + } + }, + "dc" : { + "label" : "dc", + "type" : "string" + }, + "positions" : { + "label" : "positions", + "type" : "array", + "array" : true, + "format" : "form", + "schema" : { + "latitude" : { + "label" : "latitude", + "type" : "number" + }, + "longitude" : { + "label" : "longitude", + "type" : "number" + }, + "radius" : { + "label" : "radius", + "type" : "number" + } + }, + "flow" : [ "latitude", "longitude", "radius" ] + }, + "provider" : { + "label" : "provider", + "type" : "string" + }, + "dataCenter" : { + "label" : "dataCenter", + "type" : "string" + }, + "rack" : { + "label" : "rack", + "type" : "string" + }, + "region" : { + "label" : "region", + "type" : "string" + }, + "zone" : { + "label" : "zone", + "type" : "string" + } + }, + "flow" : [ "type", "dc", "positions", "provider", "dataCenter", "rack", "region", "zone" ] + }, + "tls_config" : { + "label" : "tls_config", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "enabled" : { + "label" : "enabled", + "type" : "bool" + }, + "certs" : { + "label" : "certs", + "type" : "array", + "array" : true, + "format" : null + }, + "loose" : { + "label" : "loose", + "type" : "bool" + }, + "trust_all" : { + "label" : "trust_all", + "type" : "bool" + }, + "trusted_certs" : { + "label" : "trusted_certs", + "type" : "array", + "array" : true, + "format" : null + } + }, + "flow" : [ "enabled", "certs", "loose", "trust_all", "trusted_certs" ] + }, + "tls" : { + "label" : "tls", + "type" : "bool" + }, + "port" : { + "label" : "port", + "type" : "number" + }, + "id" : { + "label" : "id", + "type" : "string" + }, + "weight" : { + "label" : "weight", + "type" : "number" + }, + "hostname" : { + "label" : "hostname", + "type" : "string" + } + }, + "flow" : [ "ip_address", "protocol", "predicate", "tls_config", "tls", "port", "id", "weight", "hostname" ] + } + }, + "flow" : [ "root", "health_check", "client", "load_balancing", "rewrite", "targets" ] + } + }, + "flow" : [ "debug_flow", "enabled", "name", "id", "export_reporting", "metadata", "frontend", "_loc", "tags", "capture", "groups", "backend_ref", "description", "backend" ] + } + }, + "flow" : [ "id", "config", "route" ] } }, - "flow" : [ "expose_headers", "allow_headers", "excluded_patterns", "allow_methods", "allow_origin", "max_age", "allow_credentials" ] + "flow" : [ "ctx" ] }, - "otoroshi.plugins.biscuit.BiscuitConfig" : { + "otoroshi.next.plugins.GraphQLBackend" : { "schema" : { - "facts" : { - "label" : "facts", - "type" : "array", - "array" : true, - "format" : null - }, - "publicKey" : { - "label" : "publicKey", - "type" : "string" - }, - "resources" : { - "label" : "resources", - "type" : "array", - "array" : true, - "format" : null - }, - "enforce" : { - "label" : "enforce", - "type" : "bool" - }, - "extractorName" : { - "label" : "extractorName", - "type" : "string" - }, - "checks" : { - "label" : "checks", - "type" : "array", - "array" : true, - "format" : null - }, - "extractor" : { - "label" : "extractor", + "schema" : { + "label" : "schema", "type" : "string" }, - "revocation_ids" : { - "label" : "revocation_ids", - "type" : "array", - "array" : true, - "format" : null - }, - "rules" : { - "label" : "rules", + "permissions" : { + "label" : "permissions", "type" : "array", "array" : true, "format" : null - } - }, - "flow" : [ "rules", "revocation_ids", "extractor", "checks", "extractorName", "enforce", "resources", "publicKey", "facts" ] - }, - "otoroshi.utils.mailer.MailjetSettings" : { - "schema" : { - "type" : { - "type" : "select", - "props" : { - "label" : "type", - "options" : [ "elastic", "webhook", "kafka", "pulsar", "file", "mailer", "custom", "console", "metrics" ] - } }, - "apiKeyPublic" : { - "label" : "apiKeyPublic", - "type" : "string" - }, - "apiKeyPrivate" : { - "label" : "apiKeyPrivate", + "initial_data" : { + "label" : "initial_data", "type" : "string" }, - "to" : { - "label" : "to", - "type" : "array", - "array" : true, - "format" : "form", - "schema" : { - "name" : { - "label" : "name", - "type" : "string" - }, - "email" : { - "label" : "email", - "type" : "string" - } - }, - "flow" : [ "name", "email" ] + "max_depth" : { + "label" : "max_depth", + "type" : "number" } }, - "flow" : [ "to", "apiKeyPrivate", "apiKeyPublic", "type" ] + "flow" : [ "max_depth", "initial_data", "permissions", "schema" ] }, - "otoroshi.models.ConsoleSettings" : { + "otoroshi.utils.mailer.NoneMailerSettings" : { "schema" : { "type" : { "type" : "select", @@ -38329,269 +43714,216 @@ }, "flow" : [ "type" ] }, - "otoroshi.next.plugins.NgLargeResponseFaultConfig" : { - "schema" : { - "ratio" : { - "label" : "ratio", - "type" : "number" - }, - "additional_response_size" : { - "label" : "additional_response_size", - "type" : "number" - } - }, - "flow" : [ "additional_response_size", "ratio" ] + "otoroshi.next.models.NgTreeNodePath" : { + "schema" : { }, + "flow" : [ ] }, - "otoroshi.utils.mailer.MailerSettings" : { + "otoroshi.next.plugins.BasicAuthCaller" : { "schema" : { - "type" : { - "type" : "select", - "props" : { - "label" : "type", - "options" : [ "elastic", "webhook", "kafka", "pulsar", "file", "mailer", "custom", "console", "metrics" ] - } - }, - "url" : { - "label" : "url", - "type" : "string" - }, - "headers" : { - "label" : "headers", - "type" : "object" - }, - "to" : { - "label" : "to", - "type" : "array", - "array" : true, - "format" : "form", - "schema" : { - "name" : { - "label" : "name", - "type" : "string" - }, - "email" : { - "label" : "email", - "type" : "string" - } - }, - "flow" : [ "name", "email" ] - }, - "eu" : { - "label" : "eu", - "type" : "bool" - }, - "apiKey" : { - "label" : "apiKey", + "username" : { + "label" : "username", "type" : "string" }, - "domain" : { - "label" : "domain", + "password" : { + "label" : "password", "type" : "string" }, - "apiKeyPublic" : { - "label" : "apiKeyPublic", + "header_name" : { + "label" : "header_name", "type" : "string" }, - "apiKeyPrivate" : { - "label" : "apiKeyPrivate", + "header_value_format" : { + "label" : "header_value_format", "type" : "string" } }, - "flow" : [ "apiKeyPrivate", "apiKeyPublic", "domain", "apiKey", "eu", "to", "headers", "url", "type" ] - }, - "ErrorTemplateList" : { - "schema" : { }, - "flow" : [ ] + "flow" : [ "header_value_format", "header_name", "password", "username" ] }, - "otoroshi.next.models.NgContextualPlugins" : { + "otoroshi.next.plugins.WasmRequestTransformer" : { "schema" : { - "_env" : { - "label" : "_env", + "allowedHosts" : { + "label" : "allowedHosts", + "type" : "array", + "array" : true, + "format" : null + }, + "memoryPages" : { + "label" : "memoryPages", + "type" : "number" + }, + "killOptions" : { + "label" : "killOptions", "type" : "form", "collapsable" : true, "collapsed" : true, "schema" : { - "circuitBeakersHolder" : { - "label" : "circuitBeakersHolder", - "type" : "form", - "collapsable" : true, - "collapsed" : true, - "schema" : { }, - "flow" : [ ] + "maxUnusedDuration" : { + "label" : "maxUnusedDuration", + "type" : "number" + }, + "immortal" : { + "label" : "immortal", + "type" : "bool" + }, + "maxAvgCallDuration" : { + "label" : "maxAvgCallDuration", + "type" : "number" + }, + "maxMemoryUsage" : { + "label" : "maxMemoryUsage", + "type" : "number" + }, + "maxCalls" : { + "label" : "maxCalls", + "type" : "number" } }, - "flow" : [ "circuitBeakersHolder" ] - }, - "next_plugins_merge" : { - "label" : "next_plugins_merge", - "type" : "bool" - } - }, - "flow" : [ "next_plugins_merge", "_env" ] - }, - "otoroshi.next.plugins.NgGzipConfig" : { - "schema" : { - "compression_level" : { - "label" : "compression_level", - "type" : "number" + "flow" : [ "maxUnusedDuration", "immortal", "maxAvgCallDuration", "maxMemoryUsage", "maxCalls" ] }, - "buffer_size" : { - "label" : "buffer_size", - "type" : "number" + "allowedPaths" : { + "label" : "allowedPaths", + "type" : "object" }, - "chunked_threshold" : { - "label" : "chunked_threshold", + "instances" : { + "label" : "instances", "type" : "number" }, - "excluded_patterns" : { - "label" : "excluded_patterns", - "type" : "array", - "array" : true, - "format" : null - }, - "white_list" : { - "label" : "white_list", - "type" : "array", - "array" : true, - "format" : null + "config" : { + "label" : "config", + "type" : "object" }, - "black_list" : { - "label" : "black_list", - "type" : "array", - "array" : true, - "format" : null - } - }, - "flow" : [ "black_list", "white_list", "excluded_patterns", "chunked_threshold", "buffer_size", "compression_level" ] - }, - "otoroshi.next.plugins.ForceHttpsTraffic" : { - "schema" : { }, - "flow" : [ ] - }, - "otoroshi.models.UserRight" : { - "schema" : { - "tenant" : { - "label" : "tenant", + "source" : { + "label" : "source", "type" : "form", "collapsable" : true, "collapsed" : true, "schema" : { - "canWrite" : { - "label" : "canWrite", - "type" : "bool" + "kind" : { + "label" : "kind", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { }, + "flow" : [ ] }, - "value" : { - "label" : "value", + "path" : { + "label" : "path", "type" : "string" }, - "canRead" : { - "label" : "canRead", - "type" : "bool" + "opts" : { + "label" : "opts", + "type" : "object" } }, - "flow" : [ "canWrite", "value", "canRead" ] + "flow" : [ "kind", "path", "opts" ] }, - "teams" : { - "label" : "teams", - "type" : "array", - "array" : true, - "format" : "form", + "authorizations" : { + "label" : "authorizations", + "type" : "form", + "collapsable" : true, + "collapsed" : true, "schema" : { - "canRead" : { - "label" : "canRead", + "proxyStateAccess" : { + "label" : "proxyStateAccess", "type" : "bool" }, - "value" : { - "label" : "value", - "type" : "string" + "httpAccess" : { + "label" : "httpAccess", + "type" : "bool" }, - "canWrite" : { - "label" : "canWrite", + "globalMapAccess" : { + "label" : "globalMapAccess", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "read" : { + "label" : "read", + "type" : "bool" + }, + "write" : { + "label" : "write", + "type" : "bool" + } + }, + "flow" : [ "read", "write" ] + }, + "pluginDataStoreAccess" : { + "label" : "pluginDataStoreAccess", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "read" : { + "label" : "read", + "type" : "bool" + }, + "write" : { + "label" : "write", + "type" : "bool" + } + }, + "flow" : [ "read", "write" ] + }, + "pluginMapAccess" : { + "label" : "pluginMapAccess", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "read" : { + "label" : "read", + "type" : "bool" + }, + "write" : { + "label" : "write", + "type" : "bool" + } + }, + "flow" : [ "read", "write" ] + }, + "proxyHttpCallTimeout" : { + "label" : "proxyHttpCallTimeout", + "type" : "number" + }, + "configurationAccess" : { + "label" : "configurationAccess", "type" : "bool" + }, + "globalDataStoreAccess" : { + "label" : "globalDataStoreAccess", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "read" : { + "label" : "read", + "type" : "bool" + }, + "write" : { + "label" : "write", + "type" : "bool" + } + }, + "flow" : [ "read", "write" ] } }, - "flow" : [ "canRead", "value", "canWrite" ] - } - }, - "flow" : [ "teams", "tenant" ] - }, - "otoroshi.next.plugins.GraphQLBackend" : { - "schema" : { - "schema" : { - "label" : "schema", - "type" : "string" - }, - "permissions" : { - "label" : "permissions", - "type" : "array", - "array" : true, - "format" : null - }, - "initial_data" : { - "label" : "initial_data", - "type" : "string" - }, - "max_depth" : { - "label" : "max_depth", - "type" : "number" - } - }, - "flow" : [ "max_depth", "initial_data", "permissions", "schema" ] - }, - "otoroshi.utils.mailer.NoneMailerSettings" : { - "schema" : { - "type" : { - "type" : "select", - "props" : { - "label" : "type", - "options" : [ "elastic", "webhook", "kafka", "pulsar", "file", "mailer", "custom", "console", "metrics" ] - } - } - }, - "flow" : [ "type" ] - }, - "otoroshi.next.models.NgTreeNodePath" : { - "schema" : { }, - "flow" : [ ] - }, - "otoroshi.next.plugins.WasmRequestTransformer" : { - "schema" : { - "proxy_http_call_timeout" : { - "label" : "proxy_http_call_timeout", - "type" : "number" + "flow" : [ "proxyStateAccess", "httpAccess", "globalMapAccess", "pluginDataStoreAccess", "pluginMapAccess", "proxyHttpCallTimeout", "configurationAccess", "globalDataStoreAccess" ] }, - "raw_source" : { - "label" : "raw_source", - "type" : "string" + "opa" : { + "label" : "opa", + "type" : "bool" }, "wasi" : { "label" : "wasi", "type" : "bool" }, - "function_name" : { - "label" : "function_name", - "type" : "string" - }, - "compiler_source" : { - "label" : "compiler_source", + "functionName" : { + "label" : "functionName", "type" : "string" - }, - "config" : { - "label" : "config", - "type" : "object" - }, - "memory_pages" : { - "label" : "memory_pages", - "type" : "number" - }, - "allowed_hosts" : { - "label" : "allowed_hosts", - "type" : "array", - "array" : true, - "format" : null } }, - "flow" : [ "allowed_hosts", "memory_pages", "config", "compiler_source", "function_name", "wasi", "raw_source", "proxy_http_call_timeout" ] + "flow" : [ "functionName", "wasi", "opa", "config", "instances", "allowedPaths", "memoryPages", "allowedHosts", "killOptions", "source", "authorizations" ] }, "otoroshi.next.models.NgTreeRouter_Test" : { "schema" : { }, @@ -38901,6 +44233,35 @@ }, "flow" : [ "state_resp_leeway", "response_header_name", "request_header_name", "ttl", "version", "algo_to_backend", "algo_from_backend" ] }, + "otoroshi.next.plugins.NgClientCertChainHeaderConfig" : { + "schema" : { + "dns_header_name" : { + "label" : "dns_header_name", + "type" : "string" + }, + "pem_header_name" : { + "label" : "pem_header_name", + "type" : "string" + }, + "send_pem" : { + "label" : "send_pem", + "type" : "bool" + }, + "send_chain" : { + "label" : "send_chain", + "type" : "bool" + }, + "send_dns" : { + "label" : "send_dns", + "type" : "bool" + }, + "chain_header_name" : { + "label" : "chain_header_name", + "type" : "string" + } + }, + "flow" : [ "chain_header_name", "send_dns", "send_chain", "send_pem", "pem_header_name", "dns_header_name" ] + }, "otoroshi.next.plugins.wrappers.CompositeWrapper" : { "schema" : { }, "flow" : [ ] @@ -39103,6 +44464,27 @@ }, "flow" : [ "remove", "name", "type" ] }, + "otoroshi.next.plugins.NgLog4ShellFilter" : { + "schema" : { + "status" : { + "label" : "status", + "type" : "number" + }, + "body" : { + "type" : "code", + "props" : { + "label" : "body", + "editorOnly" : true, + "mode" : "json" + } + }, + "parse_body" : { + "label" : "parse_body", + "type" : "bool" + } + }, + "flow" : [ "parse_body", "body", "status" ] + }, "otoroshi.models.Webhook" : { "schema" : { "type" : { @@ -39233,6 +44615,27 @@ }, "flow" : [ "zone", "region", "rack", "dataCenter", "provider", "type" ] }, + "otoroshi.next.plugins.OIDCIDTokenHeader" : { + "schema" : { + "send" : { + "label" : "send", + "type" : "bool" + }, + "name" : { + "label" : "name", + "type" : "string" + }, + "header_name" : { + "label" : "header_name", + "type" : "string" + }, + "jwt" : { + "label" : "jwt", + "type" : "bool" + } + }, + "flow" : [ "jwt", "header_name", "name", "send" ] + }, "otoroshi.plugins.discovery.SelfRegistrationConfig" : { "schema" : { "registrationTtl" : { @@ -39352,6 +44755,110 @@ }, "flow" : [ "to", "code" ] }, + "otoroshi.next.extensions.Foo" : { + "schema" : { + "metadata" : { + "label" : "metadata", + "type" : "object" + }, + "id" : { + "label" : "id", + "type" : "string" + }, + "name" : { + "label" : "name", + "type" : "string" + }, + "tags" : { + "label" : "tags", + "type" : "array", + "array" : true, + "format" : null + }, + "description" : { + "label" : "description", + "type" : "string" + }, + "_loc" : { + "label" : "_loc", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "tenant" : { + "label" : "tenant", + "type" : "string" + }, + "teams" : { + "label" : "teams", + "type" : "array", + "array" : true, + "format" : null + } + }, + "flow" : [ "tenant", "teams" ] + } + }, + "flow" : [ "description", "tags", "name", "id", "metadata", "_loc" ] + }, + "otoroshi.wasm.proxywasm.CorazaWafConfig" : { + "schema" : { + "tags" : { + "label" : "tags", + "type" : "array", + "array" : true, + "format" : null + }, + "inspectBody" : { + "label" : "inspectBody", + "type" : "bool" + }, + "metadata" : { + "label" : "metadata", + "type" : "object" + }, + "poolCapacity" : { + "label" : "poolCapacity", + "type" : "number" + }, + "id" : { + "label" : "id", + "type" : "string" + }, + "name" : { + "label" : "name", + "type" : "string" + }, + "_loc" : { + "label" : "_loc", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "tenant" : { + "label" : "tenant", + "type" : "string" + }, + "teams" : { + "label" : "teams", + "type" : "array", + "array" : true, + "format" : null + } + }, + "flow" : [ "tenant", "teams" ] + }, + "config" : { + "label" : "config", + "type" : "object" + }, + "description" : { + "label" : "description", + "type" : "string" + } + }, + "flow" : [ "description", "config", "name", "id", "poolCapacity", "metadata", "inspectBody", "tags", "_loc" ] + }, "otoroshi.models.GeolocationSettings" : { "schema" : { "type" : { @@ -39448,6 +44955,35 @@ }, "flow" : [ "enabled", "allowLast", "notFound", "allowed", "forbidden" ] }, + "otoroshi.next.plugins.NgClientCertChainHeader" : { + "schema" : { + "dns_header_name" : { + "label" : "dns_header_name", + "type" : "string" + }, + "pem_header_name" : { + "label" : "pem_header_name", + "type" : "string" + }, + "send_pem" : { + "label" : "send_pem", + "type" : "bool" + }, + "send_chain" : { + "label" : "send_chain", + "type" : "bool" + }, + "send_dns" : { + "label" : "send_dns", + "type" : "bool" + }, + "chain_header_name" : { + "label" : "chain_header_name", + "type" : "string" + } + }, + "flow" : [ "chain_header_name", "send_dns", "send_chain", "send_pem", "pem_header_name", "dns_header_name" ] + }, "otoroshi.next.plugins.DisableHttp10" : { "schema" : { }, "flow" : [ ] @@ -39490,6 +45026,35 @@ }, "flow" : [ "response", "request" ] }, + "otoroshi.next.plugins.NgIzanamiV1CanaryRoutingConfigRoute" : { + "schema" : { + "regex" : { + "label" : "regex", + "type" : "bool" + }, + "default" : { + "label" : "default", + "type" : "string" + }, + "route" : { + "label" : "route", + "type" : "string" + }, + "wildcard" : { + "label" : "wildcard", + "type" : "bool" + }, + "exact" : { + "label" : "exact", + "type" : "bool" + }, + "variants" : { + "label" : "variants", + "type" : "object" + } + }, + "flow" : [ "variants", "exact", "wildcard", "route", "default", "regex" ] + }, "otoroshi.next.plugins.NgAuthModuleExpectedUser" : { "schema" : { "only_from" : { @@ -39529,6 +45094,78 @@ }, "flow" : [ "privateKey", "publicKey", "size", "type" ] }, + "otoroshi.next.plugins.OIDCHeaders" : { + "schema" : { + "profile" : { + "label" : "profile", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "send" : { + "label" : "send", + "type" : "bool" + }, + "header_name" : { + "label" : "header_name", + "type" : "string" + } + }, + "flow" : [ "send", "header_name" ] + }, + "idtoken" : { + "label" : "idtoken", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "send" : { + "label" : "send", + "type" : "bool" + }, + "name" : { + "label" : "name", + "type" : "string" + }, + "header_name" : { + "label" : "header_name", + "type" : "string" + }, + "jwt" : { + "label" : "jwt", + "type" : "bool" + } + }, + "flow" : [ "send", "name", "header_name", "jwt" ] + }, + "access_token" : { + "label" : "access_token", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "send" : { + "label" : "send", + "type" : "bool" + }, + "name" : { + "label" : "name", + "type" : "string" + }, + "header_name" : { + "label" : "header_name", + "type" : "string" + }, + "jwt" : { + "label" : "jwt", + "type" : "bool" + } + }, + "flow" : [ "send", "name", "header_name", "jwt" ] + } + }, + "flow" : [ "profile", "idtoken", "access_token" ] + }, "TokenResponse" : { "schema" : { "valid" : { @@ -39570,9 +45207,13 @@ "url" : { "label" : "url", "type" : "string" + }, + "timeout" : { + "label" : "timeout", + "type" : "number" } }, - "flow" : [ "enabled", "url" ] + "flow" : [ "enabled", "url", "timeout" ] }, "client" : { "label" : "client", @@ -40035,9 +45676,13 @@ "value" : { "label" : "value", "type" : "object" + }, + "error" : { + "label" : "error", + "type" : "string" } }, - "flow" : [ "path", "value" ] + "flow" : [ "path", "error", "value" ] } }, "flow" : [ "validators" ] @@ -40046,27 +45691,6 @@ "schema" : { }, "flow" : [ ] }, - "otoroshi.auth.SAMLSignature" : { - "schema" : { - "algorithm" : { - "label" : "algorithm", - "type" : "form", - "collapsable" : true, - "collapsed" : true, - "schema" : { }, - "flow" : [ ] - }, - "canocalizationMethod" : { - "label" : "canocalizationMethod", - "type" : "form", - "collapsable" : true, - "collapsed" : true, - "schema" : { }, - "flow" : [ ] - } - }, - "flow" : [ "algorithm", "canocalizationMethod" ] - }, "otoroshi.next.plugins.NgOtoroshiInfoConfig" : { "schema" : { "version" : { @@ -40225,10 +45849,6 @@ }, "flow" : [ "headerName", "secComTtl", "version", "algo" ] }, - "otoroshi.auth.SAMLSignatureAlgorithm" : { - "schema" : { }, - "flow" : [ ] - }, "otoroshi.next.plugins.W3CTracingConfig" : { "schema" : { "kind" : { @@ -40491,9 +46111,13 @@ "url" : { "label" : "url", "type" : "string" + }, + "timeout" : { + "label" : "timeout", + "type" : "number" } }, - "flow" : [ "enabled", "url" ] + "flow" : [ "enabled", "url", "timeout" ] }, "strictlyPrivate" : { "label" : "strictlyPrivate", @@ -43181,10 +48805,6 @@ "collapsable" : true, "collapsed" : true, "schema" : { - "anonymousTelemetry" : { - "label" : "anonymousTelemetry", - "type" : "bool" - }, "geolocationSettings" : { "label" : "geolocationSettings", "type" : "form", @@ -43227,10 +48847,18 @@ "label" : "throttlingQuota", "type" : "number" }, + "anonymousReporting" : { + "label" : "anonymousReporting", + "type" : "bool" + }, "maxWebhookSize" : { "label" : "maxWebhookSize", "type" : "number" }, + "env" : { + "label" : "env", + "type" : "object" + }, "maxConcurrentRequests" : { "label" : "maxConcurrentRequests", "type" : "number" @@ -44183,6 +49811,10 @@ "array" : true, "format" : null }, + "extensions" : { + "label" : "extensions", + "type" : "object" + }, "middleFingers" : { "label" : "middleFingers", "type" : "bool" @@ -44734,7 +50366,7 @@ "flow" : [ "enabled" ] } }, - "flow" : [ "anonymousTelemetry", "geolocationSettings", "alertsEmails", "throttlingQuota", "maxWebhookSize", "maxConcurrentRequests", "cleverSettings", "templates", "endlessIpAddresses", "plugins", "kafkaConfig", "maxLogsSize", "proxies", "enableEmbeddedMetrics", "elasticReadsConfig", "trustXForwarded", "quotasSettings", "tags", "limitConcurrentRequests", "useAkkaHttpClient", "elasticWritesConfigs", "logAnalyticsOnServer", "metadata", "apiReadOnly", "backOfficeAuthRef", "streamEntityOnly", "otoroshiId", "mailerSettings", "lines", "middleFingers", "analyticsWebhooks", "autoCert", "wasmManagerSettings", "maintenanceMode", "initWithNewEngine", "letsEncryptSettings", "snowMonkeyConfig", "scripts", "perIpThrottlingQuota", "useCircuitBreakers", "maxHttp10ResponseSize", "tlsSettings", "statsdConfig", "autoLinkToDefaultGroup", "alertsWebhooks", "ipFiltering", "u2fLoginOnly", "userAgentSettings" ] + "flow" : [ "geolocationSettings", "alertsEmails", "throttlingQuota", "anonymousReporting", "maxWebhookSize", "env", "maxConcurrentRequests", "cleverSettings", "templates", "endlessIpAddresses", "plugins", "kafkaConfig", "maxLogsSize", "proxies", "enableEmbeddedMetrics", "elasticReadsConfig", "trustXForwarded", "quotasSettings", "tags", "limitConcurrentRequests", "useAkkaHttpClient", "elasticWritesConfigs", "logAnalyticsOnServer", "metadata", "apiReadOnly", "backOfficeAuthRef", "streamEntityOnly", "otoroshiId", "mailerSettings", "lines", "extensions", "middleFingers", "analyticsWebhooks", "autoCert", "wasmManagerSettings", "maintenanceMode", "initWithNewEngine", "letsEncryptSettings", "snowMonkeyConfig", "scripts", "perIpThrottlingQuota", "useCircuitBreakers", "maxHttp10ResponseSize", "tlsSettings", "statsdConfig", "autoLinkToDefaultGroup", "alertsWebhooks", "ipFiltering", "u2fLoginOnly", "userAgentSettings" ] } }, "flow" : [ "config" ] @@ -45224,6 +50856,48 @@ "schema" : { }, "flow" : [ ] }, + "otoroshi.next.plugins.WasmJobsLauncher" : { + "schema" : { }, + "flow" : [ ] + }, + "otoroshi.next.plugins.NgIzanamiV1CanaryRoutingConfig" : { + "schema" : { + "routes" : { + "label" : "routes", + "type" : "array", + "array" : true, + "format" : "form", + "schema" : { + "regex" : { + "label" : "regex", + "type" : "bool" + }, + "default" : { + "label" : "default", + "type" : "string" + }, + "route" : { + "label" : "route", + "type" : "string" + }, + "wildcard" : { + "label" : "wildcard", + "type" : "bool" + }, + "exact" : { + "label" : "exact", + "type" : "bool" + }, + "variants" : { + "label" : "variants", + "type" : "object" + } + }, + "flow" : [ "regex", "default", "route", "wildcard", "exact", "variants" ] + } + }, + "flow" : [ "routes" ] + }, "otoroshi.next.plugins.MissingHeadersOut" : { "schema" : { "headers" : { @@ -45480,9 +51154,13 @@ "url" : { "label" : "url", "type" : "string" + }, + "timeout" : { + "label" : "timeout", + "type" : "number" } }, - "flow" : [ "enabled", "url" ] + "flow" : [ "enabled", "url", "timeout" ] }, "strictlyPrivate" : { "label" : "strictlyPrivate", @@ -47662,6 +53340,53 @@ }, "flow" : [ "letsEncrypt", "headersVerification", "issueCert", "missingOnlyHeadersIn", "publicPatterns", "metadata", "privatePatterns", "readOnly", "groups", "secComVersion", "description", "secComTtl", "handleLegacyDomain", "missingOnlyHeadersOut", "enforceSecureCommunication", "redirectToLocal", "secComExcludedPatterns", "useNewWSClient", "secComUseSameAlgo", "matchingHeaders", "additionalHeadersOut", "secComInfoTokenVersion", "sendStateChallenge", "overrideHost", "tags", "targets", "securityExcludedPatterns", "clientValidatorRef", "transformerConfig", "userFacing", "logAnalyticsOnServer", "removeHeadersIn", "id", "maintenanceMode", "useAkkaHttpClient", "removeHeadersOut", "tcpUdpTunneling", "sendInfoToken", "enabled", "transformerRefs", "xForwardedHeaders", "env", "stripPath", "paths", "subdomain", "allowHttp10", "detectApiKeySooner", "strictlyPrivate", "sendOtoroshiHeadersBack", "localHost", "forceHttps", "matchingRoot", "domain", "additionalHeaders", "name", "root", "issueCertCA", "authConfigRef", "localScheme", "privateApp", "hosts", "buildMode", "clientConfig", "healthCheck", "secComAlgoChallengeOtoToBack", "apiKeyConstraints", "gzip", "secComAlgoInfoToken", "ipFiltering", "redirection", "restrictions", "accessValidator", "chaosConfig", "secComHeaders", "secComAlgoChallengeBackToOto", "secComSettings", "canary", "_loc", "plugins", "preRouting", "targetsLoadBalancing", "cors", "api", "jwtVerifier" ] }, + "otoroshi.next.plugins.NgHasAllowedUsersValidator" : { + "schema" : { + "profile_not_match" : { + "label" : "profile_not_match", + "type" : "array", + "array" : true, + "format" : null + }, + "profile_match" : { + "label" : "profile_match", + "type" : "array", + "array" : true, + "format" : null + }, + "email_domains" : { + "label" : "email_domains", + "type" : "array", + "array" : true, + "format" : null + }, + "usernames" : { + "label" : "usernames", + "type" : "array", + "array" : true, + "format" : null + }, + "metadata_match" : { + "label" : "metadata_match", + "type" : "array", + "array" : true, + "format" : null + }, + "metadata_not_match" : { + "label" : "metadata_not_match", + "type" : "array", + "array" : true, + "format" : null + }, + "emails" : { + "label" : "emails", + "type" : "array", + "array" : true, + "format" : null + } + }, + "flow" : [ "emails", "metadata_not_match", "metadata_match", "usernames", "email_domains", "profile_match", "profile_not_match" ] + }, "otoroshi.plugins.envoy.EnvoyControlPlane" : { "schema" : { }, "flow" : [ ] @@ -48120,6 +53845,204 @@ }, "flow" : [ "elastic", "eventsWebhooks", "jwk", "auth", "clevercloud", "alertEmails", "authority", "services" ] }, + "otoroshi.next.plugins.PreRoutingVerifierContext" : { + "schema" : { + "ctx" : { + "label" : "ctx", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { }, + "flow" : [ ] + }, + "apk" : { + "label" : "apk", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "dailyQuota" : { + "label" : "dailyQuota", + "type" : "number" + }, + "metadata" : { + "label" : "metadata", + "type" : "object" + }, + "throttlingQuota" : { + "label" : "throttlingQuota", + "type" : "number" + }, + "constrainedServicesOnly" : { + "label" : "constrainedServicesOnly", + "type" : "bool" + }, + "allowClientIdOnly" : { + "label" : "allowClientIdOnly", + "type" : "bool" + }, + "_loc" : { + "label" : "_loc", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "tenant" : { + "label" : "tenant", + "type" : "string" + }, + "teams" : { + "label" : "teams", + "type" : "array", + "array" : true, + "format" : null + } + }, + "flow" : [ "tenant", "teams" ] + }, + "restrictions" : { + "label" : "restrictions", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "forbidden" : { + "label" : "forbidden", + "type" : "array", + "array" : true, + "format" : "form", + "schema" : { + "method" : { + "label" : "method", + "type" : "string" + }, + "path" : { + "label" : "path", + "type" : "string" + } + }, + "flow" : [ "method", "path" ] + }, + "allowed" : { + "label" : "allowed", + "type" : "array", + "array" : true, + "format" : "form", + "schema" : { + "method" : { + "label" : "method", + "type" : "string" + }, + "path" : { + "label" : "path", + "type" : "string" + } + }, + "flow" : [ "method", "path" ] + }, + "notFound" : { + "label" : "notFound", + "type" : "array", + "array" : true, + "format" : "form", + "schema" : { + "method" : { + "label" : "method", + "type" : "string" + }, + "path" : { + "label" : "path", + "type" : "string" + } + }, + "flow" : [ "method", "path" ] + }, + "allowLast" : { + "label" : "allowLast", + "type" : "bool" + }, + "enabled" : { + "label" : "enabled", + "type" : "bool" + } + }, + "flow" : [ "forbidden", "allowed", "notFound", "allowLast", "enabled" ] + }, + "tags" : { + "label" : "tags", + "type" : "array", + "array" : true, + "format" : null + }, + "enabled" : { + "label" : "enabled", + "type" : "bool" + }, + "readOnly" : { + "label" : "readOnly", + "type" : "bool" + }, + "clientSecret" : { + "label" : "clientSecret", + "type" : "string" + }, + "validUntil" : { + "label" : "validUntil", + "type" : "string" + }, + "clientName" : { + "label" : "clientName", + "type" : "string" + }, + "monthlyQuota" : { + "label" : "monthlyQuota", + "type" : "number" + }, + "description" : { + "label" : "description", + "type" : "string" + }, + "rotation" : { + "label" : "rotation", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "enabled" : { + "label" : "enabled", + "type" : "bool" + }, + "rotationEvery" : { + "label" : "rotationEvery", + "type" : "number" + }, + "gracePeriod" : { + "label" : "gracePeriod", + "type" : "number" + }, + "nextSecret" : { + "label" : "nextSecret", + "type" : "string" + } + }, + "flow" : [ "enabled", "rotationEvery", "gracePeriod", "nextSecret" ] + }, + "authorizedEntities" : { + "label" : "authorizedEntities", + "type" : "array", + "array" : true, + "format" : null + }, + "clientId" : { + "label" : "clientId", + "type" : "string" + } + }, + "flow" : [ "dailyQuota", "metadata", "throttlingQuota", "constrainedServicesOnly", "allowClientIdOnly", "_loc", "restrictions", "tags", "enabled", "readOnly", "clientSecret", "validUntil", "clientName", "monthlyQuota", "description", "rotation", "authorizedEntities", "clientId" ] + } + }, + "flow" : [ "ctx", "apk" ] + }, "otoroshi.plugins.jobs.kubernetes.KubernetesSupport" : { "schema" : { }, "flow" : [ ] @@ -48190,6 +54113,19 @@ }, "flow" : [ "filter" ] }, + "otoroshi.next.plugins.OIDCProfileHeader" : { + "schema" : { + "send" : { + "label" : "send", + "type" : "bool" + }, + "header_name" : { + "label" : "header_name", + "type" : "string" + } + }, + "flow" : [ "header_name", "send" ] + }, "otoroshi.models.Exporter" : { "schema" : { "type" : { @@ -48447,6 +54383,45 @@ "schema" : { }, "flow" : [ ] }, + "otoroshi.next.plugins.NgCertificateAsApikey" : { + "schema" : { + "daily_quota" : { + "label" : "daily_quota", + "type" : "number" + }, + "monthly_quota" : { + "label" : "monthly_quota", + "type" : "number" + }, + "tags" : { + "label" : "tags", + "type" : "array", + "array" : true, + "format" : null + }, + "metadata" : { + "label" : "metadata", + "type" : "object" + }, + "read_only" : { + "label" : "read_only", + "type" : "bool" + }, + "allow_client_id_only" : { + "label" : "allow_client_id_only", + "type" : "bool" + }, + "throttling_quota" : { + "label" : "throttling_quota", + "type" : "number" + }, + "constrained_services_only" : { + "label" : "constrained_services_only", + "type" : "bool" + } + }, + "flow" : [ "constrained_services_only", "throttling_quota", "allow_client_id_only", "read_only", "metadata", "tags", "monthly_quota", "daily_quota" ] + }, "otoroshi.ssl.Cert" : { "schema" : { "certType" : { @@ -48608,69 +54583,6 @@ }, "flow" : [ "startedAt", "duration", "until", "descriptorId", "descriptorName" ] }, - "otoroshi.auth.SAMLCredentials" : { - "schema" : { - "signingKey" : { - "label" : "signingKey", - "type" : "form", - "collapsable" : true, - "collapsed" : true, - "schema" : { - "certificate" : { - "label" : "certificate", - "type" : "string" - }, - "privateKey" : { - "label" : "privateKey", - "type" : "string" - }, - "certId" : { - "label" : "certId", - "type" : "string" - }, - "useOtoroshiCertificate" : { - "label" : "useOtoroshiCertificate", - "type" : "bool" - } - }, - "flow" : [ "certificate", "privateKey", "certId", "useOtoroshiCertificate" ] - }, - "encryptionKey" : { - "label" : "encryptionKey", - "type" : "form", - "collapsable" : true, - "collapsed" : true, - "schema" : { - "certificate" : { - "label" : "certificate", - "type" : "string" - }, - "privateKey" : { - "label" : "privateKey", - "type" : "string" - }, - "certId" : { - "label" : "certId", - "type" : "string" - }, - "useOtoroshiCertificate" : { - "label" : "useOtoroshiCertificate", - "type" : "bool" - } - }, - "flow" : [ "certificate", "privateKey", "certId", "useOtoroshiCertificate" ] - }, - "signedDocuments" : { - "label" : "signedDocuments", - "type" : "bool" - }, - "encryptedAssertions" : { - "label" : "encryptedAssertions", - "type" : "bool" - } - }, - "flow" : [ "encryptedAssertions", "signedDocuments", "signingKey", "encryptionKey" ] - }, "otoroshi.events.AuditEvent" : { "schema" : { }, "flow" : [ ] @@ -48679,6 +54591,15 @@ "schema" : { }, "flow" : [ ] }, + "otoroshi.next.plugins.NgUserAgentInfoHeader" : { + "schema" : { + "header_name" : { + "label" : "header_name", + "type" : "string" + } + }, + "flow" : [ "header_name" ] + }, "otoroshi.utils.http.CacheConnectionSettings" : { "schema" : { "enabled" : { @@ -48768,9 +54689,13 @@ "value" : { "label" : "value", "type" : "object" + }, + "error" : { + "label" : "error", + "type" : "string" } }, - "flow" : [ "path", "value" ] + "flow" : [ "path", "error", "value" ] }, "id" : { "label" : "id", @@ -48835,251 +54760,6 @@ "schema" : { }, "flow" : [ ] }, - "otoroshi.auth.SamlAuthModuleConfig" : { - "schema" : { - "type" : { - "type" : "select", - "props" : { - "label" : "type", - "options" : [ "saml", "oauth1", "oauth2", "ldap", "basic" ] - } - }, - "desc" : { - "label" : "desc", - "type" : "string" - }, - "name" : { - "label" : "name", - "type" : "string" - }, - "ssoProtocolBinding" : { - "label" : "ssoProtocolBinding", - "type" : "form", - "collapsable" : true, - "collapsed" : true, - "schema" : { }, - "flow" : [ ] - }, - "clientSideSessionEnabled" : { - "label" : "clientSideSessionEnabled", - "type" : "bool" - }, - "emailAttributeName" : { - "label" : "emailAttributeName", - "type" : "string" - }, - "validatingCertificates" : { - "label" : "validatingCertificates", - "type" : "array", - "array" : true, - "format" : null - }, - "tags" : { - "label" : "tags", - "type" : "array", - "array" : true, - "format" : null - }, - "singleLogoutProtocolBinding" : { - "label" : "singleLogoutProtocolBinding", - "type" : "form", - "collapsable" : true, - "collapsed" : true, - "schema" : { }, - "flow" : [ ] - }, - "sessionMaxAge" : { - "label" : "sessionMaxAge", - "type" : "number" - }, - "issuer" : { - "label" : "issuer", - "type" : "string" - }, - "signature" : { - "label" : "signature", - "type" : "form", - "collapsable" : true, - "collapsed" : true, - "schema" : { - "algorithm" : { - "label" : "algorithm", - "type" : "form", - "collapsable" : true, - "collapsed" : true, - "schema" : { }, - "flow" : [ ] - }, - "canocalizationMethod" : { - "label" : "canocalizationMethod", - "type" : "form", - "collapsable" : true, - "collapsed" : true, - "schema" : { }, - "flow" : [ ] - } - }, - "flow" : [ "algorithm", "canocalizationMethod" ] - }, - "userValidators" : { - "label" : "userValidators", - "type" : "array", - "array" : true, - "format" : "form", - "schema" : { - "path" : { - "label" : "path", - "type" : "string" - }, - "value" : { - "label" : "value", - "type" : "object" - } - }, - "flow" : [ "path", "value" ] - }, - "singleLogoutUrl" : { - "label" : "singleLogoutUrl", - "type" : "string" - }, - "id" : { - "label" : "id", - "type" : "string" - }, - "_loc" : { - "label" : "_loc", - "type" : "form", - "collapsable" : true, - "collapsed" : true, - "schema" : { - "tenant" : { - "label" : "tenant", - "type" : "string" - }, - "teams" : { - "label" : "teams", - "type" : "array", - "array" : true, - "format" : null - } - }, - "flow" : [ "tenant", "teams" ] - }, - "usedNameIDAsEmail" : { - "label" : "usedNameIDAsEmail", - "type" : "bool" - }, - "singleSignOnUrl" : { - "label" : "singleSignOnUrl", - "type" : "string" - }, - "metadata" : { - "label" : "metadata", - "type" : "object" - }, - "validateAssertions" : { - "label" : "validateAssertions", - "type" : "bool" - }, - "nameIDFormat" : { - "label" : "nameIDFormat", - "type" : "form", - "collapsable" : true, - "collapsed" : true, - "schema" : { }, - "flow" : [ ] - }, - "validateSignature" : { - "label" : "validateSignature", - "type" : "bool" - }, - "credentials" : { - "label" : "credentials", - "type" : "form", - "collapsable" : true, - "collapsed" : true, - "schema" : { - "signingKey" : { - "label" : "signingKey", - "type" : "form", - "collapsable" : true, - "collapsed" : true, - "schema" : { - "certificate" : { - "label" : "certificate", - "type" : "string" - }, - "privateKey" : { - "label" : "privateKey", - "type" : "string" - }, - "certId" : { - "label" : "certId", - "type" : "string" - }, - "useOtoroshiCertificate" : { - "label" : "useOtoroshiCertificate", - "type" : "bool" - } - }, - "flow" : [ "certificate", "privateKey", "certId", "useOtoroshiCertificate" ] - }, - "encryptionKey" : { - "label" : "encryptionKey", - "type" : "form", - "collapsable" : true, - "collapsed" : true, - "schema" : { - "certificate" : { - "label" : "certificate", - "type" : "string" - }, - "privateKey" : { - "label" : "privateKey", - "type" : "string" - }, - "certId" : { - "label" : "certId", - "type" : "string" - }, - "useOtoroshiCertificate" : { - "label" : "useOtoroshiCertificate", - "type" : "bool" - } - }, - "flow" : [ "certificate", "privateKey", "certId", "useOtoroshiCertificate" ] - }, - "signedDocuments" : { - "label" : "signedDocuments", - "type" : "bool" - }, - "encryptedAssertions" : { - "label" : "encryptedAssertions", - "type" : "bool" - } - }, - "flow" : [ "signingKey", "encryptionKey", "signedDocuments", "encryptedAssertions" ] - }, - "sessionCookieValues" : { - "label" : "sessionCookieValues", - "type" : "form", - "collapsable" : true, - "collapsed" : true, - "schema" : { - "httpOnly" : { - "label" : "httpOnly", - "type" : "bool" - }, - "secure" : { - "label" : "secure", - "type" : "bool" - } - }, - "flow" : [ "httpOnly", "secure" ] - } - }, - "flow" : [ "validateSignature", "validateAssertions", "metadata", "singleSignOnUrl", "usedNameIDAsEmail", "id", "singleLogoutUrl", "userValidators", "issuer", "sessionMaxAge", "tags", "validatingCertificates", "emailAttributeName", "clientSideSessionEnabled", "name", "desc", "type", "ssoProtocolBinding", "singleLogoutProtocolBinding", "signature", "_loc", "nameIDFormat", "credentials", "sessionCookieValues" ] - }, "otoroshi.next.plugins.JQConfig" : { "schema" : { "request" : { @@ -49097,6 +54777,27 @@ "schema" : { }, "flow" : [ ] }, + "otoroshi.wasm.WasmSource" : { + "schema" : { + "kind" : { + "label" : "kind", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { }, + "flow" : [ ] + }, + "path" : { + "label" : "path", + "type" : "string" + }, + "opts" : { + "label" : "opts", + "type" : "object" + } + }, + "flow" : [ "opts", "path", "kind" ] + }, "otoroshi.next.plugins.ErrorRewriteReport" : { "schema" : { "raw_response" : { @@ -49149,6 +54850,10 @@ }, "flow" : [ "errors" ] }, + "otoroshi.script.JobKind" : { + "schema" : { }, + "flow" : [ ] + }, "otoroshi.models.ZoneMatch" : { "schema" : { "type" : { @@ -49736,10 +55441,60 @@ }, "flow" : [ "arrayFields", "fields" ] }, + "otoroshi.wasm.WasmVmKillOptions" : { + "schema" : { + "maxUnusedDuration" : { + "label" : "maxUnusedDuration", + "type" : "number" + }, + "immortal" : { + "label" : "immortal", + "type" : "bool" + }, + "maxAvgCallDuration" : { + "label" : "maxAvgCallDuration", + "type" : "number" + }, + "maxMemoryUsage" : { + "label" : "maxMemoryUsage", + "type" : "number" + }, + "maxCalls" : { + "label" : "maxCalls", + "type" : "number" + } + }, + "flow" : [ "maxCalls", "maxMemoryUsage", "maxAvgCallDuration", "immortal", "maxUnusedDuration" ] + }, + "otoroshi.next.plugins.WasmRequestHandler" : { + "schema" : { }, + "flow" : [ ] + }, "otoroshi.plugins.Keys" : { "schema" : { }, "flow" : [ ] }, + "otoroshi.next.plugins.NgLog4ShellFilterConfig" : { + "schema" : { + "status" : { + "label" : "status", + "type" : "number" + }, + "body" : { + "type" : "code", + "props" : { + "label" : "body", + "editorOnly" : true, + "mode" : "json" + } + }, + "parse_body" : { + "label" : "parse_body", + "type" : "bool" + } + }, + "flow" : [ "parse_body", "body", "status" ] + }, "otoroshi.models.JwtTokenLocation" : { "schema" : { "type" : { @@ -49852,9 +55607,13 @@ "value" : { "label" : "value", "type" : "object" + }, + "error" : { + "label" : "error", + "type" : "string" } }, - "flow" : [ "path", "value" ] + "flow" : [ "path", "error", "value" ] }, "emailField" : { "label" : "emailField", @@ -50262,44 +56021,377 @@ }, "flow" : [ "config", "refs", "excludedPatterns", "enabled" ] }, - "otoroshi.next.plugins.WasmAccessValidator" : { + "otoroshi.wasm.WasmConfig" : { "schema" : { - "proxy_http_call_timeout" : { - "label" : "proxy_http_call_timeout", + "allowedHosts" : { + "label" : "allowedHosts", + "type" : "array", + "array" : true, + "format" : null + }, + "memoryPages" : { + "label" : "memoryPages", "type" : "number" }, - "raw_source" : { - "label" : "raw_source", - "type" : "string" + "killOptions" : { + "label" : "killOptions", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "maxUnusedDuration" : { + "label" : "maxUnusedDuration", + "type" : "number" + }, + "immortal" : { + "label" : "immortal", + "type" : "bool" + }, + "maxAvgCallDuration" : { + "label" : "maxAvgCallDuration", + "type" : "number" + }, + "maxMemoryUsage" : { + "label" : "maxMemoryUsage", + "type" : "number" + }, + "maxCalls" : { + "label" : "maxCalls", + "type" : "number" + } + }, + "flow" : [ "maxUnusedDuration", "immortal", "maxAvgCallDuration", "maxMemoryUsage", "maxCalls" ] + }, + "allowedPaths" : { + "label" : "allowedPaths", + "type" : "object" + }, + "instances" : { + "label" : "instances", + "type" : "number" + }, + "config" : { + "label" : "config", + "type" : "object" + }, + "source" : { + "label" : "source", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "kind" : { + "label" : "kind", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { }, + "flow" : [ ] + }, + "path" : { + "label" : "path", + "type" : "string" + }, + "opts" : { + "label" : "opts", + "type" : "object" + } + }, + "flow" : [ "kind", "path", "opts" ] + }, + "authorizations" : { + "label" : "authorizations", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "proxyStateAccess" : { + "label" : "proxyStateAccess", + "type" : "bool" + }, + "httpAccess" : { + "label" : "httpAccess", + "type" : "bool" + }, + "globalMapAccess" : { + "label" : "globalMapAccess", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "read" : { + "label" : "read", + "type" : "bool" + }, + "write" : { + "label" : "write", + "type" : "bool" + } + }, + "flow" : [ "read", "write" ] + }, + "pluginDataStoreAccess" : { + "label" : "pluginDataStoreAccess", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "read" : { + "label" : "read", + "type" : "bool" + }, + "write" : { + "label" : "write", + "type" : "bool" + } + }, + "flow" : [ "read", "write" ] + }, + "pluginMapAccess" : { + "label" : "pluginMapAccess", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "read" : { + "label" : "read", + "type" : "bool" + }, + "write" : { + "label" : "write", + "type" : "bool" + } + }, + "flow" : [ "read", "write" ] + }, + "proxyHttpCallTimeout" : { + "label" : "proxyHttpCallTimeout", + "type" : "number" + }, + "configurationAccess" : { + "label" : "configurationAccess", + "type" : "bool" + }, + "globalDataStoreAccess" : { + "label" : "globalDataStoreAccess", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "read" : { + "label" : "read", + "type" : "bool" + }, + "write" : { + "label" : "write", + "type" : "bool" + } + }, + "flow" : [ "read", "write" ] + } + }, + "flow" : [ "proxyStateAccess", "httpAccess", "globalMapAccess", "pluginDataStoreAccess", "pluginMapAccess", "proxyHttpCallTimeout", "configurationAccess", "globalDataStoreAccess" ] + }, + "opa" : { + "label" : "opa", + "type" : "bool" }, "wasi" : { "label" : "wasi", "type" : "bool" }, - "function_name" : { - "label" : "function_name", + "functionName" : { + "label" : "functionName", "type" : "string" + } + }, + "flow" : [ "functionName", "wasi", "opa", "config", "instances", "allowedPaths", "memoryPages", "allowedHosts", "killOptions", "source", "authorizations" ] + }, + "otoroshi.next.plugins.WasmAccessValidator" : { + "schema" : { + "allowedHosts" : { + "label" : "allowedHosts", + "type" : "array", + "array" : true, + "format" : null }, - "compiler_source" : { - "label" : "compiler_source", - "type" : "string" + "memoryPages" : { + "label" : "memoryPages", + "type" : "number" + }, + "killOptions" : { + "label" : "killOptions", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "maxUnusedDuration" : { + "label" : "maxUnusedDuration", + "type" : "number" + }, + "immortal" : { + "label" : "immortal", + "type" : "bool" + }, + "maxAvgCallDuration" : { + "label" : "maxAvgCallDuration", + "type" : "number" + }, + "maxMemoryUsage" : { + "label" : "maxMemoryUsage", + "type" : "number" + }, + "maxCalls" : { + "label" : "maxCalls", + "type" : "number" + } + }, + "flow" : [ "maxUnusedDuration", "immortal", "maxAvgCallDuration", "maxMemoryUsage", "maxCalls" ] + }, + "allowedPaths" : { + "label" : "allowedPaths", + "type" : "object" + }, + "instances" : { + "label" : "instances", + "type" : "number" }, "config" : { "label" : "config", "type" : "object" }, - "memory_pages" : { - "label" : "memory_pages", - "type" : "number" + "source" : { + "label" : "source", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "kind" : { + "label" : "kind", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { }, + "flow" : [ ] + }, + "path" : { + "label" : "path", + "type" : "string" + }, + "opts" : { + "label" : "opts", + "type" : "object" + } + }, + "flow" : [ "kind", "path", "opts" ] }, - "allowed_hosts" : { - "label" : "allowed_hosts", - "type" : "array", - "array" : true, - "format" : null + "authorizations" : { + "label" : "authorizations", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "proxyStateAccess" : { + "label" : "proxyStateAccess", + "type" : "bool" + }, + "httpAccess" : { + "label" : "httpAccess", + "type" : "bool" + }, + "globalMapAccess" : { + "label" : "globalMapAccess", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "read" : { + "label" : "read", + "type" : "bool" + }, + "write" : { + "label" : "write", + "type" : "bool" + } + }, + "flow" : [ "read", "write" ] + }, + "pluginDataStoreAccess" : { + "label" : "pluginDataStoreAccess", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "read" : { + "label" : "read", + "type" : "bool" + }, + "write" : { + "label" : "write", + "type" : "bool" + } + }, + "flow" : [ "read", "write" ] + }, + "pluginMapAccess" : { + "label" : "pluginMapAccess", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "read" : { + "label" : "read", + "type" : "bool" + }, + "write" : { + "label" : "write", + "type" : "bool" + } + }, + "flow" : [ "read", "write" ] + }, + "proxyHttpCallTimeout" : { + "label" : "proxyHttpCallTimeout", + "type" : "number" + }, + "configurationAccess" : { + "label" : "configurationAccess", + "type" : "bool" + }, + "globalDataStoreAccess" : { + "label" : "globalDataStoreAccess", + "type" : "form", + "collapsable" : true, + "collapsed" : true, + "schema" : { + "read" : { + "label" : "read", + "type" : "bool" + }, + "write" : { + "label" : "write", + "type" : "bool" + } + }, + "flow" : [ "read", "write" ] + } + }, + "flow" : [ "proxyStateAccess", "httpAccess", "globalMapAccess", "pluginDataStoreAccess", "pluginMapAccess", "proxyHttpCallTimeout", "configurationAccess", "globalDataStoreAccess" ] + }, + "opa" : { + "label" : "opa", + "type" : "bool" + }, + "wasi" : { + "label" : "wasi", + "type" : "bool" + }, + "functionName" : { + "label" : "functionName", + "type" : "string" } }, - "flow" : [ "allowed_hosts", "memory_pages", "config", "compiler_source", "function_name", "wasi", "raw_source", "proxy_http_call_timeout" ] + "flow" : [ "functionName", "wasi", "opa", "config", "instances", "allowedPaths", "memoryPages", "allowedHosts", "killOptions", "source", "authorizations" ] }, "otoroshi.auth.BasicAuthUser" : { "schema" : { @@ -50519,6 +56611,52 @@ }, "flow" : [ "description", "type" ] }, + "otoroshi.next.plugins.HMACCallerConfig" : { + "schema" : { + "secret" : { + "label" : "secret", + "type" : "string" + }, + "algo" : { + "label" : "algo", + "type" : "string" + }, + "authorization_header" : { + "label" : "authorization_header", + "type" : "string" + } + }, + "flow" : [ "authorization_header", "algo", "secret" ] + }, + "otoroshi.next.plugins.NgSecurityTxt" : { + "schema" : { + "preferred_languages" : { + "label" : "preferred_languages", + "type" : "string" + }, + "encryption" : { + "label" : "encryption", + "type" : "string" + }, + "policy" : { + "label" : "policy", + "type" : "string" + }, + "acknowledgments" : { + "label" : "acknowledgments", + "type" : "string" + }, + "hiring" : { + "label" : "hiring", + "type" : "string" + }, + "contact" : { + "label" : "contact", + "type" : "string" + } + }, + "flow" : [ "contact", "hiring", "acknowledgments", "policy", "encryption", "preferred_languages" ] + }, "otoroshi.models.DefaultTemplates" : { "schema" : { "team" : { @@ -50612,45 +56750,6 @@ }, "flow" : [ "type" ] }, - "otoroshi.next.plugins.WasmQueryConfig" : { - "schema" : { - "proxy_http_call_timeout" : { - "label" : "proxy_http_call_timeout", - "type" : "number" - }, - "raw_source" : { - "label" : "raw_source", - "type" : "string" - }, - "wasi" : { - "label" : "wasi", - "type" : "bool" - }, - "function_name" : { - "label" : "function_name", - "type" : "string" - }, - "compiler_source" : { - "label" : "compiler_source", - "type" : "string" - }, - "config" : { - "label" : "config", - "type" : "object" - }, - "memory_pages" : { - "label" : "memory_pages", - "type" : "number" - }, - "allowed_hosts" : { - "label" : "allowed_hosts", - "type" : "array", - "array" : true, - "format" : null - } - }, - "flow" : [ "allowed_hosts", "memory_pages", "config", "compiler_source", "function_name", "wasi", "raw_source", "proxy_http_call_timeout" ] - }, "otoroshi.plugins.core.apikeys.BasicAuthApikeyExtractor" : { "schema" : { }, "flow" : [ ] diff --git a/otoroshi/conf/schemas/openapi.json b/otoroshi/conf/schemas/openapi.json index a28e9a2af1..a4b4964f23 100644 --- a/otoroshi/conf/schemas/openapi.json +++ b/otoroshi/conf/schemas/openapi.json @@ -21631,7 +21631,13 @@ "description" : "???" }, "singleLogoutUrl" : { - "type" : "string", + "oneOf" : [ { + "type" : "string", + "nullable" : true, + "description" : "null type" + }, { + "type" : "string" + } ], "description" : "???" }, "id" : { diff --git a/otoroshi/public/openapi.json b/otoroshi/public/openapi.json index a28e9a2af1..a4b4964f23 100644 --- a/otoroshi/public/openapi.json +++ b/otoroshi/public/openapi.json @@ -21631,7 +21631,13 @@ "description" : "???" }, "singleLogoutUrl" : { - "type" : "string", + "oneOf" : [ { + "type" : "string", + "nullable" : true, + "description" : "null type" + }, { + "type" : "string" + } ], "description" : "???" }, "id" : {