]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - actions/newapplication.php
Merge branch '0.9.x' into activityexport
[quix0rs-gnu-social.git] / actions / newapplication.php
index 9d8635270a4f46aa36f4ae26f3d0991bc1baad26..8b150c315139d8c3fdb446685b05d3313c28684f 100644 (file)
@@ -71,7 +71,7 @@ class NewApplicationAction 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
      *
@@ -83,22 +83,45 @@ class NewApplicationAction extends OwnerDesignAction
         parent::handle($args);
 
         if ($_SERVER['REQUEST_METHOD'] == 'POST') {
-
-            $cur = common_current_user();
-
-            if ($this->arg('cancel')) {
-                common_redirect(common_local_url('apps',
-                    array('nickname' => $cur->nickname)), 303);
-            } elseif ($this->arg('save')) {
-                $this->trySave();
-            } else {
-                $this->clientError(_('Unexpected form submission.'));
-            }
+        $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('oauthappssettings'), 303);
+    } elseif ($this->arg('save')) {
+        $this->trySave();
+    } else {
+        $this->clientError(_('Unexpected form submission.'));
+    }
+    }
+
     function showForm($msg=null)
     {
         $this->msg = $msg;
@@ -130,11 +153,14 @@ class NewApplicationAction 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;
+        } else if ($this->nameExists($name)) {
+            $this->showForm(_('Name already in use. Try another one.'));
+            return;
         } elseif (mb_strlen($name) > 255) {
             $this->showForm(_('Name is too long (max 255 chars).'));
             return;
@@ -144,7 +170,7 @@ class NewApplicationAction extends OwnerDesignAction
         } elseif (Oauth_application::descriptionTooLong($description)) {
             $this->showForm(sprintf(
                 _('Description is too long (max %d chars).'),
-                Oauth_application::maxDescription()));
+                Oauth_application::maxDesc()));
             return;
         } elseif (empty($source_url)) {
             $this->showForm(_('Source URL is required.'));
@@ -176,8 +202,8 @@ class NewApplicationAction extends OwnerDesignAction
         {
             $this->showForm(_('Homepage is not a valid URL.'));
             return;
-        } elseif (empty($callback_url)) {
-            $this->showForm(_('Callback is required.'));
+        } elseif (mb_strlen($callback_url) > 255) {
+            $this->showForm(_('Callback is too long.'));
             return;
         } elseif (strlen($callback_url) > 0
             && !Validate::uri(
@@ -234,19 +260,37 @@ class NewApplicationAction extends OwnerDesignAction
 
         $app->consumer_key = $consumer->consumer_key;
 
-        $result = $app->insert();
+        $this->app_id = $app->insert();
 
-        if (!$result) {
+        if (!$this->app_id) {
             common_log_db_error($app, 'INSERT', __FILE__);
             $this->serverError(_('Could not create application.'));
             $app->query('ROLLBACK');
         }
 
+        $app->uploadLogo();
+
         $app->query('COMMIT');
 
-        common_redirect(common_local_url('apps',
-            array('nickname' => $cur->nickname)), 303);
+        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)
+    {
+        $app = Oauth_application::staticGet('name', $name);
+        return !empty($app);
     }
 
 }