/** * Create new entity with parsed entityid * * Create a new entity and give the user access to the entity. * * @param string $entityid Entity id for the new entity * @param string $type Entity type * * @return sspmod_janus_Entity|bool Returns the entity or false on error. * @since Method available since Release 1.0.0 */ public function createNewEntity($entityid, $type) { assert('is_string($entityid)'); assert('is_string($type)'); if ($this->isEntityIdInUse($entityid, $errorMessage)) { return $errorMessage; } if ($this->hasEntityIdBeenUsed($entityid, $errorMessage)) { return $errorMessage; } $startstate = $this->_config->getString('workflowstate.default'); // Get the default ARP $default_arp = '0'; $st = $this->execute("SELECT aid FROM " . self::$prefix . "arp WHERE is_default = TRUE AND deleted = ''"); if ($st) { $rows = $st->fetchAll(); if (count($rows) === 1) { $default_arp = $rows[0]['aid']; } } // Instantiate a new entity $entity = new sspmod_janus_Entity($this->_config, true); $entity->setEntityid($entityid); $entity->setWorkflow($startstate); $entity->setType($type); $entity->setArp($default_arp); $entity->setUser($this->_user->getUid()); $entity->setRevisionnote('Entity created.'); $entity->save(); $st = $this->execute('INSERT INTO ' . self::$prefix . 'hasEntity (`uid`, `eid`, `created`, `ip`) VALUES (?, ?, ?, ?);', array($this->_user->getUid(), $entity->getEid(), date('c'), $_SERVER['REMOTE_ADDR'])); if ($st === false) { return 'error_db'; } $ec = new sspmod_janus_EntityController($this->_config); $ec->setEntity($entity); $update = false; // Get metadatafields for new type $nm_mb = new sspmod_janus_MetadatafieldBuilder($this->_config->getArray('metadatafields.' . $type)); $metadatafields = $nm_mb->getMetadatafields(); // Add all required fileds foreach ($metadatafields as $mf) { if (isset($mf->required) && $mf->required === true) { $ec->addMetadata($mf->name, $mf->default); $update = true; } } if ($update === true) { $ec->saveEntity(); } // Reset list of entities $this->_entities = null; $this->_loadEntities(); return $entity->getEid(); }
public static function method_getUser($data, &$status) { if (!isset($data["userid"])) { $status = 400; return ''; } $config = SimpleSAML_Configuration::getConfig('module_janus.php'); $user = new sspmod_janus_User($config->getValue('store')); $user->setUserid($data['userid']); $user->load(sspmod_janus_User::USERID_LOAD); $result = array(); $result['uid'] = $user->getUid(); $result['userid'] = $user->getUserid(); $result['active'] = $user->getActive(); $result['type'] = $user->getType(); $result['data'] = $user->getdata(); return $result; }
/** * Get User information * * @access protected (see isProtected) * @static * @param array $data Request parameters for getUser method, supports: * - string $data['userid']: UserID (login name) to get data for * @param int $statusCode HTTP Status code to use in response * @return array|string User information */ public static function method_getUser($data, &$statusCode) { if (!isset($data["userid"])) { $statusCode = 400; return ''; } $config = sspmod_janus_DiContainer::getInstance()->getConfig(); $user = new sspmod_janus_User(); $user->setUserid($data['userid']); $user->load(sspmod_janus_User::USERID_LOAD); $result = array(); $result['uid'] = $user->getUid(); $result['userid'] = $user->getUserid(); $result['active'] = $user->getActive(); $result['type'] = $user->getType(); $result['data'] = $user->getdata(); return $result; }
/** * Create new entity with parsed entityid * * Create a new entity and give the user access to the entity. * * @param string $entityid Entity id for the new entity * @param string $type Entity type * @param string $metadataUrl The -optional- metadata url for the new entity * * @return sspmod_janus_Entity|bool Returns the entity or false on error. * @since Method available since Release 1.0.0 */ public function createNewEntity($entityid, $type, $metadataUrl = null) { assert('is_string($entityid)'); assert('is_string($type)'); if ($this->isEntityIdInUse($entityid, $errorMessage)) { return $errorMessage; } $startstate = $this->_config->getString('workflowstate.default'); // Instantiate a new entity $entity = new sspmod_janus_Entity($this->_config, true); $entity->setEntityid($entityid); $entity->setWorkflow($startstate); $entity->setType($type); $entity->setUser($this->_user->getUid()); $entity->setRevisionnote('Entity created.'); if ($metadataUrl) { $entity->setMetadataURL($metadataUrl); } $entity->save(array()); $adminUtil = new sspmod_janus_AdminUtil(); $adminUtil->addUserToEntity($entity->getEid(), $this->_user->getUid()); $ec = sspmod_janus_DiContainer::getInstance()->getEntityController(); $ec->setEntity($entity); $update = false; // Get metadatafields for new type $nm_mb = new sspmod_janus_MetadataFieldBuilder($this->_config->getArray('metadatafields.' . $type)); $metadatafields = $nm_mb->getMetadataFields(); // Add all required fileds foreach ($metadatafields as $mf) { if (isset($mf->required) && $mf->required === true) { $ec->addMetadata($mf->name, $mf->default); $update = true; } } if ($update === true) { $ec->saveEntity(); } // Reset list of entities $this->_entities = null; $this->_loadEntities(); return $entity->getEid(); }
function addUserToEntity($params) { if (!isset($params['eid']) || !isset($params['uid'])) { return FALSE; } $eid = $params['eid']; $uid = $params['uid']; # security hack - uid is actually userid ie. user@example.com - convert it to a janus uid as expected for further processing $janus_config = sspmod_janus_DiContainer::getInstance()->getConfig(); $user = new sspmod_janus_User(); $user->setUserid($uid); if ($user->load(sspmod_janus_User::USERID_LOAD) === false) { echo json_encode(array('status' => 'Unknown user')); exit; } $actual_uid = $user->getUid(); $util = new sspmod_janus_AdminUtil(); try { if (!($userid = $util->addUserToEntity($eid, $actual_uid))) { return FALSE; } } catch (Exception $e) { echo json_encode(array('status' => 'An unspecified error occurred')); exit; } return array('eid' => $eid, 'uid' => $actual_uid, 'userid' => $userid); }
} if (!empty($_POST) && isset($_POST['apply'])) { if (!isset($_POST['csrf_token']) || !$csrf_provider->isCsrfTokenValid('import_entity', $_POST['csrf_token'])) { SimpleSAML_Logger::warning('Janus: [SECURITY] CSRF token not found or invalid'); throw new SimpleSAML_Error_BadRequest('Missing valid csrf token!'); } // Update entity if updated if ($update) { $entityController->saveEntity(); $entityController->loadEntity(); $entity = $entityController->getEntity(); // Notify users who have asked to be updated when $pm = new sspmod_janus_Postman(); $addresses[] = 'ENTITYUPDATE-' . $entity->getEid(); $editLink = SimpleSAML_Module::getModuleURL('janus/editentity.php', array('eid' => $entity->getEid(), 'revisionid' => $entity->getRevisionid())); $pm->post('Entity updated - ' . $entity->getEntityid(), 'Permalink: <a href="' . htmlspecialchars($editLink) . '">' . htmlspecialchars($editLink) . '</a><br /><br />' . htmlspecialchars($entity->getRevisionnote()) . '<br /><br />' . htmlspecialchars($note), $addresses, $user->getUid()); } $session->deleteData('string', 'meta_xml'); $session->deleteData('string', 'meta_json'); SimpleSAML_Utilities::redirectTrustedUrl(SimpleSAML_Module::getModuleURL('janus/editentity.php'), array('eid' => $entity->getEid(), 'revisionid' => $entity->getRevisionid())); exit; } $et->data['update'] = $update; $newMetadata = $entityController->getMetaArray(); unset($newMetadata['attributes']); $newMetadata = $converter->execute($newMetadata); $et->data['new'] = $newMetadata; $et->data['newArp'] = $entityController->getArpAttributes(); $et->data['newAcl'] = array('AllowedAll' => $entityController->getAllowedAll(), 'Allowed' => array_map(function ($allowedEntity) use($janusConfig) { // @todo this is very inefficient for large sets $controller = sspmod_janus_DiContainer::getInstance()->getEntityController();
exit; } $attributes = $as->getAttributes(); // Require that we can get this users id. if (!isset($attributes[$userIdAttribute])) { throw new Exception('User ID is missing'); } /** @var string $userId */ $userId = $attributes[$userIdAttribute][0]; if (isset($_POST['submit'])) { $csrf_provider = sspmod_janus_DiContainer::getInstance()->getCsrfProvider(); if (!isset($_POST['csrf_token']) || !$csrf_provider->isCsrfTokenValid('add_user', $_POST['csrf_token'])) { SimpleSAML_Logger::warning('Janus: [SECURITY] CSRF token not found or invalid'); throw new SimpleSAML_Error_BadRequest('Missing valid csrf token!'); } // Create the user $user = new sspmod_janus_User($janusConfig->getValue('store')); $user->setUserid($userId); $user->setType($defaultUserType); $user->setActive('yes'); $user->save(); // Trigger an event $pm = new sspmod_janus_Postman(); $pm->post('New user created', 'A new user has been created with username: '******'USER-NEW', $user->getUid()); } $template = new SimpleSAML_XHTML_Template($sspConfig, 'janus:newuser.php', 'janus:newuser'); $template->data['userid'] = $userId; if (isset($user)) { $template->data['user_created'] = TRUE; } $template->show();
} } // Add all required fields for new type foreach ($new_metadata as $mf) { if (isset($mf->required) && $mf->required === true) { $entityController->addMetadata($mf->name, $mf->default); markForUpdate(); } } markForUpdate(); $note .= 'Changed entity type: ' . $_POST['entity_type'] . '<br />'; } // Set parent revision $entity->setParent($parentRevisionId); // Set user $entity->setUser($user->getUid()); // Set revision note if (empty($_POST['revisionnote'])) { if ($janus_config->getBoolean('revision.notes.required', false)) { $msg = 'error_revision_note_is_required'; } else { $entity->setRevisionnote('No revision note'); } } else { $entity->setRevisionnote($_POST['revisionnote']); } // Update entity if updated if ($update) { $entityController->saveEntity(); $entityController->loadEntity(); $pm = new sspmod_janus_Postman();
$authsource = $janus_config->getValue('auth', 'login-admin'); $useridattr = $janus_config->getValue('useridattr', 'eduPersonPrincipalName'); if ($session->isValid($authsource)) { $attributes = $session->getAttributes(); // Check if userid exists if (!isset($attributes[$useridattr])) { throw new Exception('User ID is missing'); } $userid = $attributes[$useridattr][0]; } else { SimpleSAML_Utilities::redirect(SimpleSAML_Module::getModuleURL('janus/index.php')); } $econtroller = new sspmod_janus_UserController($janus_config); $usertypes = $janus_config->getValue('usertypes'); $et = new SimpleSAML_XHTML_Template($config, 'janus:newuser.php', 'janus:newuser'); if (isset($_POST['submit'])) { $user = new sspmod_janus_User($janus_config->getValue('store')); $user->setUserid($_POST['userid']); $user->setType($_POST['type']); $user->setActive('yes'); $user->save(); $et->data['user_created'] = TRUE; $pm = new sspmod_janus_Postman(); $pm->post('New user created', 'A new user has been created with username: '******'USER-NEW', $user->getUid()); } if (isset($_GET['userid'])) { $et->data['userid'] = $_GET['userid']; } $et->data['users'] = $econtroller->getUsers(); $et->data['usertypes'] = $usertypes; $et->show();
} } // Add all required fields for new type foreach ($new_metadata as $mf) { if (isset($mf->required) && $mf->required === true) { $mcontroller->addMetadata($mf->name, $mf->default); $update = true; } } $update = TRUE; $note .= 'Changed entity type: ' . $_POST['entity_type'] . '<br />'; } // Set parent revision $entity->setParent($entity->getRevisionid()); // Set user $entity->setUser($user->getUid()); $norevision = array('da' => 'Ingen revisionsnote', 'en' => 'No revision note'); // Set revision note if (empty($_POST['revisionnote'])) { if (array_key_exists($language, $norevision)) { $entity->setRevisionnote($norevision[$language]); } else { $entity->setRevisionnote($norevision['en']); } } else { $entity->setRevisionnote($_POST['revisionnote']); } // Update entity if updated if ($update) { $mcontroller->saveEntity(); $mcontroller->loadEntity();