# Conflicts: # bubble-webpull/20/head
@@ -1,5 +1,7 @@ | |||||
#!/bin/bash | #!/bin/bash | ||||
# | |||||
# Copyright (c) 2020 Bubble, Inc. All rights reserved. For personal (non-commercial) use, see license: https://getbubblenow.com/bubble-license/ | |||||
# | |||||
function die { | function die { | ||||
echo 1>&2 "${1}" | echo 1>&2 "${1}" | ||||
exit 1 | exit 1 | ||||
@@ -1,5 +1,7 @@ | |||||
#!/bin/bash | #!/bin/bash | ||||
# | |||||
# Copyright (c) 2020 Bubble, Inc. All rights reserved. For personal (non-commercial) use, see license: https://getbubblenow.com/bubble-license/ | |||||
# | |||||
function die { | function die { | ||||
echo 1>&2 "${1}" | echo 1>&2 "${1}" | ||||
exit 1 | exit 1 | ||||
@@ -1,5 +1,7 @@ | |||||
#!/bin/bash | #!/bin/bash | ||||
# | |||||
# Copyright (c) 2020 Bubble, Inc. All rights reserved. For personal (non-commercial) use, see license: https://getbubblenow.com/bubble-license/ | |||||
# | |||||
IMAGEID=${1:?no IMAGEID provided} | IMAGEID=${1:?no IMAGEID provided} | ||||
THISDIR=$(cd $(dirname ${0}) && pwd) | THISDIR=$(cd $(dirname ${0}) && pwd) | ||||
DOCURL=${THISDIR}/docurl | DOCURL=${THISDIR}/docurl | ||||
@@ -1,5 +1,7 @@ | |||||
#!/bin/bash | #!/bin/bash | ||||
# | |||||
# Copyright (c) 2020 Bubble, Inc. All rights reserved. For personal (non-commercial) use, see license: https://getbubblenow.com/bubble-license/ | |||||
# | |||||
DROPLETID=${1:?no DROPLETID provided} | DROPLETID=${1:?no DROPLETID provided} | ||||
THISDIR=$(cd $(dirname ${0}) && pwd) | THISDIR=$(cd $(dirname ${0}) && pwd) | ||||
DOCURL=${THISDIR}/docurl | DOCURL=${THISDIR}/docurl | ||||
@@ -1,5 +1,7 @@ | |||||
#!/bin/bash | #!/bin/bash | ||||
# | |||||
# Copyright (c) 2020 Bubble, Inc. All rights reserved. For personal (non-commercial) use, see license: https://getbubblenow.com/bubble-license/ | |||||
# | |||||
THISDIR=$(cd $(dirname ${0}) && pwd) | THISDIR=$(cd $(dirname ${0}) && pwd) | ||||
DOCURL=${THISDIR}/docurl | DOCURL=${THISDIR}/docurl | ||||
@@ -1,5 +1,7 @@ | |||||
#!/bin/bash | #!/bin/bash | ||||
# | |||||
# Copyright (c) 2020 Bubble, Inc. All rights reserved. For personal (non-commercial) use, see license: https://getbubblenow.com/bubble-license/ | |||||
# | |||||
THISDIR=$(cd $(dirname ${0}) && pwd) | THISDIR=$(cd $(dirname ${0}) && pwd) | ||||
DOCURL=${THISDIR}/docurl | DOCURL=${THISDIR}/docurl | ||||
@@ -1,5 +1,7 @@ | |||||
#!/bin/bash | #!/bin/bash | ||||
# | |||||
# Copyright (c) 2020 Bubble, Inc. All rights reserved. For personal (non-commercial) use, see license: https://getbubblenow.com/bubble-license/ | |||||
# | |||||
if [[ -z "${DIGITALOCEAN_API_KEY}" ]] ; then | if [[ -z "${DIGITALOCEAN_API_KEY}" ]] ; then | ||||
echo "DIGITALOCEAN_API_KEY not defined in environment" | echo "DIGITALOCEAN_API_KEY not defined in environment" | ||||
exit 1 | exit 1 | ||||
@@ -1,5 +1,7 @@ | |||||
#!/bin/bash | #!/bin/bash | ||||
# | |||||
# Copyright (c) 2020 Bubble, Inc. All rights reserved. For personal (non-commercial) use, see license: https://getbubblenow.com/bubble-license/ | |||||
# | |||||
DOMAIN=${1:?no domain provided} | DOMAIN=${1:?no domain provided} | ||||
THISDIR=$(cd $(dirname ${0}) && pwd) | THISDIR=$(cd $(dirname ${0}) && pwd) | ||||
@@ -1,4 +1,7 @@ | |||||
#!/bin/bash | #!/bin/bash | ||||
# | |||||
# Copyright (c) 2020 Bubble, Inc. All rights reserved. For personal (non-commercial) use, see license: https://getbubblenow.com/bubble-license/ | |||||
# | |||||
DOMAIN=${1:?no domain provided} | DOMAIN=${1:?no domain provided} | ||||
RECORDS_JSON="${2:?no JSON DNS records file provided}" | RECORDS_JSON="${2:?no JSON DNS records file provided}" | ||||
@@ -1,5 +1,7 @@ | |||||
#!/bin/bash | #!/bin/bash | ||||
# | |||||
# Copyright (c) 2020 Bubble, Inc. All rights reserved. For personal (non-commercial) use, see license: https://getbubblenow.com/bubble-license/ | |||||
# | |||||
if [[ -z "${GODADDY_API_KEY}" ]] ; then | if [[ -z "${GODADDY_API_KEY}" ]] ; then | ||||
echo "GODADDY_API_KEY not defined in environment" | echo "GODADDY_API_KEY not defined in environment" | ||||
exit 1 | exit 1 | ||||
@@ -1,4 +1,7 @@ | |||||
#!/bin/bash | #!/bin/bash | ||||
# | |||||
# Copyright (c) 2020 Bubble, Inc. All rights reserved. For personal (non-commercial) use, see license: https://getbubblenow.com/bubble-license/ | |||||
# | |||||
KEY_MATCH="${1:?no key match}" | KEY_MATCH="${1:?no key match}" | ||||
for k in $(echo 'keys *'"""${KEY_MATCH}"""'*' | redis-cli ) ; do | for k in $(echo 'keys *'"""${KEY_MATCH}"""'*' | redis-cli ) ; do | ||||
echo "del ${k} => $(echo "del ${k}" | redis-cli)" | echo "del ${k} => $(echo "del ${k}" | redis-cli)" | ||||
@@ -1,4 +1,7 @@ | |||||
#!/bin/bash | #!/bin/bash | ||||
# | |||||
# Copyright (c) 2020 Bubble, Inc. All rights reserved. For personal (non-commercial) use, see license: https://getbubblenow.com/bubble-license/ | |||||
# | |||||
KEY_MATCH="${1}" | KEY_MATCH="${1}" | ||||
for k in $(echo 'keys *'"""${KEY_MATCH}"""'*' | redis-cli ) ; do | for k in $(echo 'keys *'"""${KEY_MATCH}"""'*' | redis-cli ) ; do | ||||
echo "$k => $(echo "get $k" | redis-cli)" | echo "$k => $(echo "get $k" | redis-cli)" | ||||
@@ -1,5 +1,7 @@ | |||||
#!/bin/bash | #!/bin/bash | ||||
# | |||||
# Copyright (c) 2020 Bubble, Inc. All rights reserved. For personal (non-commercial) use, see license: https://getbubblenow.com/bubble-license/ | |||||
# | |||||
if [[ -z "${VULTR_API_KEY}" ]] ; then | if [[ -z "${VULTR_API_KEY}" ]] ; then | ||||
>&2 echo "VULTR_API_KEY not defined in environment" | >&2 echo "VULTR_API_KEY not defined in environment" | ||||
exit 1 | exit 1 | ||||
@@ -1,5 +1,7 @@ | |||||
#!/bin/bash | #!/bin/bash | ||||
# | |||||
# Copyright (c) 2020 Bubble, Inc. All rights reserved. For personal (non-commercial) use, see license: https://getbubblenow.com/bubble-license/ | |||||
# | |||||
SUBID=${1:?no SUBID provided} | SUBID=${1:?no SUBID provided} | ||||
THISDIR=$(cd $(dirname ${0}) && pwd) | THISDIR=$(cd $(dirname ${0}) && pwd) | ||||
VCURL=${THISDIR}/vcurl | VCURL=${THISDIR}/vcurl | ||||
@@ -1,5 +1,7 @@ | |||||
#!/bin/bash | #!/bin/bash | ||||
# | |||||
# Copyright (c) 2020 Bubble, Inc. All rights reserved. For personal (non-commercial) use, see license: https://getbubblenow.com/bubble-license/ | |||||
# | |||||
SNAPSHOTID=${1:?no snapshot provided} | SNAPSHOTID=${1:?no snapshot provided} | ||||
THISDIR=$(cd $(dirname ${0}) && pwd) | THISDIR=$(cd $(dirname ${0}) && pwd) | ||||
VCURL=${THISDIR}/vcurl | VCURL=${THISDIR}/vcurl | ||||
@@ -1,5 +1,7 @@ | |||||
#!/bin/bash | #!/bin/bash | ||||
# | |||||
# Copyright (c) 2020 Bubble, Inc. All rights reserved. For personal (non-commercial) use, see license: https://getbubblenow.com/bubble-license/ | |||||
# | |||||
THISDIR=$(cd $(dirname ${0}) && pwd) | THISDIR=$(cd $(dirname ${0}) && pwd) | ||||
VCURL=${THISDIR}/vcurl | VCURL=${THISDIR}/vcurl | ||||
@@ -1,5 +1,7 @@ | |||||
#!/bin/bash | #!/bin/bash | ||||
# | |||||
# Copyright (c) 2020 Bubble, Inc. All rights reserved. For personal (non-commercial) use, see license: https://getbubblenow.com/bubble-license/ | |||||
# | |||||
THISDIR=$(cd $(dirname ${0}) && pwd) | THISDIR=$(cd $(dirname ${0}) && pwd) | ||||
VCURL=${THISDIR}/vcurl | VCURL=${THISDIR}/vcurl | ||||
@@ -1,5 +1,7 @@ | |||||
#!/bin/bash | #!/bin/bash | ||||
# | |||||
# Copyright (c) 2020 Bubble, Inc. All rights reserved. For personal (non-commercial) use, see license: https://getbubblenow.com/bubble-license/ | |||||
# | |||||
THISDIR=$(cd $(dirname ${0}) && pwd) | THISDIR=$(cd $(dirname ${0}) && pwd) | ||||
VCURL=${THISDIR}/vcurl | VCURL=${THISDIR}/vcurl | ||||
@@ -1,3 +1,7 @@ | |||||
/** | |||||
* Copyright (c) 2020 Bubble, Inc. All rights reserved. | |||||
* For personal (non-commercial) use, see license: https://getbubblenow.com/bubble-license/ | |||||
*/ | |||||
package bubble.model.device; | package bubble.model.device; | ||||
import com.fasterxml.jackson.annotation.JsonCreator; | import com.fasterxml.jackson.annotation.JsonCreator; | ||||
@@ -1,3 +1,7 @@ | |||||
/** | |||||
* Copyright (c) 2020 Bubble, Inc. All rights reserved. | |||||
* For personal (non-commercial) use, see license: https://getbubblenow.com/bubble-license/ | |||||
*/ | |||||
package bubble.server; | package bubble.server; | ||||
import com.fasterxml.jackson.annotation.JsonIgnore; | import com.fasterxml.jackson.annotation.JsonIgnore; | ||||
@@ -1,3 +1,7 @@ | |||||
/** | |||||
* Copyright (c) 2020 Bubble, Inc. All rights reserved. | |||||
* For personal (non-commercial) use, see license: https://getbubblenow.com/bubble-license/ | |||||
*/ | |||||
package bubble.server; | package bubble.server; | ||||
import lombok.Getter; | import lombok.Getter; | ||||
@@ -218,6 +218,7 @@ public class BubbleConfiguration extends PgRestServerConfiguration | |||||
@Getter @Setter private LegalInfo legal = new LegalInfo(); | @Getter @Setter private LegalInfo legal = new LegalInfo(); | ||||
@Getter @Setter private AppLinks appLinks = new AppLinks(); | @Getter @Setter private AppLinks appLinks = new AppLinks(); | ||||
@Getter @Setter private String certificateValidationHost; | |||||
@Override @JsonIgnore public Handlebars getHandlebars() { return BubbleHandlebars.instance.getHandlebars(); } | @Override @JsonIgnore public Handlebars getHandlebars() { return BubbleHandlebars.instance.getHandlebars(); } | ||||
@@ -1,3 +1,7 @@ | |||||
/** | |||||
* Copyright (c) 2020 Bubble, Inc. All rights reserved. | |||||
* For personal (non-commercial) use, see license: https://getbubblenow.com/bubble-license/ | |||||
*/ | |||||
package bubble.service.cloud; | package bubble.service.cloud; | ||||
import bubble.model.device.Device; | import bubble.model.device.Device; | ||||
@@ -1,3 +1,7 @@ | |||||
/** | |||||
* Copyright (c) 2020 Bubble, Inc. All rights reserved. | |||||
* For personal (non-commercial) use, see license: https://getbubblenow.com/bubble-license/ | |||||
*/ | |||||
package bubble.service.stream; | package bubble.service.stream; | ||||
import bubble.model.account.Account; | import bubble.model.account.Account; | ||||
@@ -1,3 +1,7 @@ | |||||
/** | |||||
* Copyright (c) 2020 Bubble, Inc. All rights reserved. | |||||
* For personal (non-commercial) use, see license: https://getbubblenow.com/bubble-license/ | |||||
*/ | |||||
package bubble.service.stream; | package bubble.service.stream; | ||||
import com.fasterxml.jackson.annotation.JsonCreator; | import com.fasterxml.jackson.annotation.JsonCreator; | ||||
@@ -1,3 +1,7 @@ | |||||
/** | |||||
* Copyright (c) 2020 Bubble, Inc. All rights reserved. | |||||
* For personal (non-commercial) use, see license: https://getbubblenow.com/bubble-license/ | |||||
*/ | |||||
package bubble.service.stream; | package bubble.service.stream; | ||||
import bubble.dao.account.AccountDAO; | import bubble.dao.account.AccountDAO; | ||||
@@ -1,3 +1,7 @@ | |||||
/** | |||||
* Copyright (c) 2020 Bubble, Inc. All rights reserved. | |||||
* For personal (non-commercial) use, see license: https://getbubblenow.com/bubble-license/ | |||||
*/ | |||||
package bubble.service_dbfilter; | package bubble.service_dbfilter; | ||||
import bubble.model.account.Account; | import bubble.model.account.Account; | ||||
@@ -1,3 +1,7 @@ | |||||
/** | |||||
* Copyright (c) 2020 Bubble, Inc. All rights reserved. | |||||
* For personal (non-commercial) use, see license: https://getbubblenow.com/bubble-license/ | |||||
*/ | |||||
package bubble.service_dbfilter; | package bubble.service_dbfilter; | ||||
import bubble.model.device.Device; | import bubble.model.device.Device; | ||||
@@ -37,7 +37,9 @@ | |||||
{"name": "app_link_android", "value": "[[appLinks.android]]"}, | {"name": "app_link_android", "value": "[[appLinks.android]]"}, | ||||
{"name": "app_link_windows", "value": "[[appLinks.windows]]"}, | {"name": "app_link_windows", "value": "[[appLinks.windows]]"}, | ||||
{"name": "app_link_macosx", "value": "[[appLinks.macosx]]"}, | {"name": "app_link_macosx", "value": "[[appLinks.macosx]]"}, | ||||
{"name": "app_link_linux", "value": "[[appLinks.linux]]"} | |||||
{"name": "app_link_linux", "value": "[[appLinks.linux]]"}, | |||||
{"name": "cert_validation_host", "value": "[[configuration.certificateValidationHost]]"} | |||||
], | ], | ||||
"optionalConfigNames": ["restore_key", "restore_timeout", "error_url", "error_key", "error_env"] | "optionalConfigNames": ["restore_key", "restore_timeout", "error_url", "error_key", "error_env"] | ||||
} | } |
@@ -20,3 +20,5 @@ export APP_LINK_ANDROID={{ app_link_android }} | |||||
export APP_LINK_WINDOWS={{ app_link_windows }} | export APP_LINK_WINDOWS={{ app_link_windows }} | ||||
export APP_LINK_MACOSX={{ app_link_macosx }} | export APP_LINK_MACOSX={{ app_link_macosx }} | ||||
export APP_LINK_LINUX={{ app_link_linux }} | export APP_LINK_LINUX={{ app_link_linux }} | ||||
export CERT_VALIDATION_HOST={{ cert_validation_host }} |
@@ -11,6 +11,7 @@ | |||||
{"name": "sage_ip6", "value": "[[sageNode.ip6]]"}, | {"name": "sage_ip6", "value": "[[sageNode.ip6]]"}, | ||||
{"name": "cert_name", "value": "bubble-[[network.shortId]]"}, | {"name": "cert_name", "value": "bubble-[[network.shortId]]"}, | ||||
{"name": "cert_org", "value": "Bubble [[network.shortId]]"}, | {"name": "cert_org", "value": "Bubble [[network.shortId]]"}, | ||||
{"name": "cert_cn", "value": "[[network.certCNAME]]"} | |||||
{"name": "cert_cn", "value": "[[network.certCNAME]]"}, | |||||
{"name": "cert_validation_host", "value": "[[configuration.certificateValidationHost]]"} | |||||
] | ] | ||||
} | } |
@@ -6,3 +6,4 @@ bubble_ssl_port = '{{ ssl_port }}' | |||||
bubble_sage_host = '{{ sage_host }}' | bubble_sage_host = '{{ sage_host }}' | ||||
bubble_sage_ip4 = '{{ sage_ip4 }}' | bubble_sage_ip4 = '{{ sage_ip4 }}' | ||||
bubble_sage_ip6 = '{{ sage_ip6 }}' | bubble_sage_ip6 = '{{ sage_ip6 }}' | ||||
cert_validation_host = '{{ cert_validation_host }}' |
@@ -109,3 +109,5 @@ appLinks: | |||||
windows: {{APP_LINK_WINDOWS}} | windows: {{APP_LINK_WINDOWS}} | ||||
macosx: {{APP_LINK_MACOSX}} | macosx: {{APP_LINK_MACOSX}} | ||||
linux: {{APP_LINK_LINUX}} | linux: {{APP_LINK_LINUX}} | ||||
certificateValidationHost: {{CERT_VALIDATION_HOST}} |
@@ -197,7 +197,8 @@ field_description_network_fork_host=The current Sage Launcher will be forked ont | |||||
field_label_network_domain=Domain | field_label_network_domain=Domain | ||||
field_label_plan=Plan | field_label_plan=Plan | ||||
field_label_choose_plan=Choose Your Plan | field_label_choose_plan=Choose Your Plan | ||||
message_plan_max_accounts=You can create up to {{max}} user accounts on this Bubble | |||||
message_plan_max_accounts_one=This is a single-user Bubble | |||||
message_plan_max_accounts_multiple=You can create up to {{max}} user accounts on this Bubble | |||||
message_plan_no_max_accounts=This plan supports an unlimited number of user accounts | message_plan_no_max_accounts=This plan supports an unlimited number of user accounts | ||||
field_label_show_advanced_plan_options=Customize Launch Options | field_label_show_advanced_plan_options=Customize Launch Options | ||||
field_label_region=Location | field_label_region=Location | ||||
@@ -319,14 +320,12 @@ label_account_promotion_used=Used On | |||||
label_account_payment_method_used_format={{MMM}} {{d}}, {{YYYY}} | label_account_payment_method_used_format={{MMM}} {{d}}, {{YYYY}} | ||||
# Bubble Plans | # Bubble Plans | ||||
plan_name_bubble=Bubble Standard | |||||
plan_description_bubble=Try this one first. Most users probably don't need anything more | |||||
plan_name_bubble_plus=Bubble Plus | |||||
plan_description_bubble_plus=Enhanced for faster performance | |||||
plan_name_bubble_pro=Bubble Pro | |||||
plan_description_bubble_pro=Two bubble nodes operate in concert to improve overall reliability | |||||
plan_name_bubble_super=Bubble Super | |||||
plan_description_bubble_super=A truly powerful bubble node | |||||
plan_name_bubble=Personal Bubble | |||||
plan_description_bubble=Enjoy your very own personal Bubble | |||||
plan_name_bubble_plus=Family Bubble | |||||
plan_description_bubble_plus=A bigger Bubble, enhanced for multi-user performance | |||||
plan_name_bubble_super=Mega Bubble | |||||
plan_description_bubble_super=Our most powerful Bubble, optimized for small businesses | |||||
# Footprints | # Footprints | ||||
footprint_name_US=United States | footprint_name_US=United States | ||||
@@ -28,7 +28,7 @@ from mitmproxy.exceptions import TlsProtocolException | |||||
from mitmproxy.net import tls as net_tls | from mitmproxy.net import tls as net_tls | ||||
from bubble_api import bubble_log, bubble_conn_check, bubble_activity_log, redis_set | from bubble_api import bubble_log, bubble_conn_check, bubble_activity_log, redis_set | ||||
from bubble_config import bubble_sage_host, bubble_sage_ip4, bubble_sage_ip6 | |||||
from bubble_config import bubble_sage_host, bubble_sage_ip4, bubble_sage_ip6, cert_validation_host | |||||
import redis | import redis | ||||
import json | import json | ||||
import subprocess | import subprocess | ||||
@@ -210,6 +210,10 @@ def next_layer(next_layer): | |||||
bubble_log('next_layer: enabling passthru for server='+server_addr+' because security_level='+security_level+' for client='+client_addr) | bubble_log('next_layer: enabling passthru for server='+server_addr+' because security_level='+security_level+' for client='+client_addr) | ||||
check = FORCE_PASSTHRU | check = FORCE_PASSTHRU | ||||
elif fqdns is not None and len(fqdns) == 1 and cert_validation_host == fqdns[0]: | |||||
bubble_log('next_layer: NOT enabling passthru for server='+server_addr+' because fqdn is cert_validation_host ('+cert_validation_host+') for client='+client_addr) | |||||
return | |||||
elif security_level == SEC_STD and no_fqdns: | elif security_level == SEC_STD and no_fqdns: | ||||
bubble_log('next_layer: enabling passthru for server='+server_addr+' because no FQDN found and security_level='+security_level+' for client='+client_addr) | bubble_log('next_layer: enabling passthru for server='+server_addr+' because no FQDN found and security_level='+security_level+' for client='+client_addr) | ||||
check = FORCE_PASSTHRU | check = FORCE_PASSTHRU | ||||
@@ -1 +1 @@ | |||||
Subproject commit 78257ee57adc9a557cee916e4c6030c3cc5cd831 | |||||
Subproject commit cf3869232598970292724bf6c72b79d18c1d7c33 |