diff --git a/admin/institutions/views.py b/admin/institutions/views.py index 46e6a0a7745..7ab8994e41f 100644 --- a/admin/institutions/views.py +++ b/admin/institutions/views.py @@ -56,6 +56,7 @@ def get_context_data(self, *args, **kwargs): institution_dict = model_to_dict(institution) kwargs.setdefault('page_number', self.request.GET.get('page', '1')) kwargs['institution'] = institution_dict + kwargs['cas_login_url'] = institution.cas_login_url kwargs['logo_path'] = institution.logo_path kwargs['banner_path'] = institution.banner_path fields = institution_dict diff --git a/admin/templates/institutions/detail.html b/admin/templates/institutions/detail.html index 2ce1ad20a03..b2170aafaa5 100644 --- a/admin/templates/institutions/detail.html +++ b/admin/templates/institutions/detail.html @@ -1,7 +1,35 @@ {% extends "base.html" %} {% load static %} {% block top_includes %} - + + {% endblock %} {% load comment_extras %} {% block title %} @@ -33,6 +61,20 @@ {% if perms.osf.change_institution %} Manage Admins {% endif %} + + {% if cas_login_url %} + + + + {% endif %} @@ -168,5 +210,31 @@

Are you sure you want to run monthly report for this institution?

}); }); }); + + window.openCopyPopup = function(text) { + const modal = document.getElementById("copy-modal"); + const input = document.getElementById("copy-input"); + + input.value = text; + + modal.classList.add("show_modal"); + + navigator.clipboard.writeText(text).catch(() => {}); + + input.focus(); + input.select(); + }; + + window.closeCopyPopup = function() { + document.getElementById("copy-modal").classList.remove("show_modal"); + }; + + // Close on outside click + window.onclick = function(event) { + const modal = document.getElementById("copy-modal"); + if (event.target === modal) { + modal.classList.remove("show_modal"); + } + }; {% endblock %} diff --git a/osf/models/institution.py b/osf/models/institution.py index c1679892f69..c5752cb7d43 100644 --- a/osf/models/institution.py +++ b/osf/models/institution.py @@ -24,6 +24,7 @@ from .validators import validate_email from osf.utils.fields import NonNaiveDateTimeField, LowercaseEmailField from website import settings as website_settings +from urllib.parse import quote logger = logging.getLogger(__name__) @@ -208,6 +209,18 @@ def banner_path(self): except InstitutionAssetFile.DoesNotExist: return '/static/img/institutions/banners/placeholder-banner.png' + @property + def cas_login_url(self): + if self.delegation_protocol == IntegrationType.NONE.value: + return None + if 'localhost' in website_settings.DOMAIN: + next_param = quote(website_settings.PROTOCOL + website_settings.LOCAL_ANGULAR_URL, safe='') + else: + next_param = quote(website_settings.DOMAIN, safe='') + service_url = quote(f'{website_settings.DOMAIN}login?next={next_param}', safe='') + + return f'{website_settings.CAS_SERVER_URL}/login?campaign=institution&institutionId={self._id}&service={service_url}' + def update_search(self): from website.search.search import update_institution from website.search.exceptions import SearchUnavailableError