Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

Icf cpheapm61 customizable mgmt dashboard #1112

Open
wants to merge 16 commits into
base: main
Choose a base branch
from

Conversation

ZindahFarhaICF
Copy link
Collaborator

  1. Create CRUDL to customize things at the assessment level. CRUDL TaskType. CRUDL TaskStatus. CRUDL TaskTrigger.
  2. Add the ability to copy all task setup at the assessment level
  3. Add the ability to progress to the next task status
  4. Re-enable current APIs and data exports, add to hawc_client, write tests

@ZindahFarhaICF ZindahFarhaICF marked this pull request as ready for review September 27, 2024 14:03
{% if assessment.enable_risk_of_bias %}
<div class="dropdown-divider"></div>
<span class="dropdown-header">Study tasks</span>
<a class="dropdown-item" href="{% url 'mgmt:task-list' assessment.pk %}?owner={{user.id}}&status=990">View study status</a>
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The study page links to a user's existing task assignments page on the mgmt dashboard, where once a status is marked terminal a user's next task will start. I also implemented a similar page that only displays a user's earliest non-terminal task/status per study, and can add that back in if that was the goal.

@receiver(post_save, sender=models.TaskType)
def default_configuration(sender, instance, created, **kwargs):
"""
Update study management tasks when a new task type is added
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This signal is not linked to task progress - just triggers new task creation for now when a task type is created.

@shapiromatron shapiromatron self-assigned this Sep 27, 2024
# Conflicts:
#	hawc/apps/mgmt/forms.py
#	tests/client/test_client.py
#	tests/hawc/apps/mgmt/test_views.py
@shapiromatron shapiromatron changed the base branch from ICF-cpheapm60-migrate-schema to main January 21, 2025 21:41
const url = `/mgmt/assessment/${$('#id_assessment').val()}/task-setup`,
name = $('#id_assessment option:selected').text(),
text = `<p>View approach for <a target="_blank" href="${url}">${name}<a/>.</p>`;
$('#approach').html(text);

Check warning

Code scanning / CodeQL

DOM text reinterpreted as HTML Medium

DOM text
is reinterpreted as HTML without escaping meta-characters.
DOM text
is reinterpreted as HTML without escaping meta-characters.

Copilot Autofix AI 4 days ago

To fix the problem, we need to ensure that any user input used to construct HTML is properly sanitized or escaped to prevent XSS attacks. In this case, we can use a library like DOMPurify to sanitize the HTML string before inserting it into the DOM. This will ensure that any potentially malicious content is neutralized.

  1. Include the DOMPurify library in the project.
  2. Use DOMPurify to sanitize the HTML string before inserting it into the DOM.
Suggested changeset 1
hawc/apps/mgmt/templates/mgmt/task_setup_copy.html

Autofix patch

Autofix patch
Run the following command in your local git repository to apply this patch
cat << 'EOF' | git apply
diff --git a/hawc/apps/mgmt/templates/mgmt/task_setup_copy.html b/hawc/apps/mgmt/templates/mgmt/task_setup_copy.html
--- a/hawc/apps/mgmt/templates/mgmt/task_setup_copy.html
+++ b/hawc/apps/mgmt/templates/mgmt/task_setup_copy.html
@@ -16,18 +16,2 @@
 {% block extrajs %}
-  <script type="text/javascript">
-    $(document).ready(function(){
-    // move extra-content to appropriate location then make visible
-      $('#extra_content').appendTo($('#extra_content_insertion')).removeClass('hidden');
-
-      const updateLink = function(){
-        const url = `/mgmt/assessment/${$('#id_assessment').val()}/task-setup`,
-              name = $('#id_assessment option:selected').text(),
-              text = `<p>View approach for <a target="_blank" href="${url}">${name}<a/>.</p>`;
-        $('#approach').html(text);
-      };
-
-    // load approach on assessment change
-      $('#id_assessment').on('change', updateLink).trigger('change');
-    });
-  </script>
-{% endblock extrajs %}
+  <script src="https://cdnjs.cloudflare.com/ajax/libs/dompurify/2.3.4/purify.min.js" integrity="sha384-pXw8gk5Y5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J
EOF
@@ -16,18 +16,2 @@
{% block extrajs %}
<script type="text/javascript">
$(document).ready(function(){
// move extra-content to appropriate location then make visible
$('#extra_content').appendTo($('#extra_content_insertion')).removeClass('hidden');

const updateLink = function(){
const url = `/mgmt/assessment/${$('#id_assessment').val()}/task-setup`,
name = $('#id_assessment option:selected').text(),
text = `<p>View approach for <a target="_blank" href="${url}">${name}<a/>.</p>`;
$('#approach').html(text);
};

// load approach on assessment change
$('#id_assessment').on('change', updateLink).trigger('change');
});
</script>
{% endblock extrajs %}
<script src="https://cdnjs.cloudflare.com/ajax/libs/dompurify/2.3.4/purify.min.js" integrity="sha384-pXw8gk5Y5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J5J
Copilot is powered by AI and may make mistakes. Always verify output.
Positive Feedback
Negative Feedback

Provide additional feedback

Please help us improve GitHub Copilot by sharing more details about this comment.

Please select one or more of the options
@shapiromatron shapiromatron changed the title Icf cpheapm61 add dashboard features Icf cpheapm61 customizable mgmt dashboard Jan 21, 2025
# for free to join this conversation on GitHub. Already have an account? # to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants