From 08f4618ea898019c8af2847416137583b8c1cf3e Mon Sep 17 00:00:00 2001 From: Gitea Date: Wed, 7 May 2025 16:33:09 +0530 Subject: [PATCH] added public mailbox support --- .gitignore | 2 + app/Http/Controllers/AppController.php | 16 +- app/Livewire/Dashboard/Mailbox/Inbox.php | 147 ++++++++++++++---- app/Models/Premium.php | 26 ++-- app/Models/PremiumEmail.php | 2 +- .../dashboard/mailbox/inbox.blade.php | 27 +++- 6 files changed, 174 insertions(+), 46 deletions(-) diff --git a/.gitignore b/.gitignore index 153daf0..18f84c9 100644 --- a/.gitignore +++ b/.gitignore @@ -22,3 +22,5 @@ yarn-error.log /.vscode /.zed /stripe.exe +/public/tmp/attachments/ +/public/tmp/premium/ diff --git a/app/Http/Controllers/AppController.php b/app/Http/Controllers/AppController.php index db4430b..013778c 100644 --- a/app/Http/Controllers/AppController.php +++ b/app/Http/Controllers/AppController.php @@ -5,6 +5,7 @@ namespace App\Http\Controllers; use App\Models\Premium; use App\Models\ZEmail; use Illuminate\Http\Request; +use Session; class AppController extends Controller { @@ -50,7 +51,11 @@ class AppController extends Controller } public function switchP($email) { - Premium::setEmailP($email); + if (Session::get('isInboxTypePremium')) { + Premium::setEmailP($email); + } else { + ZEmail::setEmail($email); + } if (json_decode(config('app.settings.configuration_settings'))->disable_mailbox_slug) { return redirect()->route('dashboard'); } @@ -59,8 +64,13 @@ class AppController extends Controller public function deleteP($email = null) { if ($email) { - $emails = Premium::getEmails(); - Premium::removeEmail($email); + if (Session::get('isInboxTypePremium')) { + $emails = Premium::getEmails(); + Premium::removeEmail($email); + } else { + $emails = ZEmail::getEmails(); + ZEmail::removeEmail($email); + } return redirect()->route('dashboard.premium'); } else { return redirect()->route('dashboard'); diff --git a/app/Livewire/Dashboard/Mailbox/Inbox.php b/app/Livewire/Dashboard/Mailbox/Inbox.php index 439f934..d9114ec 100644 --- a/app/Livewire/Dashboard/Mailbox/Inbox.php +++ b/app/Livewire/Dashboard/Mailbox/Inbox.php @@ -7,6 +7,7 @@ use App\Models\Log; use App\Models\Premium; use App\Models\PremiumEmail; use App\Models\UsageLog; +use App\Models\ZEmail; use Artisan; use Carbon\Carbon; use Illuminate\Support\Facades\Auth; @@ -31,6 +32,8 @@ class Inbox extends Component public $emailsHistory; public $username, $domain, $domains, $action; public $email_limit = 20; + public bool $premium = true; + private $isSubscribed; protected $listeners = ['updateEmail' => 'syncEmail', 'getEmail' => 'generateEmail', 'fetchMessages' => 'fetch', 'setMessageId' => 'setMessageId']; @@ -38,12 +41,24 @@ class Inbox extends Component public function mount(): void { - $this->domains = json_decode(config('app.settings.configuration_settings'))->premium_domains ?? []; - $this->email = Premium::getEmail(); - $this->emails = Premium::getEmails(); - $this->initial = false; - $this->checkMultipleEmails(); - $this->validateDomainInEmail(); + $this->premium = Session::get('isInboxTypePremium', true); + + if ($this->premium) { + $this->domains = json_decode(config('app.settings.configuration_settings'))->premium_domains ?? []; + $this->email = Premium::getEmail(); + $this->emails = Premium::getEmails(); + $this->initial = false; + $this->checkMultipleEmails(); + $this->validateDomainInEmail(); + } else { + $this->domains = json_decode(config('app.settings.configuration_settings'))->domains ?? []; + $this->email = ZEmail::getEmail(); + $this->emails = ZEmail::getEmails(); + $this->initial = false; + $this->checkMultipleEmails(); + $this->validateDomainInEmail(); + } + $this->emailsHistory = array_reverse(PremiumEmail::parseEmail(\auth()->user()->id)['data']) ?? []; $subscriptionCheck = auth()->user()->subscribedToProduct(config('app.plans')[0]['product_id']); @@ -67,8 +82,13 @@ class Inbox extends Component } } - $mailboxHistory = UsageLog::where(['user_id' => auth()->user()->id])->first(); - $this->mailboxHistory = $mailboxHistory->emails_created_history ?? []; + if ($this->premium) { + $mailboxHistory = UsageLog::where(['user_id' => auth()->user()->id])->first(); + $this->mailboxHistory = $mailboxHistory->emails_created_history ?? []; + } else { + $this->mailboxHistory = ZEmail::getEmails() ?? []; + } + } private function checkMultipleEmails(): void @@ -90,7 +110,11 @@ class Inbox extends Component $data = explode('@', $email); if (isset($data[1])) { $domain = $data[1]; - $domains = json_decode(config('app.settings.configuration_settings'))->premium_domains ?? []; + if ($this->premium) { + $domains = json_decode(config('app.settings.configuration_settings'))->premium_domains ?? []; + } else { + $domains = json_decode(config('app.settings.configuration_settings'))->domains ?? []; + } if (!in_array($domain, $domains)) { return $this->showAlert('error', __('This mailbox can not be recovered.')); } @@ -145,8 +169,11 @@ class Inbox extends Component if (!$this->checkUsedEmail()) { return $this->showAlert('error', __('Sorry! That email is already been used by someone else. Please try a different email address.')); } - - $this->email = Premium::createCustomEmail($this->username, $this->domain); + if ($this->premium) { + $this->email = Premium::createCustomEmail($this->username, $this->domain); + } else { + $this->email = ZEmail::createCustomEmail($this->username, $this->domain); + } return redirect()->route('dashboard.premium'); } @@ -155,14 +182,22 @@ class Inbox extends Component if (!$this->checkEmailLimit()) { return $this->showAlert('error', __('You have reached daily limit of maximum ') . $this->email_limit . __(' temp mail addresses.')); } - $this->email = Premium::generateRandomEmail(); + if ($this->premium) { + $this->email = Premium::generateRandomEmail(); + } else { + $this->email = ZEmail::generateRandomEmail(); + } return redirect()->route('dashboard.premium'); } public function gmail() { if (!$this->checkEmailLimit()) { return $this->showAlert('error', __('You have reached daily limit of maximum ') . $this->email_limit . __(' temp mail addresses.')); } - $this->email = Premium::generateRandomGmail(); + if ($this->premium) { + $this->email = Premium::generateRandomGmail(); + } else { + $this->email = ZEmail::generateRandomGmail(); + } return redirect()->route('dashboard.premium'); } @@ -215,10 +250,18 @@ class Inbox extends Component $data = explode('@', $this->email); if (isset($data[1])) { $domain = $data[1]; - $domains = json_decode(config('app.settings.configuration_settings'))->premium_domains ?? []; + if ($this->premium) { + $domains = json_decode(config('app.settings.configuration_settings'))->premium_domains ?? []; + } else { + $domains = json_decode(config('app.settings.configuration_settings'))->domains ?? []; + } if (!in_array($domain, $domains)) { $key = array_search($this->email, $this->emails); - Premium::removeEmail($this->email); + if ($this->premium) { + Premium::removeEmail($this->email); + } else { + ZEmail::removeEmail($this->email); + } if ($key == 0 && count($this->emails) == 1 && json_decode(config('app.settings.configuration_settings'))->after_last_email_delete == 'redirect_to_homepage') { redirect()->route('dashboard.premium'); } else { @@ -243,19 +286,36 @@ class Inbox extends Component $this->messages = []; } $responses = []; - if (config('app.beta_feature') || !json_decode(config('app.settings.imap_settings'))->premium_cc_check) { - $responses = [ - 'to' => Premium::getMessages($this->email, 'to', $this->deleted), - 'cc' => [ - 'data' => [], - 'notifications' => [] - ] - ]; + if ($this->premium) { + if (config('app.beta_feature') || !json_decode(config('app.settings.imap_settings'))->premium_cc_check) { + $responses = [ + 'to' => Premium::getMessages($this->email, 'to', $this->deleted), + 'cc' => [ + 'data' => [], + 'notifications' => [] + ] + ]; + } else { + $responses = [ + 'to' => Premium::getMessages($this->email, 'to', $this->deleted), + 'cc' => Premium::getMessages($this->email, 'cc', $this->deleted) + ]; + } } else { - $responses = [ - 'to' => Premium::getMessages($this->email, 'to', $this->deleted), - 'cc' => Premium::getMessages($this->email, 'cc', $this->deleted) - ]; + if (config('app.beta_feature') || !json_decode(config('app.settings.imap_settings'))->cc_check) { + $responses = [ + 'to' => ZEmail::getMessages($this->email, 'to', $this->deleted), + 'cc' => [ + 'data' => [], + 'notifications' => [] + ] + ]; + } else { + $responses = [ + 'to' => ZEmail::getMessages($this->email, 'to', $this->deleted), + 'cc' => ZEmail::getMessages($this->email, 'cc', $this->deleted) + ]; + } } $this->deleted = []; @@ -300,7 +360,11 @@ class Inbox extends Component $this->deleted[] = $messageId; foreach ($this->messages as $key => $message) { if ($message['id'] == $messageId) { - $directory = public_path('tmp/premium/attachments/') . $messageId; + if ($this->premium) { + $directory = public_path('tmp/premium/attachments/') . $messageId; + } else { + $directory = public_path('tmp/attachments/') . $messageId; + } $this->rrmdir($directory); unset($this->messages[$key]); } @@ -314,6 +378,33 @@ class Inbox extends Component } + public function toggleMode() + { + $this->premium = !$this->premium; + Session::put('isInboxTypePremium', $this->premium); + if ($this->premium) { + $this->domains = json_decode(config('app.settings.configuration_settings'))->premium_domains ?? []; + $this->email = Premium::getEmail(); + $this->emails = Premium::getEmails(); + $this->initial = false; + $this->checkMultipleEmails(); + $this->validateDomainInEmail(); + $mailboxHistory = UsageLog::where(['user_id' => auth()->user()->id])->first(); + $this->mailboxHistory = $mailboxHistory->emails_created_history ?? []; + $this->messages = []; + + } else { + $this->domains = json_decode(config('app.settings.configuration_settings'))->domains ?? []; + $this->email = ZEmail::getEmail(); + $this->emails = ZEmail::getEmails(); + $this->initial = false; + $this->checkMultipleEmails(); + $this->validateDomainInEmail(); + $this->mailboxHistory = array_reverse(ZEmail::getEmails()) ?? []; + $this->messages = []; + } + } + public function render() { if (Session::get('isSubscribed')) { diff --git a/app/Models/Premium.php b/app/Models/Premium.php index 3b0c6a9..f8d873c 100644 --- a/app/Models/Premium.php +++ b/app/Models/Premium.php @@ -178,24 +178,24 @@ class Premium extends Model $connection->expunge(); } public static function getEmail($generate = false) { - if (Cookie::has('email')) { - return Cookie::get('email'); + if (Cookie::has('p_email')) { + return Cookie::get('p_email'); } else { return $generate ? self::generateRandomEmail() : null; } } public static function getEmails() { - if (Cookie::has('emails')) { - return unserialize(Cookie::get('emails')); + if (Cookie::has('p_emails')) { + return unserialize(Cookie::get('p_emails')); } else { return []; } } public static function setEmail($email): void { - $emails = unserialize(Cookie::get('emails')); + $emails = unserialize(Cookie::get('p_emails')); if (is_array($emails) && in_array($email, $emails)) { - Cookie::queue('email', $email, 43800); + Cookie::queue('p_email', $email, 43800); } } @@ -204,7 +204,7 @@ class Premium extends Model $usageLogs = UsageLog::where(['user_id' => auth()->user()->id])->first(); $emails = $usageLogs->emails_created_history; if (is_array($emails) && in_array($email, $emails)) { - Cookie::queue('email', $email, 43800); + Cookie::queue('p_email', $email, 43800); } } public static function removeEmail($email): void @@ -216,10 +216,10 @@ class Premium extends Model } if (count($emails) > 0) { self::setEmail($emails[0]); - Cookie::queue('emails', serialize($emails), 43800); + Cookie::queue('p_emails', serialize($emails), 43800); } else { - Cookie::queue('email', '', -1); - Cookie::queue('emails', serialize([]), -1); + Cookie::queue('p_email', '', -1); + Cookie::queue('p_emails', serialize([]), -1); } } public static function createCustomEmailFull($email): string @@ -368,12 +368,12 @@ class Premium extends Model self::storeUsageLog($email); - Cookie::queue('email', $email, 43800); - $emails = Cookie::has('emails') ? unserialize(Cookie::get('emails')) : []; + Cookie::queue('p_email', $email, 43800); + $emails = Cookie::has('p_emails') ? unserialize(Cookie::get('p_emails')) : []; if (!in_array($email, $emails)) { self::incrementEmailStats(); $emails[] = $email; - Cookie::queue('emails', serialize($emails), 43800); + Cookie::queue('p_emails', serialize($emails), 43800); } } public static function incrementEmailStats($count = 1): void diff --git a/app/Models/PremiumEmail.php b/app/Models/PremiumEmail.php index 0edf4ca..4d2e74b 100644 --- a/app/Models/PremiumEmail.php +++ b/app/Models/PremiumEmail.php @@ -63,7 +63,7 @@ class PremiumEmail extends Model 'body_html' => $initialData['content'], 'is_seen' => true, 'is_flagged' => false, - 'size' => $initialData['size'], + 'size' => $initialData['size'] ?? 0, 'mailbox' => 'INBOX', 'raw_headers' => null, 'raw_body' => null, diff --git a/resources/views/livewire/dashboard/mailbox/inbox.blade.php b/resources/views/livewire/dashboard/mailbox/inbox.blade.php index f5e48f4..06a959d 100644 --- a/resources/views/livewire/dashboard/mailbox/inbox.blade.php +++ b/resources/views/livewire/dashboard/mailbox/inbox.blade.php @@ -1,8 +1,33 @@
+
+
+ {{-- Public Label --}} + + Public + + + {{-- Toggle Switch --}} + + + {{-- Premium Label --}} + + Premium + +
+
-

Generate Premium Email

+

Generate {{ $premium ? 'Premium' : 'Public' }} Email