]> git.mxchange.org Git - friendica.git/blobdiff - src/Model/User.php
Add support for legacy $lang config in App->loadConfig
[friendica.git] / src / Model / User.php
index 41d26ee19d66f4c27d3b3a885f086564d9e466c0..57a3ecb50dfb681fcb425860b841bbe907759a5e 100644 (file)
@@ -65,6 +65,21 @@ class User
                return $r;
        }
 
+       /**
+        * @brief Get owner data by nick name
+        *
+        * @param int $nick
+        * @return boolean|array
+        */
+       public static function getOwnerDataByNick($nick)
+       {
+               $user = dba::selectFirst('user', ['uid'], ['nickname' => $nick]);
+               if (!DBM::is_result($user)) {
+                       return false;
+               }
+               return self::getOwnerDataById($user['uid']);
+       }
+
        /**
         * @brief Returns the default group for a given user and network
         *
@@ -196,18 +211,11 @@ class User
                                        ]
                                );
                        } else {
-                               $user = dba::fetch_first('SELECT `uid`, `password`, `legacy_password`
-                                       FROM `user`
-                                       WHERE (`email` = ? OR `username` = ? OR `nickname` = ?)
-                                       AND `blocked` = 0
-                                       AND `account_expired` = 0
-                                       AND `account_removed` = 0
-                                       AND `verified` = 1
-                                       LIMIT 1',
-                                       $user_info,
-                                       $user_info,
-                                       $user_info
-                               );
+                               $fields = ['uid', 'password', 'legacy_password'];
+                               $condition = ["(`email` = ? OR `username` = ? OR `nickname` = ?)
+                                       AND NOT `blocked` AND NOT `account_expired` AND NOT `account_removed` AND `verified`",
+                                       $user_info, $user_info, $user_info];
+                               $user = dba::selectFirst('user', $fields, $condition);
                        }
 
                        if (!DBM::is_result($user)) {
@@ -296,6 +304,33 @@ class User
                return dba::update('user', $fields, ['uid' => $uid]);
        }
 
+       /**
+        * @brief Checks if a nickname is in the list of the forbidden nicknames
+        *
+        * Check if a nickname is forbidden from registration on the node by the
+        * admin. Forbidden nicknames (e.g. role namess) can be configured in the
+        * admin panel.
+        *
+        * @param string $nickname The nickname that should be checked
+        * @return boolean True is the nickname is blocked on the node
+        */
+       public static function isNicknameBlocked($nickname)
+       {
+               $forbidden_nicknames = Config::get('system', 'forbidden_nicknames', '');
+               // if the config variable is empty return false
+               if (!x($forbidden_nicknames)) {
+                       return false;
+               }
+               // check if the nickname is in the list of blocked nicknames
+               $forbidden = explode(',', $forbidden_nicknames);
+               $forbidden = array_map('trim', $forbidden);
+               if (in_array(strtolower($nickname), $forbidden)) {
+                       return true;
+               }
+               // else return false
+               return false;
+       }
+
        /**
         * @brief Catch-all user creation function
         *
@@ -331,6 +366,7 @@ class User
                $confirm    = x($data, 'confirm')    ? trim($data['confirm'])            : '';
                $blocked    = x($data, 'blocked')    ? intval($data['blocked'])          : 0;
                $verified   = x($data, 'verified')   ? intval($data['verified'])         : 0;
+               $language   = x($data, 'language')   ? notags(trim($data['language'])) : 'en';
 
                $publish = x($data, 'profile_publish_reg') && intval($data['profile_publish_reg']) ? 1 : 0;
                $netpublish = strlen(Config::get('system', 'directory')) ? $publish : 0;
@@ -359,7 +395,7 @@ class User
                                $_SESSION['register'] = 1;
                                $_SESSION['openid'] = $openid_url;
 
-                               $openid = new LightOpenID;
+                               $openid = new LightOpenID($a->get_hostname());
                                $openid->identity = $openid_url;
                                $openid->returnUrl = System::baseUrl() . '/openid';
                                $openid->required = ['namePerson/friendly', 'contact/email', 'namePerson'];
@@ -408,6 +444,9 @@ class User
                if (!valid_email($email) || !Network::isEmailDomainValid($email)) {
                        throw new Exception(L10n::t('Not a valid email address.'));
                }
+               if (self::isNicknameBlocked($nickname)) {
+                       throw new Exception(L10n::t('The nickname was blocked from registration by the nodes admin.'));
+               }
 
                if (Config::get('system', 'block_extended_register', false) && dba::exists('user', ['email' => $email])) {
                        throw new Exception(L10n::t('Cannot use that email.'));
@@ -415,8 +454,8 @@ class User
 
                // Disallow somebody creating an account using openid that uses the admin email address,
                // since openid bypasses email verification. We'll allow it if there is not yet an admin account.
-               if (x($a->config, 'admin_email') && strlen($openid_url)) {
-                       $adminlist = explode(',', str_replace(' ', '', strtolower($a->config['admin_email'])));
+               if (Config::get('config', 'admin_email') && strlen($openid_url)) {
+                       $adminlist = explode(',', str_replace(' ', '', strtolower(Config::get('config', 'admin_email'))));
                        if (in_array(strtolower($email), $adminlist)) {
                                throw new Exception(L10n::t('Cannot use that email.'));
                        }
@@ -466,6 +505,7 @@ class User
                        'sprvkey'  => $sprvkey,
                        'verified' => $verified,
                        'blocked'  => $blocked,
+                       'language' => $language,
                        'timezone' => 'UTC',
                        'register_date' => DateTimeFormat::utcNow(),
                        'default-location' => ''