Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -7,5 +7,7 @@
"azureblobstorage_folder_created" : "A user created a folder in an Azure Blob Storage in a project",
"azureblobstorage_node_authorized" : "A user authorized the Azure Blob Storage addon for a project",
"azureblobstorage_node_deauthorized" : "A user deauthorized the Azure Blob Storage addon for a project",
"azureblobstorage_node_deauthorized_no_user" : "Azure Blob Storage addon for a project deauthorized"
"azureblobstorage_node_deauthorized_no_user" : "Azure Blob Storage addon for a project deauthorized",
"azureblobstorage_file_downloaded": "A user downloaded a file from an Azure Blob Storage container in a project",
"azureblobstorage_folder_downloaded_zip": "A user downloaded a folder as a zip from an Azure Blob Storage container in a project"
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,5 +7,7 @@
"azureblobstorage_folder_created" : "${user} created folder ${path} in Azure Blob Storage container ${bucket} in ${node}",
"azureblobstorage_node_authorized" : "${user} authorized the Azure Blob Storage addon for ${node}",
"azureblobstorage_node_deauthorized" : "${user} deauthorized the Azure Blob Storage addon for ${node}",
"azureblobstorage_node_deauthorized_no_user" : "Azure Blob Storage addon for ${node} deauthorized"
"azureblobstorage_node_deauthorized_no_user" : "Azure Blob Storage addon for ${node} deauthorized",
"azureblobstorage_file_downloaded": "${user} downloaded file ${path} from Azure Blob Storage container ${bucket} in ${node}",
"azureblobstorage_folder_downloaded_zip": "${user} downloaded folder ${path} as a zip from Azure Blob Storage container ${bucket} in ${node}"
}
23 changes: 17 additions & 6 deletions addons/base/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -340,6 +340,12 @@ def get_auth(auth, **kwargs):
# as default callback_log is True
callback_log = False if isinstance(callback_log, str) and callback_log.lower() == 'false' else True

# Suppress download logging for MFR (Mfr File Renderer) initiated downloads.
# MFR downloads are system-initiated renders/views, not user-initiated actions,
# so they should not appear in the Recent Activity log.
if action == 'download' and download_is_from_mfr(request, payload=data):
callback_log = False

is_node_process = True
if node_id == ExportData.EXPORT_DATA_FAKE_NODE_ID:
is_node_process = False
Expand Down Expand Up @@ -480,6 +486,8 @@ def get_auth(auth, **kwargs):
'update': NodeLog.FILE_UPDATED,
'delete': NodeLog.FILE_REMOVED,
'create_folder': NodeLog.FOLDER_CREATED,
'download_file': NodeLog.FILE_DOWNLOADED,
'download_zip': NodeLog.FOLDER_DOWNLOADED_ZIP,
}

