--- loncom/auth/lonlogin.pm 2022/06/30 21:04:13 1.201
+++ loncom/auth/lonlogin.pm 2022/08/24 20:58:50 1.202
@@ -1,7 +1,7 @@
# The LearningOnline Network
# Login Screen
#
-# $Id: lonlogin.pm,v 1.201 2022/06/30 21:04:13 raeburn Exp $
+# $Id: lonlogin.pm,v 1.202 2022/08/24 20:58:50 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -664,7 +664,8 @@ function enableInput() {
ENDSCRIPT
my ($lonhost_in_use,@hosts,%defaultdomconf,$saml_prefix,$saml_landing,
- $samlssotext,$samlnonsso,$samlssoimg,$samlssoalt,$samlssourl,$samltooltip);
+ $samlssotext,$samlnonsso,$samlssoimg,$samlssoalt,$samlssourl,$samltooltip,
+ $samlnoframe,$samlwindow);
%defaultdomconf = &Apache::loncommon::get_domainconf($defdom);
@hosts = &Apache::lonnet::current_machine_ids();
$lonhost_in_use = $lonhost;
@@ -685,6 +686,7 @@ ENDSCRIPT
$samlssoalt = $defaultdomconf{$saml_prefix.'alt_'.$lonhost_in_use};
$samlssourl = $defaultdomconf{$saml_prefix.'url_'.$lonhost_in_use};
$samltooltip = $defaultdomconf{$saml_prefix.'title_'.$lonhost_in_use};
+ $samlwindow = $defaultdomconf{$saml_prefix.'window_'.$lonhost_in_use};
}
if ($saml_landing) {
if ($samlssotext eq '') {
@@ -872,6 +874,7 @@ HEADER
my $stdauthformstyle = 'inline-block';
my $ssoauthstyle = 'none';
+ my $sso_onclick;
my $logintype;
$r->print('
');
if ($saml_landing) {
@@ -882,6 +885,8 @@ HEADER
if ($samlssourl ne '') {
$ssologin = $samlssourl;
}
+ my $ssologin_for_js = &js_escape($ssologin);
+ my $querystr_for_js;
if (($logtoken eq 'con_lost') || ($logtoken eq 'no_such_host')) {
my $querystring;
if ($env{'form.firsturl'} ne '') {
@@ -902,16 +907,44 @@ HEADER
}
if ($querystring ne '') {
$ssologin .= (($ssologin=~/\?/)?'&':'?') . $querystring;
+ $querystr_for_js = &js_escape($querystring);
}
} elsif ($logtoken ne '') {
$ssologin .= (($ssologin=~/\?/)?'&':'?') . 'logtoken='.$logtoken;
+ $querystr_for_js = &js_escape('logtoken='.$logtoken);
}
my $ssohref;
+ if ($samlwindow) {
+ $sso_onclick = <<"ENDJS";
+if (document.getElementById('LC_sso_login_link')) {
+ var ssoelem = document.getElementById('LC_sso_login_link')
+ ssoelem.addEventListener('click',samlWinFunction,false);
+ var windows = {};
+ function samlWinFunction(evt) {
+ evt.preventDefault();
+ var url = '$ssologin_for_js';
+ var name = 'lcssowin';
+ var querystr = '$querystr_for_js';
+ if (querystr) {
+ url += '?'+querystr+'&lcssowin=1';
+ } else {
+ url += '?lcssowin=1';
+ }
+ if ((typeof windows[name] !== 'undefined') && (!windows[name].closed)) {
+ windows[name].close();
+ }
+ windows[name]=window.open(url,name,'width=350,height=600');
+ windows[name].focus();
+ return false;
+ }
+}
+ENDJS
+ }
if ($samlssoimg ne '') {
- $ssohref = '
'.
+ $ssohref = ''.
'';
} else {
- $ssohref = '
'.$samlssotext.'';
+ $ssohref = '
'.$samlssotext.'';
}
if (($env{'form.saml'} eq 'no') ||
(($env{'form.username'} ne '') && ($env{'form.domain'} ne ''))) {
@@ -966,11 +999,22 @@ ENDTARG
//
ENDJS
}
+ } elsif ($samlwindow) {
+ $in_frame_js = <
+//
+
+ENDJS
}
$r->print(<