diff --git a/app/Filament/Admin/Resources/EmailResource.php b/app/Filament/Admin/Resources/EmailResource.php new file mode 100644 index 00000000..cd91862e --- /dev/null +++ b/app/Filament/Admin/Resources/EmailResource.php @@ -0,0 +1,129 @@ +schema([ + Forms\Components\TextInput::make('email') + ->email() + ->required() + ->maxLength(255), + Forms\Components\TextInput::make('password') + ->password() + ->required() + ->maxLength(255), + ]); + } + + public static function table(Table $table): Table + { + return $table + ->columns([ + Tables\Columns\TextColumn::make('email') + ->searchable(), + Tables\Columns\TextColumn::make('created_at') + ->dateTime(), + ]) + ->filters([ + // + ]) + ->actions([ + Tables\Actions\EditAction::make(), + Tables\Actions\DeleteAction::make(), + ]) + ->bulkActions([ + Tables\Actions\DeleteBulkAction::make(), + ]); + } + + public static function getPages(): array + { + return [ + 'index' => Pages\ManageEmails::route('/'), + ]; + } + + protected function handleRecordCreation(array $data): Email + { + $email = Email::create($data); + + // Generate Dovecot configuration + $dovecotConfig = $this->generateDovecotConfig($email); + Storage::disk('dovecot')->put($email->email, $dovecotConfig); + + // Generate Postfix configuration + $postfixConfig = $this->generatePostfixConfig($email); + Storage::disk('postfix')->put($email->email, $postfixConfig); + + // Restart Dovecot and Postfix containers + $this->restartContainers(); + + return $email; + } + + protected function handleRecordUpdate(Email $email, array $data): Email + { + $email->update($data); + + // Update Dovecot configuration + $dovecotConfig = $this->generateDovecotConfig($email); + Storage::disk('dovecot')->put($email->email, $dovecotConfig); + + // Update Postfix configuration + $postfixConfig = $this->generatePostfixConfig($email); + Storage::disk('postfix')->put($email->email, $postfixConfig); + + // Restart Dovecot and Postfix containers + $this->restartContainers(); + + return $email; + } + + protected function handleRecordDeletion(Email $email) + { + // Remove Dovecot configuration + Storage::disk('dovecot')->delete($email->email); + + // Remove Postfix configuration + Storage::disk('postfix')->delete($email->email); + + // Restart Dovecot and Postfix containers + $this->restartContainers(); + + $email->delete(); + } + + protected function generateDovecotConfig(Email $email): string + { + // Generate Dovecot configuration based on $email + // ... + } + + protected function generatePostfixConfig(Email $email): string + { + // Generate Postfix configuration based on $email + // ... + } + + protected function restartContainers() + { + // Restart Dovecot and Postfix containers + // ... + } +} \ No newline at end of file