DOWNLOAD_ACTIONS = set([
Expand All @@ -496,12 +504,6 @@ def create_waterbutler_log(payload, **kwargs):
with transaction.atomic():
try:
auth = payload['auth']
# Don't log download actions
if payload['action'] in DOWNLOAD_ACTIONS:
guid = Guid.load(payload['metadata'].get('nid'))
if guid:
node = guid.referent
return {'status': 'success'}

user = OSFUser.load(auth['id'])
if user is None:
Expand Down Expand Up @@ -599,6 +601,15 @@ def create_waterbutler_log(payload, **kwargs):
# Bail out to avoid file_signals
return {'status': 'success'}

elif action in (NodeLog.FILE_DOWNLOADED, NodeLog.FOLDER_DOWNLOADED_ZIP):
# Reuse the same per-addon log path as file_added/updated/etc so the action
# gets addon-prefixed (box_file_downloaded, osf_storage_file_downloaded, ...)
# and params['urls'] gets built the same way as other file actions.
node.create_waterbutler_log(auth, action, payload)
# Bail out to avoid file_signals - downloads only need a Recent Activity
# log, not the notification/subscription pipeline used by file mutations.
return {'status': 'success'}

else:
node.create_waterbutler_log(auth, action, payload)

Expand Down
4 changes: 3 additions & 1 deletion addons/bitbucket/static/bitbucketAnonymousLogActionList.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,7 @@
"bitbucket_node_authorized" : "A user authorized the Bitbucket addon for a project",
"bitbucket_node_deauthorized" : "A user deauthorized the Bitbucket addon for a project",
"bitbucket_node_deauthorized_no_user" : "Bitbucket addon for a project deauthorized",
"bitbucket_repo_linked" : "A user linked a Bitbucket repo in a project"
"bitbucket_repo_linked" : "A user linked a Bitbucket repo in a project",
"bitbucket_file_downloaded": "A user downloaded a file from a Bitbucket repo in a project",
"bitbucket_folder_downloaded_zip": "A user downloaded a folder as a zip from a Bitbucket repo in a project"
}
4 changes: 3 additions & 1 deletion addons/bitbucket/static/bitbucketLogActionList.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,7 @@
"bitbucket_node_authorized" : "${user} authorized the Bitbucket addon for ${node}",
"bitbucket_node_deauthorized" : "${user} deauthorized the Bitbucket addon for ${node}",
"bitbucket_node_deauthorized_no_user" : "Bitbucket addon for ${node} deauthorized",
"bitbucket_repo_linked" : "${user} linked Bitbucket repo ${bitbucket_repo} to ${node}"
"bitbucket_repo_linked" : "${user} linked Bitbucket repo ${bitbucket_repo} to ${node}",
"bitbucket_file_downloaded": "${user} downloaded file ${path} from Bitbucket repo ${bitbucket_repo} in ${node}",
"bitbucket_folder_downloaded_zip": "${user} downloaded folder ${path} as a zip from Bitbucket repo ${bitbucket_repo} in ${node}"
}
4 changes: 3 additions & 1 deletion addons/box/static/boxAnonymousLogActionList.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,7 @@
"box_folder_selected" : "A user linked a Box folder to a project",
"box_node_authorized" : "A user authorized the Box addon for a project",
"box_node_deauthorized" : "A user deauthorized the Box addon for a project",
"box_node_deauthorized_no_user": "Box addon for a project deauthorized"
"box_node_deauthorized_no_user": "Box addon for a project deauthorized",
"box_file_downloaded": "A user downloaded a file from Box in a project",
"box_folder_downloaded_zip": "A user downloaded a folder as a zip from Box in a project"
}
4 changes: 3 additions & 1 deletion addons/box/static/boxLogActionList.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,7 @@
"box_folder_selected": "${user} linked Box folder ${box_folder} to ${node}",
"box_node_authorized": "${user} authorized the Box addon in ${node}",
"box_node_deauthorized": "${user} deauthorized the Box addon for ${node}",
"box_node_deauthorized_no_user": "Box addon for ${node} deauthorized"
"box_node_deauthorized_no_user": "Box addon for ${node} deauthorized",
"box_file_downloaded": "${user} downloaded file ${path} from Box in ${node}",
"box_folder_downloaded_zip": "${user} downloaded folder ${path} as a zip from Box in ${node}"
}
4 changes: 3 additions & 1 deletion addons/dataverse/static/dataverseAnonymousLogActionList.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,5 +7,7 @@
"dataverse_study_released" : "A user published a new version of a Dataverse dataset to a project",
"dataverse_node_authorized" : "A user authorized the Dataverse addon for a project",
"dataverse_node_deauthorized" : "A user deauthorized the Dataverse addon for a project",
"dataverse_node_deauthorized_no_user" : "Dataverse addon for a project deauthorized"
"dataverse_node_deauthorized_no_user" : "Dataverse addon for a project deauthorized",
"dataverse_file_downloaded": "A user downloaded a file from a Dataverse dataset in a project",
"dataverse_folder_downloaded_zip": "A user downloaded a folder as a zip from a Dataverse dataset in a project"
}
4 changes: 3 additions & 1 deletion addons/dataverse/static/dataverseLogActionList.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,5 +7,7 @@
"dataverse_study_released" : "${user} published a new version of Dataverse dataset ${study} to ${node}",
"dataverse_node_authorized" : "${user} authorized the Dataverse addon for ${node}",
"dataverse_node_deauthorized" : "${user} deauthorized the Dataverse addon for ${node}",
"dataverse_node_deauthorized_no_user" : "Dataverse addon for ${node} deauthorized"
"dataverse_node_deauthorized_no_user" : "Dataverse addon for ${node} deauthorized",
"dataverse_file_downloaded": "${user} downloaded file ${filename} from Dataverse dataset ${dataset} in ${node}",
"dataverse_folder_downloaded_zip": "${user} downloaded folder ${filename} as a zip from Dataverse dataset ${dataset} in ${node}"
}
4 changes: 3 additions & 1 deletion addons/dropbox/static/dropboxAnonymousLogActionList.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,7 @@
"dropbox_folder_selected" : "A user linked a Dropbox folder in a project",
"dropbox_node_authorized" : "A user authorized the Dropbox addon for a project",
"dropbox_node_deauthorized" : "A user deauthorized the Dropbox addon for a project",
"dropbox_node_deauthorized_no_user" : "Dropbox addon for a project deauthorized"
"dropbox_node_deauthorized_no_user" : "Dropbox addon for a project deauthorized",
"dropbox_file_downloaded": "A user downloaded a file from Dropbox in a project",
"dropbox_folder_downloaded_zip": "A user downloaded a folder as a zip from Dropbox in a project"
}
4 changes: 3 additions & 1 deletion addons/dropbox/static/dropboxLogActionList.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,7 @@
"dropbox_folder_selected" : "${user} linked Dropbox folder ${dropbox_folder} to ${node}",
"dropbox_node_authorized" : "${user} authorized the Dropbox addon for ${node}",
"dropbox_node_deauthorized" : "${user} deauthorized the Dropbox addon for ${node}",
"dropbox_node_deauthorized_no_user" : "Dropbox addon for ${node} deauthorized"
"dropbox_node_deauthorized_no_user" : "Dropbox addon for ${node} deauthorized",
"dropbox_file_downloaded": "${user} downloaded file ${path} from Dropbox in ${node}",
"dropbox_folder_downloaded_zip": "${user} downloaded folder ${path} as a zip from Dropbox in ${node}"
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,7 @@
"dropboxbusiness_folder_selected" : "A user linked a Dropbox Business folder in a project",
"dropboxbusiness_node_authorized" : "A user authorized the Dropbox Business addon for a project",
"dropboxbusiness_node_deauthorized" : "A user deauthorized the Dropbox Business addon for a project",
"dropboxbusiness_node_deauthorized_no_user" : "Dropbox Business addon for a project deauthorized"
"dropboxbusiness_node_deauthorized_no_user" : "Dropbox Business addon for a project deauthorized",
"dropboxbusiness_file_downloaded": "A user downloaded a file from Dropbox Business in a project",
"dropboxbusiness_folder_downloaded_zip": "A user downloaded a folder as a zip from Dropbox Business in a project"
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,7 @@
"dropboxbusiness_folder_selected" : "${user} linked Dropbox Business folder ${dropboxbusiness_folder} to ${node}",
"dropboxbusiness_node_authorized" : "${user} authorized the Dropbox Business addon for ${node}",
"dropboxbusiness_node_deauthorized" : "${user} deauthorized the Dropbox Business addon for ${node}",
"dropboxbusiness_node_deauthorized_no_user" : "Dropbox Business addon for ${node} deauthorized"
"dropboxbusiness_node_deauthorized_no_user" : "Dropbox Business addon for ${node} deauthorized",
"dropboxbusiness_file_downloaded": "${user} downloaded file ${path} from Dropbox Business in ${node}",
"dropboxbusiness_folder_downloaded_zip": "${user} downloaded folder ${path} as a zip from Dropbox Business in ${node}"
}
4 changes: 3 additions & 1 deletion addons/figshare/static/figshareAnonymousLogActionList.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,7 @@
"figshare_folder_created" : "A user created a folder in figshare in a project",
"figshare_node_authorized" : "A user authorized the figshare addon for a project",
"figshare_node_deauthorized" : "A user deauthorized the figshare addon for a project",
"figshare_node_deauthorized_no_user" : "figshare addon for a project deauthorized"
"figshare_node_deauthorized_no_user" : "figshare addon for a project deauthorized",
"figshare_file_downloaded": "A user downloaded a file from figshare in a project",
"figshare_folder_downloaded_zip": "A user downloaded a folder as a zip from figshare in a project"
}
4 changes: 3 additions & 1 deletion addons/figshare/static/figshareLogActionList.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,7 @@
"figshare_folder_created" : "${user} created folder ${path} in figshare in ${node}",
"figshare_node_authorized" : "${user} authorized the figshare addon for ${node}",
"figshare_node_deauthorized" : "${user} deauthorized the figshare addon for ${node}",
"figshare_node_deauthorized_no_user" : "figshare addon for ${node} deauthorized"
"figshare_node_deauthorized_no_user" : "figshare addon for ${node} deauthorized",
"figshare_file_downloaded": "${user} downloaded file ${path} from figshare in ${node}",
"figshare_folder_downloaded_zip": "${user} downloaded folder ${path} as a zip from figshare in ${node}"
}
4 changes: 3 additions & 1 deletion addons/github/static/githubAnonymousLogActionList.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,7 @@
"github_node_authorized" : "A user authorized the GitHub addon for a project",
"github_node_deauthorized" : "A user deauthorized the GitHub addon for a project",
"github_node_deauthorized_no_user" : "GitHub addon for a project deauthorized",
"github_repo_linked" : "A user linked a GitHub repo in a project"
"github_repo_linked" : "A user linked a GitHub repo in a project",
"github_file_downloaded": "A user downloaded a file from a GitHub repo in a project",
"github_folder_downloaded_zip": "A user downloaded a folder as a zip from a GitHub repo in a project"
}
4 changes: 3 additions & 1 deletion addons/github/static/githubLogActionList.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,7 @@
"github_node_authorized" : "${user} authorized the GitHub addon for ${node}",
"github_node_deauthorized" : "${user} deauthorized the GitHub addon for ${node}",
"github_node_deauthorized_no_user" : "GitHub addon for ${node} deauthorized",
"github_repo_linked" : "${user} linked GitHub repo ${repo} to ${node}"
"github_repo_linked" : "${user} linked GitHub repo ${repo} to ${node}",
"github_file_downloaded": "${user} downloaded file ${path} from GitHub repo ${repo} in ${node}",
"github_folder_downloaded_zip": "${user} downloaded folder ${path} as a zip from GitHub repo ${repo} in ${node}"
}
2 changes: 1 addition & 1 deletion addons/gitlab/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -263,7 +263,7 @@ def create_waterbutler_log(self, auth, action, metadata):
sha = None
urls = {}
else:
sha = metadata['extra']['fileSha']
sha = metadata['extra']['commitSha']
urls = {
'view': '{0}?branch={1}'.format(url, sha),
'download': '{0}?action=download&branch={1}'.format(url, sha)
Expand Down
4 changes: 3 additions & 1 deletion addons/gitlab/static/gitlabLogActionList.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,7 @@
"gitlab_node_authorized" : "${user} authorized the GitLab addon for ${node}",
"gitlab_node_deauthorized" : "${user} deauthorized the GitLab addon for ${node}",
"gitlab_node_deauthorized_no_user" : "GitLab addon for ${node} deauthorized",
"gitlab_repo_linked" : "${user} linked GitLab repo ${gitlab_repo} to ${node}"
"gitlab_repo_linked" : "${user} linked GitLab repo ${gitlab_repo} to ${node}",
"gitlab_file_downloaded": "${user} downloaded file ${path} from GitLab repo ${gitlab_repo} in ${node}",
"gitlab_folder_downloaded_zip": "${user} downloaded folder ${path} as a zip from GitLab repo ${gitlab_repo} in ${node}"
}
38 changes: 38 additions & 0 deletions addons/gitlab/tests/test_models.py
Original file line number Diff line number Diff line change
Expand Up @@ -225,6 +225,44 @@ def test_does_not_get_copied_to_registrations(self, mock_archive):
)
assert_false(registration.has_addon('gitlab'))

