diff --git a/src/app/Backends/Roundcube.php b/src/app/Backends/Roundcube.php --- a/src/app/Backends/Roundcube.php +++ b/src/app/Backends/Roundcube.php @@ -9,6 +9,7 @@ { private const FILESTORE_TABLE = 'filestore'; private const USERS_TABLE = 'users'; + private const IDENTITIES_TABLE = 'identities'; /** @var array List of GnuPG files to store */ private static $enigma_files = ['pubring.gpg', 'secring.gpg', 'pubring.kbx']; @@ -218,7 +219,7 @@ $uri = \parse_url(\config('imap.uri')); - return (int) $db->table(self::USERS_TABLE)->insertGetId( + $user_id = (int) $db->table(self::USERS_TABLE)->insertGetId( [ 'username' => $email, 'mail_host' => $uri['host'], @@ -226,6 +227,18 @@ ], 'user_id' ); + + $username = \App\User::where('email', $email)->first()->name(); + + $db->table(self::IDENTITIES_TABLE)->insert([ + 'user_id' => $user_id, + 'email' => $email, + 'name' => $username, + 'changed' => now()->toDateTimeString(), + 'standard' => 1, + ]); + + return $user_id; } return (int) $user->user_id; diff --git a/src/tests/Feature/Backends/RoundcubeTest.php b/src/tests/Feature/Backends/RoundcubeTest.php new file mode 100644 --- /dev/null +++ b/src/tests/Feature/Backends/RoundcubeTest.php @@ -0,0 +1,61 @@ +deleteTestUser('roundcube@' . \config('app.domain')); + } + + /** + * {@inheritDoc} + */ + public function tearDown(): void + { + $this->deleteTestUser('roundcube@' . \config('app.domain')); + + parent::tearDown(); + } + + /** + * Test creating a Roundcube user record (and related data) + * + * @group roundcube + */ + public function testUserCreation(): void + { + $user = $this->getTestUser('roundcube@' . \config('app.domain')); + $user->setSetting('first_name', 'First'); + $user->setSetting('last_name', 'Last'); + + $db = Roundcube::dbh(); + + // delete the user record if exists + if ($userid = Roundcube::userId($user->email, false)) { + $db->table('users')->delete(); + } + + // Create the user + $userid = Roundcube::userId($user->email); + + $rcuser = $db->table('users')->where('username', $user->email)->first(); + + $this->assertTrue(!empty($rcuser)); + + $rcidentity = $db->table('identities')->where('user_id', $rcuser->user_id)->first(); + + $this->assertSame($user->email, $rcidentity->email); + $this->assertSame('First Last', $rcidentity->name); + $this->assertSame(1, $rcidentity->standard); + } +}