]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - lib/util.php
Better use of Nickname validation functions
[quix0rs-gnu-social.git] / lib / util.php
index 4a87f9a2171e16d579b541a3a0bdb723d6aa7b27..81643f9a192e8d9deb741a1e44ac9cf87f5767ab 100644 (file)
@@ -235,9 +235,9 @@ function common_check_user($nickname, $password)
     if (Event::handle('StartCheckPassword', array($nickname, $password, &$authenticatedUser))) {
 
         if (common_is_email($nickname)) {
-            $user = User::staticGet('email', common_canonical_email($nickname));
+            $user = User::getKV('email', common_canonical_email($nickname));
         } else {
-            $user = User::staticGet('nickname', common_canonical_nickname($nickname));
+            $user = User::getKV('nickname', Nickname::normalize($nickname));
         }
 
         if (!empty($user)) {
@@ -315,7 +315,7 @@ function common_set_user($user)
         return true;
     } else if (is_string($user)) {
         $nickname = $user;
-        $user = User::staticGet('nickname', $nickname);
+        $user = User::getKV('nickname', $nickname);
     } else if (!($user instanceof User)) {
         return false;
     }
@@ -413,7 +413,7 @@ function common_remembered_user()
         return null;
     }
 
-    $rm = Remember_me::staticGet('code', $code);
+    $rm = Remember_me::getKV('code', $code);
 
     if (!$rm) {
         common_log(LOG_WARNING, 'No such remember code: ' . $code);
@@ -427,7 +427,7 @@ function common_remembered_user()
         return null;
     }
 
