| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300 |
- <?php
- Lib::loadClass('RouteBase');
- /* @usage - inside cli script:
- * $cronTaskName = 'checkInstall';
- * $keyToken = 'bash_install_check';
- * $token = Router::getRoute('Cron')->generateCliAuthToken($keyToken, $cronTaskName, 300 * 10);
- * $output = Router::getRoute('Cron')->executeCurlTastByToken($cronTaskName, $keyToken, $token);
- */
- /* @usage - inside cli script with args:
- * $cronTaskName = 'forceTablePerms';
- * $keyToken = 'bash_force_table_perms';
- * $token = Router::getRoute('Cron')->generateCliAuthToken($keyToken, $cronTaskName, 300 * 10);
- * $output = Router::getRoute('Cron')->executeCurlTastByToken($cronTaskName, $keyToken, $token, [ 'idGroup' => 3, 'table' => 'CRM_PROCES' ]);
- */
- // TEST: $ php SE/se-lib/Route/Cron-test.php biuro.biall-net.pl
- class Route_Cron extends RouteBase {
- public function handleAuth() {
- if (User::logged()) {
- } else if ($this->authByToken()) {
- } else throw new HttpException('Unauthorized', 401);
- }
- public function generateCliAuthToken($cliKey, $task, $ttl = 300) {
- $generatedToken = uniqid();
- $parts = array();
- $parts[] = $generatedToken;
- $parts[] = $task;
- $parts[] = $ttl;
- $parts[] = time();
- $token = implode(",", $parts);
- $sqlCliKey = "CronCliAuthToken:{$cliKey}";
- $sth = DB::getPDO()->prepare("
- insert into CRM_CONFIG (CONF_KEY, CONF_VAL)
- values ( :cliKey, :token )
- on duplicate key update CONF_VAL = :token
- ");
- $sth->bindValue(':cliKey', $sqlCliKey, PDO::PARAM_STR);
- $sth->bindValue(':token', $token, PDO::PARAM_STR);
- $sth->execute();
- return $generatedToken;
- }
- public function authByToken() {
- $cliKey = V::get('_key', '', $_REQUEST);
- $cliToken = V::get('_token', '', $_REQUEST);
- $sqlCliKey = "CronCliAuthToken:{$cliKey}";
- $sth = DB::getPDO()->prepare("
- select c.CONF_VAL
- from CRM_CONFIG c
- where CONF_KEY = :cliKey
- order by c.ID desc
- limit 1
- ");
- $sth->bindValue(':cliKey', $sqlCliKey, PDO::PARAM_STR);
- $sth->execute();
- $rawToken = $sth->fetch();
- if (!$rawToken || !$rawToken['CONF_VAL']) throw new HttpException("Unauthorized - token not found #1-" . __LINE__, 401);
- $rawToken = explode(',', $rawToken['CONF_VAL']);
- DBG::_('DBG_CRON', '>1', 'rawToken', $rawToken, __CLASS__, __FUNCTION__, __LINE__);
- if (4 != count($rawToken)) throw new HttpException("Unauthorized - token not found #2-" . __LINE__, 401);
- if ($cliToken != $rawToken[0]) throw new HttpException("Unauthorized - token not found #3-" . __LINE__, 401);
- $task = $rawToken[1];
- $ttl = (int)$rawToken[2];
- $createDateTimestamp = (int)$rawToken[3];
- if (!$ttl) throw new HttpException("Unauthorized - token not found #4-" . __LINE__, 401);
- if (!$createDateTimestamp) throw new HttpException("Unauthorized - token not found #5-" . __LINE__, 401);
- DBG::_('DBG_CRON', '>1', 'rawToken', array('createDateTimestamp'=>$createDateTimestamp, 'ttl'=>$ttl, 'cur'=>time()), __CLASS__, __FUNCTION__, __LINE__);
- if ($createDateTimestamp + $ttl < time()) {
- // TODO: remove record from table - one time action?
- throw new HttpException("Unauthorized - token expired #6-" . __LINE__, 401);
- }
- session_write_close();// changes in $_SESSION visible only in current process
- $_SESSION['AUTHORIZE_USER'] = 'anonymous';
- $_SESSION['ADM_NAME'] = 'Anonymous';
- $_SESSION['ADM_ACCOUNT'] = $_SERVER['REMOTE_ADDR'];
- $_SESSION['ADM_ADMIN_LEVEL'] = 10;
- $_SESSION['ADM_ID'] = 9999999999;
- DBG::_('DBG_CRON', '>1', 'rawToken', array('createDateTimestamp'=>$createDateTimestamp, 'ttl'=>$ttl, 'cur'=>time()), __CLASS__, __FUNCTION__, __LINE__);
- $this->runTask($task);
- exit;
- }
- public function executeCurlTastByToken($cronTaskName, $keyToken, $token, $args = []) { // @require $_SERVER['SERVER_NAME']
- $baseUrl = "https://{$_SERVER['SERVER_NAME']}/SE";
- if ('biuro.biall-net.pl' == $_SERVER['SERVER_NAME']) $baseUrl = "https://{$_SERVER['SERVER_NAME']}/SE/version-git";
- // if ('biuro.biall-net.pl' == $_SERVER['SERVER_NAME']) $baseUrl = "https://{$_SERVER['SERVER_NAME']}/dev-pl/se-master"; // DBG
- //file_get_contents("https://{$baseUrl}/index.php?_route=Cron&_key={$keyToken}&_token={$token}&_task=sendNotify");
- $url = "{$baseUrl}/index.php?_route=Cron&_key={$keyToken}&_token={$token}&_task={$cronTaskName}";
- if (!empty($args)) $url .= "&" . implode("&", array_map(function ($key, $val) {
- return "{$key}={$val}";
- }, array_keys($args), array_values($args)));
- $ch = curl_init();
- curl_setopt($ch, CURLOPT_VERBOSE, true);
- curl_setopt($ch, CURLOPT_URL, $url);
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
- curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
- curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
- $return = curl_exec($ch);
- curl_close($ch);
- return $return;
- }
- public function defaultAction() {
- Lib::loadClass('UI');
- UI::gora();
- echo UI::h('div', [ 'class' => "container" ], [
- UI::h('h1', [], "Cron"),
- "...",
- ]);
- UI::dol();
- }
- public function dbgClearNofityAction() {
- Lib::loadClass('UI');
- UI::gora();
- try {
- DB::getPDO()->execSql("update `CRM_NOTIFY` set `last_exec_time` = null");
- UI::alert('info', "Notify cleared");
- } catch (Exception $e) {
- UI::alert('danger', "Error: " . $e->getMessage());
- }
- UI::dol();
- }
- public function dbgChangeNofityToDayBeforeAction() {
- Lib::loadClass('UI');
- UI::gora();
- try {
- DB::getPDO()->execSql("update `CRM_NOTIFY` set `last_exec_time` = DATE_SUB(NOW(), INTERVAL 1 DAY)");
- UI::alert('info', "Notify cleared");
- } catch (Exception $e) {
- UI::alert('danger', "Error: " . $e->getMessage());
- }
- UI::dol();
- }
- public function sendNotifyAction() {
- Lib::loadClass('UI');
- $notify = Router::getRoute('Notify');
- $todoReminders = array();
- if (V::get('DBG_CRON', null, $_GET) > 0) UI::gora();
- echo '<div class="container">' . "\n";
- echo '<h1>Cron</h1>' . "\n";
- try {
- if (V::get('DBG_CRON', null, $_GET) > 0) DBG::table("reminders state - before", DB::getPDO()->fetchAll("select * from CRM_NOTIFY order by last_exec_time limit 20"), __CLASS__, __FUNCTION__, __LINE__);
- {// limit send time to 8 - 20
- $timeNow = time();
- $timeSendLimitFrom = mktime(8, 0, 0, date('n'), date('j'), date('Y'));
- $timeSendLimitTo = mktime(20, 0, 0, date('n'), date('j'), date('Y'));
- $dayNrNow = date('N');
- $daysAllowed = array(1, 2, 3, 4, 5);// 1 = Poniedziałek, ... , 6 - Sobota, 7 - Niedziela
- if ($timeNow > $timeSendLimitFrom && $timeNow < $timeSendLimitTo && in_array($dayNrNow, $daysAllowed)) {
- $todoReminders = $notify->getTodoList(2, array('once_a_day', 'immediately'));
- }
- }
- DBG::_('DBG_CRON', '>0', 'todoReminders', $todoReminders, __CLASS__, __FUNCTION__, __LINE__);
- foreach ($todoReminders as $who => $userReminders) {
- echo "<p>Sending to {$who} reminders {" . json_encode($userReminders) . "}</p>" . "\n";
- //$notify->sendUserReminders($who, $userReminders, $forceMail = 'plabudda@biall-net.pl');// TEST
- $notify->sendUserReminders($who, $userReminders);
- foreach ($userReminders as $when => $listWhat) {
- if (!empty($listWhat)) {
- // $reminders = array_keys($listWhat);
- // echo "<p>Sending to {$who} reminders [" . implode(",", $reminders) . "] at '{$when}'</p>" . "\n";
- // $notify->send($who, $listWhat, $when, $forceMail = 'plabudda@biall-net.pl');
- $notify->markAsSent($who, $listWhat, $when);
- }
- }
- }
- if (V::get('DBG_CRON', null, $_GET) > 0) DBG::table("reminders state - after", DB::getPDO()->fetchAll("select * from CRM_NOTIFY order by last_exec_time limit 20"), __CLASS__, __FUNCTION__, __LINE__);
- } catch (Exception $e) {
- UI::alert('danger', "#" . $e->getLine() . ":" . $e->getMessage());
- }
- echo "\n" . '</div>';// .container
- echo "\n.EOF\n";
- }
- public function checkInstallAction() {
- Lib::loadClass('Router');
- {
- ob_start();
- Router::getRoute('Status')->updateObjectCachePostTask();
- $out = ob_get_clean();
- echo " - Storage acl cache checked\n";
- }
- $routeToReinstallList = array();
- //$routeToReinstallList[] = 'Config';// Config must work before (url token)
- $routeToReinstallList[] = 'Msgs';
- $routeToReinstallList[] = 'FixProjectPath';
- $routeToReinstallList[] = 'FixZasobPath';
- $routeToReinstallList[] = 'FixCrmProcesInitIdx';
- $routeToReinstallList[] = 'Notify';
- $routeToReinstallList[] = 'UrlAction_WmsGenerate';
- // $routeToReinstallList[] = 'FileStorage';// reinstall in bash_install_check.php
- foreach ($routeToReinstallList as $routeName) {
- $route = Router::getRoute($routeName);
- $route->reinstall();
- echo " - {$routeName} checked\n";
- }
- echo "\n.EOF\n";
- }
- /* @usage - inside cli script with args:
- * $cronTaskName = 'forceTablePerms';
- * $keyToken = 'bash_force_table_perms';
- * $token = Router::getRoute('Cron')->generateCliAuthToken($keyToken, $cronTaskName, 300 * 10);
- * $output = Router::getRoute('Cron')->executeCurlTastByToken($cronTaskName, $keyToken, $token, [ 'idGroup' => 3, 'table' => 'CRM_PROCES' ]);
- */
- public function forceTablePermsAction() {
- $idGroup = V::get('idGroup', 0, $_GET, 'int');
- if (!$idGroup) throw new Exception("Missing idGroup");
- $table = V::get('table', '', $_GET, 'word');
- if (!$table) throw new Exception("Missing table");
- Lib::loadClass('UsersLdapHelper');
- $groupsNetwork = UsersLdapHelper::getGroupsByID($idGroup);
- if (empty($groupsNetwork)) throw new Exception("Group {$idGroup} not found");
- foreach ($groupsNetwork as $vGroup) {
- echo "Will try to update table {$table} set A_CLASSIFIED='{$vGroup->cn}', A_ADM_COMPANY='{$vGroup->cn}' ;" . "\n";
- DB::getPDO()->execSql("update `{$table}` set `A_CLASSIFIED`='{$vGroup->cn}', `A_ADM_COMPANY`='{$vGroup->cn}' ");
- }
- echo "DONE";
- }
- public function forceSyncUserAction() {
- $usrLogin = V::get('usrLogin', 0, $_GET, 'login');
- if (!$usrLogin) throw new Exception("Missing usrLogin");
- Lib::loadClass('Router');
- Lib::loadClass('UsersLdapHelper');
- $usrStorageDB = UserStorageFactory::getStorage('DB');
- $usrStorageLdap = UserStorageFactory::getStorage('MacOSX');
- $forceSync = 1;
- Router::getRoute('Users')->syncUser($usrLogin, $usrStorageDB, $usrStorageLdap, $forceSync);
- echo "DONE";
- }
- public function forceSyncGroupAction() {
- $idGroup = V::get('idGroup', 0, $_GET, 'int');
- if (!$idGroup) throw new Exception("Missing idGroup");
- Lib::loadClass('Router');
- Lib::loadClass('UsersLdapHelper');
- $usrStorageDB = UserStorageFactory::getStorage('DB');
- $usrStorageLdap = UserStorageFactory::getStorage('MacOSX');
- $forceSync = 1;
- Router::getRoute('Users')->syncGroup($idGroup, $usrStorageDB, $usrStorageLdap, $forceSync);
- echo "DONE";
- }
- public function addUserAction() {
- //$output = Router::getRoute('Cron')->executeCurlTastByToken($cronTaskName, $keyToken, $token, [ 'idGroup' => $groupID, 'usrLogin' => $usrLogin , 'ADM_ADMIN_LEVEL' => $ADM_ADMIN_LEVEL, 'ADM_NAME' => $ADM_NAME, 'ADM_ADMIN_DESC' => $ADM_ADMIN_DESC, 'EMPLOYEE_TYPE' => $EMPLOYEE_TYPE, 'ADM_PASSWD' => $ADM_PASSWD, 'A_ADM_COMPANY' => $A_ADM_COMPANY, 'A_CLASSIFIED' => $A_CLASSIFIED ]);
- $idGroup = V::get('idGroup', 0, $_GET, 'int');
- $usrLogin = V::get('usrLogin', 0, $_GET, 'login');
- $idTelboxes = V::get('idTelboxes', 0, $_GET, 'int');
- $ADM_ADMIN_LEVEL = V::get('ADM_ADMIN_LEVEL', 0, $_GET, 'int');
- $ADM_NAME = V::get('ADM_NAME', 0, $_GET, 'word');
- $ADM_ADMIN_DESC = V::get('ADM_ADMIN_DESC', 0, $_GET, 'word');
- $EMPLOYEE_TYPE = V::get('EMPLOYEE_TYPE', 0, $_GET, 'word');
- $ADM_PASSWD = V::get('ADM_PASSWD', 0, $_GET, 'word');
- $idGroup_A_ADM_COMPANY = V::get('idGroup_A_ADM_COMPANY', 0, $_GET, 'int');
- $idGroup_A_CLASSIFIED = V::get('idGroup_A_CLASSIFIED', 0, $_GET, 'int');
- $idGroup_DEFAULT_ACL_GROUP = V::get('idGroup_DEFAULT_ACL_GROUP', 0, $_GET, 'int');
- if (!$usrLogin) throw new Exception("Missing usrLogin");
- Lib::loadClass('Router');
- Lib::loadClass('UsersLdapHelper');
- $groupsNetwork = UsersLdapHelper::getGroupsByID($idGroup_A_ADM_COMPANY);
- if (empty($groupsNetwork)) throw new Exception("Group {$idGroup_A_ADM_COMPANY} not found");
- foreach ($groupsNetwork as $vGroup) {
- $A_ADM_COMPANY = $vGroup->cn;
- }
- $groupsNetwork = UsersLdapHelper::getGroupsByID($idGroup_A_CLASSIFIED);
- if (empty($groupsNetwork)) throw new Exception("Group {$idGroup_A_CLASSIFIED} not found");
- foreach ($groupsNetwork as $vGroup) {
- $A_CLASSIFIED = $vGroup->cn;
- }
- $groupsNetwork = UsersLdapHelper::getGroupsByID($idGroup_DEFAULT_ACL_GROUP);
- if (empty($groupsNetwork)) throw new Exception("Group {$idGroup_A_CLASSIFIED} not found");
- foreach ($groupsNetwork as $vGroup) {
- $DEFAULT_ACL_GROUP = $vGroup->cn;
- }
- Router::getRoute('Users')->addUser($usrLogin, $idGroup, $idTelboxes, $ADM_ADMIN_LEVEL, $ADM_NAME, $ADM_ADMIN_DESC, $EMPLOYEE_TYPE, $ADM_PASSWD, $A_ADM_COMPANY, $A_CLASSIFIED, $DEFAULT_ACL_GROUP);
- echo "DONE";
- }
- }
|