mirror of https://github.com/Bubka/2FAuth.git
Fix missing admin permissions on WebAuthn login - Closes #326
This commit is contained in:
parent
f4624e2793
commit
f2c9f8aaa8
|
@ -147,8 +147,11 @@ class WebAuthnLoginController extends Controller
|
||||||
|
|
||||||
return response()->json([
|
return response()->json([
|
||||||
'message' => 'authenticated',
|
'message' => 'authenticated',
|
||||||
|
'id' => $user->id,
|
||||||
'name' => $user->name,
|
'name' => $user->name,
|
||||||
|
'email' => $user->email,
|
||||||
'preferences' => $user->preferences,
|
'preferences' => $user->preferences,
|
||||||
|
'is_admin' => $user->isAdministrator(),
|
||||||
], Response::HTTP_OK);
|
], Response::HTTP_OK);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -28,6 +28,11 @@ class LoginTest extends FeatureTestCase
|
||||||
*/
|
*/
|
||||||
protected $user;
|
protected $user;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var \App\Models\User|\Illuminate\Contracts\Auth\Authenticatable
|
||||||
|
*/
|
||||||
|
protected $admin;
|
||||||
|
|
||||||
private const PASSWORD = 'password';
|
private const PASSWORD = 'password';
|
||||||
|
|
||||||
private const WRONG_PASSWORD = 'wrong_password';
|
private const WRONG_PASSWORD = 'wrong_password';
|
||||||
|
@ -39,7 +44,8 @@ class LoginTest extends FeatureTestCase
|
||||||
{
|
{
|
||||||
parent::setUp();
|
parent::setUp();
|
||||||
|
|
||||||
$this->user = User::factory()->create();
|
$this->user = User::factory()->create();
|
||||||
|
$this->admin = User::factory()->administrator()->create();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -53,16 +59,32 @@ class LoginTest extends FeatureTestCase
|
||||||
])
|
])
|
||||||
->assertOk()
|
->assertOk()
|
||||||
->assertJsonFragment([
|
->assertJsonFragment([
|
||||||
'message' => 'authenticated',
|
'message' => 'authenticated',
|
||||||
'name' => $this->user->name,
|
'id' => $this->user->id,
|
||||||
|
'name' => $this->user->name,
|
||||||
|
'email' => $this->user->email,
|
||||||
|
'is_admin' => false,
|
||||||
])
|
])
|
||||||
->assertJsonStructure([
|
->assertJsonStructure([
|
||||||
'message',
|
|
||||||
'name',
|
|
||||||
'preferences',
|
'preferences',
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @test
|
||||||
|
*/
|
||||||
|
public function test_admin_login_returns_admin_role()
|
||||||
|
{
|
||||||
|
$response = $this->json('POST', '/user/login', [
|
||||||
|
'email' => $this->admin->email,
|
||||||
|
'password' => self::PASSWORD,
|
||||||
|
])
|
||||||
|
->assertOk()
|
||||||
|
->assertJsonFragment([
|
||||||
|
'is_admin' => true,
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @test
|
* @test
|
||||||
*
|
*
|
||||||
|
|
|
@ -25,6 +25,11 @@ class WebAuthnLoginControllerTest extends FeatureTestCase
|
||||||
*/
|
*/
|
||||||
protected $user;
|
protected $user;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var \App\Models\User
|
||||||
|
*/
|
||||||
|
protected $admin;
|
||||||
|
|
||||||
const CREDENTIAL_ID = 's06aG41wsIYh5X1YUhB-SlH8y3F2RzdJZVse8iXRXOCd3oqQdEyCOsBawzxrYBtJRQA2azAMEN_q19TUp6iMgg';
|
const CREDENTIAL_ID = 's06aG41wsIYh5X1YUhB-SlH8y3F2RzdJZVse8iXRXOCd3oqQdEyCOsBawzxrYBtJRQA2azAMEN_q19TUp6iMgg';
|
||||||
|
|
||||||
const CREDENTIAL_ID_ALT = '-VOLFKPY-_FuMI_sJ7gMllK76L3VoRUINj6lL_Z3qDg';
|
const CREDENTIAL_ID_ALT = '-VOLFKPY-_FuMI_sJ7gMllK76L3VoRUINj6lL_Z3qDg';
|
||||||
|
@ -125,16 +130,56 @@ class WebAuthnLoginControllerTest extends FeatureTestCase
|
||||||
$this->json('POST', '/webauthn/login', self::ASSERTION_RESPONSE)
|
$this->json('POST', '/webauthn/login', self::ASSERTION_RESPONSE)
|
||||||
->assertOk()
|
->assertOk()
|
||||||
->assertJsonFragment([
|
->assertJsonFragment([
|
||||||
'message' => 'authenticated',
|
'message' => 'authenticated',
|
||||||
'name' => $this->user->name,
|
'id' => $this->user->id,
|
||||||
|
'name' => $this->user->name,
|
||||||
|
'email' => $this->user->email,
|
||||||
|
'is_admin' => false,
|
||||||
])
|
])
|
||||||
->assertJsonStructure([
|
->assertJsonStructure([
|
||||||
'message',
|
|
||||||
'name',
|
|
||||||
'preferences',
|
'preferences',
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @test
|
||||||
|
*/
|
||||||
|
public function test_webauthn_admin_login_returns_admin_role()
|
||||||
|
{
|
||||||
|
$this->admin = User::factory()->administrator()->create(['email' => self::EMAIL]);
|
||||||
|
|
||||||
|
DB::table('webauthn_credentials')->insert([
|
||||||
|
'id' => self::CREDENTIAL_ID_ALT,
|
||||||
|
'authenticatable_type' => \App\Models\User::class,
|
||||||
|
'authenticatable_id' => $this->admin->id,
|
||||||
|
'user_id' => self::USER_ID_ALT,
|
||||||
|
'counter' => 0,
|
||||||
|
'rp_id' => 'http://localhost',
|
||||||
|
'origin' => 'http://localhost',
|
||||||
|
'aaguid' => '00000000-0000-0000-0000-000000000000',
|
||||||
|
'attestation_format' => 'none',
|
||||||
|
'public_key' => self::PUBLIC_KEY,
|
||||||
|
'updated_at' => now(),
|
||||||
|
'created_at' => now(),
|
||||||
|
]);
|
||||||
|
|
||||||
|
$this->session(['_webauthn' => new \Laragear\WebAuthn\Challenge(
|
||||||
|
new \Laragear\WebAuthn\ByteBuffer(base64_decode(self::ASSERTION_CHALLENGE)),
|
||||||
|
60,
|
||||||
|
false,
|
||||||
|
)]);
|
||||||
|
|
||||||
|
$this->mock(AssertionValidator::class)
|
||||||
|
->expects('send->thenReturn')
|
||||||
|
->andReturn();
|
||||||
|
|
||||||
|
$this->json('POST', '/webauthn/login', self::ASSERTION_RESPONSE)
|
||||||
|
->assertOk()
|
||||||
|
->assertJsonFragment([
|
||||||
|
'is_admin' => true,
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @test
|
* @test
|
||||||
*/
|
*/
|
||||||
|
|
Loading…
Reference in New Issue