-    $user = User::staticGet('id', $rm->user_id);
+    $user = User::getKV('id', $rm->user_id);
 
     if (!$user) {
         common_log(LOG_WARNING, 'No such user for rememberme: ' . $rm->user_id);
@@ -484,7 +484,7 @@ function common_current_user()
             common_ensure_session();
             $id = isset($_SESSION['userid']) ? $_SESSION['userid'] : false;
             if ($id) {
-                $user = User::staticGet($id);
+                $user = User::getKV($id);
                 if ($user) {
                        $_cur = $user;
                        return $_cur;
@@ -585,8 +585,8 @@ function common_render_content($text, $notice)
     $r = common_render_text($text);
     $id = $notice->profile_id;
     $r = common_linkify_mentions($r, $notice);
-    $r = preg_replace('/(^|[\s\.\,\:\;]+)!(' . Nickname::DISPLAY_FMT . ')/e',
-                      "'\\1!'.common_group_link($id, '\\2')", $r);
+    $r = preg_replace_callback('/(^|[\s\.\,\:\;]+)!(' . Nickname::DISPLAY_FMT . ')/',
+                      function ($m) { return "{$m[1]}!".common_group_link($id, $m[2]); }, $r);
     return $r;
 }
 
@@ -675,7 +675,7 @@ function common_find_mentions($text, $notice)
 {
     $mentions = array();
 
-    $sender = Profile::staticGet('id', $notice->profile_id);
+    $sender = Profile::getKV('id', $notice->profile_id);
 
     if (empty($sender)) {
         return $mentions;
@@ -690,14 +690,14 @@ function common_find_mentions($text, $notice)
         // Is it a reply?
 
         if (!empty($notice) && !empty($notice->reply_to)) {
-            $originalNotice = Notice::staticGet('id', $notice->reply_to);
+            $originalNotice = Notice::getKV('id', $notice->reply_to);
             if (!empty($originalNotice)) {
-                $originalAuthor = Profile::staticGet('id', $originalNotice->profile_id);
+                $originalAuthor = Profile::getKV('id', $originalNotice->profile_id);
 
                 $ids = $originalNotice->getReplies();
 
                 foreach ($ids as $id) {
-                    $repliedTo = Profile::staticGet('id', $id);
+                    $repliedTo = Profile::getKV('id', $id);
                     if (!empty($repliedTo)) {
                         $originalMentions[$repliedTo->nickname] = $repliedTo;
                     }
@@ -729,7 +729,7 @@ function common_find_mentions($text, $notice)
             }
 
             if (!empty($mentioned)) {
-                $user = User::staticGet('id', $mentioned->id);
+                $user = User::getKV('id', $mentioned->id);
 
                 if ($user) {
                     $url = common_local_url('userbyid', array('id' => $user->id));
@@ -812,7 +812,8 @@ function common_render_text($text)
 
     $r = preg_replace('/[\x{0}-\x{8}\x{b}-\x{c}\x{e}-\x{19}]/', '', $r);
     $r = common_replace_urls_callback($r, 'common_linkify');
-    $r = preg_replace('/(^|\&quot\;|\'|\(|\[|\{|\s+)#([\pL\pN_\-\.]{1,64})/ue', "'\\1#'.common_tag_link('\\2')", $r);
+    $r = preg_replace_callback('/(^|\&quot\;|\'|\(|\[|\{|\s+)#([\pL\pN_\-\.]{1,64})/u',
+                function ($m) { return "{$m[1]}#".common_tag_link($m[2]); }, $r);
     // XXX: machine tags
     return $r;
 }
@@ -979,7 +980,7 @@ function common_linkify($url) {
 
     // Check to see whether this is a known "attachment" URL.
 
-    $f = File::staticGet('url', $longurl);
+    $f = File::getKV('url', $longurl);
 
     if (empty($f)) {
         if (common_config('attachments', 'process_links')) {
@@ -993,7 +994,7 @@ function common_linkify($url) {
             $is_attachment = true;
             $attachment_id = $f->id;
 
-            $thumb = File_thumbnail::staticGet('file_id', $f->id);
+            $thumb = File_thumbnail::getKV('file_id', $f->id);
             if (!empty($thumb)) {
                 $has_thumb = true;
             }
@@ -1046,7 +1047,7 @@ function common_shorten_links($text, $always = false, User $user=null)
 
     $maxLength = User_urlshortener_prefs::maxNoticeLength($user);
 
-    if ($always || mb_strlen($text) > $maxLength) {
+    if ($always || ($maxLength != -1 && mb_strlen($text) > $maxLength)) {
         return common_replace_urls_callback($text, array('File_redirection', 'forceShort'), $user);
     } else {
         return common_replace_urls_callback($text, array('File_redirection', 'makeShort'), $user);
@@ -1150,7 +1151,7 @@ function common_valid_profile_tag($str)
  */
 function common_group_link($sender_id, $nickname)
 {
-    $sender = Profile::staticGet($sender_id);
+    $sender = Profile::getKV($sender_id);
     $group = User_group::getForNickname($nickname, $sender);
     if ($sender && $group && $sender->isMember($group)) {
         $attrs = array('href' => $group->permalink(),
@@ -1217,9 +1218,9 @@ function common_relative_profile($sender, $nickname, $dt=null)
         return $recipient;
     }
     // If this is a local user, try to find a local user with that nickname.
-    $sender = User::staticGet($sender->id);
+    $sender = User::getKV($sender->id);
     if ($sender) {
-        $recipient_user = User::staticGet('nickname', $nickname);
+        $recipient_user = User::getKV('nickname', $nickname);
         if ($recipient_user) {
             return $recipient_user->getProfile();
         }
@@ -1236,7 +1237,7 @@ function common_local_url($action, $args=null, $params=null, $fragment=null, $ad
         $r = Router::get();
         $path = $r->build($action, $args, $params, $fragment);
 
-        $ssl = common_is_sensitive($action);
+        $ssl = StatusNet::isHTTPS() || common_is_sensitive($action);
 
         if (common_config('site','fancy')) {
             $url = common_path($path, $ssl, $addSession);
@@ -1259,10 +1260,10 @@ function common_is_sensitive($action)
         'register',
         'passwordsettings',
         'api',
-        'ApiOauthRequestToken',
-        'ApiOauthAccessToken',
-        'ApiOauthAuthorize',
-        'ApiOauthPin',
+        'ApiOAuthRequestToken',
+        'ApiOAuthAccessToken',
+        'ApiOAuthAuthorize',
+        'ApiOAuthPin',
         'showapplication'
     );
     $ssl = null;
@@ -1719,9 +1720,13 @@ function common_log_objstring(&$object)
     return $objstring;
 }
 
-function common_valid_http_url($url)
+function common_valid_http_url($url, $secure=false)
 {
-    return Validate::uri($url, array('allowed_schemes' => array('http', 'https')));
+    // If $secure is true, only allow https URLs to pass
+    // (if false, we use '?' in 'https?' to say the 's' is optional)
+    $regex = $secure ? '/^https$/' : '/^https?$/';
+    return filter_var($url, FILTER_VALIDATE_URL)
+            && preg_match($regex, parse_url($url, PHP_URL_SCHEME));
 }
 
 function common_valid_tag($tag)
@@ -1980,10 +1985,10 @@ function common_markup_to_html($c, $args=null)
         $c = preg_replace('/%%arg.'.$name.'%%/', $value, $c);
     }
 
-    $c = preg_replace('/%%user.(\w+)%%/e', "common_user_property('\\1')", $c);
-    $c = preg_replace('/%%action.(\w+)%%/e', "common_local_url('\\1')", $c);
-    $c = preg_replace('/%%doc.(\w+)%%/e', "common_local_url('doc', array('title'=>'\\1'))", $c);
-    $c = preg_replace('/%%(\w+).(\w+)%%/e', 'common_config(\'\\1\', \'\\2\')', $c);
+    $c = preg_replace_callback('/%%user.(\w+)%%/', function ($m) { return common_user_property($m[1]); }, $c);
+    $c = preg_replace_callback('/%%action.(\w+)%%/', function ($m) { return common_local_url($m[1]); }, $c);
+    $c = preg_replace_callback('/%%doc.(\w+)%%/', function ($m) { return common_local_url('doc', array('title'=>$m[1])); }, $c);
+    $c = preg_replace_callback('/%%(\w+).(\w+)%%/', function ($m) { return common_config($m[1], $m[2]); }, $c);
     return Markdown($c);
 }
 
@@ -2004,7 +2009,11 @@ function common_user_property($property)
         return $profile->$property;
         break;
     case 'avatar':
-        return $profile->getAvatar(AVATAR_STREAM_SIZE);
+        try {
+            return $profile->getAvatar(AVATAR_STREAM_SIZE);
+        } catch (Exception $e) {
+            return null;
+        }
         break;
     case 'bestname':
         return $profile->getBestName();
@@ -2020,7 +2029,7 @@ function common_profile_uri($profile)
 
     if (!empty($profile)) {
         if (Event::handle('StartCommonProfileURI', array($profile, &$uri))) {
-            $user = User::staticGet($profile->id);
+            $user = User::getKV($profile->id);
             if (!empty($user)) {
                 $uri = $user->uri;
             }
@@ -2150,7 +2159,7 @@ function common_shorten_url($long_url, User $user=null, $force = false)
     // $force forces shortening even if it's not strictly needed
     // I doubt URL shortening is ever 'strictly' needed. - ESP
 
-    if (mb_strlen($long_url) < $maxUrlLength && !$force) {
+    if (($maxUrlLength == -1 || mb_strlen($long_url) < $maxUrlLength) && !$force) {
         return $long_url;
     }
 
@@ -2274,8 +2283,11 @@ function common_url_to_nickname($url)
 
 function common_nicknamize($str)
 {
-    $str = preg_replace('/\W/', '', $str);
-    return strtolower($str);
+    try {
+        return Nickname::normalize($str);
+    } catch (NicknameException $e) {
+        return null;
+    }
 }
 
 function common_perf_counter($key, $val=null)