]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - lib/htmloutputter.php
check for 'post' verb in microapps by default
[quix0rs-gnu-social.git] / lib / htmloutputter.php
index 8d3e815d33837682b19613a510ff61ac210f51d7..9a43ef069efaae237df31f7b48931827ec1103ee 100644 (file)
@@ -108,6 +108,13 @@ class HTMLOutputter extends XMLOutputter
 
         header('Content-Type: '.$type);
 
+       // Output anti-framing headers to prevent clickjacking (respected by newer
+        // browsers).
+       if (common_config('javascript', 'bustframes')) {
+            header('X-XSS-Protection: 1; mode=block'); // detect XSS Reflection attacks
+            header('X-Frame-Options: SAMEORIGIN'); // no rendering if origin mismatch
+        }
+
         $this->extraHeaders();
         if (preg_match("/.*\/.*xml/", $type)) {
             // Required for XML documents
@@ -119,9 +126,16 @@ class HTMLOutputter extends XMLOutputter
 
         $language = $this->getLanguage();
 
-        $this->elementStart('html', array('xmlns' => 'http://www.w3.org/1999/xhtml',
-                                          'xml:lang' => $language,
-                                          'lang' => $language));
+        $attrs = array(
+            'xmlns' => 'http://www.w3.org/1999/xhtml',
+            'xml:lang' => $language,
+            'lang' => $language
+        );
+
+        if (Event::handle('StartHtmlElement', array($this, &$attrs))) {
+            $this->elementStart('html', $attrs);
+            Event::handle('EndHtmlElement', array($this, &$attrs));
+        }
     }
 
     function getLanguage()
@@ -163,21 +177,22 @@ class HTMLOutputter extends XMLOutputter
      * @param string $label        text of label for the element
      * @param string $value        value of the element, default null
      * @param string $instructions instructions for valid input
+     * @param string $name         name of the element; if null, the id will
+     *                             be used
      *
-     * @todo add a $name parameter
      * @todo add a $maxLength parameter
      * @todo add a $size parameter
      *
      * @return void
      */
 
-    function input($id, $label, $value=null, $instructions=null)
+    function input($id, $label, $value=null, $instructions=null, $name=null)
     {
         $this->element('label', array('for' => $id), $label);
-        $attrs = array('name' => $id,
-                       'type' => 'text',
-                       'id' => $id);
-        if ($value) {
+        $attrs = array('type' => 'text',
+                       'id'   => $id);
+        $attrs['name'] = is_null($name) ? $id : $name;
+        if (!is_null($value)) { // value can be 0 or ''
             $attrs['value'] = $value;
         }
         $this->element('input', $attrs);
@@ -362,7 +377,7 @@ class HTMLOutputter extends XMLOutputter
 
                 if (strpos($src, 'plugins/') === 0 || strpos($src, 'local/') === 0) {
 
-                    $src = common_path($src) . '?version=' . STATUSNET_VERSION;
+                    $src = common_path($src, StatusNet::isHTTPS()) . '?version=' . STATUSNET_VERSION;
 
                 } else {
 
@@ -371,7 +386,12 @@ class HTMLOutputter extends XMLOutputter
                         $sslserver = common_config('javascript', 'sslserver');
 
                         if (empty($sslserver)) {
-                            $server = common_config('site', 'server');
+                            if (is_string(common_config('site', 'sslserver')) &&
+                                mb_strlen(common_config('site', 'sslserver')) > 0) {
+                                $server = common_config('site', 'sslserver');
+                            } else if (common_config('site', 'server')) {
+                                $server = common_config('site', 'server');
+                            }
                             $path   = common_config('site', 'path') . '/js/';
                         } else {
                             $server = $sslserver;
@@ -388,10 +408,7 @@ class HTMLOutputter extends XMLOutputter
                         $path = common_config('javascript', 'path');
 
                         if (empty($path)) {
-                            $path = common_config('site', 'path') . '/';
-                            if ($fallbackSubdir) {
-                                $path .= $fallbackSubdir . '/';
-                            }
+                            $path = common_config('site', 'path') . '/js/';
                         }
 
                         $server = common_config('javascript', 'server');
@@ -467,7 +484,7 @@ class HTMLOutputter extends XMLOutputter
                 if(file_exists(Theme::file($src,$theme))){
                    $src = Theme::path($src, $theme);
                 }else{
-                   $src = common_path($src);
+                    $src = common_path($src, StatusNet::isHTTPS());
                 }
                 $src.= '?version=' . STATUSNET_VERSION;
             }
@@ -507,28 +524,48 @@ class HTMLOutputter extends XMLOutputter
      * @param string $label        text of label for the element
      * @param string $content      content of the textarea, default none
      * @param string $instructions instructions for valid input
+     * @param string $name         name of textarea; if null, $id will be used
+     * @param int    $cols         number of columns
+     * @param int    $rows         number of rows
      *
      * @return void
-     *
-     * @todo add a $name parameter
-     * @todo add a $cols parameter
-     * @todo add a $rows parameter
      */
 
-    function textarea($id, $label, $content=null, $instructions=null)
-    {
+    function textarea(
+        $id,
+        $label,
+        $content      = null,
+        $instructions = null,
+        $name         = null,
+        $cols         = null,
+        $rows         = null
+    ) {
         $this->element('label', array('for' => $id), $label);
-        $this->element('textarea', array('rows' => 3,
-                                         'cols' => 40,
-                                         'name' => $id,
-                                         'id' => $id),
-                       ($content) ? $content : '');
+        $attrs = array(
+            'rows' => 3,
+            'cols' => 40,
+            'id' => $id
+        );
+        $attrs['name'] = is_null($name) ? $id : $name;
+
+        if ($cols != null) {
+            $attrs['cols'] = $cols;
+
+        }
+        if ($rows != null) {
+            $attrs['rows'] = $rows;
+        }
+        $this->element(
+            'textarea',
+            $attrs,
+            is_null($content) ? '' : $content
+        );
         if ($instructions) {
             $this->element('p', 'form_guide', $instructions);
         }
     }
 
-    /**
+   /**
     * Internal script to autofocus the given element on page onload.
     *
     * @param string $id element ID, must refer to an existing element