summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrion Vibber <brion@pobox.com>2010-12-06 12:39:09 -0800
committerBrion Vibber <brion@pobox.com>2010-12-06 12:39:09 -0800
commit76f3dc32e0e1aa933931b7cc59030ae20bb4f89b (patch)
tree8ad6d443ac6a46ccd50b9fab00c3a095473c89de
parentb4fc54c308936477706acb5cc3c4acae4c3f3a4d (diff)
Added User::singleUserNickname() as (temporary?) fallback for single-user lookup as a workaround for site setup of 1user sites. We found that an external tool attempting to spin up StatusNet and then register the user would fail because StatusNet's router setup dies on being unable to find its single-user account, since the nickname is needed in setting up routing entries. This tweak will let it survive, using the configured setting as a fallback if it can't actually find the user account.
-rw-r--r--classes/User.php32
-rw-r--r--lib/router.php3
-rw-r--r--lib/util.php4
3 files changed, 35 insertions, 4 deletions
diff --git a/classes/User.php b/classes/User.php
index 964bc3e7f..c824ddb0c 100644
--- a/classes/User.php
+++ b/classes/User.php
@@ -917,4 +917,36 @@ class User extends Memcached_DataObject
throw new ServerException(_('Single-user mode code called when not enabled.'));
}
}
+
+ /**
+ * This is kind of a hack for using external setup code that's trying to
+ * build single-user sites.
+ *
+ * Will still return a username if the config singleuser/nickname is set
+ * even if the account doesn't exist, which normally indicates that the
+ * site is horribly misconfigured.
+ *
+ * At the moment, we need to let it through so that router setup can
+ * complete, otherwise we won't be able to create the account.
+ *
+ * This will be easier when we can more easily create the account and
+ * *then* switch the site to 1user mode without jumping through hoops.
+ *
+ * @return string
+ * @throws ServerException if no valid single user account is present
+ * @throws ServerException if called when not in single-user mode
+ */
+ static function singleUserNickname()
+ {
+ try {
+ $user = User::singleUser();
+ return $user->nickname;
+ } catch (Exception $e) {
+ if (common_config('singleuser', 'enabled') && common_config('singleuser', 'nickname')) {
+ common_log(LOG_WARN, "Warning: code attempting to pull single-user nickname when the account does not exist. If this is not setup time, this is probably a bug.");
+ return common_config('singleuser', 'nickname');
+ }
+ throw $e;
+ }
+ }
}
diff --git a/lib/router.php b/lib/router.php
index 7272a9690..2a908c7e0 100644
--- a/lib/router.php
+++ b/lib/router.php
@@ -787,8 +787,7 @@ class Router
if (common_config('singleuser', 'enabled')) {
- $user = User::singleUser();
- $nickname = $user->nickname;
+ $nickname = User::singleUserNickname();
foreach (array('subscriptions', 'subscribers',
'all', 'foaf', 'xrds',
diff --git a/lib/util.php b/lib/util.php
index d50fa2081..a1ea1f24d 100644
--- a/lib/util.php
+++ b/lib/util.php
@@ -975,9 +975,9 @@ function common_tag_link($tag)
$canonical = common_canonical_tag($tag);
if (common_config('singleuser', 'enabled')) {
// regular TagAction isn't set up in 1user mode
- $user = User::singleUser();
+ $nickname = User::singleUserNickname();
$url = common_local_url('showstream',
- array('nickname' => $user->nickname,
+ array('nickname' => $nickname,
'tag' => $canonical));
} else {
$url = common_local_url('tag', array('tag' => $canonical));