Skip to content

Commit 9a95338

Browse files
committed
Allow cb open redirect to be modified by CB_REDIRECT_URL
Here, let `cb open` redirect to a non-standard Dashboard URL (or other internal component) by respecting the `CB_REDIRECT_URL` env var. If the var's empty, it continues to have the same behavior as before.
1 parent 84b8f5a commit 9a95338

File tree

4 files changed

+41
-3
lines changed

4 files changed

+41
-3
lines changed

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
66

77
## [Unreleased]
88

9+
### Added
10+
- `cb open` can now take a non-default redirect URL using `CB_REDIRECT_URL`.
11+
912
## [3.6.3] - 2025-04-03
1013
### Fixed
1114
- Missing values from cluster state enum.

spec/cb/open_spec.cr

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,38 @@ Spectator.describe CB::Open do
2727

2828
expect(client).to receive(:create_session)
2929
.with(
30-
Client::SessionCreateParams.new(generate_one_time_token: true)
30+
Client::SessionCreateParams.new(
31+
generate_one_time_token: true,
32+
redirect_url: nil
33+
)
34+
)
35+
.and_return(
36+
CB::Model::Session.new(id: session_id, one_time_token: session_one_time_token)
37+
)
38+
39+
action.call
40+
41+
expected_login_url = "https://#{client_host}/sessions/#{session_id}/actions/login?one_time_token=#{session_one_time_token}"
42+
expect(open_args).to eq([expected_login_url])
43+
end
44+
45+
it "redirects to a URL based on env var" do
46+
ENV["CB_API_KEY"] = nil
47+
ENV["CB_REDIRECT_URL"] = "https://my-custom-url.crunchybridge.com"
48+
49+
open_args : Array(String)? = nil
50+
51+
action.open = ->(args : Array(String), _env : Process::Env) do
52+
open_args = args
53+
nil
54+
end
55+
56+
expect(client).to receive(:create_session)
57+
.with(
58+
Client::SessionCreateParams.new(
59+
generate_one_time_token: true,
60+
redirect_url: "https://my-custom-url.crunchybridge.com"
61+
)
3162
)
3263
.and_return(
3364
CB::Model::Session.new(id: session_id, one_time_token: session_one_time_token)

src/cb/open.cr

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,10 @@ module CB
1414
def run
1515
raise Error.new "Cannot open browser session with #{"CB_API_KEY".colorize.red.bold} set." if ENV["CB_API_KEY"]?
1616

17-
session = client.create_session Client::SessionCreateParams.new(generate_one_time_token: true)
17+
session = client.create_session Client::SessionCreateParams.new(
18+
redirect_url: ENV["CB_REDIRECT_URL"],
19+
generate_one_time_token: true,
20+
)
1821
# A one-time token is sent via query string since we don't have any choice
1922
# while using an executable like `open`, which means that there is some
2023
# potential danger of it leaking to logs. To protect against this, tokens

src/client/session.cr

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
module CB
22
class Client
33
jrecord SessionCreateParams,
4-
generate_one_time_token : Bool
4+
generate_one_time_token : Bool,
5+
redirect_url : String?
56

67
# https://crunchybridgeapiinternal.docs.apiary.io/#reference/0/sessions/create-session
78
def create_session(params : SessionCreateParams)

0 commit comments

Comments
 (0)