Beispiel #1
0
 private static function pushNotification($userKey, $message, $title = null, $url = null, $urltitle = null)
 {
     Logger::getLogger('MESSAGING')->debug('Pushover[pushNotification' . ']; $userKey=[' . $userKey . ']; $message=[' . $message . ']; $title=[' . $title . ']; $url=[' . $url . ']; $urltitle=[' . $urltitle . ']');
     $notification = new Pushover();
     $token = Config::get('applicationToken', 'msg_pushover');
     if (is_null($token)) {
         throw new Exception("Pushover - Application token not specified", 500);
     }
     if (is_null($userKey)) {
         throw new Exception("Pushover - User key not specified", 500);
     }
     $notification->setToken($token);
     $notification->setUser($userKey);
     $notification->setMessage($message);
     if (!is_null($title)) {
         $notification->setTitle($title);
     }
     $notification->setHtml(1);
     $notification->setUrl($url);
     $notification->setUrlTitle($urltitle);
     if (!$notification->send()) {
         Logger::getUserLogger()->error("Pushover - Error in sending a notification to '{$userKey}'");
     } else {
         Logger::getUserLogger()->notice("Pushover message sent.");
     }
 }
Beispiel #2
0
 public function run()
 {
     //set_error_handler(array('\Slim\Slim', 'handleErrors'));
     //Fetch status, header, and body
     list($status, $headers, $body) = $this->response->finalize();
     // Serialize cookies (with optional encryption)
     \Slim\Http\Util::serializeCookies($headers, $this->response->cookies, $this->settings);
     //Send headers
     if (headers_sent() === false) {
         //Send status
         if (strpos(PHP_SAPI, 'cgi') === 0) {
             header(sprintf('Status: %s', \Slim\Http\Response::getMessageForCode($status)));
         } else {
             header(sprintf('HTTP/%s %s', Config::get('http.version'), \Slim\Http\Response::getMessageForCode($status)));
         }
         //Send headers
         foreach ($headers as $name => $value) {
             $hValues = explode("\n", $value);
             foreach ($hValues as $hVal) {
                 header("{$name}: {$hVal}", false);
             }
         }
     }
     //Send body, but only if it isn't a HEAD request
     if (!$this->request->isHead()) {
         echo $body;
     }
 }
Beispiel #3
0
 private static function getTwig()
 {
     if (!self::$twig) {
         Twig_Autoloader::register();
         $cache = Config::get('cache') ? __DIR__ . '/../../../../' . Config::get('cache') . '/' : false;
         $loader = new Twig_Loader_Filesystem(__DIR__ . '/../../../../' . Config::get('views') . '/');
         self::$twig = new Twig_Environment($loader, array('cache' => $cache, 'debug' => Config::get('debug')));
     }
     return self::$twig;
 }
Beispiel #4
0
 public static function getTwig()
 {
     if (!self::$twig) {
         \Twig_Autoloader::register();
         $cache = Config::get('cache') ? Config::get('cache') . '/' : false;
         $loader = new \Twig_Loader_Filesystem(Config::get('views') . '/');
         $twig = new \Twig_Environment($loader, array('cache' => $cache, 'debug' => Config::get('debug')));
         // Add globals
         $twig->addGlobal('session', Session::getInstance());
         $twig->addGlobal('url', new URL());
         self::$twig = $twig;
     }
     return self::$twig;
 }
