Example #1
0
function deep_ksort(&$arr)
{
    ksort($arr);
    foreach ($arr as &$a) {
        if (is_array($a) && !empty($a)) {
            deep_ksort($a);
        }
    }
}
Example #2
0
function sign_message($message_obj)
{
    global $config;
    # Stuff a little note in there about how we're signing this
    $message_obj['crypto'] = 'x509';
    # This is required so that the string we sign is identical in python and in
    # php.  Ordereddict is used there; ksort here.
    deep_ksort($message_obj);
    # It would be best to pass JSON_UNESCAPE_SLASHES as an option here, but it is
    # not available until php-5.4
    $message = json_encode($message_obj);
    # In the meantime, we'll remove escaped slashes ourselves.  This is
    # necessary in order to produce the exact same encoding as python (so that our
    # signatures match for validation).
    $message = stripcslashes($message);
    # Use this to debug message signature problems.  What a pain...
    #wfErrorLog($message . "\r\n", '/var/tmp/wiki-fedmsg-messages.log' );
    # Step 0) - Find our cert.
    $fqdn = gethostname();
    $tokens = explode('.', $fqdn);
    $hostname = $tokens[0];
    $ssldir = $config['ssldir'];
    $certname = $config['certnames']['mediawiki.' . $hostname];
    # Step 1) - Load and encode the X509 cert
    $cert_obj = openssl_x509_read(file_get_contents($ssldir . '/' . $certname . ".crt"));
    $cert = "";
    openssl_x509_export($cert_obj, $cert);
    $cert = base64_encode($cert);
    # Step 2) - Load and sign the jsonified message with the RSA private key
    $rsa_private = openssl_get_privatekey(file_get_contents($ssldir . '/' . $certname . ".key"));
    $signature = "";
    openssl_sign($message, $signature, $rsa_private);
    $signature = base64_encode($signature);
    # Step 3) - Stuff it back in the message and return
    $message_obj['signature'] = $signature;
    $message_obj['certificate'] = $cert;
    return $message_obj;
}
Example #3
0
 public function edit($id)
 {
     $lists = array();
     $mi = new microIntegration();
     $mi->load($id);
     $aecHTML = null;
     $attached = array();
     $mi_gsettings = $mi->getGeneralSettings();
     if (!$mi->id) {
         // Create MI Selection List
         $mi_handler = new microIntegrationHandler();
         $mi_list = $mi_handler->getIntegrationList();
         $drilldown = array('all' => array());
         $mi_gsettings['class_name'] = array('hidden');
         $mi_gsettings['class_list'] = array('list');
         if (count($mi_list) > 0) {
             foreach ($mi_list as $name) {
                 $mi_item = new microIntegration();
                 if ($mi_item->callDry($name)) {
                     $handle = str_replace('mi_', '', $mi_item->class_name);
                     if (isset($mi_item->info['type'])) {
                         foreach ($mi_item->info['type'] as $type) {
                             $drill = explode('.', $type);
                             $cursor =& $drilldown;
                             $mi_item->name = str_replace(array(' AEC ', ' MI '), ' ', $mi_item->name);
                             foreach ($drill as $i => $k) {
                                 if (!isset($cursor[$k])) {
                                     $cursor[$k] = array();
                                 }
                                 if ($i == count($drill) - 1) {
                                     $cursor[$k][] = '<a href="#' . $handle . '" class="mi-menu-mi"><span class="mi-menu-mi-name">' . $mi_item->name . '</span><span class="mi-menu-mi-desc">' . $mi_item->desc . '</span></a>';
                                 } else {
                                     $cursor =& $cursor[$k];
                                 }
                             }
                         }
                     }
                     $drilldown['all'][] = '<a href="#' . $handle . '" class="mi-menu-mi"><span class="mi-menu-mi-name">' . $mi_item->name . '</span><span class="mi-menu-mi-desc">' . $mi_item->desc . '</span></a>';
                 }
             }
             deep_ksort($drilldown);
             $lists['class_list'] = '<a tabindex="0" href="#mi-select-list" class="btn btn-primary" id="drilldown">Select an Integration</a>';
             $lists['class_list'] .= '<div id="mi-select-list" class="hidden"><ul>';
             foreach ($drilldown as $lin => $li) {
                 if ($this->lang->hasKey('AEC_MI_LIST_' . strtoupper($lin))) {
                     $kkey = JText::_('AEC_MI_LIST_' . strtoupper($lin));
                 } else {
                     $kkey = ucwords(str_replace('_', ' ', $lin));
                 }
                 $lists['class_list'] .= '<li><a href="#">' . $kkey . '</a><ul>';
                 foreach ($li as $lixn => $lix) {
                     if (is_array($lix)) {
                         if ($this->lang->hasKey('AEC_MI_LIST_' . strtoupper($lixn))) {
                             $xkey = JText::_('AEC_MI_LIST_' . strtoupper($lixn));
                         } else {
                             $xkey = ucwords(str_replace('_', ' ', $lixn));
                         }
                         $lists['class_list'] .= '<li><a href="#">' . $xkey . '</a><ul>';
                         foreach ($lix as $mix) {
                             $lists['class_list'] .= '<li>' . $mix . '</li>';
                         }
                         $lists['class_list'] .= '</ul></li>';
                     } else {
                         $lists['class_list'] .= '<li>' . $lix . '</li>';
                     }
                 }
                 $lists['class_list'] .= '</ul></li>';
             }
             $lists['class_list'] .= '</ul></div>';
         } else {
             $lists['class_list'] = '';
         }
     }
     if ($mi->id) {
         // Call MI (override active check) and Settings
         if ($mi->callIntegration(true)) {
             $attached['plans'] = microIntegrationHandler::getPlansbyMI($mi->id, false, true);
             $attached['groups'] = microIntegrationHandler::getGroupsbyMI($mi->id, false, true);
             $set = array();
             foreach ($mi_gsettings as $n => $v) {
                 if (!isset($mi->{$n})) {
                     if (isset($mi->settings[$n])) {
                         $set[$n] = $mi->settings[$n];
                     } else {
                         $set[$n] = null;
                     }
                 } else {
                     $set[$n] = $mi->{$n};
                 }
             }
             $restrictionHelper = new aecRestrictionHelper();
             $mi_gsettings['restr_remaps'] = array('subarea_change', 'restrictions');
             $mi_gsettings = array_merge($mi_gsettings, $restrictionHelper->getParams());
             if (empty($mi->restrictions)) {
                 $mi->restrictions = array();
             }
             $lists = array_merge($lists, $restrictionHelper->getLists($set, $mi->restrictions));
             $mi_gsettings[$mi->id . 'remap'] = array('area_change', 'MI');
             $mi_gsettings[$mi->id . 'remaps'] = array('subarea_change', $mi->class_name);
             $mi_settings = $mi->getSettings();
             // Get lists supplied by the MI
             if (!empty($mi_settings['lists'])) {
                 $lists = array_merge($lists, $mi_settings['lists']);
                 unset($mi_settings['lists']);
             }
             $available_plans = SubscriptionPlanHandler::getPlanList(false, false, true, null, true);
             $selected_plans = array();
             foreach ($attached['plans'] as $p) {
                 $selected_plans[] = (object) array('value' => $p->id, 'text' => $p->name);
             }
             $lists['attach_to_plans'] = JHTML::_('select.genericlist', $available_plans, 'attach_to_plans[]', 'size="1" multiple="multiple" class="select2-bootstrap"', 'value', 'text', $selected_plans);
             $available_groups = ItemGroupHandler::getGroups(null, true);
             $selected_groups = array();
             foreach ($attached['groups'] as $g) {
                 $selected_groups[] = (object) array('value' => $g->id, 'text' => $g->name);
             }
             $lists['attach_to_groups'] = JHTML::_('select.genericlist', $available_groups, 'attach_to_groups[]', 'size="1" multiple="multiple" class="select2-bootstrap"', 'value', 'text', $selected_groups);
             $gsettings = new aecSettings('MI', 'E');
             $gsettings->fullSettingsArray($mi_gsettings, array_merge($set, $mi->restrictions), $lists);
             $settings = new aecSettings('MI', $mi->class_name);
             $settings->fullSettingsArray($mi_settings, $set, $lists);
             // Call HTML Class
             $aecHTML = new aecHTML(array_merge($gsettings->settings, $settings->settings), array_merge($gsettings->lists, $settings->lists));
             $aecHTML->hasHacks = method_exists($mi->mi_class, 'hacks');
             $aecHTML->customparams = array();
             foreach ($mi_settings as $n => $v) {
                 $aecHTML->customparams[] = $n;
             }
             $aecHTML->hasSettings = true;
             $aecHTML->hasRestrictions = !empty($mi->settings['has_restrictions']);
         } else {
             $short = 'microIntegration loading failure';
             $event = 'When trying to load microIntegration: ' . $mi->id . ', callIntegration failed';
             $tags = 'microintegration,loading,error';
             $params = array();
             $eventlog = new eventLog();
             $eventlog->issue($short, $tags, $event, 128, $params);
         }
     } else {
         $settings = new aecSettings('MI', 'E');
         $settings->fullSettingsArray($mi_gsettings, array(), $lists);
         // Call HTML Class
         $aecHTML = new aecHTML($settings->settings, $settings->lists);
         $aecHTML->hasSettings = false;
         $aecHTML->hasRestrictions = false;
         $available_plans = SubscriptionPlanHandler::getPlanList(false, false, true, null, true);
         $lists['attach_to_plans'] = JHTML::_('select.genericlist', $available_plans, 'attach_to_plans[]', 'size="1" multiple="multiple" class="select2-bootstrap"', 'value', 'text', null);
         $available_groups = ItemGroupHandler::getGroups(null, true);
         $lists['attach_to_groups'] = JHTML::_('select.genericlist', $available_groups, 'attach_to_groups[]', 'size="1" multiple="multiple" class="select2-bootstrap"', 'value', 'text', null);
     }
     HTML_AcctExp::editMicroIntegration($mi, $lists, $aecHTML, $attached);
 }