return null;
}
- $userCn = $this->getUserResponseProperty($user, 'cn', null);
+ $nameDefault = $this->getUserResponseProperty($user, 'cn', null);
+ if (is_null($nameDefault)) {
+ $nameDefault = ldap_explode_dn($user['dn'], 1)[0] ?? $user['dn'];
+ }
+
$formatted = [
'uid' => $this->getUserResponseProperty($user, $idAttr, $user['dn']),
- 'name' => $this->getUserDisplayName($user, $displayNameAttrs, $userCn),
+ 'name' => $this->getUserDisplayName($user, $displayNameAttrs, $nameDefault),
'dn' => $user['dn'],
'email' => $this->getUserResponseProperty($user, $emailAttr, null),
'avatar' => $thumbnailAttr ? $this->getUserResponseProperty($user, $thumbnailAttr, null) : null,
*/
protected function interventionFromImageData(string $imageData, ?string $fileType): InterventionImage
{
- $manager = new ImageManager(new Driver());
+ $manager = new ImageManager(
+ new Driver(),
+ autoOrientation: false,
+ );
// Ensure gif images are decoded natively instead of deferring to intervention GIF
// handling since we don't need the added animation support.
updateLayout() {
let newLayout = 'tablet';
if (window.innerWidth <= 1000) newLayout = 'mobile';
- if (window.innerWidth >= 1400) newLayout = 'desktop';
+ if (window.innerWidth > 1400) newLayout = 'desktop';
if (newLayout === this.lastLayoutType) return;
if (this.onDestroy) {
@media screen and (max-width: $size) { @content; }
}
@mixin larger-than($size) {
- @media screen and (min-width: $size) { @content; }
+ @media screen and (min-width: ($size + 1)) { @content; }
}
@mixin between($min, $max) {
- @media screen and (min-width: $min) and (max-width: $max) { @content; }
+ @media screen and (min-width: ($min + 1)) and (max-width: $max) { @content; }
}
// Padding shorthand using logical operators to better support RTL.
$this->assertDatabaseHas('users', ['email' => $this->mockUser->email, 'email_confirmed' => false, 'external_auth_id' => $ldapDn]);
}
+ public function test_login_works_when_ldap_server_does_not_provide_a_cn_value()
+ {
+ $ldapDn = 'cn=test-user,dc=test' . config('services.ldap.base_dn');
+
+ $this->commonLdapMocks(1, 1, 1, 2, 1);
+ $this->mockLdap->shouldReceive('searchAndGetEntries')->times(1)
+ ->with($this->resourceId, config('services.ldap.base_dn'), \Mockery::type('string'), \Mockery::type('array'))
+ ->andReturn(['count' => 1, 0 => [
+ 'dn' => $ldapDn,
+ 'mail' => [$this->mockUser->email],
+ ]]);
+
+ $resp = $this->mockUserLogin();
+ $resp->assertRedirect('/');
+ $this->assertDatabaseHas('users', [
+ 'name' => 'test-user',
+ 'email' => $this->mockUser->email,
+ ]);
+ }
+
public function test_a_custom_uid_attribute_can_be_specified_and_is_used_properly()
{
config()->set(['services.ldap.id_attribute' => 'my_custom_id']);