Skip to content

Commit 3753cd8

Browse files
authored
Showing runs from other users also (#1517)
* Showing runs from other users also * (feat): Bringing saved filters also to repository view [skip ci] * Removed default settings from search form. Will be set by JS * Added CSS selector attribute quotes for consistency * Made visibility logic more developer friendly by placing it in one location and not have double-checks * Guard clause if URL params are malicious [skip ci]
1 parent 88ae3e0 commit 3753cd8

File tree

4 files changed

+143
-80
lines changed

4 files changed

+143
-80
lines changed

api/scenario_runner.py

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -300,7 +300,7 @@ def old_v1_runs_endpoint():
300300

301301
# A route to return all of the available entries in our catalog.
302302
@router.get('/v2/runs')
303-
async def get_runs(uri: str | None = None, branch: str | None = None, machine_id: int | None = None, machine: str | None = None, filename: str | None = None, usage_scenario_variables: str | None = None, job_id: int | None = None, failed: bool | None = None, show_archived: bool | None = None, limit: int | None = 50, uri_mode = 'none', user: User = Depends(authenticate)):
303+
async def get_runs(uri: str | None = None, branch: str | None = None, machine_id: int | None = None, machine: str | None = None, filename: str | None = None, usage_scenario_variables: str | None = None, job_id: int | None = None, failed: bool | None = None, show_archived: bool | None = None, show_other_users: bool | None = None, limit: int | None = 50, uri_mode = 'none', user: User = Depends(authenticate)):
304304

305305
query = '''
306306
SELECT r.id, r.name, r.uri, r.branch, r.created_at,
@@ -309,9 +309,16 @@ async def get_runs(uri: str | None = None, branch: str | None = None, machine_id
309309
FROM runs as r
310310
LEFT JOIN machines as m on r.machine_id = m.id
311311
WHERE
312-
(TRUE = %s OR r.user_id = ANY(%s::int[]) or r.public = TRUE)
313312
'''
314-
params = [user.is_super_user(), user.visible_users()]
313+
params = []
314+
315+
if show_other_users is False:
316+
query = f"{query} r.user_id = %s \n"
317+
params.append(user._id)
318+
else:
319+
query = f"{query} (TRUE = %s OR r.user_id = ANY(%s::int[]) or r.public = TRUE) \n"
320+
params.append(user.is_super_user())
321+
params.append(user.visible_users())
315322

316323
if uri:
317324
if uri_mode == 'exact':
@@ -355,6 +362,8 @@ async def get_runs(uri: str | None = None, branch: str | None = None, machine_id
355362
if show_archived is not True:
356363
query = f"{query} AND r.archived = False \n"
357364

365+
366+
358367
query = f"{query} ORDER BY r.created_at DESC"
359368

360369
if limit is not None and limit != 0:

frontend/js/authentication.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444

4545
localStorage.setItem('authentication_token', authentication_token);
4646
localStorage.setItem('user_name', user_data.data._name);
47+
localStorage.setItem('show_other_users', 'false'); // default setting on new login different from DEFAULT user
4748

4849
$('#login-successful-message').show();
4950
$('#token-details-message').show();

frontend/js/helpers/runs.js

Lines changed: 80 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -76,45 +76,83 @@ const removeFilter = (paramName) => {
7676
}
7777

7878

79-
const getFilterQueryStringFromURI = () => {
79+
const getFilterQueryStringFromURI = (only_saved_filters=false) => {
8080
const url_params = getURLParams();
8181

8282
let query_string = '';
83-
if (url_params['uri'] != null && url_params['uri'].trim() != '') {
84-
const uri = url_params['uri'].trim()
85-
query_string += `&uri=${uri}`
86-
document.querySelector('input[name=uri]').value = uri;
87-
document.querySelector('#filters-active').classList.remove('hidden');
83+
if (only_saved_filters === true) {
84+
if (url_params['uri'] != null && url_params['uri'].trim() != '') {
85+
const uri = url_params['uri'].trim()
86+
query_string += `&uri=${uri}`
87+
document.querySelector('input[name="uri"]').value = uri;
88+
document.querySelector('#filters-active').classList.remove('hidden');
89+
}
90+
if (url_params['filename'] != null && url_params['filename'].trim() != '') {
91+
const filename = url_params['filename'].trim()
92+
query_string += `&filename=${filename}`
93+
document.querySelector('input[name="filename"]').value = filename;
94+
document.querySelector('#filters-active').classList.remove('hidden');
95+
}
96+
if (url_params['branch'] != null && url_params['branch'].trim() != '') {
97+
const branch = url_params['branch'].trim()
98+
query_string += `&branch=${branch}`
99+
document.querySelector('input[name="branch"]').value = branch;
100+
document.querySelector('#filters-active').classList.remove('hidden');
101+
}
102+
if (url_params['machine_id'] != null && url_params['machine_id'].trim() != '') {
103+
const machine_id = url_params['machine_id'].trim()
104+
query_string += `&machine_id=${machine_id}`
105+
document.querySelector('input[name="machine_id"]').value = machine_id;
106+
document.querySelector('#filters-active').classList.remove('hidden');
107+
}
108+
if (url_params['machine'] != null && url_params['machine'].trim() != '') {
109+
const machine = url_params['machine'].trim()
110+
query_string += `&machine=${machine}`
111+
document.querySelector('input[name="machine"]').value = machine;
112+
document.querySelector('#filters-active').classList.remove('hidden');
113+
}
114+
if (url_params['usage_scenario_variables'] != null && url_params['usage_scenario_variables'].trim() != '') {
115+
const usage_scenario_variables = url_params['usage_scenario_variables'].trim()
116+
query_string += `&usage_scenario_variables=${usage_scenario_variables}`
117+
document.querySelector('input[name="usage_scenario_variables"]').value = usage_scenario_variables;
118+
document.querySelector('#filters-active').classList.remove('hidden');
119+
}
88120
}
89-
if (url_params['filename'] != null && url_params['filename'].trim() != '') {
90-
const filename = url_params['filename'].trim()
91-
query_string += `&filename=${filename}`
92-
document.querySelector('input[name=filename]').value = filename;
121+
122+
let show_archived = null;
123+
if (url_params['show_archived'] != null && url_params['show_archived'].trim() != '') {
124+
show_archived = url_params['show_archived'].trim()
93125
document.querySelector('#filters-active').classList.remove('hidden');
94-
}
95-
if (url_params['branch'] != null && url_params['branch'].trim() != '') {
96-
const branch = url_params['branch'].trim()
97-
query_string += `&branch=${branch}`
98-
document.querySelector('input[name=branch]').value = branch;
126+
} else if (localStorage.getItem('show_archived')) {
127+
show_archived = localStorage.getItem('show_archived');
99128
document.querySelector('#filters-active').classList.remove('hidden');
129+
} else {
130+
show_archived = 'false';
100131
}
101-
if (url_params['machine_id'] != null && url_params['machine_id'].trim() != '') {
102-
const machine_id = url_params['machine_id'].trim()
103-
query_string += `&machine_id=${machine_id}`
104-
document.querySelector('input[name=machine_id]').value = machine_id;
105-
document.querySelector('#filters-active').classList.remove('hidden');
132+
133+
const archived_radio = document.querySelector(`input[name="show_archived"][value="${show_archived}"]`)
134+
if (archived_radio != null) { // since user can submit bullshit we do not want to except on querySelector after accessing checkes
135+
archived_radio.checked = true;
136+
localStorage.setItem('show_archived', show_archived);
137+
query_string += `&show_archived=${show_archived}`
106138
}
107-
if (url_params['machine'] != null && url_params['machine'].trim() != '') {
108-
const machine = url_params['machine'].trim()
109-
query_string += `&machine=${machine}`
110-
document.querySelector('input[name=machine]').value = machine;
139+
140+
let show_other_users = null;
141+
if (url_params['show_other_users'] != null && url_params['show_other_users'].trim() != '') {
142+
show_other_users = url_params['show_other_users'].trim()
111143
document.querySelector('#filters-active').classList.remove('hidden');
112-
}
113-
if (url_params['usage_scenario_variables'] != null && url_params['usage_scenario_variables'].trim() != '') {
114-
const usage_scenario_variables = url_params['usage_scenario_variables'].trim()
115-
query_string += `&usage_scenario_variables=${usage_scenario_variables}`
116-
document.querySelector('input[name=usage_scenario_variables]').value = usage_scenario_variables;
144+
} else if (localStorage.getItem('show_other_users')) {
145+
show_other_users = localStorage.getItem('show_other_users');
117146
document.querySelector('#filters-active').classList.remove('hidden');
147+
} else {
148+
show_other_users = 'true';
149+
}
150+
151+
const other_users_radio = document.querySelector(`input[name="show_other_users"][value="${show_other_users}"]`)
152+
if (other_users_radio != null) { // since user can submit bullshit we do not want to except on querySelector after accessing checkes
153+
document.querySelector(`input[name="show_other_users"][value="${show_other_users}"]`).checked = true;
154+
localStorage.setItem('show_other_users', show_other_users);
155+
query_string += `&show_other_users=${show_other_users}`
118156
}
119157

120158
return query_string
@@ -123,21 +161,25 @@ const getFilterQueryStringFromURI = () => {
123161
const getFilterQueryStringFromInputs = () => {
124162
let query_string = '';
125163

126-
const uri = document.querySelector('input[name=uri]').value.trim()
127-
const filename = document.querySelector('input[name=filename]').value.trim()
128-
const branch = document.querySelector('input[name=branch]').value.trim()
129-
const machine = document.querySelector('input[name=machine]').value.trim()
130-
const machine_id = document.querySelector('input[name=machine_id]').value.trim()
131-
const usage_scenario_variables = document.querySelector('input[name=usage_scenario_variables]').value.trim()
132-
const show_archived = document.querySelector('input[name=show_archived]:checked').value.trim()
164+
const uri = document.querySelector('input[name="uri"]').value.trim()
165+
const filename = document.querySelector('input[name="filename"]').value.trim()
166+
const branch = document.querySelector('input[name="branch"]').value.trim()
167+
const machine = document.querySelector('input[name="machine"]').value.trim()
168+
const machine_id = document.querySelector('input[name="machine_id"]').value.trim()
169+
const usage_scenario_variables = document.querySelector('input[name="usage_scenario_variables"]').value.trim()
170+
const show_archived = document.querySelector('input[name="show_archived"]:checked')?.value?.trim()
171+
localStorage.setItem('show_archived', show_archived);
172+
const show_other_users = document.querySelector('input[name="show_other_users"]:checked')?.value?.trim()
173+
localStorage.setItem('show_other_users', show_other_users);
133174

134175
if(uri != '') query_string += `&uri=${uri}`
135176
if(filename != '') query_string += `&filename=${filename}`
136177
if(branch != '') query_string += `&branch=${branch}`
137178
if(machine != '') query_string += `&machine=${machine}`
138179
if(machine_id != '') query_string += `&machine_id=${machine_id}`
139180
if(usage_scenario_variables != '') query_string += `&usage_scenario_variables=${usage_scenario_variables}`
140-
if(show_archived) query_string += `&show_archived=${show_archived}`
181+
if(show_archived != null && show_archived != '') query_string += `&show_archived=${show_archived}`
182+
if(show_other_users != null && show_other_users != '') query_string += `&show_other_users=${show_other_users}`
141183

142184
document.querySelector('#filters-active').classList.remove('hidden');
143185

@@ -183,7 +225,7 @@ async function getRepositories(sort_by = 'date') {
183225

184226
if(!$.fn.DataTable.isDataTable(table)) {
185227
const uri = this.getAttribute('data-uri');
186-
getRunsTable($(table), `/v2/runs?uri=${uri}&uri_mode=exact&limit=0`, false, false, true)
228+
getRunsTable($(table), `/v2/runs?uri=${uri}&uri_mode=exact&limit=0&${getFilterQueryStringFromURI(true)}`, false, false, true)
187229
}
188230
}});
189231
$('.ui.accordion.filter-dropdown').hide();

0 commit comments

Comments
 (0)