]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - actions/editapplication.php
Merge commit 'origin/master' into testing
[quix0rs-gnu-social.git] / actions / editapplication.php
index 3af482844f573f6fdaee013d49595135a0be0169..64cf0a5745d134fcceeb7b214844b45dc86111ec 100644 (file)
@@ -45,9 +45,9 @@ if (!defined('STATUSNET') && !defined('LACONICA')) {
 
 class EditApplicationAction extends OwnerDesignAction
 {
-    var $msg = null;
-
-    var $app = null;
+    var $msg   = null;
+    var $owner = null;
+    var $app   = null;
 
     function title()
     {
@@ -68,7 +68,14 @@ class EditApplicationAction extends OwnerDesignAction
         }
 
         $id = (int)$this->arg('id');
-        $this->app = Oauth_application::staticGet($id);
+
+        $this->app   = Oauth_application::staticGet($id);
+        $this->owner = User::staticGet($this->app->owner);
+        $cur         = common_current_user();
+
+        if ($cur->id != $this->owner->id) {
+            $this->clientError(_('You are not the owner of this application.'), 401);
+        }
 
         if (!$this->app) {
             $this->clientError(_('No such application.'));
@@ -81,7 +88,7 @@ class EditApplicationAction extends OwnerDesignAction
     /**
      * Handle the request
      *
-     * On GET, show the form. On POST, try to save the group.
+     * On GET, show the form. On POST, try to save the app.
      *
      * @param array $args unused
      *
@@ -91,33 +98,48 @@ class EditApplicationAction extends OwnerDesignAction
     function handle($args)
     {
         parent::handle($args);
-        if ($_SERVER['REQUEST_METHOD'] == 'POST') {
 
-            // CSRF protection
-            $token = $this->trimmed('token');
-            if (!$token || $token != common_session_token()) {
-                $this->clientError(_('There was a problem with your session token.'));
-                return;
-            }
-
-            $cur = common_current_user();
-
-            if ($this->arg('cancel')) {
-                common_redirect(common_local_url('showapplication',
-                    array(
-                        'nickname' => $cur->nickname,
-                        'id' => $this->app->id)
-                    ), 303);
-            } elseif ($this->arg('save')) {
-                $this->trySave();
-            } else {
-                $this->clientError(_('Unexpected form submission.'));
-            }
+        if ($_SERVER['REQUEST_METHOD'] == 'POST') {
+            $this->handlePost($args);
         } else {
             $this->showForm();
         }
     }
 
+    function handlePost($args)
+    {
+        // Workaround for PHP returning empty $_POST and $_FILES when POST
+        // length > post_max_size in php.ini
+
+        if (empty($_FILES)
+            && empty($_POST)
+            && ($_SERVER['CONTENT_LENGTH'] > 0)
+            ) {
+            $msg = _('The server was unable to handle that much POST ' .
+                     'data (%s bytes) due to its current configuration.');
+            $this->clientException(sprintf($msg, $_SERVER['CONTENT_LENGTH']));
+            return;
+        }
+
+        // CSRF protection
+        $token = $this->trimmed('token');
+        if (!$token || $token != common_session_token()) {
+            $this->clientError(_('There was a problem with your session token.'));
+            return;
+        }
+
+        $cur = common_current_user();
+
+        if ($this->arg('cancel')) {
+            common_redirect(common_local_url('showapplication',
+                                             array('id' => $this->app->id)), 303);
+        } elseif ($this->arg('save')) {
+            $this->trySave();
+        } else {
+            $this->clientError(_('Unexpected form submission.'));
+        }
+    }
+
     function showForm($msg=null)
     {
         $this->msg = $msg;
@@ -149,34 +171,34 @@ class EditApplicationAction extends OwnerDesignAction
         $homepage     = $this->trimmed('homepage');
         $callback_url = $this->trimmed('callback_url');
         $type         = $this->arg('app_type');
-        $access_type  = $this->arg('access_type');
+        $access_type  = $this->arg('default_access_type');
 
         if (empty($name)) {
-             $this->showForm(_('Name is required.'));
-             return;
+            $this->showForm(_('Name is required.'));
+            return;
         } elseif (mb_strlen($name) > 255) {
             $this->showForm(_('Name is too long (max 255 chars).'));
             return;
+        } else if ($this->nameExists($name)) {
+            $this->showForm(_('Name already in use. Try another one.'));
+            return;
         } elseif (empty($description)) {
             $this->showForm(_('Description is required.'));
             return;
         } elseif (Oauth_application::descriptionTooLong($description)) {
             $this->showForm(sprintf(
                 _('Description is too long (max %d chars).'),
-                Oauth_application::maxDescription()));
+                                    Oauth_application::maxDescription()));
             return;
-        } elseif (empty($source_url)) {
-            $this->showForm(_('Source URL is required.'));
-            return;
-        } elseif ((strlen($source_url) > 0)
-            && !Validate::uri(
-                $source_url,
-                array('allowed_schemes' => array('http', 'https'))
-                )
-            )
-        {
-            $this->showForm(_('Source URL is not valid.'));
+        } elseif (mb_strlen($source_url) > 255) {
+            $this->showForm(_('Source URL is too long.'));
             return;
+        } elseif ((mb_strlen($source_url) > 0)
+                  && !Validate::uri($source_url,
+                                    array('allowed_schemes' => array('http', 'https'))))
+            {
+                $this->showForm(_('Source URL is not valid.'));
+                return;
         } elseif (empty($organization)) {
             $this->showForm(_('Organization is required.'));
             return;
@@ -186,34 +208,30 @@ class EditApplicationAction extends OwnerDesignAction
         } elseif (empty($homepage)) {
             $this->showForm(_('Organization homepage is required.'));
             return;
-        } elseif ((strlen($homepage) > 0)
-            && !Validate::uri(
-                $homepage,
-                array('allowed_schemes' => array('http', 'https'))
-                )
-            )
-        {
-            $this->showForm(_('Homepage is not a valid URL.'));
-            return;
-        } elseif (empty($callback_url)) {
-            $this->showForm(_('Callback is required.'));
-            return;
-        } elseif (strlen($callback_url) > 0
-            && !Validate::uri(
-                $source_url,
-                array('allowed_schemes' => array('http', 'https'))
-                )
-            )
-        {
-            $this->showForm(_('Callback URL is not valid.'));
-            return;
-        }
+        } elseif ((mb_strlen($homepage) > 0)
+                  && !Validate::uri($homepage,
+                                    array('allowed_schemes' => array('http', 'https'))))
+            {
+                $this->showForm(_('Homepage is not a valid URL.'));
+                return;
+            } elseif (mb_strlen($callback_url) > 255) {
+                $this->showForm(_('Callback is too long.'));
+                return;
+            } elseif (mb_strlen($callback_url) > 0
+                      && !Validate::uri($source_url,
+                                        array('allowed_schemes' => array('http', 'https'))
+                                        ))
+                {
+                    $this->showForm(_('Callback URL is not valid.'));
+                    return;
+                }
 
         $cur = common_current_user();
 
         // Checked in prepare() above
 
         assert(!is_null($cur));
+        assert(!is_null($this->app));
 
         $orig = clone($this->app);
 
@@ -225,21 +243,45 @@ class EditApplicationAction extends OwnerDesignAction
         $this->app->callback_url = $callback_url;
         $this->app->type         = $type;
 
+        common_debug("access_type = $access_type");
+
         if ($access_type == 'r') {
-            $this->app->setAccessFlags(true, false);
+            $this->app->access_type = 1;
         } else {
-            $this->app->setAccessFlags(true, true);
+            $this->app->access_type = 3;
         }
 
         $result = $this->app->update($orig);
 
         if (!$result) {
-            common_log_db_error($app, 'UPDATE', __FILE__);
+            common_log_db_error($this->app, 'UPDATE', __FILE__);
             $this->serverError(_('Could not update application.'));
         }
 
-        common_redirect(common_local_url('apps',
-            array('nickname' => $cur->nickname)), 303);
+        $this->app->uploadLogo();
+
+        common_redirect(common_local_url('oauthappssettings'), 303);
+    }
+
+    /**
+     * Does the app name already exist?
+     *
+     * Checks the DB to see someone has already registered an app
+     * with the same name.
+     *
+     * @param string $name app name to check
+     *
+     * @return boolean true if the name already exists
+     */
+
+    function nameExists($name)
+    {
+        $newapp = Oauth_application::staticGet('name', $name);
+        if (empty($newapp)) {
+            return false;
+        } else {
+            return $newapp->id != $this->app->id;
+        }
     }
 
 }