diff --git a/flexiapi/app/Http/Controllers/Account/RegisterController.php b/flexiapi/app/Http/Controllers/Account/RegisterController.php index fa99b6b..61c4bdc 100644 --- a/flexiapi/app/Http/Controllers/Account/RegisterController.php +++ b/flexiapi/app/Http/Controllers/Account/RegisterController.php @@ -36,6 +36,7 @@ use App\Libraries\OvhSMS; use App\Mail\RegisterConfirmation; use App\Mail\NewsletterRegistration; use App\Rules\BlacklistedUsername; +use App\Rules\SIPUsername; class RegisterController extends Controller { @@ -81,7 +82,8 @@ class RegisterController extends Controller 'filled', new WithoutSpaces, new IsNotPhoneNumber, - new BlacklistedUsername + new BlacklistedUsername, + new SIPUsername ], 'g-recaptcha-response' => 'required|captcha', 'email' => config('app.account_email_unique') @@ -129,7 +131,8 @@ class RegisterController extends Controller 'nullable', new WithoutSpaces, new IsNotPhoneNumber, - new BlacklistedUsername + new BlacklistedUsername, + new SIPUsername ], 'phone' => [ 'required', 'unique:aliases,alias', diff --git a/flexiapi/app/Http/Controllers/Admin/AccountController.php b/flexiapi/app/Http/Controllers/Admin/AccountController.php index 4040ce7..d768cc0 100644 --- a/flexiapi/app/Http/Controllers/Admin/AccountController.php +++ b/flexiapi/app/Http/Controllers/Admin/AccountController.php @@ -35,6 +35,7 @@ use App\Http\Controllers\Account\AuthenticateController as WebAuthenticateContro use App\Rules\BlacklistedUsername; use App\Rules\IsNotPhoneNumber; use App\Rules\NoUppercase; +use App\Rules\SIPUsername; use App\Rules\WithoutSpaces; use Illuminate\Validation\Rule; @@ -78,6 +79,7 @@ class AccountController extends Controller new NoUppercase, new IsNotPhoneNumber, new BlacklistedUsername, + new SIPUsername, Rule::unique('accounts', 'username')->where(function ($query) use ($request) { $query->where('domain', $this->resolveDomain($request)); }), @@ -132,6 +134,7 @@ class AccountController extends Controller new NoUppercase, new IsNotPhoneNumber, new BlacklistedUsername, + new SIPUsername, Rule::unique('accounts', 'username')->where(function ($query) use ($request) { $query->where('domain', $this->resolveDomain($request)); })->ignore($id), diff --git a/flexiapi/app/Http/Controllers/Api/AccountController.php b/flexiapi/app/Http/Controllers/Api/AccountController.php index a60c471..70637b0 100644 --- a/flexiapi/app/Http/Controllers/Api/AccountController.php +++ b/flexiapi/app/Http/Controllers/Api/AccountController.php @@ -37,6 +37,7 @@ use App\Mail\RegisterConfirmation; use App\Rules\BlacklistedUsername; use App\Rules\IsNotPhoneNumber; use App\Rules\NoUppercase; +use App\Rules\SIPUsername; use App\Rules\WithoutSpaces; class AccountController extends Controller @@ -91,6 +92,7 @@ class AccountController extends Controller new NoUppercase, new IsNotPhoneNumber, new BlacklistedUsername, + new SIPUsername, Rule::unique('accounts', 'username')->where(function ($query) use ($request) { $query->where('domain', $request->has('domain') ? $request->get('domain') : config('app.sip_domain')); }), @@ -225,6 +227,7 @@ class AccountController extends Controller new NoUppercase, new IsNotPhoneNumber, new BlacklistedUsername, + new SIPUsername, Rule::unique('accounts', 'username')->where(function ($query) use ($request) { $query->where('domain', config('app.sip_domain')); }), diff --git a/flexiapi/app/Http/Controllers/Api/Admin/AccountController.php b/flexiapi/app/Http/Controllers/Api/Admin/AccountController.php index 75407e6..b81ec89 100644 --- a/flexiapi/app/Http/Controllers/Api/Admin/AccountController.php +++ b/flexiapi/app/Http/Controllers/Api/Admin/AccountController.php @@ -36,6 +36,7 @@ use App\Http\Controllers\Account\AuthenticateController as WebAuthenticateContro use App\Rules\BlacklistedUsername; use App\Rules\IsNotPhoneNumber; use App\Rules\NoUppercase; +use App\Rules\SIPUsername; use App\Rules\WithoutSpaces; class AccountController extends Controller @@ -112,6 +113,7 @@ class AccountController extends Controller new NoUppercase, new IsNotPhoneNumber, new BlacklistedUsername, + new SIPUsername, Rule::unique('accounts', 'username')->where(function ($query) use ($request) { $query->where('domain', $this->resolveDomain($request)); }), diff --git a/flexiapi/app/Http/Requests/CreateAccountRequest.php b/flexiapi/app/Http/Requests/CreateAccountRequest.php index 698ca36..40f6b3a 100644 --- a/flexiapi/app/Http/Requests/CreateAccountRequest.php +++ b/flexiapi/app/Http/Requests/CreateAccountRequest.php @@ -9,6 +9,7 @@ use App\Account; use App\Rules\BlacklistedUsername; use App\Rules\IsNotPhoneNumber; use App\Rules\NoUppercase; +use App\Rules\SIPUsername; use App\Rules\WithoutSpaces; class CreateAccountRequest extends FormRequest @@ -26,6 +27,7 @@ class CreateAccountRequest extends FormRequest new NoUppercase, new IsNotPhoneNumber, new BlacklistedUsername, + new SIPUsername, Rule::unique('accounts', 'username')->where(function ($query) { $query->where('domain', config('app.sip_domain')); }), diff --git a/flexiapi/app/Http/Requests/UpdateAccountRequest.php b/flexiapi/app/Http/Requests/UpdateAccountRequest.php index 2e1dab9..7133a70 100644 --- a/flexiapi/app/Http/Requests/UpdateAccountRequest.php +++ b/flexiapi/app/Http/Requests/UpdateAccountRequest.php @@ -9,6 +9,7 @@ use App\Account; use App\Rules\BlacklistedUsername; use App\Rules\IsNotPhoneNumber; use App\Rules\NoUppercase; +use App\Rules\SIPUsername; use App\Rules\WithoutSpaces; class UpdateAccountRequest extends FormRequest @@ -26,6 +27,7 @@ class UpdateAccountRequest extends FormRequest new NoUppercase, new IsNotPhoneNumber, new BlacklistedUsername, + new SIPUsername, Rule::unique('accounts', 'username')->where(function ($query) { $query->where('domain', config('app.sip_domain')); })->ignore($this->route('id'), 'id'), diff --git a/flexiapi/app/Rules/SIP.php b/flexiapi/app/Rules/SIPUsername.php similarity index 75% rename from flexiapi/app/Rules/SIP.php rename to flexiapi/app/Rules/SIPUsername.php index 4a36ad6..bd9defe 100644 --- a/flexiapi/app/Rules/SIP.php +++ b/flexiapi/app/Rules/SIPUsername.php @@ -1,7 +1,7 @@ validate($value); } public function message() { - return 'The :attribute must be a SIP address.'; + return 'The :attribute should be a valid SIP username'; } } diff --git a/flexiapi/phpunit.xml b/flexiapi/phpunit.xml index 2c8e571..79f1b3a 100644 --- a/flexiapi/phpunit.xml +++ b/flexiapi/phpunit.xml @@ -12,7 +12,7 @@ ./tests/Feature - ./tests/Feature/AccountMessageTest.php + ./tests/Feature/ApiAccountMessageTest.php diff --git a/flexiapi/tests/Feature/AccountActionTest.php b/flexiapi/tests/Feature/ApiAccountActionTest.php similarity index 99% rename from flexiapi/tests/Feature/AccountActionTest.php rename to flexiapi/tests/Feature/ApiAccountActionTest.php index 06d6dd6..7c17053 100644 --- a/flexiapi/tests/Feature/AccountActionTest.php +++ b/flexiapi/tests/Feature/ApiAccountActionTest.php @@ -26,7 +26,7 @@ use App\Admin; use Illuminate\Foundation\Testing\RefreshDatabase; use Tests\TestCase; -class AccountActionTest extends TestCase +class ApiAccountActionTest extends TestCase { use RefreshDatabase; diff --git a/flexiapi/tests/Feature/AccountApiKeyTest.php b/flexiapi/tests/Feature/ApiAccountApiKeyTest.php similarity index 99% rename from flexiapi/tests/Feature/AccountApiKeyTest.php rename to flexiapi/tests/Feature/ApiAccountApiKeyTest.php index 957b6a9..6a87c44 100644 --- a/flexiapi/tests/Feature/AccountApiKeyTest.php +++ b/flexiapi/tests/Feature/ApiAccountApiKeyTest.php @@ -24,7 +24,7 @@ use Tests\TestCase; use App\Password; -class AccountApiKeyTest extends TestCase +class ApiAccountApiKeyTest extends TestCase { use RefreshDatabase; diff --git a/flexiapi/tests/Feature/AccountContactsTest.php b/flexiapi/tests/Feature/ApiAccountContactsTest.php similarity index 99% rename from flexiapi/tests/Feature/AccountContactsTest.php rename to flexiapi/tests/Feature/ApiAccountContactsTest.php index d642fdb..135b61c 100644 --- a/flexiapi/tests/Feature/AccountContactsTest.php +++ b/flexiapi/tests/Feature/ApiAccountContactsTest.php @@ -27,7 +27,7 @@ use Illuminate\Foundation\Testing\RefreshDatabase; use Illuminate\Support\Facades\DB; use Tests\TestCase; -class AccountContactTest extends TestCase +class ApiAccountContactTest extends TestCase { use RefreshDatabase; diff --git a/flexiapi/tests/Feature/AccountCreationTokenTest.php b/flexiapi/tests/Feature/ApiAccountCreationTokenTest.php similarity index 99% rename from flexiapi/tests/Feature/AccountCreationTokenTest.php rename to flexiapi/tests/Feature/ApiAccountCreationTokenTest.php index 8754bea..d02a511 100644 --- a/flexiapi/tests/Feature/AccountCreationTokenTest.php +++ b/flexiapi/tests/Feature/ApiAccountCreationTokenTest.php @@ -24,7 +24,7 @@ use Tests\TestCase; use App\AccountCreationToken; -class AccountCreationTokenTest extends TestCase +class ApiAccountCreationTokenTest extends TestCase { use RefreshDatabase; diff --git a/flexiapi/tests/Feature/AccountMessageTest.php b/flexiapi/tests/Feature/ApiAccountMessageTest.php similarity index 97% rename from flexiapi/tests/Feature/AccountMessageTest.php rename to flexiapi/tests/Feature/ApiAccountMessageTest.php index 2cdd5c0..55a46eb 100644 --- a/flexiapi/tests/Feature/AccountMessageTest.php +++ b/flexiapi/tests/Feature/ApiAccountMessageTest.php @@ -25,7 +25,7 @@ use Illuminate\Foundation\Testing\RefreshDatabase; use Illuminate\Testing\Fluent\AssertableJson; use Tests\TestCase; -class AccountMessageTest extends TestCase +class ApiAccountMessageTest extends TestCase { use RefreshDatabase; diff --git a/flexiapi/tests/Feature/AccountPhoneChangeTest.php b/flexiapi/tests/Feature/ApiAccountPhoneChangeTest.php similarity index 98% rename from flexiapi/tests/Feature/AccountPhoneChangeTest.php rename to flexiapi/tests/Feature/ApiAccountPhoneChangeTest.php index 29788db..bfc0f0b 100644 --- a/flexiapi/tests/Feature/AccountPhoneChangeTest.php +++ b/flexiapi/tests/Feature/ApiAccountPhoneChangeTest.php @@ -25,7 +25,7 @@ use App\PhoneChangeCode; use Illuminate\Foundation\Testing\RefreshDatabase; use Tests\TestCase; -class AccountPhoneChangeTest extends TestCase +class ApiAccountPhoneChangeTest extends TestCase { use RefreshDatabase; diff --git a/flexiapi/tests/Feature/AccountApiTest.php b/flexiapi/tests/Feature/ApiAccountTest.php similarity index 96% rename from flexiapi/tests/Feature/AccountApiTest.php rename to flexiapi/tests/Feature/ApiAccountTest.php index 53b491b..5e14388 100644 --- a/flexiapi/tests/Feature/AccountApiTest.php +++ b/flexiapi/tests/Feature/ApiAccountTest.php @@ -30,7 +30,7 @@ use Illuminate\Foundation\Testing\RefreshDatabase; use Tests\TestCase; -class AccountApiTest extends TestCase +class ApiAccountTest extends TestCase { use RefreshDatabase; @@ -97,7 +97,41 @@ class AccountApiTest extends TestCase 'password' => '123456', ]); - $response->assertStatus(422); + $response->assertJsonValidationErrors(['username']); + } + + public function testUsernameNotSIP() + { + $admin = Admin::factory()->create(); + $password = $admin->account->passwords()->first(); + $password->account->generateApiKey(); + $password->account->save(); + + $username = 'blablašŸ”„'; + $domain = 'example.com'; + + $response = $this->keyAuthenticated($password->account) + ->json($this->method, $this->route, [ + 'username' => $username, + 'domain' => $domain, + 'algorithm' => 'SHA-256', + 'password' => '123456', + ]); + + $response->assertJsonValidationErrors(['username']); + + $username = 'blabla hop'; + $domain = 'example.com'; + + $response = $this->keyAuthenticated($password->account) + ->json($this->method, $this->route, [ + 'username' => $username, + 'domain' => $domain, + 'algorithm' => 'SHA-256', + 'password' => '123456', + ]); + + $response->assertJsonValidationErrors(['username']); } public function testDomain() diff --git a/flexiapi/tests/Feature/AccountTypeTest.php b/flexiapi/tests/Feature/ApiAccountTypeTest.php similarity index 99% rename from flexiapi/tests/Feature/AccountTypeTest.php rename to flexiapi/tests/Feature/ApiAccountTypeTest.php index 77fa37d..39847d7 100644 --- a/flexiapi/tests/Feature/AccountTypeTest.php +++ b/flexiapi/tests/Feature/ApiAccountTypeTest.php @@ -27,7 +27,7 @@ use Illuminate\Foundation\Testing\RefreshDatabase; use Illuminate\Support\Facades\DB; use Tests\TestCase; -class AccountTypeTest extends TestCase +class ApiAccountTypeTest extends TestCase { use RefreshDatabase; diff --git a/flexiapi/tests/Feature/AuthenticateDigestAndKeyTest.php b/flexiapi/tests/Feature/ApiAuthenticationTest.php similarity index 99% rename from flexiapi/tests/Feature/AuthenticateDigestAndKeyTest.php rename to flexiapi/tests/Feature/ApiAuthenticationTest.php index 0e783db..4b3db3a 100644 --- a/flexiapi/tests/Feature/AuthenticateDigestAndKeyTest.php +++ b/flexiapi/tests/Feature/ApiAuthenticationTest.php @@ -24,7 +24,7 @@ use App\Password; use Illuminate\Foundation\Testing\RefreshDatabase; use Tests\TestCase; -class AuthenticateDigestAndKeyTest extends TestCase +class ApiAuthenticationTest extends TestCase { use RefreshDatabase; diff --git a/flexiapi/tests/Feature/ExternalAccountTest.php b/flexiapi/tests/Feature/ApiExternalAccountTest.php similarity index 98% rename from flexiapi/tests/Feature/ExternalAccountTest.php rename to flexiapi/tests/Feature/ApiExternalAccountTest.php index 5f5de39..746bdcd 100644 --- a/flexiapi/tests/Feature/ExternalAccountTest.php +++ b/flexiapi/tests/Feature/ApiExternalAccountTest.php @@ -25,7 +25,7 @@ use App\ExternalAccount; use Illuminate\Foundation\Testing\RefreshDatabase; use Tests\TestCase; -class ExternalAccountTest extends TestCase +class ApiExternalAccountTest extends TestCase { use RefreshDatabase;