Beispiel #5
0
 private static function pushNotification($emailAddr, $message, $title = null, $url = null, $urltitle = null)
 {
     Logger::getLogger('MESSAGING')->debug('Email[pushNotification' . ']; $emailAddr=[' . $emailAddr . ']; $message=[' . $message . ']; $title=[' . $title . ']; $url=[' . $url . ']; $urltitle=[' . $urltitle . ']');
     // adapted from http://phpmailer.worxware.com/?pg=examplebgmail
     $config = Config::get('sendEmailConfig', 'msg_email');
     $from = $config['from'];
     $username = $config['username'];
     $password = $config['password'];
     Logger::getLogger('MESSAGING')->debug('Email.php - Username = '******'smtp.gmail.com';
     // Specify main and backup server
     $mail->SMTPSecure = 'ssl';
     // Enable encryption, 'ssl' also accepted
     $mail->Port = 465;
     $mail->SMTPAuth = true;
     // Enable SMTP authentication
     $mail->Username = $username;
     // SMTP username (for GMAIL)
     $mail->Password = $password;
     // SMTP password
     $mail->From = $from;
     $mail->FromName = 'Ampersand Prototype';
     $mail->AddAddress($emailAddr);
     // Add a recipient, e.g. $to = '*****@*****.**', 'Rieks Joosten'
     $mail->Subject = $title;
     //      $message = $message . 'optional URL';
     if ($url != '_NULL' && $url != '') {
         $mail->IsHTML(true);
         // make sure we send in HTML
         if ($urltitle != '_NULL' && $urltitle != '') {
             $message = '<p>' . $message . '</p><p><a href=' . $url . '>' . $urltitle . '</a></p>';
         } else {
             $message = $message . '<a' . $urltitle . '</a>';
         }
         Logger::getLogger('MESSAGING')->debug('Email message refactored to: [' . $message . ']');
     }
     $mail->Body = $message;
     $mail->WordWrap = 50;
     // Set word wrap to 50 characters
     if (!$mail->Send()) {
         Logger::getUserLogger()->error('Mailer Error: ' . $mail->ErrorInfo);
     } else {
         Logger::getUserLogger()->notice("Email message sent.");
     }
 }
Beispiel #6
0
 public static function pushNotificationOnCommit($userKeys, $message, $title = null, $url = null, $urltitle = null)
 {
     Logger::getLogger('MESSAGING')->debug('Pushalot[pushNotificationOnCommit' . ']; $userKeys=[' . $userKeys . ']; $message=[' . $message . ']; $title=[' . $title . ']; $url=[' . $url . ']; $urltitle=[' . $urltitle . ']');
     foreach ($userKeys as $userKey) {
         if (!is_null($userKey)) {
             self::$notifications[] = array('userKey' => $userKey, 'message' => $message, 'title' => $title, 'url' => $url, 'urltitle' => $urltitle);
         }
     }
     // Send same notification to users in 'alwaysNotifyUsers' config
     foreach ((array) Config::get('alwaysNotifyUsers', 'msg_pushalot') as $notifyUser) {
         if (!in_array($notifyUser, $userKeys)) {
             // prevent duplicate notifications
             if ($notifyUser != '') {
                 self::$notifications[] = array('userKey' => $notifyUser, 'message' => $message, 'title' => $title, 'url' => $url, 'urltitle' => $urltitle);
             }
             // Disregard a possibly empty setting from localSettings.php
         }
     }
 }
Beispiel #7
0
 private static function pushNotification($SMSAddr, $message, $title = null, $url = null, $urltitle = null)
 {
     Logger::getLogger('MESSAGING')->debug('UNTESTED !!! SMS[pushNotification' . ']; $SMSAddr=[' . $SMSAddr . ']; $message=[' . $message . ']; $title=[' . $title . ']; $url=[' . $url . ']; $urltitle=[' . $urltitle . ']');
     /* Config params for SendSMS function of ExecEngine (using MessageBird.com)
      * Set the sender, could be a number (16 numbers) or letters (11 characters)
      * 
      */
     // Copy the following line to localSettings.php and provide settings
     // Config::set('sendSMSConfig', 'execEngine', array('username' => '', 'password' => '', 'sender' => ''));
     $config = Config::get('sendSMSConfig', 'msg_SMS');
     $username = $config['username'];
     $password = $config['password'];
     $sender = $config['sender'];
     Logger::getLogger('MESSAGING')->debug('Username = '******'31600000000');
     // Set an reference, optional
     // $sms->setReference('123456789');
     // Set a schedule date-time, optional
     // $sms->setTimestamp('2014-01-01 10:02');
     // Replace non GSM-7 characters by appropriate valid GSM-7 characters
     // $sms->setReplacechars(false);
     // If you want a dlr notification of the message send to another url then that you have set on the web site, you can use this parameter. Don't forget to set a reference!
     // $sms->setDlrUrl('http://www.example.com/dlr_url.php');
     // If $test is TRUE, then the message is not actually sent or scheduled, and there will be no credits deducted.
     Logger::getLogger('MESSAGING')->debug("SMS testing is set to TRUE (messages are not actually sent)");
     $sms->setTest(true);
     // Send the message to the destination(s)
     $sms->sendSms($message);
     if ($sms->getResponseCode() == "01") {
         Logger::getUserLogger()->notice("SMS message sent.");
     } else {
         Logger::getUserLogger()->error('SMS error: ' . $sms->getResponseMessage());
     }
     Logger::getLogger('MESSAGING')->debug("SMS Response: " . $sms->getResponseMessage());
     Logger::getLogger('MESSAGING')->debug("SMS Balance: " . $sms->getCreditBalance());
 }
 public function buildHtml()
 {
     $this->addHtmlLine("<!doctype html>");
     $this->addHtmlLine('<html ng-app="AmpersandApp">');
     $this->addHtmlLine('<head>');
     $this->addHtmlLine('<title>' . Config::get('contextName') . '</title>');
     // Meta tags
     $this->addHtmlLine('<meta name="viewport" content="width=device-width, initial-scale=1.0"/>');
     $this->addHtmlLine('<meta charset="UTF-8">');
     $this->addHtmlLine('<meta http-equiv="Expires" content="0"/>');
     $this->addHtmlLine('<meta http-equiv="Cache-Control" content="no-store"/>');
     // initSessionId
     $this->addHtmlLine('<script type="text/javascript">var initSessionId = \'' . session_id() . '\';</script>');
     // JQuery
     $this->addHtmlLine('<script src="app/lib/jquery/jquery-1.11.0.min.js"></script>');
     $this->addHtmlLine('<script src="app/lib/jquery/jquery-migrate-1.2.1.js"></script>');
     $this->addHtmlLine('<script src="app/lib/jquery/jquery-ui-1.10.4.custom.js"></script>');
     // Bootstrap (requires Jquery, loaded above)
     $this->addHtmlLine('<link href="app/lib/bootstrap-3.3.5-dist/css/bootstrap.min.css" rel="stylesheet" media="screen">');
     // load boostrap.css before app specific css files that overwrite bootstrap.css
     $this->addHtmlLine('<script src="app/lib/bootstrap-3.3.5-dist/js/bootstrap.min.js"></script>');
     /*
      ********** Angular *********************************
      *
      */
     $this->addHtmlLine('<script src="app/lib/angular/angular.min.js"></script>');
     $this->addHtmlLine('<script src="app/lib/angular/angular-resource.min.js"></script>');
     $this->addHtmlLine('<script src="app/lib/angular/angular-route.min.js"></script>');
     $this->addHtmlLine('<script src="app/lib/angular/angular-sanitize.min.js"></script>');
     /* Third party directives/libraries for angular */
     // angular-ui-switch
     $this->addHtmlLine('<script src="app/lib/angular/angular-ui-switch/angular-ui-switch-adapted.js"></script>');
     $this->addHtmlLine('<link href="app/lib/angular/angular-ui-switch/angular-ui-switch.css" rel="stylesheet" media="screen" type="text/css">');
     // angular-busy
     $this->addHtmlLine('<script src="app/lib/angular/angular-busy/angular-busy.min.js"></script>');
     $this->addHtmlLine('<link href="app/lib/angular/angular-busy/angular-busy.min.css" rel="stylesheet" media="screen" type="text/css">');
     // si-table
     $this->addHtmlLine('<script src="app/lib/angular/si-table/si-table.js"></script>');
     // angular-code-mirror
     $this->addHtmlLine('<script src="app/lib/angular/angular-code-mirror/angular-code-mirror.min.js"></script>');
     $this->addHtmlLine('<link href="app/lib/angular/angular-code-mirror/angular-code-mirror.css" rel="stylesheet" media="screen" type="text/css">');
     // ng-storage
     $this->addHtmlLine('<script src="app/lib/angular/angular-ng-storage/ngStorage.min.js"></script>');
     // angular-file-upload
     $this->addHtmlLine('<script src="app/lib/angular/angular-file-upload/angular-file-upload.min.js"></script>');
     // angular-grid
     $this->addHtmlLine('<script src="app/lib/angular/angular-grid/ag-grid.min.js"></script>');
     $this->addHtmlLine('<link href="app/lib/angular/angular-grid/ag-grid.min.css" rel="stylesheet" media="screen" type="text/css">');
     $this->addHtmlLine('<link href="app/lib/angular/angular-grid/theme-dark.min.css" rel="stylesheet" media="screen" type="text/css">');
     $this->addHtmlLine('<link href="app/lib/angular/angular-grid/theme-fresh.min.css" rel="stylesheet" media="screen" type="text/css">');
     // Restangular (with depency for lodash)
     $this->addHtmlLine('<script src="app/lib/restangular/restangular.min.js"></script>');
     $this->addHtmlLine('<script src="app/lib/restangular/lodash.min.js"></script>');
     // jquery UI & bootstrap in native AngularJS
     $this->addHtmlLine('<script src="app/lib/ui-bootstrap/ui-bootstrap-tpls-0.14.3.min.js"></script>');
     // datetimepicker
     $this->addHtmlLine('<script src="app/lib/ui-bootstrap/datetimepicker/datetimepicker.js"></script>');
     $this->addHtmlLine('<link href="app/lib/ui-bootstrap/datetimepicker/datetimepicker.css" rel="stylesheet" media="screen" type="text/css">');
     // markdown support
     $this->addHtmlLine('<script src="app/lib/marked/lib/marked.js"></script>');
     $this->addHtmlLine('<script src="app/lib/angular-marked/dist/angular-marked.js"></script>');
     /*
      ********** CSS *********************************
      *
      */
     // CSS files from app directory
     $files = getDirectoryList(Config::get('pathToAppFolder') . 'css');
     $cssFiles = array();
     foreach ((array) $files as $file) {
         if (substr($file, -3) !== 'css') {
             continue;
         }
         if ($file == 'ampersand.css') {
             array_unshift($cssFiles, 'app/css/' . $file);
         } else {
             $cssFiles[] = 'app/css/' . $file;
         }
     }
     // Add css files to html output
     foreach ($cssFiles as $file) {
         $this->addHtmlLine('<link href="' . $file . '" rel="stylesheet" media="screen" type="text/css">');
     }
     // Other css files (from extensions)
     foreach (AngularApp::$cssFiles as $file) {
         $this->addHtmlLine('<link href="' . $file . '" rel="stylesheet" media="screen" type="text/css">');
     }
     /*
      ********** App specific javascript ***************
      *
      */
     // AmpersandApp
     $this->addHtmlLine('<script src="app/AmpersandApp.js"></script>');
     $this->addHtmlLine('<script src="app/RouteProvider.js"></script>');
     // AngularApp controler files (both static and generated)
     $files = getDirectoryList(Config::get('pathToAppFolder') . 'controllers');
     foreach ((array) $files as $file) {
         if (substr($file, -2) !== 'js') {
             continue;
         }
         $this->addHtmlLine('<script src="app/controllers/' . $file . '"></script>');
     }
     // Javascript files
     $files = getDirectoryList(Config::get('pathToAppFolder') . 'js');
     foreach ((array) $files as $file) {
         if (substr($file, -2) !== 'js') {
             continue;
         }
         $this->addHtmlLine('<script src="app/js/' . $file . '"></script>');
     }
     // Add js files to html output
     foreach (AngularApp::$jsFiles as $file) {
         $this->addHtmlLine('<script src="' . $file . '"></script>');
     }
     $this->addHtmlLine('</head>');
     $this->addHtmlLine('<body>');
     $this->addHtmlLine(file_get_contents(Config::get('pathToAppFolder') . 'AmpersandApp.html'));
     $this->addHtmlLine('</body>');
     $this->addHtmlLine('</html>');
 }
Beispiel #9
0
 /**
  * Import all Relation definitions from json file and create and save Relation objects
  * @return void
  */
 private static function setAllRelations()
 {
     self::$allRelations = array();
     // import json file
     $file = file_get_contents(Config::get('pathToGeneratedFiles') . 'relations.json');
     $allRelationDefs = (array) json_decode($file, true);
     foreach ($allRelationDefs as $relationDef) {
         $relation = new Relation($relationDef);
         self::$allRelations[$relation->signature] = $relation;
     }
 }
Beispiel #10
0
    $content = array();
    foreach (Conjunct::getAllConjuncts() as $conj) {
        if ($conj->isInvConj()) {
            $content['invConjuncts'][] = $conj->__toString();
        }
        if ($conj->isSigConj()) {
            $content['sigConjuncts'][] = $conj->__toString();
        }
        if (!$conj->isInvConj() && !$conj->isSigConj()) {
            $content['unused'][] = $conj->__toString();
        }
    }
    print json_encode($content, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES);
});
$app->get('/admin/report/interfaces', function () use($app) {
    if (Config::get('productionEnv')) {
        throw new Exception("Reports are not allowed in production environment", 403);
    }
    $arr = array();
    foreach (InterfaceObject::getAllInterfaces() as $key => $ifc) {
        $arr = array_merge($arr, $ifc->getInterfaceFlattened());
    }
    $content = array_map(function (InterfaceObject $ifc) {
        return array('path' => $ifc->path, 'label' => $ifc->label, 'crudC' => $ifc->crudC, 'crudR' => $ifc->crudR, 'crudU' => $ifc->crudU, 'crudD' => $ifc->crudD, 'src' => $ifc->srcConcept->name, 'tgt' => $ifc->tgtConcept->name, 'view' => $ifc->view->label, 'relation' => $ifc->relation->signature, 'flipped' => $ifc->relationIsFlipped, 'ref' => $ifc->refInterfaceId, 'root' => $ifc->isRoot(), 'public' => $ifc->isPublic(), 'roles' => implode(',', $ifc->ifcRoleNames));
    }, $arr);
    // Output
    $output = new OutputCSV();
    $output->addColumns(array_keys($content[0]));
    foreach ($content as $row) {
        $output->addRow($row);
    }
Beispiel #11
0
 /**
  * Import all rule definitions from json file and create and save Rule objects
  * @return void
  */
 private static function setAllRules()
 {
     self::$allRules = array();
     // import json file
     $file = file_get_contents(Config::get('pathToGeneratedFiles') . 'rules.json');
     $allRuleDefs = (array) json_decode($file, true);
     // Signal rules
     foreach ($allRuleDefs['signals'] as $ruleDef) {
         $rule = new Rule($ruleDef, 'sig');
         self::$allRules[$rule->id] = $rule;
     }
     // Invariant rules
     foreach ($allRuleDefs['invariants'] as $ruleDef) {
         $rule = new Rule($ruleDef, 'inv');
         self::$allRules[$rule->id] = $rule;
     }
 }
use Ampersand\Log\Logger;
use PHPExcel_Cell;
use PHPExcel_Shared_Date;
use PHPExcel_IOFactory;
require_once __DIR__ . '/lib/Classes/PHPExcel.php';
// UI
AngularApp::addMenuItem('ext', 'extensions/ExcelImport/ui/views/MenuItem.html', function ($session) {
    $roles = Config::get('allowedRolesForExcelImport', 'excelImport');
    return !empty(array_intersect($session->getActiveRoles(), (array) $roles)) || is_null($roles);
});
AngularApp::addCSS('extensions/ExcelImport/ui/css/style.css');
AngularApp::addJS('extensions/ExcelImport/ui/js/ExcelImport.js');
// API
$GLOBALS['api']['files'][] = __DIR__ . DIRECTORY_SEPARATOR . 'api' . DIRECTORY_SEPARATOR . 'import.php';
// Config
Config::set('allowedMimeTypes', 'excelImport', array('application/vnd.ms-excel', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 'application/excel'));
class ExcelImport
{
    /**
     * 
     * @var string
     */
    public $file;
    /**
     *
     * @var \Psr\Log\LoggerInterface
     */
    private $logger;
    /**
     * Constructor
     */
Beispiel #13
0
 /**
  * Import all role definitions from json file and create and save Role objects
  * @return void
  */
 private static function setAllRoles()
 {
     self::$allRoles = array();
     // import json file
     $file = file_get_contents(Config::get('pathToGeneratedFiles') . 'roles.json');
     $allRoleDefs = (array) json_decode($file, true);
     foreach ($allRoleDefs as $roleDef) {
         self::$allRoles[$roleDef['name']] = new Role($roleDef);
     }
 }
Beispiel #14
0
 /**
  * Check if insert/update/delete function resulted in updated record(s). If not, report warning (or throw exception) to indicate that something is going wrong
  * @throws Exception when no records are affected and application is not in production mode
  * @return void
  */
 private function checkForAffectedRows()
 {
     if ($this->db_link->affected_rows == 0) {
         if (Config::get('productionEnv')) {
             $this->logger->warning("Oops.. something went wrong: No recors affected in database");
         } else {
             throw new Exception("Oops.. something went wrong: No records affected in database", 500);
         }
     }
 }
Beispiel #15
0
 /**
  * Atom constructor
  * @param string $atomId
  * @param Concept $concept
  * @param InterfaceObject $ifc
  * @param array $qData the row data (from database query) from which this atom is created
  * @return void
  */
 public function __construct($atomId, Concept $concept, InterfaceObject $ifc = null, array $qData = null)
 {
     $this->database = Database::singleton();
     $this->logger = Logger::getLogger('FW');
     $this->concept = $concept;
     $this->parentIfc = $ifc;
     $this->qData = $qData;
     $this->setId($atomId);
     // JSON-LD attributes
     $this->url = Config::get('serverURL') . Config::get('apiPath') . '/resource/' . $this->concept->name . '/' . $this->getJsonRepresentation();
 }
 public static function callback($code, $idp)
 {
     $identityProviders = Config::get('identityProviders', 'OAuthLogin');
     if (empty($code)) {
         throw new Exception("Oops. Someting went wrong during login. Please try again", 401);
     }
     if (!isset($identityProviders[$idp])) {
         throw new Exception("Unknown identity provider", 500);
     }
     $client_id = $identityProviders[$idp]['clientId'];
     $client_secret = $identityProviders[$idp]['clientSecret'];
     $redirect_uri = $identityProviders[$idp]['redirectUrl'];
     $token_url = $identityProviders[$idp]['tokenUrl'];
     $api_url = $identityProviders[$idp]['apiUrl'];
     // instantiate authController
     $authController = new OAuthLoginController($client_id, $client_secret, $redirect_uri, $token_url);
     // request token
     if ($authController->requestToken($code)) {
         // request data
         if ($authController->requestData($api_url)) {
             // Get email here
             $email = null;
             switch ($idp) {
                 case 'linkedin':
                     // Linkedin provides primary emailaddress only. This is always a verified address.
                     $email = $authController->getData()->emailAddress;
                     break;
                 case 'google':
                     $email = $authController->getData()->email;
                     if (!$authController->getData()->verified_email) {
                         throw new Exception("Google emailaddress is not verified", 500);
                     }
                     break;
                 case 'github':
                     foreach ($authController->getData() as $data) {
                         if ($data->primary && $data->verified) {
                             $email = $data->email;
                         }
                     }
                     if (is_null($email)) {
                         throw new Exception("Github primary emailaddress is not verified", 500);
                     }
                     break;
                 default:
                     throw new Exception("Unknown identity provider", 500);
                     break;
             }
             $authController->login($email);
         }
     }
     header('Location: ' . Config::get('redirectAfterLogin', 'OAuthLogin'));
     exit;
 }
 /**
  * Import all interface object definitions from json file and create and save InterfaceObject objects
  * @return void
  */
 private static function setAllInterfaces()
 {
     self::$allInterfaces = array();
     // import json file
     $file = file_get_contents(Config::get('pathToGeneratedFiles') . 'interfaces.json');
     $allInterfaceDefs = (array) json_decode($file, true);
     foreach ($allInterfaceDefs as $ifcDef) {
         $ifc = new InterfaceObject($ifcDef['ifcObject'], null, true);
         // Set additional information about this toplevel interface object
         $ifc->ifcRoleNames = $ifcDef['interfaceRoles'];
         self::$allInterfaces[$ifc->id] = $ifc;
     }
 }
Beispiel #18
0
<?php

use Ampersand\Session;
use Ampersand\AngularApp;
use Ampersand\Log\Notifications;
use Ampersand\Config;
use Ampersand\Rule\RuleEngine;
global $app;
$app->get('/sessions/:sessionId/navbar', function ($sessionId) use($app) {
    $session = Session::singleton();
    $roleIds = $app->request->params('roleIds');
    $session->activateRoles($roleIds);
    foreach (RuleEngine::getSignalViolationsFromDB() as $violation) {
        Notifications::addSignal($violation);
    }
    $content = array('top' => AngularApp::getNavBarIfcs('top'), 'new' => AngularApp::getNavBarIfcs('new'), 'refreshMenu' => AngularApp::getMenuItems('refresh'), 'extMenu' => AngularApp::getMenuItems('ext'), 'roleMenu' => AngularApp::getMenuItems('role'), 'defaultSettings' => array('notifications' => Notifications::getDefaultSettings(), 'switchAutoCommit' => Config::get('interfaceAutoCommitChanges', 'transactions'), 'cacheGetCalls' => Config::get('interfaceCacheGetCalls', 'transactions'), 'switchAutoSave' => Config::get('interfaceAutoSaveChanges', 'transactions')), 'notifications' => Notifications::getAll(), 'session' => array('id' => $session->id, 'loggedIn' => $session->sessionUserLoggedIn()), 'sessionRoles' => array_values($session->getSessionRoles()), 'sessionVars' => $session->getSessionVars());
    print json_encode($content, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES);
});
$app->get('/sessions/:sessionId/notifications', function ($sessionId) use($app) {
    $session = Session::singleton();
    $roleIds = $app->request->params('roleIds');
    $session->activateRoles($roleIds);
    foreach (RuleEngine::getSignalViolationsFromDB() as $violation) {
        Notifications::addSignal($violation);
    }
    $content = Notifications::getAll();
    print json_encode($content, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES);
});
$app->delete('/sessions/:sessionId', function ($sessionId) use($app) {
    $session = Session::singleton();
    // Checks
<?php

use Ampersand\Session;
use Ampersand\Config;
use Ampersand\Log\Notifications;
use Ampersand\Core\Atom;
use Ampersand\Core\Concept;
use Ampersand\Extension\OAuthLogin\OAuthLoginController;
global $app;
// Path to API is 'api/v1/oauthlogin/login'
$app->get('/oauthlogin/login', function () use($app) {
    Session::singleton();
    $idps = array();
    $identityProviders = Config::get('identityProviders', 'OAuthLogin');
    if (is_null($identityProviders)) {
        throw new Exception("No identity providers specified for OAuthLogin extension", 500);
    }
    foreach ($identityProviders as $idpSettings) {
        $auth_url = array('auth_base' => $idpSettings['authBase'], 'arguments' => array('client_id' => $idpSettings['clientId'], 'response_type' => 'code', 'redirect_uri' => $idpSettings['redirectUrl'], 'scope' => $idpSettings['scope'], 'state' => $idpSettings['state']));
        $url = $auth_url['auth_base'] . '?' . http_build_query($auth_url['arguments']);
        $idps[] = array('name' => $idpSettings['name'], 'loginUrl' => $url, 'logo' => $idpSettings['logoUrl']);
    }
    // Return
    $result = array('identityProviders' => $idps, 'notifications' => Notifications::getAll());
    print json_encode($result, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES);
});
// Path to API is 'api/v1/oauthlogin/logout'
$app->get('/oauthlogin/logout', function () use($app) {
    $session = Session::singleton();
    $session->sessionAtom->deleteAtom();
    $session->database->closeTransaction('Logout successfull', true);
 public static function run($allRules = false)
 {
     $database = Database::singleton();
     $logger = Logger::getLogger('EXECENGINE');
     $logger->info("ExecEngine run started");
     // Load the execEngine functions (security hazard :P)
     $files = getDirectoryList(__DIR__ . '/functions');
     foreach ($files as $file) {
         if (substr($file, -3) !== 'php') {
             continue;
         }
         require_once $path = __DIR__ . '/functions/' . $file;
         $logger->debug("Included file: {$path}");
     }
     self::$roleName = Config::get('execEngineRoleName', 'execEngine');
     try {
         $role = Role::getRoleByName(self::$roleName);
     } catch (Exception $e) {
         $logger->warning("ExecEngine extension included but role '" . self::$roleName . "' not used/defined in &-script.");
         self::$doRun = false;
         // prevent exec engine execution
     }
     $maxRunCount = Config::get('maxRunCount', 'execEngine');
     self::$runCount = 0;
     self::$autoRerun = Config::get('autoRerun', 'execEngine');
     // Get all rules that are maintained by the ExecEngine
     $rulesThatHaveViolations = array();
     while (self::$doRun) {
         self::$doRun = false;
         self::$runCount++;
         // Prevent infinite loop in ExecEngine reruns
         if (self::$runCount > $maxRunCount) {
             Logger::getUserLogger()->error('Maximum reruns exceeded for ExecEngine (rules with violations:' . implode(', ', $rulesThatHaveViolations) . ')');
             break;
         }
         $logger->notice("ExecEngine run #" . self::$runCount . " (auto rerun: " . var_export(self::$autoRerun, true) . ") for role '{$role->label}'");
         // Determine affected rules that must be checked by the exec engine
         $affectedConjuncts = RuleEngine::getAffectedConjuncts($database->getAffectedConcepts(), $database->getAffectedRelations(), 'sig');
         $affectedRules = array();
         foreach ($affectedConjuncts as $conjunct) {
             $affectedRules = array_merge($affectedRules, $conjunct->sigRuleNames);
         }
         // Check rules
         $rulesThatHaveViolations = array();
         foreach ($role->maintains() as $ruleName) {
             if (!in_array($ruleName, $affectedRules) && !$allRules) {
                 continue;
             }
             // skip this rule
             $rule = Rule::getRule($ruleName);
             $violations = $rule->getViolations(false);
             if (count($violations)) {
                 $rulesThatHaveViolations[] = $rule->id;
                 // Fix violations for every rule
                 $logger->notice("ExecEngine fixing " . count($violations) . " violations for rule '{$rule->id}'");
                 self::fixViolations($violations);
                 // Conjunct violations are not cached, because they are fixed by the ExecEngine
                 $logger->debug("Fixed " . count($violations) . " violations for rule '{$rule->__toString()}'");
                 // If $autoRerun, set $doRun to true because violations have been fixed (this may fire other execEngine rules)
                 if (self::$autoRerun) {
                     self::$doRun = true;
                 }
             }
         }
     }
     $logger->info("ExecEngine run completed");
 }
Beispiel #21
0
use Ampersand\Config;
use Ampersand\Log\Logger;
use Ampersand\Log\Notifications;
require_once __DIR__ . '/../../src/bootstrap.php';
// Code to add special http response codes that are not supported by Slim
class NewResponse extends \Slim\Http\Response
{
    public static function addResponseCode($code, $message)
    {
        parent::$messages[$code] = "{$code} {$message}";
    }
}
NewResponse::addResponseCode(440, "Login Timeout");
// Create and configure Slim app (version 2.x)
$app = new \Slim\Slim(array('debug' => Config::get('debugMode')));
$app->add(new \Slim\Middleware\ContentTypes());
$app->response->headers->set('Content-Type', 'application/json');
// Error handler
$app->error(function (Exception $e) use($app) {
    $app->response->setStatus($e->getCode());
    try {
        Logger::getLogger("API")->error($e->getMessage());
        $notifications = Notifications::getAll();
        print json_encode(array('error' => $e->getCode(), 'msg' => $e->getMessage(), 'notifications' => $notifications));
    } catch (Exception $b) {
        Logger::getLogger("API")->error($b->getMessage());
        print json_encode(array('error' => $b->getCode(), 'msg' => $b->getMessage(), 'notifications' => array()));
    }
});
// Not found handler
 /**
  * 
  * @return Violation[]
  */
 public static function getSignalViolationsFromDB()
 {
     $logger = Logger::getLogger('FW');
     $session = Session::singleton();
     $dbsignalTableName = Config::get('dbsignalTableName', 'mysqlDatabase');
     $conjuncts = array();
     $conjunctRuleMap = array();
     foreach ($session->rulesToMaintain as $rule) {
         foreach ($rule->conjuncts as $conjunct) {
             $conjunctRuleMap[$conjunct->id][] = $rule;
         }
         $conjuncts = array_merge($conjuncts, $rule->conjuncts);
     }
     $conjuncts = array_unique($conjuncts);
     // remove duplicates
     $violations = array();
     if (count($conjuncts) > 0) {
         $q = implode(',', array_map(function ($conj) {
             return "'{$conj->id}'";
         }, $conjuncts));
         // returns string "<conjId1>,<conjId2>,<etc>"
         $query = "SELECT * FROM `{$dbsignalTableName}` WHERE `conjId` IN ({$q})";
         $result = $session->database->Exe($query);
         // array(array('conjId' => '<conjId>', 'src' => '<srcAtomId>', 'tgt' => '<tgtAtomId>'))
         foreach ($result as $row) {
             foreach ($conjunctRuleMap[$row['conjId']] as $rule) {
                 $violations[] = new Violation($rule, $row['src'], $row['tgt']);
             }
         }
     } else {
         $logger->debug("No conjuncts to check (it can be that this role does not maintain any rule)");
     }
     return $violations;
 }
Beispiel #23
0
 /**
  * Import all view definitions from json file and create and save View objects 
  * @return void
  */
 private static function setAllViews()
 {
     self::$allViews = array();
     // import json file
     $file = file_get_contents(Config::get('pathToGeneratedFiles') . 'views.json');
     $allViewDefs = (array) json_decode($file, true);
     foreach ($allViewDefs as $viewDef) {
         self::$allViews[$viewDef['label']] = new View($viewDef);
     }
 }
Beispiel #24
0
<?php

use Ampersand\Config;
use Ampersand\Extension\ExecEngine\ExecEngine;
use Ampersand\Log\Notifications;
use Ampersand\Session;
global $app;
// Path to API is 'api/v1/execengine/import'
$app->get('/execengine/run', function () use($app) {
    $session = Session::singleton();
    $roleIds = $app->request->params('roleIds');
    $session->activateRoles($roleIds);
    // Check sessionRoles if allowedRolesForRunFunction is specified
    $allowedRoles = Config::get('allowedRolesForRunFunction', 'execEngine');
    if (!is_null($allowedRoles)) {
        $ok = false;
        foreach ($session->getSessionRoles() as $role) {
            if (in_array($role->label, $allowedRoles)) {
                $ok = true;
            }
        }
        if (!$ok) {
            throw new Exception("You do not have access to run the exec engine", 401);
        }
    }
    ExecEngine::run(true);
    $session->database->closeTransaction('Run completed', true);
    $result = array('notifications' => Notifications::getAll());
    print json_encode($result, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES);
});
 public static function getDefaultSettings()
 {
     return array('switchShowSignals' => Config::get('defaultShowSignals', 'notifications'), 'switchShowInfos' => Config::get('defaultShowInfos', 'notifications'), 'switchShowSuccesses' => Config::get('defaultShowSuccesses', 'notifications'), 'switchAutoHideSuccesses' => Config::get('defaultAutoHideSuccesses', 'notifications'), 'switchShowErrors' => Config::get('defaultShowErrors', 'notifications'), 'switchShowWarnings' => Config::get('defaultShowWarnings', 'notifications'), 'switchShowInvariants' => Config::get('defaultShowInvariants', 'notifications'));
 }
Beispiel #26
0
 /**
  * Import all concept definitions from json file and create and save Concept objects
  * @return void
  */
 private static function setAllConcepts()
 {
     self::$allConcepts = array();
     // import json file
     $file = file_get_contents(Config::get('pathToGeneratedFiles') . 'concepts.json');
     $allConceptDefs = (array) json_decode($file, true);
     foreach ($allConceptDefs as $conceptDef) {
         self::$allConcepts[$conceptDef['id']] = new Concept($conceptDef);
     }
 }
    Config::set('ignoreInvariantViolations', 'transactions', false);
    // for debugging can be set to true (transactions will be committed regardless off invariant violations)
    Config::set('interfaceAutoCommitChanges', 'transactions', true);
    // specifies whether changes in an interface are automatically commited when allowed (all invariants hold)
    Config::set('interfaceAutoSaveChanges', 'transactions', true);
    // specifies whether changes in interface are directly communicated (saved) to server
    Config::set('interfaceCacheGetCalls', 'transactions', false);
    // specifies whether GET calls should be cached by the frontend (e.g. angular) application
    // Default CRUD rights for interfaces
    Config::set('defaultCrudC', 'transactions', true);
    Config::set('defaultCrudR', 'transactions', true);
    Config::set('defaultCrudU', 'transactions', true);
    Config::set('defaultCrudD', 'transactions', true);
    // Default notification settings
    Config::set('defaultShowSignals', 'notifications', true);
    Config::set('defaultShowInfos', 'notifications', true);
    Config::set('defaultShowWarnings', 'notifications', true);
    Config::set('defaultShowSuccesses', 'notifications', true);
    Config::set('defaultAutoHideSuccesses', 'notifications', true);
    Config::set('defaultShowErrors', 'notifications', true);
    Config::set('defaultShowInvariants', 'notifications', true);
    // Navigation menu settings
    AngularApp::addMenuItem('refresh', 'app/views/menu/installer.html', function ($session) {
        return !Config::get('productionEnv');
    });
    AngularApp::addMenuItem('refresh', 'app/views/menu/checkAllRules.html', function ($session) {
        return !Config::get('productionEnv');
    });
} catch (Exception $e) {
    throw $e;
}
Beispiel #28
0
<?php

use Ampersand\Session;
use Ampersand\Config;
use Ampersand\Log\Logger;
use Ampersand\Extension\ExcelImport\ExcelImport;
use Ampersand\Log\Notifications;
use Ampersand\Database\Database;
global $app;
// Path to API is 'api/v1/excelimport/import'
$app->post('/excelimport/import', function () use($app) {
    $session = Session::singleton();
    $roleIds = $app->request->params('roleIds');
    $session->activateRoles($roleIds);
    // Check sessionRoles if allowedRolesForExcelImport is specified
    $allowedRoles = Config::get('allowedRolesForExcelImport', 'excelImport');
    if (!is_null($allowedRoles)) {
        $ok = false;
        foreach ($session->getSessionRoles() as $role) {
            if (in_array($role->label, $allowedRoles)) {
                $ok = true;
            }
        }
        if (!$ok) {
            throw new Exception("You do not have access to import excel files", 401);
        }
    }
    if (is_uploaded_file($_FILES['file']['tmp_name'])) {
        // Parse:
        $parser = new ExcelImport();
        $parser->ParseFile($_FILES['file']['tmp_name']);
//Logger::registerGenericHandler($browserHandler);
// User log handler
Logger::registerHandlerForChannel('USERLOG', new NotificationHandler(\Monolog\Logger::INFO));
/**************************************************************************************************
 * SERVER settings
 *************************************************************************************************/
// Config::set('serverURL', 'global', 'http://www.yourdomain.nl'); // defaults to http://localhost/<ampersand context name>
// Config::set('apiPath', 'global', '/api/v1'); // relative path to api
/**************************************************************************************************
 * DATABASE settings
 *************************************************************************************************/
// Config::set('dbHost', 'mysqlDatabase', 'localhost');
// Config::set('dbUser', 'mysqlDatabase', 'ampersand');
// Config::set('dbPassword', 'mysqlDatabase', 'ampersand');
// Config::set('dbName', 'mysqlDatabase', '');
/**************************************************************************************************
 * LOGIN FUNCTIONALITY
 * 
 * The login functionality requires the ampersand SIAM module
 * The module can be downloaded at: https://github.com/AmpersandTarski/ampersand-models/tree/master/SIAM
 * Copy and rename the SIAM_Module-example.adl into SIAM_Module.adl
 * Include this file into your project
 * Uncomment the config setting below
 *************************************************************************************************/
Config::set('loginEnabled', 'global', true);
/**************************************************************************************************
 * EXTENSIONS
 *************************************************************************************************/
require_once __DIR__ . '/extensions/ExecEngine/ExecEngine.php';
// Enable ExecEngine
// require_once(__DIR__ . '/extensions/ExcelImport/ExcelImport.php'); // Enable ExcelImport
Beispiel #30
0
 /**
  * Determine is there is a loggedin user (account)
  * @return boolean
  */
 public function sessionUserLoggedIn()
 {
     if (!Config::get('loginEnabled')) {
         return false;
     } elseif ($this->getSessionAccount() !== false) {
         return true;
     } else {
         return false;
     }
 }