diff --git a/README.md b/README.md index 57da123bb..e93d861dc 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ [![Hacktoberfest](https://img.shields.io/static/v1?label=hacktoberfest&message=ready&color=191120&style=flat-square)](https://hacktoberfest.appwrite.io) [![Discord](https://img.shields.io/discord/564160730845151244?label=discord&style=flat-square)](https://appwrite.io/discord?r=Github) [![Build Status](https://img.shields.io/github/actions/workflow/status/appwrite/appwrite/tests.yml?branch=master&label=tests&style=flat-square)](https://github.com/appwrite/appwrite/actions) -[![Twitter Account](https://img.shields.io/twitter/follow/appwrite?color=00acee&label=twitter&style=flat-square)](https://twitter.com/appwrite) +[![X Account](https://img.shields.io/twitter/follow/appwrite?color=00acee&label=twitter&style=flat-square)](https://twitter.com/appwrite) @@ -232,7 +232,7 @@ For security issues, kindly email us at [security@appwrite.io](mailto:security@a ## Follow Us -Join our growing community around the world! Check out our official [Blog](https://medium.com/appwrite-io). Follow us on [Twitter](https://twitter.com/appwrite), [Facebook Page](https://www.facebook.com/appwrite.io), [Facebook Group](https://www.facebook.com/groups/appwrite.developers/), [Dev Community](https://dev.to/appwrite) or join our live [Discord server](https://discord.gg/GSeTUeA) for more help, ideas, and discussions. +Join our growing community around the world! Check out our official [Blog](https://appwrite.io/blog). Follow us on [X](https://twitter.com/appwrite), [LinkedIn](https://www.linkedin.com/company/appwrite/), [Dev Community](https://dev.to/appwrite) or join our live [Discord server](https://appwrite.io/discord) for more help, ideas, and discussions. ## License diff --git a/app/config/errors.php b/app/config/errors.php index c999ddba5..47bb6d834 100644 --- a/app/config/errors.php +++ b/app/config/errors.php @@ -136,6 +136,11 @@ return [ 'description' => 'The current project has exceeded the maximum number of users. Please check your user limit in the Appwrite console.', 'code' => 501, ], + Exception::USER_CONSOLE_COUNT_EXCEEDED => [ + 'name' => Exception::USER_CONSOLE_COUNT_EXCEEDED, + 'description' => 'Sign up to the console is restricted. You can contact an administrator to update console sign up restrictions by setting _APP_CONSOLE_WHITELIST_ROOT to "disabled".', + 'code' => 501, + ], Exception::USER_JWT_INVALID => [ 'name' => Exception::USER_JWT_INVALID, 'description' => 'The JWT token is invalid. Please check the value of the X-Appwrite-JWT header to ensure the correct token is being used.', diff --git a/app/controllers/api/account.php b/app/controllers/api/account.php index ee7dc076d..4d9dd364f 100644 --- a/app/controllers/api/account.php +++ b/app/controllers/api/account.php @@ -215,6 +215,9 @@ App::post('/v1/account') $total = $dbForProject->count('users', max: APP_LIMIT_USERS); if ($total >= $limit) { + if ('console' === $project->getId()) { + throw new Exception(Exception::USER_CONSOLE_COUNT_EXCEEDED); + } throw new Exception(Exception::USER_COUNT_EXCEEDED); } } diff --git a/app/controllers/shared/api.php b/app/controllers/shared/api.php index 7c2f08c70..fdaa98212 100644 --- a/app/controllers/shared/api.php +++ b/app/controllers/shared/api.php @@ -290,7 +290,7 @@ App::init() $minimumFactors = ($mfaEnabled && $hasMoreFactors) ? 2 : 1; if (!in_array('mfa', $route->getGroups())) { - if ($session && \count($session->getAttribute('factors')) < $minimumFactors) { + if ($session && \count($session->getAttribute('factors', [])) < $minimumFactors) { throw new Exception(Exception::USER_MORE_FACTORS_REQUIRED); } } diff --git a/src/Appwrite/Extend/Exception.php b/src/Appwrite/Extend/Exception.php index 7d56f5a38..1c5692cd9 100644 --- a/src/Appwrite/Extend/Exception.php +++ b/src/Appwrite/Extend/Exception.php @@ -63,6 +63,7 @@ class Exception extends \Exception /** Users */ public const USER_COUNT_EXCEEDED = 'user_count_exceeded'; + public const USER_CONSOLE_COUNT_EXCEEDED = 'user_console_count_exceeded'; public const USER_JWT_INVALID = 'user_jwt_invalid'; public const USER_ALREADY_EXISTS = 'user_already_exists'; public const USER_BLOCKED = 'user_blocked';