Consul is a distributed, highly available, and data center aware solution to connect and configure applications across dynamic, distributed infrastructure. https://www.consul.io
Go to file
John Cowen 35a92e856b
ui: Make it hard to not URLEncode DataSource srcs/URIs (#11117)
Our DataSource came in very iteratively, when we first started using it we specifically tried not to use it for things that would require portions of the @src="" attribute to be URL encoded (so things like service names couldn't be used, but dc etc would be fine). We then gradually added an easy way to url encode the @src="" attributes with a uri helper and began to use the DataSource component more and more. This meant that some DataSource usage continued to be used without our uri helper.

Recently we hit #10901 which was a direct result of us not encoding @src values/URIs (I didn't realise this was one of the places that required URL encoding) and not going back over things to finish things off once we had implemented our uri helper, resulting in ~half of the codebase using it and ~half of it not.

Now that almost all of the UI uses our DataSource component, this PR makes it even harder to not use the uri helper, by wrapping the string that it requires in a private URI class/object, that is then expected/asserted within the DataSource component/service. This means that as a result of this PR you cannot pass a plain string to the DataSource component without seeing an error in your JS console, which in turn means you have to use the uri helper, and it's very very hard to not URL encode any dynamic/user provided values, which otherwise could lead to bugs/errors similar to the one mentioned above.

The error that you see when you don't use the uri helper is currently a 'soft' dev time only error, but like our other functionality that produces a soft error when you mistakenly pass an undefined value to a uri, at some point soon we will make these hard failing "do not do this" errors.

Both of these 'soft error' DX features have been used this to great effect to implement our Admin Partition feature and these kind of things will minimize the amount of these types of bugs moving forwards in a preventative rather than curative manner. Hopefully these are the some of the kinds of things that get added to our codebase that prevent a multitude of problems and therefore are often never noticed/appreciated.

Additionally here we moved the remaining non-uri using DataSources to use uri (that were now super easy to find), and also fixed up a place where I noticed (due to the soft errors) where we were sometimes passing undefined values to a uri call.

The work here also led me to find another couple of non-important 'bugs' that I've PRed already separately, one of which is yet to be merged (#11105), hence the currently failing tests here. I'll rebase that once that PR is in and the tests here should then pass 🤞

Lastly, I didn't go the whole hog here to make DataSink also be this strict with its uri usage, there is a tiny bit more work on DataSink as a result of recently work, so I may (or may not) make DataSink equally as strict as part of that work in a separate PR.
2021-09-30 15:54:46 +01:00
.changelog ui: Make it hard to not URLEncode DataSource srcs/URIs (#11117) 2021-09-30 15:54:46 +01:00
.circleci Rerun go-test and go-test-32bits tests up to 3 times before failing (#11059) 2021-09-20 16:04:59 -04:00
.github github: added CODEOWNERS to automatically request tech writer review (#10962) 2021-09-01 14:02:06 -04:00
acl acl: fix default authorizer for down_policy 2021-09-23 18:12:22 -04:00
agent Merge pull request #11136 from hashicorp/dnephin/acl-resolver-fix-default-authz 2021-09-29 13:45:12 -04:00
api wrap few doRequest calls for error handling (#11158) 2021-09-29 13:12:15 -07:00
bench Gets benchmarks running again and does a rough pass for 0.7.1. 2016-11-29 13:02:26 -08:00
build-support Add failures_before_warning to checks (#10969) 2021-09-14 12:47:52 -04:00
command command/envoy: stop using the DebugConfig from Self endpoint 2021-09-29 13:21:28 -04:00
connect oss portion of ent #1069 (#10883) 2021-08-20 12:57:45 -04:00
contributing Move contributing to docs 2021-08-30 16:17:09 -04:00
demo demo: Added udp port forwarding 2018-05-30 13:56:56 +09:00
docs Move contributing to docs 2021-08-30 16:17:09 -04:00
grafana add readme outlining how to edit and publish 2021-01-12 14:47:11 -08:00
internal sso/oidc: add support for acr_values request parameter (#11026) 2021-09-17 09:10:05 -07:00
ipaddr Ensure Consul is IPv6 compliant (#5468) 2019-06-04 10:02:38 -04:00
lib lib/decode: fix hook to work with embedded squash struct 2021-09-22 13:22:16 -04:00
logging sync changes to oss files made in enterprise (#10670) 2021-07-22 13:58:08 -05:00
proto grpc: strip local ACL tokens from RPCs during forwarding if crossing datacenters (#11099) 2021-09-22 13:14:26 -05:00
sdk Update error texts (#11022) 2021-09-14 11:08:06 -06:00
sentinel Allow users to configure either unstructured or JSON logging (#7130) 2020-01-28 17:50:41 -06:00
service_os Changes made : 2018-06-28 21:18:14 -04:00
snapshot testing: skip slow tests with -short 2020-12-07 13:42:55 -05:00
terraform terraform: remove modules in repo (#5085) 2019-04-04 16:31:43 -07:00
test Add Envoy integration test for split-route SDS case 2021-09-23 10:17:03 +01:00
testrpc add testrpc.WaitForServiceIntentions to help unflake tests that manipulate intentions (#8867) 2020-10-07 14:20:25 -05:00
tlsutil Revert "Merge pull request #10588 from hashicorp/dnephin/config-fix-ports-grpc" 2021-09-29 12:28:41 -04:00
types Move RPC router from Client/Server and into BaseDeps (#8559) 2020-08-27 11:23:52 -04:00
ui ui: Make it hard to not URLEncode DataSource srcs/URIs (#11117) 2021-09-30 15:54:46 +01:00
version Putting source back into Dev Mode 2021-09-22 10:09:18 -05:00
website Merge pull request #11136 from hashicorp/dnephin/acl-resolver-fix-default-authz 2021-09-29 13:45:12 -04:00
.dockerignore Update the scripting 2018-06-14 21:42:47 -04:00
.gitignore website: remove netlify artifacts and port missing redirects over to new format (#9601) 2021-01-21 10:16:17 -05:00
.golangci.yml xds: remove deprecated usages of xDS (#9602) 2021-02-22 15:00:15 -06:00
CHANGELOG.md changelog updates for 1.10.3, 1.9.10, and 1.8.16 (#11160) 2021-09-27 15:36:14 -05:00
GNUmakefile Update CI config and Makefile for vendor removal 2021-07-21 18:39:07 -04:00
INTERNALS.md Move contributing to docs 2021-08-30 16:17:09 -04:00
LICENSE Initial commit 2013-11-04 14:15:27 -08:00
NOTICE.md add copyright notice file 2018-07-09 10:58:26 -07:00
README.md docs: Call out the UI in README and include details for contributing to it (#11187) 2021-09-30 13:34:28 +01:00
Vagrantfile Adds a basic Linux Vagrant setup, stolen from Nomad. 2017-10-06 08:10:12 -07:00
codecov.yml Update all the references in CI and makefile to the bindata file location 2020-10-01 16:19:10 +01:00
go.mod Bump `go-discover` to fix broken dep tree (#10898) 2021-09-16 15:31:22 -04:00
go.sum Bump `go-discover` to fix broken dep tree (#10898) 2021-09-16 15:31:22 -04:00
main.go cmd: introduce a shim to expose Stdout/Stderr writers 2021-06-02 16:51:34 -04:00
main_test.go Adding basic CLI infrastructure 2013-12-19 11:22:08 -08:00
package-lock.json Add Algolia indexing to CI 2020-06-29 12:14:43 -04:00

README.md

Consul CircleCI Discuss

Consul is a distributed, highly available, and data center aware solution to connect and configure applications across dynamic, distributed infrastructure.

Consul provides several key features:

  • Multi-Datacenter - Consul is built to be datacenter aware, and can support any number of regions without complex configuration.

  • Service Mesh/Service Segmentation - Consul Connect enables secure service-to-service communication with automatic TLS encryption and identity-based authorization. Applications can use sidecar proxies in a service mesh configuration to establish TLS connections for inbound and outbound connections without being aware of Connect at all.

  • Service Discovery - Consul makes it simple for services to register themselves and to discover other services via a DNS or HTTP interface. External services such as SaaS providers can be registered as well.

  • Health Checking - Health Checking enables Consul to quickly alert operators about any issues in a cluster. The integration with service discovery prevents routing traffic to unhealthy hosts and enables service level circuit breakers.

  • Key/Value Storage - A flexible key/value store enables storing dynamic configuration, feature flagging, coordination, leader election and more. The simple HTTP API makes it easy to use anywhere.

Consul runs on Linux, macOS, FreeBSD, Solaris, and Windows and includes an optional browser based UI. A commercial version called Consul Enterprise is also available.

Please note: We take Consul's security and our users' trust very seriously. If you believe you have found a security issue in Consul, please responsibly disclose by contacting us at security@hashicorp.com.

Quick Start

A few quick start guides are available on the Consul website:

Documentation

Full, comprehensive documentation is available on the Consul website:

https://www.consul.io/docs

Contributing

Thank you for your interest in contributing! Please refer to CONTRIBUTING.md for guidance. For contributions specifically to the browser based UI, please refer to the UI's README.md for guidance.