summaryrefslogtreecommitdiff
path: root/actions/newapplication.php
diff options
context:
space:
mode:
Diffstat (limited to 'actions/newapplication.php')
-rw-r--r--actions/newapplication.php133
1 files changed, 92 insertions, 41 deletions
diff --git a/actions/newapplication.php b/actions/newapplication.php
index a78a856b1..9d8635270 100644
--- a/actions/newapplication.php
+++ b/actions/newapplication.php
@@ -43,7 +43,7 @@ if (!defined('STATUSNET') && !defined('LACONICA')) {
* @link http://status.net/
*/
-class NewApplicationAction extends Action
+class NewApplicationAction extends OwnerDesignAction
{
var $msg;
@@ -61,7 +61,7 @@ class NewApplicationAction extends Action
parent::prepare($args);
if (!common_logged_in()) {
- $this->clientError(_('You must be logged in to create a group.'));
+ $this->clientError(_('You must be logged in to register an application.'));
return false;
}
@@ -81,8 +81,19 @@ class NewApplicationAction extends Action
function handle($args)
{
parent::handle($args);
+
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
- $this->trySave();
+
+ $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.'));
+ }
} else {
$this->showForm();
}
@@ -112,55 +123,73 @@ class NewApplicationAction extends Action
function trySave()
{
- $name = $this->trimmed('name');
- $description = $this->trimmed('description');
- $source_url = $this->trimmed('source_url');
- $organization = $this->trimmed('organization');
- $homepage = $this->trimmed('application');
- $callback_url = $this->trimmed('callback_url');
- $this->type = $this->trimmed('type');
- $this->access_type = $this->trimmed('access_type');
-
- if (!is_null($name) && mb_strlen($name) > 255) {
+ $name = $this->trimmed('name');
+ $description = $this->trimmed('description');
+ $source_url = $this->trimmed('source_url');
+ $organization = $this->trimmed('organization');
+ $homepage = $this->trimmed('homepage');
+ $callback_url = $this->trimmed('callback_url');
+ $type = $this->arg('app_type');
+ $access_type = $this->arg('access_type');
+
+ if (empty($name)) {
+ $this->showForm(_('Name is required.'));
+ return;
+ } elseif (mb_strlen($name) > 255) {
$this->showForm(_('Name is too long (max 255 chars).'));
return;
- } else if (User_group::descriptionTooLong($description)) {
+ } elseif (empty($description)) {
+ $this->showForm(_('Description is required.'));
+ return;
+ } elseif (Oauth_application::descriptionTooLong($description)) {
$this->showForm(sprintf(
- _('description is too long (max %d chars).'),
+ _('Description is too long (max %d chars).'),
Oauth_application::maxDescription()));
return;
- } elseif (!is_null($source_url)
- && (strlen($source_url) > 0)
+ } 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.'));
return;
- } elseif (!is_null($homepage)
- && (strlen($homepage) > 0)
+ } elseif (empty($organization)) {
+ $this->showForm(_('Organization is required.'));
+ return;
+ } elseif (mb_strlen($organization) > 255) {
+ $this->showForm(_('Organization is too long (max 255 chars).'));
+ return;
+ } 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 (!is_null($callback_url)
- && (strlen($callback_url) > 0)
+ 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;
}
-
+
$cur = common_current_user();
// Checked in prepare() above
@@ -171,31 +200,53 @@ class NewApplicationAction extends Action
$app->query('BEGIN');
- $app->name = $name;
- $app->owner = $cur->id;
- $app->description = $description;
- $app->source_url = $souce_url;
+ $app->name = $name;
+ $app->owner = $cur->id;
+ $app->description = $description;
+ $app->source_url = $source_url;
$app->organization = $organization;
- $app->homepage = $homepage;
+ $app->homepage = $homepage;
$app->callback_url = $callback_url;
- $app->type = $type;
- $app->access_type = $access_type;
-
+ $app->type = $type;
+
+ // Yeah, I dunno why I chose bit flags. I guess so I could
+ // copy this value directly to Oauth_application_user
+ // access_type which I think does need bit flags -- Z
+
+ if ($access_type == 'r') {
+ $app->setAccessFlags(true, false);
+ } else {
+ $app->setAccessFlags(true, true);
+ }
+
+ $app->created = common_sql_now();
+
// generate consumer key and secret
-
- $app->created = common_sql_now();
+
+ $consumer = Consumer::generateNew();
+
+ $result = $consumer->insert();
+
+ if (!$result) {
+ common_log_db_error($consumer, 'INSERT', __FILE__);
+ $this->serverError(_('Could not create application.'));
+ }
+
+ $app->consumer_key = $consumer->consumer_key;
$result = $app->insert();
if (!$result) {
- common_log_db_error($group, 'INSERT', __FILE__);
+ common_log_db_error($app, 'INSERT', __FILE__);
$this->serverError(_('Could not create application.'));
+ $app->query('ROLLBACK');
}
-
- $group->query('COMMIT');
- common_redirect($group->homeUrl(), 303);
-
+ $app->query('COMMIT');
+
+ common_redirect(common_local_url('apps',
+ array('nickname' => $cur->nickname)), 303);
+
}
}