summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--modules-available/dozmod/api.inc.php34
-rw-r--r--modules-available/sysconfig/addmodule_screensaver.inc.php24
-rw-r--r--modules-available/sysconfig/inc/configmodule/screensaver.inc.php1
-rw-r--r--modules-available/sysconfig/inc/configmodule/sshconfig.inc.php2
-rw-r--r--modules-available/sysconfig/inc/configmodule/sshkey.inc.php2
5 files changed, 43 insertions, 20 deletions
diff --git a/modules-available/dozmod/api.inc.php b/modules-available/dozmod/api.inc.php
index b5030cc5..34b5136d 100644
--- a/modules-available/dozmod/api.inc.php
+++ b/modules-available/dozmod/api.inc.php
@@ -156,6 +156,7 @@ function getListForLocations(array $locationIds, bool $raw)
to be in "exam-mode" and only offer him exams (no lectures) */
$key = 'lectures_' . cache_hash($locationIds);
$examMode = Request::get('exams', 'normal-mode', 'string') !== 'normal-mode';
+ $cow = Request::get('cow-user', null, 'string');
$clientServerMismatch = false;
if (Module::isAvailable('exams')) {
// If we have the exam mode module, we can enforce a server side check and make sure it agrees with the client
@@ -176,16 +177,21 @@ function getListForLocations(array $locationIds, bool $raw)
$rawKey = $key . '_raw';
if ($raw) {
Header('Content-Type: text/xml; charset=utf-8');
- if (cache_has($rawKey)) {
+ if ($cow === null && cache_has($rawKey)) {
cache_get_passthru($rawKey);
}
- } elseif (cache_has($key)) {
+ } elseif ($cow === null && cache_has($key)) {
return unserialize(cache_get($key));
}
// Not in cache
$url = LIST_URL . "?locations=" . implode('%20', $locationIds);
if ($examMode) {
$url .= '&exams';
+ } else {
+ // Only allow CoW in non-exam environment
+ if ($cow !== null) {
+ $url .= '&cow-user=' . urlencode($cow);
+ }
}
$t = microtime(true);
$value = Download::asString($url, 60, $code);
@@ -195,9 +201,11 @@ function getListForLocations(array $locationIds, bool $raw)
}
if ($value === false || $code < 200 || $code > 299)
return false;
- cache_put($rawKey, $value);
$list = xmlToLectureIds($value);
- cache_put($key, serialize($list));
+ if ($cow === null) {
+ cache_put($rawKey, $value);
+ cache_put($key, serialize($list));
+ }
if ($raw) {
die($value);
}
@@ -214,12 +222,16 @@ function outputLectureXmlForLocation(array $locationIds)
return getListForLocations($locationIds, true);
}
-function _getVmData(string $lecture_uuid, string $subResource = null)
+function _getVmData(string $lecture_uuid, string $subResource = null, string $cowUser = null)
{
$url = VMX_URL . '/' . $lecture_uuid;
if ($subResource !== null) {
$url .= '/' . $subResource;
}
+ if ($cowUser !== null) {
+ $url .= '?cow-user=' . urlencode($cowUser);
+ $url .= '&cow-type=' . urlencode(Request::get('cow-type', '', 'string'));
+ }
$t = microtime(true);
$response = Download::asString($url, 60, $code);
$t = microtime(true) - $t;
@@ -236,15 +248,17 @@ function _getVmData(string $lecture_uuid, string $subResource = null)
/** Caching wrapper around _getVmData() **/
function outputResource(string $lecture_uuid, string $resource): void
{
+ $key = $resource . '_' . $lecture_uuid;
if ($resource === 'metadata') {
// HACK: config.tgz is compressed, don't use gzip output handler
@ob_end_clean();
Header('Content-Type: application/gzip');
+ $cow = Request::get('cow-user', null, 'string');
} else {
Header('Content-Type: text/plain; charset=utf-8');
+ $cow = null;
}
- $key = $resource . '_' . $lecture_uuid;
- if (cache_has($key)) {
+ if ($cow === null && cache_has($key)) {
if ($resource === 'metadata' || $resource === 'vmx') {
// HACK HACK HACK: Update launch counter as it was cached,
// otherwise dmsd would take care of increasing it...
@@ -253,14 +267,16 @@ function outputResource(string $lecture_uuid, string $resource): void
}
cache_get_passthru($key);
} else {
- $value = _getVmData($lecture_uuid, $resource);
+ $value = _getVmData($lecture_uuid, $resource, $cow);
if ($value === false)
return;
if (is_int($value)) {
http_response_code($value);
exit;
}
- cache_put($key, $value);
+ if ($cow === null) {
+ cache_put($key, $value);
+ }
die($value);
}
}
diff --git a/modules-available/sysconfig/addmodule_screensaver.inc.php b/modules-available/sysconfig/addmodule_screensaver.inc.php
index 7b6d0afb..c84f021e 100644
--- a/modules-available/sysconfig/addmodule_screensaver.inc.php
+++ b/modules-available/sysconfig/addmodule_screensaver.inc.php
@@ -11,10 +11,10 @@ class Screensaver_Start extends AddModule_Base
protected function preprocessInternal()
{
/* Load or initialise session data */
- if (Request::get('back', 'false', 'string') !== 'false')
+ if (Request::get('back', 'false', 'string') !== 'false') {
/* If coming via the back button, load the session data */
- $this->session_data = Session::get('data');
- elseif ($this->edit !== null) {
+ $this->session_data = Session::get(Screensaver_Helper::SESSION_KEY);
+ } elseif ($this->edit !== null) {
$this->session_data = array(
'title' => $this->edit->title(),
'qss' => $this->edit->getData('qss'),
@@ -46,7 +46,7 @@ class Screensaver_Start extends AddModule_Base
);
}
$this->session_data['next'] = 'idle-kill';
- Session::set('data', $this->session_data);
+ Session::set(Screensaver_Helper::SESSION_KEY, $this->session_data);
}
protected function renderInternal()
@@ -71,7 +71,7 @@ class Screensaver_Text extends AddModule_Base
protected function preprocessInternal()
{
/* Load session data */
- $this->session_data = Session::get('data');
+ $this->session_data = Session::get(Screensaver_Helper::SESSION_KEY);
$id = Request::post('id', '', 'string');
if ($id === 'start') {
@@ -82,7 +82,7 @@ class Screensaver_Text extends AddModule_Base
$next = Request::post('next', $this->session_data['next'], 'string');
$this->session_data['next'] = $next;
- Session::set('data', $this->session_data);
+ Session::set(Screensaver_Helper::SESSION_KEY, $this->session_data);
if ($next === 'finish')
@@ -145,7 +145,7 @@ class Screensaver_Finish extends AddModule_Base
protected function preprocessInternal()
{
/* Get session data */
- $session_data = Session::get('data');
+ $session_data = Session::get(Screensaver_Helper::SESSION_KEY);
if (empty($session_data['title'])) {
Message::addError('missing-title');
@@ -181,13 +181,17 @@ class Screensaver_Finish extends AddModule_Base
AddModule_Base::setStep('AddModule_Assign', $module->id());
return;
}
+ Session::set(Screensaver_Helper::SESSION_KEY, false);
Util::redirect('?do=SysConfig');
}
}
class Screensaver_Helper
{
- public static function processQssData(&$session_data) {
+ const SESSION_KEY = 'scrsvrmod';
+
+ public static function processQssData(&$session_data)
+ {
/* Process post data from the Screensaver_Start */
$session_data['title'] = Request::post('title', $session_data['title'], 'string');
if (empty($session_data['title'])) {
@@ -227,7 +231,8 @@ class Screensaver_Helper
}
}
- public static function processScreensaverText(&$session_data, $name) {
+ public static function processScreensaverText(&$session_data, $name)
+ {
/* Process post data from the Screensaver_Text */
$session_data['messages']['General'][$name] = Request::post('msg_value', '', 'string');
$session_data['texts']['text-' . $name] = Request::post('text_value', '', 'string');
@@ -242,5 +247,6 @@ class Screensaver_Helper
$session_data['texts']['text-' . $name . '-locked'] = Request::post('text_locked_value', '', 'string');
}
}
+
}
diff --git a/modules-available/sysconfig/inc/configmodule/screensaver.inc.php b/modules-available/sysconfig/inc/configmodule/screensaver.inc.php
index 1797331c..66f8d41c 100644
--- a/modules-available/sysconfig/inc/configmodule/screensaver.inc.php
+++ b/modules-available/sysconfig/inc/configmodule/screensaver.inc.php
@@ -27,6 +27,7 @@ class ConfigModule_Screensaver extends ConfigModule
'id' => $taskId,
'files' => $this->getFileArray(),
'destination' => $tgz,
+ 'parentTask' => $parent,
), false);
}
diff --git a/modules-available/sysconfig/inc/configmodule/sshconfig.inc.php b/modules-available/sysconfig/inc/configmodule/sshconfig.inc.php
index a62d1035..b6fae967 100644
--- a/modules-available/sysconfig/inc/configmodule/sshconfig.inc.php
+++ b/modules-available/sysconfig/inc/configmodule/sshconfig.inc.php
@@ -21,7 +21,7 @@ class ConfigModule_SshConfig extends ConfigModule
$config = $this->moduleData + array(
'filename' => $tgz,
'failOnParentFail' => false,
- 'parent' => $parent
+ 'parentTask' => $parent,
);
return Taskmanager::submit('SshdConfigGenerator', $config);
}
diff --git a/modules-available/sysconfig/inc/configmodule/sshkey.inc.php b/modules-available/sysconfig/inc/configmodule/sshkey.inc.php
index e4a55ad7..91df47d3 100644
--- a/modules-available/sysconfig/inc/configmodule/sshkey.inc.php
+++ b/modules-available/sysconfig/inc/configmodule/sshkey.inc.php
@@ -24,7 +24,7 @@ class ConfigModule_SshKey extends ConfigModule
=> $this->moduleData['publicKey']],
'destination' => $tgz,
'failOnParentFail' => false,
- 'parent' => $parent
+ 'parentTask' => $parent,
);
// Create config module, which will also check if the pubkey is valid
return Taskmanager::submit('MakeTarball', $config);