- Added functionality for users to request an email change, including generating a verification code and setting an expiration time. - Implemented methods in the User model to handle email change requests, code validation, and confirmation. - Created a new job to update the user's email in Stripe after confirmation. - Introduced rate limiting for email change requests and verification attempts to prevent abuse. - Added a new notification for email change verification. - Updated the profile component to manage email change requests and verification UI.
		
			
				
	
	
		
			111 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			111 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
 | 
						|
use App\Models\Team;
 | 
						|
use Stripe\Stripe;
 | 
						|
 | 
						|
function isSubscriptionActive()
 | 
						|
{
 | 
						|
    if (! isCloud()) {
 | 
						|
        return false;
 | 
						|
    }
 | 
						|
    $team = currentTeam();
 | 
						|
    if (! $team) {
 | 
						|
        return false;
 | 
						|
    }
 | 
						|
    $subscription = $team?->subscription;
 | 
						|
 | 
						|
    if (is_null($subscription)) {
 | 
						|
        return false;
 | 
						|
    }
 | 
						|
    if (isStripe()) {
 | 
						|
        return $subscription->stripe_invoice_paid === true;
 | 
						|
    }
 | 
						|
 | 
						|
    return false;
 | 
						|
}
 | 
						|
function isSubscriptionOnGracePeriod()
 | 
						|
{
 | 
						|
    $team = currentTeam();
 | 
						|
    if (! $team) {
 | 
						|
        return false;
 | 
						|
    }
 | 
						|
    $subscription = $team?->subscription;
 | 
						|
    if (! $subscription) {
 | 
						|
        return false;
 | 
						|
    }
 | 
						|
    if (isStripe()) {
 | 
						|
        return $subscription->stripe_cancel_at_period_end;
 | 
						|
    }
 | 
						|
 | 
						|
    return false;
 | 
						|
}
 | 
						|
function subscriptionProvider()
 | 
						|
{
 | 
						|
    return config('subscription.provider');
 | 
						|
}
 | 
						|
function isStripe()
 | 
						|
{
 | 
						|
    return config('subscription.provider') === 'stripe';
 | 
						|
}
 | 
						|
function getStripeCustomerPortalSession(Team $team)
 | 
						|
{
 | 
						|
    Stripe::setApiKey(config('subscription.stripe_api_key'));
 | 
						|
    $return_url = route('subscription.show');
 | 
						|
    $stripe_customer_id = data_get($team, 'subscription.stripe_customer_id');
 | 
						|
    if (! $stripe_customer_id) {
 | 
						|
        return null;
 | 
						|
    }
 | 
						|
 | 
						|
    return \Stripe\BillingPortal\Session::create([
 | 
						|
        'customer' => $stripe_customer_id,
 | 
						|
        'return_url' => $return_url,
 | 
						|
    ]);
 | 
						|
}
 | 
						|
function allowedPathsForUnsubscribedAccounts()
 | 
						|
{
 | 
						|
    return [
 | 
						|
        'subscription/new',
 | 
						|
        'login',
 | 
						|
        'logout',
 | 
						|
        'force-password-reset',
 | 
						|
        'livewire/update',
 | 
						|
        'admin',
 | 
						|
    ];
 | 
						|
}
 | 
						|
function allowedPathsForBoardingAccounts()
 | 
						|
{
 | 
						|
    return [
 | 
						|
        ...allowedPathsForUnsubscribedAccounts(),
 | 
						|
        'onboarding',
 | 
						|
        'livewire/update',
 | 
						|
    ];
 | 
						|
}
 | 
						|
function allowedPathsForInvalidAccounts()
 | 
						|
{
 | 
						|
    return [
 | 
						|
        'logout',
 | 
						|
        'verify',
 | 
						|
        'force-password-reset',
 | 
						|
        'livewire/update',
 | 
						|
    ];
 | 
						|
}
 | 
						|
 | 
						|
function updateStripeCustomerEmail(Team $team, string $newEmail): void
 | 
						|
{
 | 
						|
    if (! isStripe()) {
 | 
						|
        return;
 | 
						|
    }
 | 
						|
 | 
						|
    $stripe_customer_id = data_get($team, 'subscription.stripe_customer_id');
 | 
						|
    if (! $stripe_customer_id) {
 | 
						|
        return;
 | 
						|
    }
 | 
						|
 | 
						|
    Stripe::setApiKey(config('subscription.stripe_api_key'));
 | 
						|
 | 
						|
    \Stripe\Customer::update(
 | 
						|
        $stripe_customer_id,
 | 
						|
        ['email' => $newEmail]
 | 
						|
    );
 | 
						|
}
 |