def test_create_waterbutler_log_with_extra_uses_commit_sha(self):
# Regression test: 'extra' used to be indexed with the wrong key
# ('fileSha'), which always raised KeyError since waterbutler never
# sends that key for GitLab - both GitLabPath.extra and
# GitLabFileMetadata.extra key the commit sha as 'commitSha'.
metadata = {
'path': 'proj/file.py',
'extra': {
'commitSha': 'deadbeef',
'branchName': 'main',
},
}
self.node_settings.create_waterbutler_log(
self.consolidated_auth, 'file_downloaded', metadata
)
log = self.project.logs.latest()
assert_equal(log.action, 'gitlab_file_downloaded')
assert_equal(log.params['path'], 'proj/file.py')
assert_equal(log.params['gitlab']['sha'], 'deadbeef')
url = self.project.web_url_for(
'addon_view_or_download_file', path='proj/file.py', provider='gitlab'
)
assert_equal(log.params['urls']['view'], '{0}?branch=deadbeef'.format(url))
assert_equal(
log.params['urls']['download'],
'{0}?action=download&branch=deadbeef'.format(url)
)

def test_create_waterbutler_log_without_extra(self):
metadata = {'path': '', 'extra': {}}
self.node_settings.create_waterbutler_log(
self.consolidated_auth, 'folder_downloaded_zip', metadata
)
log = self.project.logs.latest()
assert_equal(log.action, 'gitlab_folder_downloaded_zip')
assert_equal(log.params['urls'], {})
assert_equal(log.params['gitlab']['sha'], None)


