version 1.577, 2023/05/22 21:10:56
|
version 1.582, 2024/12/27 01:04:00
|
Line 5265 sub encrypted_get_domain_handler {
|
Line 5265 sub encrypted_get_domain_handler {
|
# 0 - Exit. |
# 0 - Exit. |
# Side effects: |
# Side effects: |
# The reply will contain an LTI itemID, if the signed LTI payload |
# The reply will contain an LTI itemID, if the signed LTI payload |
# could be verified using the consumer key and the shared secret |
# could be verified using the consumer key and the shared secret |
# available for that key (for the itemID) for either the course or domain, |
# available for that key (for the itemID) for either the course or domain, |
# depending on values for cnum and context. The reply is encrypted before |
# depending on values for cnum and context. The reply is encrypted before |
# being written to $client. |
# being written to $client. |
# |
# |
sub lti_handler { |
sub lti_handler { |
Line 5308 sub lti_handler {
|
Line 5308 sub lti_handler {
|
®ister_handler("lti", \<i_handler, 1, 1, 0); |
®ister_handler("lti", \<i_handler, 1, 1, 0); |
|
|
# |
# |
# LTI data for launch payload (received encrypted) are unencrypted and |
# Data for LTI payload (received encrypted) are unencrypted and |
# then signed with the appropriate key and secret, before re-encrypting |
# then signed with the appropriate key and secret, before re-encrypting |
# for sending as the signed payload to the client (caller lonnet::sign_lti()). |
# the signed payload which is sent to the client for unencryption by |
|
# the caller: lonnet::sign_lti()) before dispatch either to a web browser |
|
# (launch) or to a remote web service (roster, logout, or grade). |
# |
# |
# Parameters: |
# Parameters: |
# $cmd - Command request keyword (signlti). |
# $cmd - Command request keyword (signlti). |
# $tail - Tail of the command. This is a colon-separated list |
# $tail - Tail of the command. This is a colon-separated list |
# consisting of the domain, coursenum (if for an External |
# consisting of the domain, coursenum (if for an External |
# Tool defined in a course), crstool (true if defined in |
# Tool defined in a course), crsdef (true if defined in |
# a course), escaped launch URL, numeric ID of external tool |
# a course), type (linkprot or lti) |
|
# context (launch, roster, logout, or grade), |
|
# escaped launch URL, numeric ID of external tool, |
# version number for encryption key (if tool's LTI secret was |
# version number for encryption key (if tool's LTI secret was |
# encrypted before storing), post (true if signed data are |
# encrypted before storing), a frozen hash of LTI launch |
# to be returned from Net::OAuth, as a post_body), |
# parameters, and a frozen hash of LTI information, |
# a frozen hash of LTI launch parameters, and a frozen hash |
# (e.g., method => 'HMAC-SHA1', |
# of LTI config data (i.e., method => signature method). |
# respfmt => 'to_authorization_header'). |
# $client - File descriptor open on the client. |
# $client - File descriptor open on the client. |
# Returns: |
# Returns: |
# 1 - Continue processing. |
# 1 - Continue processing. |
Line 5330 sub lti_handler {
|
Line 5334 sub lti_handler {
|
# Side effects: |
# Side effects: |
# The reply will contain the LTI payload, as & separated key=value pairs, |
# The reply will contain the LTI payload, as & separated key=value pairs, |
# where value is itself a frozen hash, if the required key and secret |
# where value is itself a frozen hash, if the required key and secret |
# for the apecific tool ID are available. The payload data are retrived from |
# for the specific tool ID are available. The payload data are retrieved from |
# a call to Lond::sign_params(), and the reply is encrypted before being |
# a call to Lond::sign_lti_payload(), and the reply is encrypted before being |
# written to $client. |
# written to $client. |
# |
# |
sub sign_lti_handler { |
sub sign_lti_handler { |
Line 5339 sub sign_lti_handler {
|
Line 5343 sub sign_lti_handler {
|
|
|
my $userinput = "$cmd:$tail"; |
my $userinput = "$cmd:$tail"; |
|
|
my ($cdom,$cnum,$crstool,$escurl,$idx,$keynum,$post,$paramsref,$inforef) = split(/:/,$tail); |
my ($cdom,$cnum,$crsdef,$type,$context,$escurl, |
|
$ltinum,$keynum,$paramsref,$inforef) = split(/:/,$tail); |
my $url = &unescape($escurl); |
my $url = &unescape($escurl); |
my $params = &Apache::lonnet::thaw_unescape($paramsref); |
my $params = &Apache::lonnet::thaw_unescape($paramsref); |
my $info = &Apache::lonnet::thaw_unescape($inforef); |
my $info = &Apache::lonnet::thaw_unescape($inforef); |
my $res = |
my $res = |
&LONCAPA::Lond::sign_params($cdom,$cnum,$crstool,$url,$idx,$keynum, |
&LONCAPA::Lond::sign_lti_payload($cdom,$cnum,$crsdef,$type,$context,$url,$ltinum, |
$post,$perlvar{'lonVersion'},$params,$info); |
$keynum,$perlvar{'lonVersion'},$params,$info); |
my $result; |
my $result; |
if (ref($res) eq 'HASH') { |
if (ref($res) eq 'HASH') { |
foreach my $key (keys(%{$res})) { |
foreach my $key (keys(%{$res})) { |
Line 6145 sub enrollment_enabled_handler {
|
Line 6150 sub enrollment_enabled_handler {
|
my ($cmd, $tail, $client) = @_; |
my ($cmd, $tail, $client) = @_; |
my $userinput = $cmd.":".$tail; # For logging purposes. |
my $userinput = $cmd.":".$tail; # For logging purposes. |
|
|
|
|
my ($cdom) = split(/:/, $tail, 2); # Domain we're asking about. |
my ($cdom) = split(/:/, $tail, 2); # Domain we're asking about. |
|
my $outcome; |
my $outcome = &localenroll::run($cdom); |
eval { |
|
local($SIG{__DIE__})='DEFAULT'; |
|
$outcome = &localenroll::run($cdom); |
|
}; |
&Reply($client, \$outcome, $userinput); |
&Reply($client, \$outcome, $userinput); |
|
|
return 1; |
return 1; |
} |
} |
®ister_handler("autorun", \&enrollment_enabled_handler, 0, 1, 0); |
®ister_handler("autorun", \&enrollment_enabled_handler, 0, 1, 0); |
Line 6183 sub validate_instcode_handler {
|
Line 6189 sub validate_instcode_handler {
|
my ($dom,$instcode,$owner) = split(/:/, $tail); |
my ($dom,$instcode,$owner) = split(/:/, $tail); |
$instcode = &unescape($instcode); |
$instcode = &unescape($instcode); |
$owner = &unescape($owner); |
$owner = &unescape($owner); |
my ($outcome,$description,$credits) = |
my ($outcome,$description,$credits); |
&localenroll::validate_instcode($dom,$instcode,$owner); |
eval { |
|
local($SIG{__DIE__})='DEFAULT'; |
|
($outcome,$description,$credits) = |
|
&localenroll::validate_instcode($dom,$instcode,$owner); |
|
}; |
my $result = &escape($outcome).'&'.&escape($description).'&'. |
my $result = &escape($outcome).'&'.&escape($description).'&'. |
&escape($credits); |
&escape($credits); |
&Reply($client, \$result, $userinput); |
&Reply($client, \$result, $userinput); |
Line 6218 sub validate_instcrosslist_handler {
|
Line 6228 sub validate_instcrosslist_handler {
|
$instcode = &unescape($instcode); |
$instcode = &unescape($instcode); |
$inst_xlist = &unescape($inst_xlist); |
$inst_xlist = &unescape($inst_xlist); |
$coowner = &unescape($coowner); |
$coowner = &unescape($coowner); |
my $outcome = &localenroll::validate_crosslist_access($dom,$instcode, |
my $outcome; |
$inst_xlist,$coowner); |
eval { |
&Reply($client, \$outcome, $userinput); |
local($SIG{__DIE__})='DEFAULT'; |
|
$outcome = &localenroll::validate_crosslist_access($dom,$instcode, |
|
$inst_xlist,$coowner); |
|
}; |
|
|
|
&Reply($client, \$outcome, $userinput); |
return 1; |
return 1; |
} |
} |
®ister_handler("autovalidateinstcrosslist", \&validate_instcrosslist_handler, 0, 1, 0); |
®ister_handler("autovalidateinstcrosslist", \&validate_instcrosslist_handler, 0, 1, 0); |
Line 6244 sub get_sections_handler {
|
Line 6258 sub get_sections_handler {
|
my $userinput = "$cmd:$tail"; |
my $userinput = "$cmd:$tail"; |
|
|
my ($coursecode, $cdom) = split(/:/, $tail); |
my ($coursecode, $cdom) = split(/:/, $tail); |
my @secs = &localenroll::get_sections($coursecode,$cdom); |
my $seclist; |
my $seclist = &escape(join(':',@secs)); |
eval { |
|
local($SIG{__DIE__})='DEFAULT'; |
|
my @secs = &localenroll::get_sections($coursecode,$cdom); |
|
$seclist = &escape(join(':',@secs)); |
|
}; |
&Reply($client, \$seclist, $userinput); |
&Reply($client, \$seclist, $userinput); |
|
|
|
|
return 1; |
return 1; |
} |
} |
®ister_handler("autogetsections", \&get_sections_handler, 0, 1, 0); |
®ister_handler("autogetsections", \&get_sections_handler, 0, 1, 0); |
Line 6269 sub get_sections_handler {
|
Line 6284 sub get_sections_handler {
|
# Returns: |
# Returns: |
# 1 - Processing should continue. |
# 1 - Processing should continue. |
# |
# |
|
|
sub validate_course_owner_handler { |
sub validate_course_owner_handler { |
my ($cmd, $tail, $client) = @_; |
my ($cmd, $tail, $client) = @_; |
my $userinput = "$cmd:$tail"; |
my $userinput = "$cmd:$tail"; |
Line 6276 sub validate_course_owner_handler {
|
Line 6292 sub validate_course_owner_handler {
|
|
|
$owner = &unescape($owner); |
$owner = &unescape($owner); |
$coowners = &unescape($coowners); |
$coowners = &unescape($coowners); |
my $outcome = &localenroll::new_course($inst_course_id,$owner,$cdom,$coowners); |
my $outcome; |
|
eval { |
|
local($SIG{__DIE__})='DEFAULT'; |
|
$outcome = &localenroll::new_course($inst_course_id,$owner,$cdom,$coowners); |
|
}; |
&Reply($client, \$outcome, $userinput); |
&Reply($client, \$outcome, $userinput); |
|
|
|
|
|
|
return 1; |
return 1; |
} |
} |
®ister_handler("autonewcourse", \&validate_course_owner_handler, 0, 1, 0); |
®ister_handler("autonewcourse", \&validate_course_owner_handler, 0, 1, 0); |
Line 6306 sub validate_course_section_handler {
|
Line 6323 sub validate_course_section_handler {
|
my ($cmd, $tail, $client) = @_; |
my ($cmd, $tail, $client) = @_; |
my $userinput = "$cmd:$tail"; |
my $userinput = "$cmd:$tail"; |
my ($inst_course_id, $cdom) = split(/:/, $tail); |
my ($inst_course_id, $cdom) = split(/:/, $tail); |
|
my $outcome; |
my $outcome=&localenroll::validate_courseID($inst_course_id,$cdom); |
eval { |
|
local($SIG{__DIE__})='DEFAULT'; |
|
$outcome=&localenroll::validate_courseID($inst_course_id,$cdom); |
|
}; |
&Reply($client, \$outcome, $userinput); |
&Reply($client, \$outcome, $userinput); |
|
|
|
|
return 1; |
return 1; |
} |
} |
®ister_handler("autovalidatecourse", \&validate_course_section_handler, 0, 1, 0); |
®ister_handler("autovalidatecourse", \&validate_course_section_handler, 0, 1, 0); |
Line 6344 sub validate_class_access_handler {
|
Line 6362 sub validate_class_access_handler {
|
$outcome=&localenroll::check_section($inst_class,$owners,$cdom); |
$outcome=&localenroll::check_section($inst_class,$owners,$cdom); |
}; |
}; |
&Reply($client,\$outcome, $userinput); |
&Reply($client,\$outcome, $userinput); |
|
|
return 1; |
return 1; |
} |
} |
®ister_handler("autovalidateclass_sec", \&validate_class_access_handler, 0, 1, 0); |
®ister_handler("autovalidateclass_sec", \&validate_class_access_handler, 0, 1, 0); |
Line 6477 sub create_auto_enroll_password_handler
|
Line 6494 sub create_auto_enroll_password_handler
|
my ($authparam, $cdom) = split(/:/, $userinput); |
my ($authparam, $cdom) = split(/:/, $userinput); |
|
|
my ($create_passwd,$authchk); |
my ($create_passwd,$authchk); |
($authparam, |
eval { |
$create_passwd, |
local($SIG{__DIE__})='DEFAULT'; |
$authchk) = &localenroll::create_password($authparam,$cdom); |
($authparam,$create_passwd,$create_passwd,$authchk) = |
|
&localenroll::create_password($authparam,$cdom); |
|
}; |
&Reply($client, &escape($authparam.':'.$create_passwd.':'.$authchk)."\n", |
&Reply($client, &escape($authparam.':'.$create_passwd.':'.$authchk)."\n", |
$userinput); |
$userinput); |
|
|
Line 6716 sub get_institutional_code_format_handle
|
Line 6734 sub get_institutional_code_format_handle
|
my ($key,$value) = split/=/,$_; |
my ($key,$value) = split/=/,$_; |
$instcodes{&unescape($key)} = &unescape($value); |
$instcodes{&unescape($key)} = &unescape($value); |
} |
} |
my $formatreply = &localenroll::instcode_format($cdom, |
my $formatreply; |
\%instcodes, |
eval { |
\%codes, |
local($SIG{__DIE__})='DEFAULT'; |
\@codetitles, |
$formatreply = &localenroll::instcode_format($cdom, |
\%cat_titles, |
\%instcodes, |
\%cat_order); |
\%codes, |
|
\@codetitles, |
|
\%cat_titles, |
|
\%cat_order); |
|
}; |
if ($formatreply eq 'ok') { |
if ($formatreply eq 'ok') { |
my $codes_str = &Apache::lonnet::hash2str(%codes); |
my $codes_str = &Apache::lonnet::hash2str(%codes); |
my $codetitles_str = &Apache::lonnet::array2str(@codetitles); |
my $codetitles_str = &Apache::lonnet::array2str(@codetitles); |
Line 6781 sub get_possible_instcodes_handler {
|
Line 6803 sub get_possible_instcodes_handler {
|
my $reply; |
my $reply; |
my $cdom = $tail; |
my $cdom = $tail; |
my (@codetitles,%cat_titles,%cat_order,@code_order); |
my (@codetitles,%cat_titles,%cat_order,@code_order); |
my $formatreply = &localenroll::possible_instcodes($cdom, |
my $formatreply; |
\@codetitles, |
eval { |
\%cat_titles, |
local($SIG{__DIE__})='DEFAULT'; |
\%cat_order, |
$formatreply = &localenroll::possible_instcodes($cdom, |
\@code_order); |
\@codetitles, |
|
\%cat_titles, |
|
\%cat_order, |
|
\@code_order); |
|
}; |
if ($formatreply eq 'ok') { |
if ($formatreply eq 'ok') { |
my $result = join('&',map {&escape($_);} (@codetitles)).':'; |
my $result = join('&',map {&escape($_);} (@codetitles)).':'; |
$result .= join('&',map {&escape($_);} (@code_order)).':'; |
$result .= join('&',map {&escape($_);} (@code_order)).':'; |
Line 7520 undef $perlvarref;
|
Line 7546 undef $perlvarref;
|
# ----------------------------- Make sure this process is running from user=www |
# ----------------------------- Make sure this process is running from user=www |
my $wwwid=getpwnam('www'); |
my $wwwid=getpwnam('www'); |
if ($wwwid!=$<) { |
if ($wwwid!=$<) { |
my $emailto="$perlvar{'lonAdmEMail'},$perlvar{'lonSysEMail'}"; |
my $emailto="$perlvar{'lonAdmEMail'} $perlvar{'lonSysEMail'}"; |
my $subj="LON: $currenthostid User ID mismatch"; |
my $subj="LON: $currenthostid User ID mismatch"; |
system("echo 'User ID mismatch. lond must be run as user www.' |". |
system("echo 'User ID mismatch. lond must be run as user www.' |". |
" mail -s '$subj' $emailto > /dev/null"); |
" mail -s '$subj' $emailto > /dev/null"); |
Line 8875 sub currentversion {
|
Line 8901 sub currentversion {
|
if (-e $ulsdir) { |
if (-e $ulsdir) { |
if(-d $ulsdir) { |
if(-d $ulsdir) { |
if (opendir(LSDIR,$ulsdir)) { |
if (opendir(LSDIR,$ulsdir)) { |
|
if (-e $fname) { |
|
$version=0; |
|
} |
my $ulsfn; |
my $ulsfn; |
while ($ulsfn=readdir(LSDIR)) { |
while ($ulsfn=readdir(LSDIR)) { |
# see if this is a regular file (ignore links produced earlier) |
# see if this is a regular file (ignore links produced earlier) |