Skip to content

Commit eae6ff4

Browse files
author
Matthew Lynch
committed
Merge branch 'master' into cloud-deploys
2 parents eb72990 + 6e3a84d commit eae6ff4

File tree

3 files changed

+46
-11
lines changed

3 files changed

+46
-11
lines changed

rsconnect/api.py

Lines changed: 33 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -365,6 +365,7 @@ def __init__(
365365
) -> None:
366366
self.reset()
367367
self._d = kwargs
368+
self.logger = logger
368369
self.setup_remote_server(
369370
name=name,
370371
url=url or kwargs.get("server"),
@@ -377,7 +378,6 @@ def __init__(
377378
secret=secret,
378379
)
379380
self.setup_client(cookies, timeout)
380-
self.logger = logger
381381

382382
@classmethod
383383
def fromConnectServer(cls, connect_server, **kwargs):
@@ -431,12 +431,38 @@ def setup_remote_server(
431431
server_data = ServerStore().resolve(name, url)
432432
if server_data.from_store:
433433
url = server_data.url
434-
api_key = server_data.api_key
435-
insecure = server_data.insecure
436-
ca_data = server_data.ca_data
437-
account_name = server_data.account_name
438-
token = server_data.token
439-
secret = server_data.secret
434+
if (
435+
server_data.api_key
436+
and api_key
437+
or server_data.insecure
438+
and insecure
439+
or server_data.ca_data
440+
and ca_data
441+
or server_data.account_name
442+
and account_name
443+
or server_data.token
444+
and token
445+
or server_data.secret
446+
and secret
447+
) and self.logger:
448+
self.logger.warning(
449+
"Connect detected CLI commands and/or environment variables that overlap with stored credential.\n"
450+
)
451+
self.logger.warning(
452+
"Check your environment variables (e.g. CONNECT_API_KEY) to make sure you want them to be used.\n"
453+
)
454+
self.logger.warning(
455+
"Credential paremeters are taken with the following precedence: stored > CLI > environment.\n"
456+
)
457+
self.logger.warning(
458+
"To ignore an environment variable, override it in the CLI with an empty string (e.g. -k '').\n"
459+
)
460+
api_key = server_data.api_key or api_key
461+
insecure = server_data.insecure or insecure
462+
ca_data = server_data.ca_data or ca_data
463+
account_name = server_data.account_name or account_name
464+
token = server_data.token or token
465+
secret = server_data.secret or secret
440466
self.is_server_from_store = server_data.from_store
441467

442468
if api_key:

rsconnect/main.py

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -317,11 +317,19 @@ def _test_rstudio_creds(server: api.RStudioServer):
317317
type=click.File(),
318318
help="The path to trusted TLS CA certificates.",
319319
)
320-
@rstudio_args
321320
@click.option("--verbose", "-v", is_flag=True, help="Print detailed messages.")
322-
def add(name, server, api_key, insecure, cacert, account, token, secret, verbose):
321+
@rstudio_args
322+
@click.pass_context
323+
def add(ctx, name, server, api_key, insecure, cacert, account, token, secret, verbose):
323324

324325
set_verbosity(verbose)
326+
if sys.version_info >= (3, 8):
327+
click.echo("Detected the following inputs:")
328+
for k, v in locals().items():
329+
if k in {"ctx", "verbose"}:
330+
continue
331+
if v is not None:
332+
click.echo(" {}: {}".format(k, ctx.get_parameter_source(k).name))
325333

326334
validation.validate_connection_options(
327335
url=server,
@@ -392,7 +400,8 @@ def list_servers(verbose):
392400
for server in servers:
393401
click.echo('Nickname: "%s"' % server["name"])
394402
click.echo(" URL: %s" % server["url"])
395-
click.echo(" API key is saved")
403+
if server.get("api_key"):
404+
click.echo(" API key is saved")
396405
if server.get("insecure"):
397406
click.echo(" Insecure mode (TLS host/certificate validation disabled)")
398407
if server.get("ca_cert"):

rsconnect/validation.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ def validate_connection_options(url, api_key, insecure, cacert, account_name, to
1414
"""
1515
connect_options = {"-k/--api-key": api_key, "-i/--insecure": insecure, "-c/--cacert": cacert}
1616
shinyapps_options = {"-T/--token": token, "-S/--secret": secret, "-A/--account": account_name}
17-
options_mutually_exclusive_with_name = {"-s/--server": url, **connect_options, **shinyapps_options}
17+
options_mutually_exclusive_with_name = {"-s/--server": url, **shinyapps_options}
1818
present_options_mutually_exclusive_with_name = _get_present_options(options_mutually_exclusive_with_name)
1919

2020
if name and present_options_mutually_exclusive_with_name:

0 commit comments

Comments
 (0)