class TestGitLabNodeSettings(unittest.TestCase):

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,7 @@
"googledrive_folder_selected" : "A user linked a Google Drive folder to a project",
"googledrive_node_authorized" : "A user authorized the Google Drive addon for a project",
"googledrive_node_deauthorized" : "A user deauthorized the Google Drive addon for a project",
"googledrive_node_deauthorized_no_user" : "Google Drive addon for a project deauthorized"
"googledrive_node_deauthorized_no_user" : "Google Drive addon for a project deauthorized",
"googledrive_file_downloaded": "A user downloaded a file from Google Drive in a project",
"googledrive_folder_downloaded_zip": "A user downloaded a folder as a zip from Google Drive in a project"
}
4 changes: 3 additions & 1 deletion addons/googledrive/static/googledriveLogActionList.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,7 @@
"googledrive_folder_selected" : "${user} linked Google Drive folder ${googledrive_folder} to ${node}",
"googledrive_node_authorized" : "${user} authorized the Google Drive addon for ${node}",
"googledrive_node_deauthorized" : "${user} deauthorized the Google Drive addon for ${node}",
"googledrive_node_deauthorized_no_user" : "Google Drive addon for ${node} deauthorized"
"googledrive_node_deauthorized_no_user" : "Google Drive addon for ${node} deauthorized",
"googledrive_file_downloaded": "${user} downloaded file ${googledrive_path} from Google Drive in ${node}",
"googledrive_folder_downloaded_zip": "${user} downloaded folder ${googledrive_path} as a zip from Google Drive in ${node}"
}
4 changes: 3 additions & 1 deletion addons/iqbrims/static/iqbrimsAnonymousLogActionList.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,7 @@
"iqbrims_folder_selected" : "A user linked a IQB-RIMS folder to a project",
"iqbrims_node_authorized" : "A user authorized the IQB-RIMS addon for a project",
"iqbrims_node_deauthorized" : "A user deauthorized the IQB-RIMS addon for a project",
"iqbrims_node_deauthorized_no_user" : "IQB-RIMS addon for a project deauthorized"
"iqbrims_node_deauthorized_no_user" : "IQB-RIMS addon for a project deauthorized",
"iqbrims_file_downloaded": "A user downloaded a file from IQB-RIMS in a project",
"iqbrims_folder_downloaded_zip": "A user downloaded a folder as a zip from IQB-RIMS in a project"
}
4 changes: 3 additions & 1 deletion addons/iqbrims/static/iqbrimsLogActionList.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,5 +10,7 @@
"iqbrims_imagescan_workflow_start": "${user} started IQB-RIMS workflow for ${node}",
"iqbrims_imagescan_workflow_finish": "Finished workflow of ${user} for ${node}",
"iqbrims_paper_workflow_start": "${user} started IQB-RIMS workflow for ${node}",
"iqbrims_paper_workflow_finish": "Finished workflow of ${user} for ${node}"
"iqbrims_paper_workflow_finish": "Finished workflow of ${user} for ${node}",
"iqbrims_file_downloaded": "${user} downloaded file ${iqbrims_path} from IQB-RIMS in ${node}",
"iqbrims_folder_downloaded_zip": "${user} downloaded folder ${iqbrims_path} as a zip from IQB-RIMS in ${node}"
}
2 changes: 2 additions & 0 deletions addons/metadata/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -742,6 +742,8 @@ def download(self):
url = furl.furl(website_settings.WATERBUTLER_INTERNAL_URL)
file_url = furl.furl(self.links['download'])
url.path = str(file_url.path)
# Suppress logging for metadata asset sync downloads (internal system operation)
url.args['callback_log'] = 'false'
response = requests.get(
url.url,
headers={'content-type': 'application/json'},
Expand Down
2 changes: 2 additions & 0 deletions addons/metadata/packages.py
Original file line number Diff line number Diff line change
Expand Up @@ -185,6 +185,8 @@ def download_to(self, f):
url = furl.furl(website_settings.WATERBUTLER_INTERNAL_URL)
file_url = furl.furl(self.links['download'])
url.path = str(file_url.path)
# Suppress logging for RO-Crate export downloads (internal system operation)
url.args['callback_log'] = 'false'
response = requests.get(
url.url,
headers={'content-type': 'application/json'},
Expand Down
Loading
Loading