Skip to content

Commit 4789204

Browse files
committed
Adding validations for rls_clause
1 parent 838f8bf commit 4789204

File tree

2 files changed

+42
-1
lines changed

2 files changed

+42
-1
lines changed

lib/superset/guest_token.rb

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ def initialize(embedded_dashboard_id: , current_user: nil, rls_clause: [])
1111
end
1212

1313
def guest_token
14+
validate_params
1415
response_body['token']
1516
end
1617

@@ -21,13 +22,17 @@ def params
2122
"id": embedded_dashboard_id.to_s,
2223
"type": "dashboard" }
2324
],
24-
"rls": rls_clause || [], # Ex: [{ "clause": "publisher = 'Nintendo'" }]
25+
"rls": rls_clause, # Ex: [{ "clause": "publisher = 'Nintendo'" }]
2526
"user": current_user_params
2627
}
2728
end
2829

2930
private
3031

32+
def validate_params
33+
raise Superset::Request::InvalidParameterError, "rls_clause should be an array. But it is #{rls_clause.class}" if rls_clause.nil? || rls_clause.class != Array
34+
end
35+
3136
# optional param to be available in Superset for query templating using jinja
3237
# ss expects username .. which could be used to query as current_user.id
3338
def current_user_params

spec/superset/guest_token_spec.rb

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,23 @@
1414
it 'returns the guest token from the response' do
1515
expect(subject.guest_token).to eq('some-token')
1616
end
17+
18+
context 'when invalid rls clause is passed' do
19+
before { allow(subject).to receive(:rls_clause).and_return(rls_clause) }
20+
context 'when rls_clause is nil' do
21+
let(:rls_clause) { nil }
22+
it 'raises invalid parameter error' do
23+
expect{ subject.guest_token }.to raise_error(Superset::Request::InvalidParameterError, 'rls_clause should be an array. But it is NilClass')
24+
end
25+
end
26+
27+
context 'when rls_clause is not an array' do
28+
let(:rls_clause) { { "clause": "publisher = 'Nintendo'" } }
29+
it 'raises invalid parameter error' do
30+
expect{ subject.guest_token }.to raise_error(Superset::Request::InvalidParameterError, "rls_clause should be an array. But it is Hash")
31+
end
32+
end
33+
end
1734
end
1835

1936
describe '#params' do
@@ -75,5 +92,24 @@
7592
)
7693
end
7794
end
95+
96+
context 'with rls clause as empty array' do
97+
before { allow(subject).to receive(:rls_clause).and_return(rls_clause) }
98+
let(:user) { nil }
99+
let(:rls_clause) { [] }
100+
specify do
101+
expect(subject.params).to eq(
102+
{
103+
"resources": [
104+
{
105+
"id": ss_dashboard_id,
106+
"type": "dashboard" }
107+
],
108+
"rls": [],
109+
"user": { }
110+
}
111+
)
112+
end
113+
end
78114
end
79115
end

0 commit comments

Comments
 (0)