Skip to content

Commit 4652cff

Browse files
Merge pull request #1767 from atlassian/dca-2446-websudo-for-confluence-locust
add websudo for confluence locust
2 parents f55f20a + 945597e commit 4652cff

File tree

2 files changed

+19
-4
lines changed

2 files changed

+19
-4
lines changed

app/extension/confluence/extension_locust.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,10 @@
55

66

77
@confluence_measure("locust_app_specific_action")
8-
# @run_as_specific_user(username='admin', password='admin') # run as specific user
8+
# WebSudo is a feature that enhances security by requiring administrators to re-authenticate before
9+
# accessing administrative functions within Atlassian applications.
10+
# do_websudo=True requires user administrative rights, otherwise requests fail.
11+
#@run_as_specific_user(username='admin', password='admin', do_websudo=False) # run as specific user
912
def app_specific_action(locust):
1013
r = locust.get('/app/get_endpoint', catch_response=True) # call app-specific GET endpoint
1114
content = r.content.decode('utf-8') # decode response content

app/locustio/common_utils.py

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -358,7 +358,7 @@ def raise_if_login_failed(locust):
358358
raise exception.StopUser('Action login_and_view_dashboard failed')
359359

360360

361-
def do_confluence_login(locust, usr, pwd):
361+
def do_confluence_login(locust, usr, pwd, do_websudo=False):
362362
locust.client.cookies.clear()
363363
r = locust.get('/dologin.action', catch_response=True)
364364
content = r.content.decode('utf-8')
@@ -411,6 +411,18 @@ def do_confluence_login(locust, usr, pwd):
411411
locust.session_data_storage['password'] = pwd
412412
locust.session_data_storage['token'] = token
413413

414+
if do_websudo:
415+
auth_body = {
416+
'authenticate': 'Confirm',
417+
'destination': '/admin/systeminfo.action',
418+
'password': pwd,
419+
}
420+
system_info_html = locust.post(url='/doauthenticate.action', data=auth_body,
421+
headers={'X-Atlassian-Token': 'no-check'}, catch_response=True)
422+
print(system_info_html.content.decode('utf-8'))
423+
424+
425+
414426

415427
def do_login_jira(locust, usr, pwd):
416428
locust.client.cookies.clear()
@@ -457,7 +469,7 @@ def do_login_jira(locust, usr, pwd):
457469
locust.session_data_storage["token"] = token
458470

459471

460-
def run_as_specific_user(username=None, password=None):
472+
def run_as_specific_user(username=None, password=None, do_websudo=False):
461473
if not (username and password):
462474
raise SystemExit(f'The credentials are not valid: {{username: {username}, password: {password}}}.')
463475

@@ -493,7 +505,7 @@ def wrapper(*args, **kwargs):
493505
do_login_jira(locust, session_user_name, session_user_password)
494506

495507
if app == CONFLUENCE:
496-
do_confluence_login(locust, username, password)
508+
do_confluence_login(locust, username, password, do_websudo)
497509
func(*args, **kwargs)
498510
do_confluence_login(locust, session_user_name, session_user_password)
499511

0 commit comments

Comments
 (0)