From bad0fb3fa21e475ea9e42029cc024df702a04af7 Mon Sep 17 00:00:00 2001 From: Glenn Rice Date: Thu, 2 Jul 2026 18:59:56 -0500 Subject: [PATCH] Remove the WeBWorK SOAP service. I don't think that anyone uses this anymore, and no one should use it. It is not secure, and there are better ways to interact with webwork, such as LTI authentication. --- Dockerfile | 2 - DockerfileStage1 | 2 - bin/check_modules.pl | 11 - conf/webwork2.mojolicious.dist.yml | 5 - lib/Mojolicious/WeBWorK.pm | 17 - lib/WebworkSOAP.pm | 1335 ---------------------- lib/WebworkSOAP/Classes/Course.pm | 3 - lib/WebworkSOAP/Classes/GlobalProblem.pm | 32 - lib/WebworkSOAP/Classes/GlobalSet.pm | 52 - lib/WebworkSOAP/Classes/Key.pm | 24 - lib/WebworkSOAP/Classes/Password.pm | 22 - lib/WebworkSOAP/Classes/Permission.pm | 22 - lib/WebworkSOAP/Classes/User.pm | 36 - lib/WebworkSOAP/Classes/UserProblem.pm | 46 - lib/WebworkSOAP/Classes/UserSet.pm | 56 - lib/WebworkSOAP/SOAP.pm | 44 - 16 files changed, 1709 deletions(-) delete mode 100644 lib/WebworkSOAP.pm delete mode 100644 lib/WebworkSOAP/Classes/Course.pm delete mode 100644 lib/WebworkSOAP/Classes/GlobalProblem.pm delete mode 100644 lib/WebworkSOAP/Classes/GlobalSet.pm delete mode 100644 lib/WebworkSOAP/Classes/Key.pm delete mode 100644 lib/WebworkSOAP/Classes/Password.pm delete mode 100644 lib/WebworkSOAP/Classes/Permission.pm delete mode 100644 lib/WebworkSOAP/Classes/User.pm delete mode 100644 lib/WebworkSOAP/Classes/UserProblem.pm delete mode 100644 lib/WebworkSOAP/Classes/UserSet.pm delete mode 100644 lib/WebworkSOAP/SOAP.pm diff --git a/Dockerfile b/Dockerfile index 293cd9fdb8..fcb98918ea 100644 --- a/Dockerfile +++ b/Dockerfile @@ -140,8 +140,6 @@ RUN apt-get update \ libpath-tiny-perl \ libperl-critic-perl \ libphp-serialization-perl \ - libpod-wsdl-perl \ - libsoap-lite-perl \ libsql-abstract-perl \ libssl-dev \ libstring-shellquote-perl \ diff --git a/DockerfileStage1 b/DockerfileStage1 index 2ce0d6af67..d6ab207151 100644 --- a/DockerfileStage1 +++ b/DockerfileStage1 @@ -101,8 +101,6 @@ RUN apt-get update \ libpath-tiny-perl \ libperl-critic-perl \ libphp-serialization-perl \ - libpod-wsdl-perl \ - libsoap-lite-perl \ libsql-abstract-perl \ libssl-dev \ libstring-shellquote-perl \ diff --git a/bin/check_modules.pl b/bin/check_modules.pl index 661e8e7331..0ea9acf800 100755 --- a/bin/check_modules.pl +++ b/bin/check_modules.pl @@ -427,17 +427,6 @@ =head1 DESCRIPTION rhel => 'perl-Pod-Usage' } }, - 'Pod::WSDL' => { - package => { - ubuntu => 'libpod-wsdl-perl' - } - }, - 'SOAP::Lite' => { - package => { - ubuntu => 'libsoap-lite-perl', - rhel => 'perl-SOAP-Lite' - } - }, 'SQL::Abstract' => { minversion => '2', package => { diff --git a/conf/webwork2.mojolicious.dist.yml b/conf/webwork2.mojolicious.dist.yml index 718b9dcf1a..c96103c411 100644 --- a/conf/webwork2.mojolicious.dist.yml +++ b/conf/webwork2.mojolicious.dist.yml @@ -38,11 +38,6 @@ JSON_ERROR_LOG: 0 # does not forward the server root location. #server_root_url_redirect: https://mysite.edu/mypage.html -# Uncomment the line below to use the WebworkSOAP handlers. Make sure that you -# change the value to something more secure. Note that it must consist entirely -# of digits. -#soap_authen_key: 123456789123456789 - # If a remote site is using this WW server to process WW problems and embed them # into web pages, the web browser might not permit the WW problems to be # displayed, as it violates security policy to mix content from different diff --git a/lib/Mojolicious/WeBWorK.pm b/lib/Mojolicious/WeBWorK.pm index 6a026a9c3d..e009d9fcad 100644 --- a/lib/Mojolicious/WeBWorK.pm +++ b/lib/Mojolicious/WeBWorK.pm @@ -228,23 +228,6 @@ sub startup ($app) { } ); - if ($config->{soap_authen_key}) { - # Only allow an authen key that consists entirely of digits. The WebworkSOAP module uses a numeric != for - # comparison, and in perl all strings containing alphabetic characters are numerically equal. So if this is not - # numeric all keys that are passed in will succeed in authentication. Very dangerous! - if ($config->{soap_authen_key} =~ /^\d*$/) { - $app->log->info('SOAP endpoints enabled'); - $WeBWorK::SeedCE{soap_authen_key} = $config->{soap_authen_key}; - - push(@{ $r->namespaces }, 'WebworkSOAP'); - $r->any('/webwork2_wsdl')->to('SOAP#wsdl'); - $r->post('/webwork2_rpc')->to('SOAP#dispatch'); - } else { - $app->log->info(qq{Invalid soap_authen_key "$config->{soap_authen_key}". } - . 'It must consist entirely of digits. SOAP endpoints NOT enabled.'); - } - } - # Letsencrypt renewal route. if ($config->{enable_certbot_webroot_routes}) { $r->any( diff --git a/lib/WebworkSOAP.pm b/lib/WebworkSOAP.pm deleted file mode 100644 index a656a18870..0000000000 --- a/lib/WebworkSOAP.pm +++ /dev/null @@ -1,1335 +0,0 @@ -package WebworkSOAP; - -use strict; - -use Math::Random::Secure qw(irand); - -use WeBWorK::Utils::CourseManagement qw(listCourses); -use WeBWorK::DB; -use WeBWorK::DB::Utils qw(initializeUserProblem); -use WeBWorK::CourseEnvironment; - -use WebworkSOAP::Classes::GlobalSet; -use WebworkSOAP::Classes::UserSet; -use WebworkSOAP::Classes::GlobalProblem; -use WebworkSOAP::Classes::UserProblem; -use WebworkSOAP::Classes::User; -use WebworkSOAP::Classes::Key; -use WebworkSOAP::Classes::Password; -use WebworkSOAP::Classes::Permission; - -#init - -use constant { - SOAPERROR_MAJOR => 1, - SOAPERROR_MINOR => 2, - SOAPERROR_CLASS_NOT_FOUND => 3, - SOAPERROR_USER_NOT_FOUND => 4, - SOAPERROR_SET_NOT_FOUND => 5, - SOAPERROR_PROBLEM_NOT_FOUND => 6, - SOAPERROR_KEY_NOT_FOUND => 7, - SOAPERROR_AUTHEN_FAILED => 8 -}; - -our %SeedCE; -%WebworkSOAP::SeedCE = %WeBWorK::SeedCE; - -sub new { - my ($self, $authenKey, $courseName) = @_; - $self = {}; - #Construct Course - my $ce = eval { WeBWorK::CourseEnvironment->new({ %SeedCE, courseName => $courseName }) }; - $@ and soap_fault_major("Course Environment cannot be constructed.
$@"); - #Authentication Check - if ($ce->{soap_authen_key} != $authenKey) { - soap_fault_authen(); - } - #Construct DB handle - my $db = eval { WeBWorK::DB->new($ce); }; - $@ and soap_fault_major("Failed to initialize database handle.
$@"); - $self->{db} = $db; - $self->{ce} = $ce; - bless $self; - return $self; -} - -sub array_to_soap_string { - my @array = @_; - @array = map { SOAP::Data->type('string', $_) } @array; - return \@array; -} - -sub soap_fault_authen { - die SOAP::Fault->faultcode(SOAPERROR_AUTHEN_FAILED)->faultstring("SOAP Webservice Authentication Failed!"); -} - -sub soap_fault { - my ($errorCode, $errorMsg) = @_; - die SOAP::Fault->faultcode($errorCode)->faultstring($errorMsg); -} - -sub soap_fault_major { - my ($errorMsg) = @_; - soap_fault(SOAPERROR_MAJOR, $errorMsg); -} -#################################################################################### -#SOAP CALLABLE FUNCTIONS -#################################################################################### - -=pod - -=begin WSDL - _RETURN $string Hello World! -=end WSDL - -=cut - -sub hello { - return "Hello world!"; -} - -################################################# -#Course -################################################# - -=pod - -=begin WSDL - _IN authenKey $string - _RETURN @string -=end WSDL - -=cut - -sub list_courses { - my ($self, $authenKey) = @_; - my $ce = eval { WeBWorK::CourseEnvironment->new }; - $@ and soap_fault_major("Internal Course Environment cannot be constructed."); - if ($authenKey != $WebworkSOAP::SeedCE{soap_authen_key}) { - soap_fault_authen; - } - $@ and soap_fault_major("Course Environment cannot be constructed."); - my @test = listCourses($ce); - return array_to_soap_string(@test); -} - -=pod - -=begin WSDL - _IN authenKey $string - _IN courseName $string - _IN userID $string - _RETURN $string -=end WSDL - -=cut - -sub login_user { - my ($self, $authenKey, $courseName, $userID) = @_; - my $soapEnv = new WebworkSOAP($authenKey, $courseName); - my $newKey; - my $timestamp = time; - my @chars = @{ $soapEnv->{ce}->{sessionKeyChars} }; - my $length = $soapEnv->{ce}->{sessionKeyLength}; - $newKey = join("", @chars[ map irand(@chars), 1 .. $length ]); - my $Key = $soapEnv->{db}->newKey(user_id => $userID, key => $newKey, timestamp => $timestamp); - eval { $soapEnv->{db}->deleteKey($userID) }; - eval { $soapEnv->{db}->addKey($Key) }; - $@ and soap_fault(SOAPERROR_USER_NOT_FOUND, "User not found."); - return SOAP::Data->type('string', $newKey); -} - -=pod - -=begin WSDL - _IN authenKey $string - _IN courseName $string - _IN userID $string - _IN setID $string - _RETURN $string -=end WSDL - -=cut - -sub assign_set_to_user { - my ($self, $authenKey, $courseName, $userID, $setID) = @_; - my $soapEnv = new WebworkSOAP($authenKey, $courseName); - my $GlobalSet = eval { $soapEnv->{db}->getGlobalSet($setID) }; - $@ and soap_fault(SOAPERROR_SET_NOT_FOUND, "Set not found."); - my $setID = $GlobalSet->set_id; - my $db = $soapEnv->{db}; - my $UserSet = $db->newUserSet; - $UserSet->user_id($userID); - $UserSet->set_id($setID); - my @results; - my $set_assigned = 0; - eval { $db->addUserSet($UserSet) }; - - if ($@) { - if (WeBWorK::DB::Ex::RecordExists->caught) { - push @results, "set $setID is already assigned to user $userID."; - $set_assigned = 1; - } else { - die $@; - } - } - - my @GlobalProblems = grep { defined $_ } $db->getAllGlobalProblems($setID); - foreach my $GlobalProblem (@GlobalProblems) { - my $seed = int(rand(2423)) + 36; - my $UserProblem = $db->newUserProblem; - $UserProblem->user_id($userID); - $UserProblem->set_id($GlobalProblem->set_id); - $UserProblem->problem_id($GlobalProblem->problem_id); - initializeUserProblem($UserProblem, $seed); - eval { $db->addUserProblem($UserProblem) }; - } - return array_to_soap_string(@results); #FIXME WSDL says $string, not @string? -} - -=pod - -=begin WSDL - _IN authenKey $string - _IN courseName $string - _IN userIDs @string - _IN setID $string - _RETURN @string -=end WSDL - -=cut - -sub grade_users_sets { - my ($self, $authenKey, $courseName, $userIDs, $setID) = @_; - my $soapEnv = new WebworkSOAP($authenKey, $courseName); - my @grades; - #open (LOG, ">>/opt/webwork/tmp_log") or die "Can't open log file"; - #print LOG "\n\nhi there\n\n"; - - my $db = $soapEnv->{db}; - foreach my $userID (@{$userIDs}) { - # my @problemData = $soapEnv->{db}->getAllMergedUserProblems($userID,$setID); - # - # my $grade = 0; - # for(my $i=0;$i<@problemData;$i++) { - # #print LOG "$userID problem Data",join(" ", %{$problemData[$i]}),"\n\n"; - # $grade += ($problemData[$i]->status)*($problemData[$i]->value); - # #print LOG "grade is $grade\n"; - # } - #print LOG "grade_users_sets: get user $userID set $setID\n"; - my $grade = get_wwassignment_grade_for_one_user($db, $userID, $setID); - #print LOG " grade is $grade \n\n"; - push(@grades, $grade); - } - #close(LOG); - return array_to_soap_string(@grades); -} - -=pod - -=begin WSDL - _IN authenKey $string - _IN courseName $string - _IN setID $string - _RETURN $WebworkSOAP::Classes::GlobalSet -=end WSDL - -=cut - -sub get_set_data { - my ($self, $authenKey, $courseName, $setID) = @_; - my $soapEnv = new WebworkSOAP($authenKey, $courseName); - my $setData = $soapEnv->{db}->getGlobalSet($setID); - if (not defined $setData) { - return -1; - } - my $set = new WebworkSOAP::Classes::GlobalSet($setData); - return $set; -} - -#################################################################### -##FUNCTIONS DIRECTLY MAPPED TO FUNCTIONS IN DB.pm -#################################################################### -############################################### -##Password -############################################### - -=pod - -=begin WSDL - _IN authenKey $string - _IN courseName $string - _IN record $WebworkSOAP::Classes::Password - _RETURN $string -=end WSDL - -=cut - -sub add_password { - my ($self, $authenKey, $courseName, $record) = @_; - my $soapEnv = new WebworkSOAP($authenKey, $courseName); - my $newPassword = $soapEnv->{db}->newPassword; - %$newPassword = %$record; - return SOAP::Data->type('string', $soapEnv->{db}->addPassword($newPassword)); -} - -=pod - -=begin WSDL - _IN authenKey $string - _IN courseName $string - _IN record $WebworkSOAP::Classes::Password - _RETURN $string -=end WSDL - -=cut - -sub put_password { - my ($self, $authenKey, $courseName, $record) = @_; - my $soapEnv = new WebworkSOAP($authenKey, $courseName); - return SOAP::Data->type('string', $soapEnv->{db}->putPassword($record)); -} - -=pod - -=begin WSDL - _IN authenKey $string - _IN courseName $string - _RETURN @string -=end WSDL - -=cut - -sub list_password { - my ($self, $authenKey, $courseName) = @_; - my $soapEnv = new WebworkSOAP($authenKey, $courseName); - my @tempArray = $soapEnv->{db}->listPasswords; - return array_to_soap_string(@tempArray); -} - -=pod - -=begin WSDL - _IN authenKey $string - _IN courseName $string - _IN userIDs @string - _RETURN @WebworkSOAP::Classes::Password Array of user objects -=end WSDL - -=cut - -sub get_passwords { - my ($self, $authenKey, $courseName, $userIDs) = @_; - my $soapEnv = new WebworkSOAP($authenKey, $courseName); - my @passwordData = $soapEnv->{db}->getPasswords(@$userIDs); - my @passwords; - for (my $i = 0; $i < @passwordData; $i++) { - push(@passwords, new WebworkSOAP::Classes::Password(@passwordData[$i])); - } - return \@passwords; -} - -=pod - -=begin WSDL - _IN authenKey $string - _IN courseName $string - _IN userID $string - _RETURN $WebworkSOAP::Classes::Password of names objects. -=end WSDL - -=cut - -sub get_password { - my ($self, $authenKey, $courseName, $userID) = @_; - my $soapEnv = new WebworkSOAP($authenKey, $courseName); - my $passwordData = $soapEnv->{db}->getPassword($userID); - if (not defined $passwordData) { - return -1; - } - my $password = new WebworkSOAP::Classes::Password($passwordData); - return ($password); -} - -################################################## -##Permission -################################################## - -=pod - -=begin WSDL - _IN authenKey $string - _IN courseName $string - _IN record $WebworkSOAP::Classes::Permission - _RETURN $string -=end WSDL - -=cut - -sub add_permission { - my ($self, $authenKey, $courseName, $record) = @_; - my $soapEnv = new WebworkSOAP($authenKey, $courseName); - my $newPermissionLevel = $soapEnv->{db}->newPermissionLevel; - %$newPermissionLevel = %$record; - return SOAP::Data->type('string', $soapEnv->{db}->addPermissionLevel($newPermissionLevel)); -} - -=pod - -=begin WSDL - _IN authenKey $string - _IN courseName $string - _IN record $WebworkSOAP::Classes::Permission - _RETURN $string -=end WSDL - -=cut - -sub put_permission { - my ($self, $authenKey, $courseName, $record) = @_; - my $soapEnv = new WebworkSOAP($authenKey, $courseName); - my $newPermissionLevel = $soapEnv->{db}->newPermissionLevel; - %$newPermissionLevel = %$record; - return SOAP::Data->type('string', $soapEnv->{db}->putPermissionLevel($newPermissionLevel)); -} - -=pod - -=begin WSDL - _IN authenKey $string - _IN courseName $string - _RETURN @string -=end WSDL - -=cut - -sub list_permissions { - my ($self, $authenKey, $courseName) = @_; - my $soapEnv = new WebworkSOAP($authenKey, $courseName); - my @tempArray = $soapEnv->{db}->listPermissionLevels; - return array_to_soap_string(@tempArray); -} - -=pod - -=begin WSDL - _IN authenKey $string - _IN courseName $string - _IN userIDs @string - _RETURN @WebworkSOAP::Classes::Permission Array of user objects -=end WSDL - -=cut - -sub get_permissions { - my ($self, $authenKey, $courseName, $userIDs) = @_; - my $soapEnv = new WebworkSOAP($authenKey, $courseName); - my @permissionData = $soapEnv->{db}->getPermissionLevels(@$userIDs); - my @permissions; - for (my $i = 0; $i < @permissionData; $i++) { - push(@permissions, new WebworkSOAP::Classes::Permission(@permissionData[$i])); - } - return \@permissions; -} - -=pod - -=begin WSDL - _IN authenKey $string - _IN courseName $string - _IN userID $string - _RETURN $WebworkSOAP::Classes::Permission of names objects. -=end WSDL - -=cut - -sub get_permission { - my ($self, $authenKey, $courseName, $userID) = @_; - my $soapEnv = new WebworkSOAP($authenKey, $courseName); - my $permissionData = $soapEnv->{db}->getPermissionLevel($userID); - if (not defined $permissionData) { - return -1; - } - my $permission = new WebworkSOAP::Classes::Permission($permissionData); - return ($permission); -} - -################################################## -##Key -################################################## - -=pod - -=begin WSDL - _IN authenKey $string - _IN courseName $string - _IN record $WebworkSOAP::Classes::Key - _RETURN $string -=end WSDL - -=cut - -sub add_key { - my ($self, $authenKey, $courseName, $record) = @_; - my $soapEnv = new WebworkSOAP($authenKey, $courseName); - my $newKey = $soapEnv->{db}->newKey; - %$newKey = %$record; - return SOAP::Data->type('string', $soapEnv->{db}->addKey($newKey)); -} - -=pod - -=begin WSDL - _IN authenKey $string - _IN courseName $string - _IN record $WebworkSOAP::Classes::Key - _RETURN $string -=end WSDL - -=cut - -sub put_key { - my ($self, $authenKey, $courseName, $record) = @_; - my $soapEnv = new WebworkSOAP($authenKey, $courseName); - return SOAP::Data->type('string', $soapEnv->{db}->putKey($record)); -} - -=pod - -=begin WSDL - _IN authenKey $string - _IN courseName $string - _RETURN @string -=end WSDL - -=cut - -sub list_keys { - my ($self, $authenKey, $courseName) = @_; - my $soapEnv = new WebworkSOAP($authenKey, $courseName); - my @tempArray = $soapEnv->{db}->listKeys; - return array_to_soap_string(@tempArray); -} - -=pod - -=begin WSDL - _IN authenKey $string - _IN courseName $string - _IN userIDs @string - _RETURN @WebworkSOAP::Classes::Key Array of user objects -=end WSDL - -=cut - -sub get_keys { - my ($self, $authenKey, $courseName, $userIDs) = @_; - my $soapEnv = new WebworkSOAP($authenKey, $courseName); - my @keyData = $soapEnv->{db}->getKeys(@$userIDs); - my @keys; - for (my $i = 0; $i < @keyData; $i++) { - push(@keys, new WebworkSOAP::Classes::Key(@keyData[$i])); - } - return \@keys; -} - -=pod - -=begin WSDL - _IN authenKey $string - _IN courseName $string - _IN userID $string - _RETURN $WebworkSOAP::Classes::Key of names objects. -=end WSDL - -=cut - -sub get_key { - my ($self, $authenKey, $courseName, $userID) = @_; - my $soapEnv = new WebworkSOAP($authenKey, $courseName); - my $keyData = $soapEnv->{db}->getKey($userID); - if (not defined $keyData) { - return -1; - } - my $key = new WebworkSOAP::Classes::Key($keyData); - return ($key); -} - -################################################## -##User -################################################## - -=pod - -=begin WSDL - _IN authenKey $string - _IN courseName $string - _IN record $WebworkSOAP::Classes::User - _RETURN $string -=end WSDL - -=cut - -sub add_user { - my ($self, $authenKey, $courseName, $record) = @_; - my $soapEnv = new WebworkSOAP($authenKey, $courseName); - my $newUser = $soapEnv->{db}->newUser; - %$newUser = %$record; - return SOAP::Data->type('string', $soapEnv->{db}->addUser($newUser)); -} - -=pod - -=begin WSDL - _IN authenKey $string - _IN courseName $string - _IN record $WebworkSOAP::Classes::User - _RETURN $string -=end WSDL - -=cut - -sub put_user { - my ($self, $authenKey, $courseName, $record) = @_; - my $soapEnv = new WebworkSOAP($authenKey, $courseName); - return SOAP::Data->type('string', $soapEnv->{db}->putUser($record)); -} - -=pod - -=begin WSDL - _IN authenKey $string - _IN courseName $string - _RETURN @string of names objects. -=end WSDL - -=cut - -sub list_users { - my ($self, $authenKey, $courseName) = @_; - my $soapEnv = new WebworkSOAP($authenKey, $courseName); - my @tempArray = $soapEnv->{db}->listUsers; - return array_to_soap_string(@tempArray); -} - -=pod - -=begin WSDL - _IN authenKey $string - _IN courseName $string - _IN userID $string - _RETURN $WebworkSOAP::Classes::User of names objects. -=end WSDL - -=cut - -sub get_user { - my ($self, $authenKey, $courseName, $userID) = @_; - my $soapEnv = new WebworkSOAP($authenKey, $courseName); - my $userData = $soapEnv->{db}->getUser($userID); - if (not defined $userData) { - return -1; - } - my $user = new WebworkSOAP::Classes::User($userData); - return ($user); -} - -=pod - -=begin WSDL - _IN authenKey $string - _IN courseName $string - _IN userIDs @string - _RETURN @WebworkSOAP::Classes::User Array of user objects -=end WSDL - -=cut - -sub get_users { - my ($self, $authenKey, $courseName, $userIDs) = @_; - my $soapEnv = new WebworkSOAP($authenKey, $courseName); - my @userData = $soapEnv->{db}->getUsers(@$userIDs); - my @users; - for (my $i = 0; $i < @userData; $i++) { - push(@users, new WebworkSOAP::Classes::User(@userData[$i])); - } - return \@users; -} - -=pod - -=begin WSDL - _IN authenKey $string - _IN courseName $string - _IN userID $string - _RETURN $string -=end WSDL - -=cut - -sub delete_user { - my ($self, $authenKey, $courseName, $userID) = @_; - my $soapEnv = new WebworkSOAP($authenKey, $courseName); - return SOAP::Data->type('string', $soapEnv->{db}->deleteUser($userID)); -} - -################################################## -##Global Sets -################################################## - -=pod - -=begin WSDL - _IN authenKey $string - _IN courseName $string - _IN record $WebworkSOAP::Classes::GlobalSet - _RETURN $string -=end WSDL - -=cut - -sub add_global_set { - my ($self, $authenKey, $courseName, $record) = @_; - my $soapEnv = new WebworkSOAP($authenKey, $courseName); - my $newGlobalSet = $soapEnv->{db}->newGlobalSet; - %$newGlobalSet = %$record; - return SOAP::Data->type('string', $soapEnv->{db}->addGlobalSet($newGlobalSet)); -} - -=pod - -=begin WSDL - _IN authenKey $string - _IN courseName $string - _IN record $WebworkSOAP::Classes::GlobalSet - _RETURN $string -=end WSDL - -=cut - -sub put_global_set { - my ($self, $authenKey, $courseName, $record) = @_; - my $soapEnv = new WebworkSOAP($authenKey, $courseName); - return SOAP::Data->type('string', $soapEnv->{db}->putGlobalSet($record)); -} - -=pod - -=begin WSDL - _IN authenKey $string - _IN courseName $string - _RETURN @string of names objects. -=end WSDL - -=cut - -sub list_global_sets { - my ($self, $authenKey, $courseName) = @_; - my $soapEnv = new WebworkSOAP($authenKey, $courseName); - my @tempArray = $soapEnv->{db}->listGlobalSets; - return array_to_soap_string(@tempArray); -} - -=pod - -=begin WSDL - _IN authenKey $string - _IN courseName $string - _RETURN @WebworkSOAP::Classes::GlobalSet Array of user objects -=end WSDL - -=cut - -sub get_all_global_sets { - my ($self, $authenKey, $courseName) = @_; - my $soapEnv = new WebworkSOAP($authenKey, $courseName); - my @tempArray = $soapEnv->{db}->listGlobalSets; - my @setData = $soapEnv->{db}->getGlobalSets(@tempArray); - my @sets; - for (my $i = 0; $i < @setData; $i++) { - push(@sets, new WebworkSOAP::Classes::GlobalSet(@setData[$i])); - } - return \@sets; -} - -=pod - -=begin WSDL - _IN authenKey $string - _IN courseName $string - _IN setIDs @string - _RETURN @WebworkSOAP::Classes::GlobalSet Array of user objects -=end WSDL - -=cut - -sub get_global_sets { - my ($self, $authenKey, $courseName, $setIDs) = @_; - my $soapEnv = new WebworkSOAP($authenKey, $courseName); - my @setData = $soapEnv->{db}->getGlobalSets(@$setIDs); - my @sets; - for (my $i = 0; $i < @setData; $i++) { - push(@sets, new WebworkSOAP::Classes::GlobalSet(@setData[$i])); - } - return \@sets; -} - -=pod - -=begin WSDL - _IN authenKey $string - _IN courseName $string - _IN setID $string - _RETURN $WebworkSOAP::Classes::GlobalSet -=end WSDL - -=cut - -sub get_global_set { - my ($self, $authenKey, $courseName, $setID) = @_; - my $soapEnv = new WebworkSOAP($authenKey, $courseName); - my $setData = $soapEnv->{db}->getGlobalSet($setID); - if (not defined $setData) { - return -1; - } - my $set = new WebworkSOAP::Classes::GlobalSet($setData); - return ($set); -} - -=pod - -=begin WSDL - _IN authenKey $string - _IN courseName $string - _IN setID $string - _RETURN $string -=end WSDL - -=cut - -sub delete_global_set { - my ($self, $authenKey, $courseName, $setID) = @_; - my $soapEnv = new WebworkSOAP($authenKey, $courseName); - return SOAP::Data->type('string', $soapEnv->{db}->deleteGlobalSet($setID)); -} - -################################################## -##Global Problems -################################################## - -=pod - -=begin WSDL - _IN authenKey $string - _IN courseName $string - _IN record $WebworkSOAP::Classes::GlobalProblem - _RETURN $string -=end WSDL - -=cut - -sub add_global_problem { - my ($self, $authenKey, $courseName, $record) = @_; - my $soapEnv = new WebworkSOAP($authenKey, $courseName); - my $newGlobalProblem = $soapEnv->{db}->newGlobalProblem; - %$newGlobalProblem = %$record; - return SOAP::Data->type('string', $soapEnv->{db}->addGlobalProblem($newGlobalProblem)); -} - -=pod - -=begin WSDL - _IN authenKey $string - _IN courseName $string - _IN record $WebworkSOAP::Classes::GlobalProblem - _RETURN $string -=end WSDL - -=cut - -sub put_global_problem { - my ($self, $authenKey, $courseName, $record) = @_; - my $soapEnv = new WebworkSOAP($authenKey, $courseName); - return SOAP::Data->type('string', $soapEnv->{db}->putGlobalProblem($record)); -} - -=pod - -=begin WSDL - _IN authenKey $string - _IN courseName $string - _IN setID $string - _RETURN @string of names objects. -=end WSDL - -=cut - -sub list_global_problems { - my ($self, $authenKey, $courseName, $setID) = @_; - my $soapEnv = new WebworkSOAP($authenKey, $courseName); - my @tempArray = $soapEnv->{db}->listGlobalProblems($setID); - return array_to_soap_string(@tempArray); -} - -=pod - -=begin WSDL - _IN authenKey $string - _IN courseName $string - _IN setID $string - _RETURN @WebworkSOAP::Classes::GlobalProblem Array of user objects -=end WSDL - -=cut - -sub get_all_global_problems { - my ($self, $authenKey, $courseName, $setID) = @_; - my $soapEnv = new WebworkSOAP($authenKey, $courseName); - my @problemData = $soapEnv->{db}->getAllGlobalProblems($setID); - my @problems; - for (my $i = 0; $i < @problemData; $i++) { - push(@problems, new WebworkSOAP::Classes::GlobalProblem(@problemData[$i])); - } - return \@problems; -} - -=pod -=begin - _IN authenKey $string - _IN courseName $string - _IN problemIDs @string An array reference: [userID setID problemID] - _RETURN @WebworkSOAP::Classes::GlobalProblem Array of user objects -=end WSDL - -=cut - -sub get_global_problems { - my ($self, $authenKey, $courseName, $problemIDs) = @_; - my $soapEnv = new WebworkSOAP($authenKey, $courseName); - my @problemData = $soapEnv->{db}->getGlobalProblems(@$problemIDs); - my @problems; - for (my $i = 0; $i < @problemData; $i++) { - push(@problems, new WebworkSOAP::Classes::GlobalProblem(@problemData[$i])); #FIXME $problemData[$i]? - } - return \@problems; -} - -=pod - -=begin WSDL - _IN authenKey $string - _IN courseName $string - _IN setID $string - _IN problemID $string - _RETURN $WebworkSOAP::Classes::GlobalProblem of names objects. -=end WSDL - -=cut - -sub get_global_problem { - my ($self, $authenKey, $courseName, $setID, $problemID) = @_; - my $soapEnv = new WebworkSOAP($authenKey, $courseName); - my $problemData = $soapEnv->{db}->getGlobalProblem($setID, $problemID); - if (not defined $problemData) { - return -1; - } - my $problem = new WebworkSOAP::Classes::GlobalProblem($problemData); - return ($problem); -} - -=pod - -=begin WSDL - _IN authenKey $string - _IN courseName $string - _IN setID $string - _IN problemID $string - _RETURN $string -=end WSDL - -=cut - -sub delete_global_problem { - my ($self, $authenKey, $courseName, $setID, $problemID) = @_; - my $soapEnv = new WebworkSOAP($authenKey, $courseName); - return SOAP::Data->type('string', $soapEnv->{db}->deleteGlobalProblem($setID, $problemID)); -} - -################################################## -##USER PROBLEM -################################################## - -=pod - -=begin WSDL - _IN authenKey $string - _IN courseName $string - _IN record $WebworkSOAP::Classes::UserProblem - _RETURN $string -=end WSDL - -=cut - -sub add_user_problem { - my ($self, $authenKey, $courseName, $record) = @_; - my $soapEnv = new WebworkSOAP($authenKey, $courseName); - my $newUserProblem = $soapEnv->{db}->newUserProblem; - %$newUserProblem = %$record; - return SOAP::Data->type('string', $soapEnv->{db}->addUserProblem($newUserProblem)); -} - -=pod - -=begin WSDL - _IN authenKey $string - _IN courseName $string - _IN record $WebworkSOAP::Classes::UserProblem - _RETURN $string -=end WSDL - -=cut - -sub put_user_problem { - my ($self, $authenKey, $courseName, $record) = @_; - my $soapEnv = new WebworkSOAP($authenKey, $courseName); - return SOAP::Data->type('string', $soapEnv->{db}->putUserProblem($record)); -} - -=pod - -=begin WSDL - _IN authenKey $string - _IN courseName $string - _IN userID $string - _IN setID $string - _RETURN @string of names objects. -=end WSDL - -=cut - -sub list_user_problems { - my ($self, $authenKey, $courseName, $userID, $setID) = @_; - my $soapEnv = new WebworkSOAP($authenKey, $courseName); - my @tempArray = $soapEnv->{db}->listUserProblems($userID, $setID); - return array_to_soap_string(@tempArray); -} - -=pod - -=begin WSDL - _IN authenKey $string - _IN courseName $string - _IN userID $string - _IN setID $string - _RETURN @WebworkSOAP::Classes::UserProblem of names objects. -=end WSDL - -=cut - -sub get_all_user_problems { - my ($self, $authenKey, $courseName, $userID, $setID) = @_; - my $soapEnv = new WebworkSOAP($authenKey, $courseName); - my @problemData = $soapEnv->{db}->getAllUserProblems($userID, $setID); - my @problems; - for (my $i = 0; $i < @problemData; $i++) { - push(@problems, new WebworkSOAP::Classes::UserProblem(@problemData[$i])); - } - return \@problems; -} - -=pod - -=begin WSDL - _IN authenKey $string - _IN courseName $string - _IN userProblemIDs @string A 3 element array: { user_ID, setID, problemID } - _RETURN @WebworkSOAP::Classes::UserProblem of names objects. -=end WSDL - -=cut - -sub get_user_problems { - my ($self, $authenKey, $courseName, $userProblemIDs) = @_; - my $soapEnv = new WebworkSOAP($authenKey, $courseName); - my @problemData = $soapEnv->{db}->getUserProblems(@$userProblemIDs); - my @problems; - for (my $i = 0; $i < @problemData; $i++) { - push(@problems, new WebworkSOAP::Classes::UserProblem(@problemData[$i])); - } - return \@problems; -} - -=pod - -=begin WSDL - _IN authenKey $string - _IN courseName $string - _IN userID $string - _IN setID $string - _IN problemID $string - _RETURN $WebworkSOAP::Classes::UserProblem of names objects. -=end WSDL - -=cut - -sub get_user_problem { - my ($self, $authenKey, $courseName, $userID, $setID, $problemID) = @_; - my $soapEnv = new WebworkSOAP($authenKey, $courseName); - my $problemData = $soapEnv->{db}->getUserProblem($userID, $setID, $problemID); - if (not defined $problemData) { - return -1; - } - my $problem = new WebworkSOAP::Classes::UserProblem($problemData); - return ($problem); -} - -=pod - -=begin WSDL - _IN authenKey $string - _IN courseName $string - _IN userID $string - _IN setID $string - _IN problemID $string - _RETURN $string -=end WSDL - -=cut - -sub delete_user_problem { - my ($self, $authenKey, $courseName, $userID, $setID, $problemID) = @_; - my $soapEnv = new WebworkSOAP($authenKey, $courseName); - return SOAP::Data->type('string', $soapEnv->{db}->deleteUserProblem($userID, $setID, $problemID)); -} - -################################################## -##USER SET -################################################## - -=pod - -=begin WSDL - _IN authenKey $string - _IN courseName $string - _IN record $WebworkSOAP::Classes::UserSet - _RETURN $string -=end WSDL - -=cut - -sub add_user_set { - my ($self, $authenKey, $courseName, $record) = @_; - my $soapEnv = new WebworkSOAP($authenKey, $courseName); - my $newUserSet = $soapEnv->{db}->newUserSet; - %$newUserSet = %$record; - return SOAP::Data->type('string', $soapEnv->{db}->addUserSet($newUserSet)); -} - -=pod - -=begin WSDL - _IN authenKey $string - _IN courseName $string - _IN record $WebworkSOAP::Classes::UserSet - _RETURN $string -=end WSDL - -=cut - -sub put_user_set { - my ($self, $authenKey, $courseName, $record) = @_; - my $soapEnv = new WebworkSOAP($authenKey, $courseName); - return SOAP::Data->type('string', $soapEnv->{db}->addUserSet($record)); -} - -=pod - -=begin WSDL - _IN authenKey $string - _IN courseName $string - _IN userID $string - _RETURN @string of names objects. -=end WSDL - -=cut - -sub list_user_sets { - my ($self, $authenKey, $courseName, $userID) = @_; - my $soapEnv = new WebworkSOAP($authenKey, $courseName); - my @tempArray = $soapEnv->{db}->listUserSets($userID); - return array_to_soap_string(@tempArray); -} - -=pod - -=begin WSDL - _IN authenKey $string - _IN courseName $string - _RETURN @WebworkSOAP::Classes::UserSet of names objects. -=end WSDL - -=cut - -sub get_all_user_sets { - my ($self, $authenKey, $courseName) = @_; - my $soapEnv = new WebworkSOAP($authenKey, $courseName); - my @setData = $soapEnv->{db}->getAllUserSets(); - my @sets; - for (my $i = 0; $i < @setData; $i++) { - push(@sets, new WebworkSOAP::Classes::UserSet(@setData[$i])); - } - return \@sets; -} - -=pod - -=begin WSDL - _IN authenKey $string - _IN courseName $string - _IN userSetIDs $string - _RETURN @WebworkSOAP::Classes::UserSet of names objects. -=end WSDL - -=cut - -sub get_user_sets { - my ($self, $authenKey, $courseName, $userSetIDs) = @_; - my $soapEnv = new WebworkSOAP($authenKey, $courseName); - my @setData = $soapEnv->{db}->getUserSets(@$userSetIDs); - my @sets; - for (my $i = 0; $i < @setData; $i++) { - push(@sets, new WebworkSOAP::Classes::UserSet(@setData[$i])); - } - return \@sets; -} - -=pod - -=begin WSDL - _IN authenKey $string - _IN courseName $string - _IN userID $string - _IN setID $string - _RETURN $WebworkSOAP::Classes::UserSet of names objects. -=end WSDL - -=cut - -sub get_user_set { - my ($self, $authenKey, $courseName, $userID, $setID) = @_; - my $soapEnv = new WebworkSOAP($authenKey, $courseName); - my $setData = $soapEnv->{db}->getUserSet($userID, $setID); - if (not defined $setData) { - return -1; - } - my $set = new WebworkSOAP::Classes::UserSet($setData); - return $set; -} - -=pod - -=begin WSDL - _IN authenKey $string - _IN courseName $string - _IN userID $string - _IN setID $string - _RETURN $string -=end WSDL - -=cut - -sub delete_user_set { - my ($self, $authenKey, $courseName, $userID, $setID) = @_; - my $soapEnv = new WebworkSOAP($authenKey, $courseName); - return SOAP::Data->type('string', $soapEnv->{db}->deleteUserSet($userID, $setID)); -} - -########################################### -# grading utilities -- to be moved to Utils::Grades -############################################ - -############################################ -# get_wwassignment_grade_for_one ($db $userID $setID); -#input $userID, $setID (or a UserSet record)? -#output set grade for a homework problem or maximum grade for a gateway problem with several set versions -############################################ -sub get_wwassignment_grade_for_one_user { - my ($db, $userID, $setID) = @_; - my $user_set = $db->getMergedSet($userID, $setID); - print LOG "user $userID set $setID user_set " . ref($user_set) . "\n"; - return " " unless ref($user_set); # return a blank grade if there is no user_set - warn " user $userID $setID " . ref($user_set) . "\n"; - my $setIsVersioned = (defined($user_set->assignment_type) && $user_set->assignment_type =~ /gateway/) ? 1 : 0; - my @setVersions = (); - if ($setIsVersioned) { - my @vList = $db->listSetVersions($userID, $setID); - # we have to have the merged set versions to - # know what each of their assignment types - # are (because proctoring can change) - @setVersions = $db->getMergedSetVersions(map { [ $userID, $setID, $_ ] } @vList); - - # add the set versions to our list of sets - # foreach ( @setVersions ) { - # $setsByID{$_->set_id . ",v" . $_->version_id} = $_; - # } - # # flag the existence of set versions for this set - # $setVersionsByID{$setName} = [ @vList ]; - # # and save the set names for display - # push( @allSetIDs, $setName ); - # push( @allSetIDs, map { "$setName,v$_" } @vList ); - - } else { - # push( @allSetIDs, $setName ); - # $setVersionsByID{$setName} = "None"; - } - my $grade; - if ($setIsVersioned) { - if (@setVersions) { - $grade = 0; - foreach my $setVersion (@setVersions) { # get highest grade among versions - #print LOG "getting set $userID $setID version:".ref($setVersion)."\n"; - my $current_grade = get_set_grade_for_UserSet($db, $setVersion); - $grade = $current_grade if $current_grade > $grade; - - } - - } else { - $grade = " "; - } - } else { # not versioned - $grade = get_set_grade_for_UserSet($db, $user_set); - } - $grade; # return grade -} - -############################################ -# get_set_grade_for_UserSet ($db, $user_set); -#input $userID, $setID (UserSet record); -#output set grade for a homework problem or a single set version of a gateway quiz -############################################ - -sub get_set_grade_for_UserSet { - my $db = shift; - my $user_set = shift; - warn "get_set_grade_for_UserSet(db, user_set); an argument is missing db: $db user_set $user_set" - unless ref($db) =~ /DB/ and ref($user_set) =~ /Set/; - my $setIsVersioned = - (defined($user_set->assignment_type()) && $user_set->assignment_type() =~ /gateway/) ? 1 : 0; - my @problemData = (); - print LOG "get_set_grade_for_UserSet: getting set " . $user_set->set_id . " " . " for " . $user_set->user_id . "\n"; - if ($setIsVersioned) { - @problemData = $db->getAllMergedProblemVersions($user_set->user_id, $user_set->set_id, $user_set->version_id) - if $user_set->can('version_id'); - } else { - @problemData = $db->getAllMergedUserProblems($user_set->user_id, $user_set->set_id); - } - - my $grade = 0; - for (my $i = 0; $i < @problemData; $i++) { - #print LOG "$userID problem Data",join(" ", %{$problemData[$i]}),"\n\n"; - $grade += ($problemData[$i]->status) * ($problemData[$i]->value); - #print LOG "grade is $grade\n"; - } - return $grade; -} -1; diff --git a/lib/WebworkSOAP/Classes/Course.pm b/lib/WebworkSOAP/Classes/Course.pm deleted file mode 100644 index 753513a473..0000000000 --- a/lib/WebworkSOAP/Classes/Course.pm +++ /dev/null @@ -1,3 +0,0 @@ -package WebworkSOAP::Classes::Course; - -1; diff --git a/lib/WebworkSOAP/Classes/GlobalProblem.pm b/lib/WebworkSOAP/Classes/GlobalProblem.pm deleted file mode 100644 index 23c8ca8f41..0000000000 --- a/lib/WebworkSOAP/Classes/GlobalProblem.pm +++ /dev/null @@ -1,32 +0,0 @@ -package WebworkSOAP::Classes::GlobalProblem; - -=pod - -=begin WSDL - _ATTR set_id $string set_id - _ATTR problem_id $string problem_id - _ATTR source_file $string source_file - _ATTR value $string value - _ATTR max_attempts $string max_attempts - _ATTR showMeAnother $string showMeAnother - _ATTR showMeAnotherCount $string showMeAnotherCount -=end WSDL - -=cut - -sub new { - my $self = shift; - my $data = shift; - $self = {}; - $self->{set_id} = SOAP::Data->type('string', $data->set_id); - $self->{problem_id} = SOAP::Data->type('string', $data->problem_id); - $self->{source_file} = SOAP::Data->type('string', $data->source_file); - $self->{value} = SOAP::Data->type('string', $data->value); - $self->{max_attempts} = SOAP::Data->type('string', $data->max_attempts); - $self->{showMeAnother} = SOAP::Data->type('string', $data->showMeAnother); - $self->{showMeAnotherCount} = SOAP::Data->type('string', $data->showMeAnotherCount); - bless $self; - return $self; -} - -1; diff --git a/lib/WebworkSOAP/Classes/GlobalSet.pm b/lib/WebworkSOAP/Classes/GlobalSet.pm deleted file mode 100644 index 8c241c6683..0000000000 --- a/lib/WebworkSOAP/Classes/GlobalSet.pm +++ /dev/null @@ -1,52 +0,0 @@ -package WebworkSOAP::Classes::GlobalSet; - -=pod - -=begin WSDL - _ATTR set_id $string set_id - _ATTR set_header $string set_header - _ATTR hardcopy_header $string hardcopy_header - _ATTR open_date $string open_date - _ATTR due_date $string due_date - _ATTR answer_date $string answer_date - _ATTR visible $string visible - _ATTR enable_reduced_scoring $string enable_reduced_scoring - _ATTR assignment_type $string assignment_type - _ATTR attempts_per_version $string attempts_per_version - _ATTR time_interval $string time_interval - _ATTR versions_per_interval $string versions_per_interval - _ATTR version_time_limit $string version_time_limit - _ATTR version_creation_time $string version_creation_time - _ATTR problem_randorder $string problem_randorder - _ATTR version_last_attempt_time $string version_last_attempt_time - _ATTR problems_per_page $string problems_per_page -=end WSDL - -=cut - -sub new() { - my $self = shift; - my $data = shift; - $self = {}; - $self->{set_id} = SOAP::Data->type('string', $data->set_id); - $self->{set_header} = SOAP::Data->type('string', $data->set_header); - $self->{hardcopy_header} = SOAP::Data->type('string', $data->hardcopy_header); - $self->{open_date} = SOAP::Data->type('string', $data->open_date); - $self->{due_date} = SOAP::Data->type('string', $data->due_date); - $self->{answer_date} = SOAP::Data->type('string', $data->answer_date); - $self->{visible} = SOAP::Data->type('string', $data->visible); - $self->{enable_reduced_scoring} = SOAP::Data->type('string', $data->enable_reduced_scoring); - $self->{assignment_type} = SOAP::Data->type('string', $data->assignment_type); - $self->{attempts_per_version} = SOAP::Data->type('string', $data->attempts_per_version); - $self->{time_interval} = SOAP::Data->type('string', $data->time_interval); - $self->{versions_per_interval} = SOAP::Data->type('string', $data->versions_per_interval); - $self->{version_time_limit} = SOAP::Data->type('string', $data->version_time_limit); - $self->{version_creation_time} = SOAP::Data->type('string', $data->version_creation_time); - $self->{problem_randorder} = SOAP::Data->type('string', $data->problem_randorder); - $self->{version_last_attempt_time} = SOAP::Data->type('string', $data->version_last_attempt_time); - $self->{problems_per_page} = SOAP::Data->type('string', $data->problems_per_page); - bless $self; - return $self; -} - -1; diff --git a/lib/WebworkSOAP/Classes/Key.pm b/lib/WebworkSOAP/Classes/Key.pm deleted file mode 100644 index e9b47907be..0000000000 --- a/lib/WebworkSOAP/Classes/Key.pm +++ /dev/null @@ -1,24 +0,0 @@ -package WebworkSOAP::Classes::Key; - -=pod - -=begin WSDL - _ATTR user_id $string user_id - _ATTR key $string key - _ATTR timestamp $string timestamp -=end WSDL - -=cut - -sub new { - my $self = shift; - my $data = shift; - $self = {}; - $self->{user_id} = SOAP::Data->type('string', $data->user_id); - $self->{key} = SOAP::Data->type('string', $data->key); - $self->{timestamp} = SOAP::Data->type('string', $data->timestamp); - bless $self; - return $self; -} - -1; diff --git a/lib/WebworkSOAP/Classes/Password.pm b/lib/WebworkSOAP/Classes/Password.pm deleted file mode 100644 index 353e9d04b9..0000000000 --- a/lib/WebworkSOAP/Classes/Password.pm +++ /dev/null @@ -1,22 +0,0 @@ -package WebworkSOAP::Classes::Password; - -=pod - -=begin WSDL - _ATTR user_id $string user_id - _ATTR password $string password -=end WSDL - -=cut - -sub new { - my $self = shift; - my $data = shift; - $self = {}; - $self->{user_id} = SOAP::Data->type('string', $data->user_id); - $self->{password} = SOAP::Data->type('string', $data->password); - bless $self; - return $self; -} - -1; diff --git a/lib/WebworkSOAP/Classes/Permission.pm b/lib/WebworkSOAP/Classes/Permission.pm deleted file mode 100644 index 07d7a8cb84..0000000000 --- a/lib/WebworkSOAP/Classes/Permission.pm +++ /dev/null @@ -1,22 +0,0 @@ -package WebworkSOAP::Classes::Permission; - -=pod - -=begin WSDL - _ATTR user_id $string user_id - _ATTR permission $string permission -=end WSDL - -=cut - -sub new { - my $self = shift; - my $data = shift; - $self = {}; - $self->{user_id} = SOAP::Data->type('string', $data->user_id); - $self->{permission} = SOAP::Data->type('string', $data->permission); - bless $self; - return $self; -} - -1; diff --git a/lib/WebworkSOAP/Classes/User.pm b/lib/WebworkSOAP/Classes/User.pm deleted file mode 100644 index 358470d44d..0000000000 --- a/lib/WebworkSOAP/Classes/User.pm +++ /dev/null @@ -1,36 +0,0 @@ -package WebworkSOAP::Classes::User; - -=pod - -=begin WSDL - _ATTR user_id $string user_id - _ATTR first_name $string first_name - _ATTR last_name $string last_name - _ATTR email_address $string email_address - _ATTR student_id $string student_id - _ATTR status $string status - _ATTR section $string section - _ATTR recitation $string recitation - _ATTR comment $string comment -=end WSDL - -=cut - -sub new { - my $self = shift; - my $data = shift; - $self = {}; - $self->{user_id} = SOAP::Data->type('string', $data->user_id); - $self->{first_name} = SOAP::Data->type('string', $data->first_name); - $self->{last_name} = SOAP::Data->type('string', $data->last_name); - $self->{email_address} = SOAP::Data->type('string', $data->email_address); - $self->{student_id} = SOAP::Data->type('string', $data->student_id); - $self->{status} = SOAP::Data->type('string', $data->status); - $self->{section} = SOAP::Data->type('string', $data->section); - $self->{recitation} = SOAP::Data->type('string', $data->recitation); - $self->{comment} = SOAP::Data->type('string', $data->comment); - bless $self; - return $self; -} - -1; diff --git a/lib/WebworkSOAP/Classes/UserProblem.pm b/lib/WebworkSOAP/Classes/UserProblem.pm deleted file mode 100644 index 576916e952..0000000000 --- a/lib/WebworkSOAP/Classes/UserProblem.pm +++ /dev/null @@ -1,46 +0,0 @@ -package WebworkSOAP::Classes::UserProblem; - -=pod - -=begin WSDL - _ATTR user_id $string user_id - _ATTR set_id $string set_id - _ATTR problem_id $string problem_id - _ATTR source_file $string source_file - _ATTR value $string value - _ATTR max_attempts $string max_attempts - _ATTR showMeAnother $string showMeAnother - _ATTR showMeAnotherCount $string showMeAnotherCount - _ATTR problem_seed $string problem_seed - _ATTR status $string status - _ATTR attempted $string attempted - _ATTR last_answer $string last_answer - _ATTR num_correct $string num_correct - _ATTR num_incorrect $string num_incorrect -=end WSDL - -=cut - -sub new { - my $self = shift; - my $data = shift; - $self = {}; - $self->{user_id} = SOAP::Data->type('string', $data->user_id); - $self->{set_id} = SOAP::Data->type('string', $data->set_id); - $self->{problem_id} = SOAP::Data->type('string', $data->problem_id); - $self->{source_file} = SOAP::Data->type('string', $data->source_file); - $self->{value} = SOAP::Data->type('string', $data->value); - $self->{max_attempts} = SOAP::Data->type('string', $data->max_attempts); - $self->{showMeAnother} = SOAP::Data->type('string', $data->showMeAnother); - $self->{showMeAnotherCount} = SOAP::Data->type('string', $data->showMeAnotherCount); - $self->{problem_seed} = SOAP::Data->type('string', $data->problem_seed); - $self->{status} = SOAP::Data->type('string', $data->status); - $self->{attempted} = SOAP::Data->type('string', $data->attempted); - $self->{last_answer} = SOAP::Data->type('string', $data->last_answer); - $self->{num_correct} = SOAP::Data->type('string', $data->num_correct); - $self->{num_incorrect} = SOAP::Data->type('string', $data->num_incorrect); - bless $self; - return $self; -} - -1; diff --git a/lib/WebworkSOAP/Classes/UserSet.pm b/lib/WebworkSOAP/Classes/UserSet.pm deleted file mode 100644 index 6c314ecb7a..0000000000 --- a/lib/WebworkSOAP/Classes/UserSet.pm +++ /dev/null @@ -1,56 +0,0 @@ -package WebworkSOAP::Classes::UserSet; - -=pod - -=begin WSDL - _ATTR user_id $string user_id - _ATTR set_id $string set_id - _ATTR psvn $string psvn - _ATTR set_header $string set_header - _ATTR hardcopy_header $string hardcopy_header - _ATTR open_date $string open_date - _ATTR due_date $string due_date - _ATTR answer_date $string answer_date - _ATTR visible $string visible - _ATTR enable_reduced_scoring $string enable_reduced_scoring - _ATTR assignment_type $string assignment_type - _ATTR attempts_per_version $string attempts_per_version - _ATTR time_interval $string time_interval - _ATTR versions_per_interval $string versions_per_interval - _ATTR version_time_limit $string version_time_limit - _ATTR version_creation_time $string version_creation_time - _ATTR problem_randorder $string problem_randorder - _ATTR version_last_attempt_time $string version_last_attempt_time - _ATTR problems_per_page $string problems_per_page -=end WSDL - -=cut - -sub new() { - my $self = shift; - my $data = shift; - $self = {}; - $self->{user_id} = SOAP::Data->type('string', $data->user_id); - $self->{set_id} = SOAP::Data->type('string', $data->set_id); - $self->{psvn} = SOAP::Data->type('string', $data->psvn); - $self->{set_header} = SOAP::Data->type('string', $data->set_header); - $self->{hardcopy_header} = SOAP::Data->type('string', $data->hardcopy_header); - $self->{open_date} = SOAP::Data->type('string', $data->open_date); - $self->{due_date} = SOAP::Data->type('string', $data->due_date); - $self->{answer_date} = SOAP::Data->type('string', $data->answer_date); - $self->{visible} = SOAP::Data->type('string', $data->visible); - $self->{enable_reduced_scoring} = SOAP::Data->type('string', $data->enable_reduced_scoring); - $self->{assignment_type} = SOAP::Data->type('string', $data->assignment_type); - $self->{attempts_per_version} = SOAP::Data->type('string', $data->attempts_per_version); - $self->{time_interval} = SOAP::Data->type('string', $data->time_interval); - $self->{versions_per_interval} = SOAP::Data->type('string', $data->versions_per_interval); - $self->{version_time_limit} = SOAP::Data->type('string', $data->version_time_limit); - $self->{version_creation_time} = SOAP::Data->type('string', $data->version_creation_time); - $self->{problem_randorder} = SOAP::Data->type('string', $data->problem_randorder); - $self->{version_last_attempt_time} = SOAP::Data->type('string', $data->version_last_attempt_time); - $self->{problems_per_page} = SOAP::Data->type('string', $data->problems_per_page); - bless $self; - return $self; -} - -1; diff --git a/lib/WebworkSOAP/SOAP.pm b/lib/WebworkSOAP/SOAP.pm deleted file mode 100644 index 860434b73c..0000000000 --- a/lib/WebworkSOAP/SOAP.pm +++ /dev/null @@ -1,44 +0,0 @@ -package WebworkSOAP::SOAP; -use Mojo::Base 'Mojolicious::Controller', -signatures; - -use Pod::WSDL; -use SOAP::Lite; - -use WebworkSOAP; - -sub wsdl ($c) { - my $pod = Pod::WSDL->new( - source => 'WebworkSOAP', - location => $c->server_root_url . '/webwork2_rpc', - withDocumentation => 0 - ); - - return $c->render(data => $pod->WSDL); -} - -sub dispatch ($c) { - my $som = SOAP::Deserializer->deserialize($c->req->body); - - my $som_body = $som->body; - my $method = (keys %$som_body)[0]; - my @params = $som->paramsin; - - my $serializer = SOAP::Serializer->new; - - my $result = eval { WebworkSOAP->$method(@params); }; - - # This is rather minimal error handling. - if ($@) { - if (ref $@ eq 'SOAP::Fault') { - return $c->render( - data => $serializer->envelope(fault => $@->faultcode), - status => $@->faultcode == 8 ? 401 : 500 - ); - } - return $c->render(data => $serializer->envelope(fault => 1), status => 500); - } - - return $c->render(data => $serializer->envelope(freeform => \$result)); -} - -1;