Fixed email wording

Change-Id: I640c5ce1d39265830ec72e5ae13037d5980121bd
Signed-off-by: smarcet <smarcet@gmail.com>
This commit is contained in:
smarcet 2020-10-12 14:48:19 -03:00
parent 5e2a87df69
commit 2420988947
8 changed files with 87 additions and 28 deletions

View File

@ -17,6 +17,8 @@ use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels; use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Support\Facades\Config; use Illuminate\Support\Facades\Config;
use Illuminate\Support\Facades\URL;
/** /**
* Class WelcomeNewUserEmail * Class WelcomeNewUserEmail
* @package App\Mail * @package App\Mail
@ -37,14 +39,27 @@ final class WelcomeNewUserEmail extends Mailable
*/ */
public $user_fullname; public $user_fullname;
/**
* @var string
*/
public $verification_link;
/**
* @var string
*/
public $bio_link;
/** /**
* WelcomeNewUserEmail constructor. * WelcomeNewUserEmail constructor.
* @param User $user * @param User $user
* @param string|null $verification_link
*/ */
public function __construct(User $user) public function __construct(User $user, ?string $verification_link)
{ {
$this->user_email = $user->getEmail(); $this->user_email = $user->getEmail();
$this->user_fullname = $user->getFullName(); $this->user_fullname = $user->getFullName();
$this->verification_link = $verification_link;
$this->bio_link = URL::action("UserController@getLogin");
} }
/** /**

View File

@ -77,14 +77,16 @@ final class EventServiceProvider extends ServiceProvider
if(is_null($user)) return; if(is_null($user)) return;
if(! $user instanceof User) return; if(! $user instanceof User) return;
$user_service = App::make(IUserService::class); $user_service = App::make(IUserService::class);
if(!$user_service instanceof IUserService) return;
$user_service->generateIdentifier($user); $user_service->generateIdentifier($user);
Mail::queue(new WelcomeNewUserEmail($user)); $verification_link = $user_service->sendWelcomeEmail($user);
if(!$user->isEmailVerified()) { if(!$user->isEmailVerified()) {
if (!$user->hasCreator()) if (!$user->hasCreator())
$user_service->sendVerificationEmail($user); $user_service->sendVerificationEmail($user, $verification_link);
} }
else{ else{
// email is already verified // email is already verified

View File

@ -47,10 +47,11 @@ interface IUserService
/** /**
* @param User $user * @param User $user
* @return User * @param string|null $verification_link
* @throws ValidationException * @throws ValidationException
* @return User
*/ */
public function sendVerificationEmail(User $user): User; public function sendVerificationEmail(User $user, string $verification_link = null): User;
/** /**
* @param User $user * @param User $user
@ -98,4 +99,10 @@ interface IUserService
* @return void * @return void
*/ */
public function recalculateUserSpamType(User $user):void; public function recalculateUserSpamType(User $user):void;
/**
* @param User $user
* @return string|null
*/
public function sendWelcomeEmail(User $user):?string;
} }

View File

@ -22,6 +22,7 @@ use App\libs\Auth\Repositories\IUserPasswordResetRequestRepository;
use App\libs\Auth\Repositories\IUserRegistrationRequestRepository; use App\libs\Auth\Repositories\IUserRegistrationRequestRepository;
use App\Mail\UserEmailVerificationRequest; use App\Mail\UserEmailVerificationRequest;
use App\Mail\UserPasswordResetRequestMail; use App\Mail\UserPasswordResetRequestMail;
use App\Mail\WelcomeNewUserEmail;
use App\Services\AbstractService; use App\Services\AbstractService;
use Auth\IUserNameGeneratorService; use Auth\IUserNameGeneratorService;
use Auth\Repositories\IUserRepository; use Auth\Repositories\IUserRepository;
@ -178,31 +179,55 @@ final class UserService extends AbstractService implements IUserService
/** /**
* @param User $user * @param User $user
* @return User * @return string
* @throws ValidationException
*/ */
public function sendVerificationEmail(User $user): User private function generateVerificationLink(User $user):string{
{
return $this->tx_service->transaction(function() use($user){ return $this->tx_service->transaction(function() use($user) {
if($user->isEmailVerified())
throw new ValidationException
(
sprintf
(
"User %s (%s) has already verified his/her email.",
$user->getEmail(),
$user->getId()
)
);
//generate unique token //generate unique token
do{ do {
$token = $user->generateEmailVerificationToken(); $token = $user->generateEmailVerificationToken();
$former_user = $this->user_repository->getByVerificationEmailToken($token); $former_user = $this->user_repository->getByVerificationEmailToken($token);
if(is_null($former_user)) break; if (is_null($former_user)) break;
} while(true); } while (true);
$verification_link = URL::route("verification_verify", ["token" => $token]); return URL::route("verification_verify", ["token" => $token]);
});
}
/**
* @param User $user
* @return string|null
* @throws \Exception
*/
public function sendWelcomeEmail(User $user):?string {
return $this->tx_service->transaction(function() use($user){
$verification_link = null;
if(!$user->isEmailVerified())
$verification_link = $this->generateVerificationLink($user);
Mail::queue(new WelcomeNewUserEmail($user, $verification_link));
return $verification_link;
});
}
/**
* @param User $user
* @param string|null $verification_link
* @return User
* @throws \Exception
*/
public function sendVerificationEmail(User $user, string $verification_link = null): User
{
return $this->tx_service->transaction(function() use($user, $verification_link){
if(empty($verification_link))
$verification_link = $this->generateVerificationLink($user);
Mail::queue(new UserEmailVerificationRequest($user, $verification_link)); Mail::queue(new UserEmailVerificationRequest($user, $verification_link));

View File

@ -1491,10 +1491,15 @@ SQL;
} }
/** /**
* @return String * @return string
* @throws ValidationException
*/ */
public function generateEmailVerificationToken(): string public function generateEmailVerificationToken(): string
{ {
if($this->isEmailVerified()){
throw new ValidationException(sprintf("User %s (%s) is already verified.", $this->id, $this->email));
}
$generator = new RandomGenerator(); $generator = new RandomGenerator();
$token = strval($this->id) . $generator->randomToken(); $token = strval($this->id) . $generator->randomToken();
$this->email_verified_token_hash = self::createConfirmationTokenHash($token); $this->email_verified_token_hash = self::createConfirmationTokenHash($token);

View File

@ -221,7 +221,7 @@ return [
'version' => env('APP_VERSION', 'XX.XX.XX'), 'version' => env('APP_VERSION', 'XX.XX.XX'),
'app_name' => env('APP_NAME', 'OpenStackID'), 'app_name' => env('APP_NAME', 'OpenStackID'),
'tenant_name' => env('TENANT_NAME', 'OpenStack'), 'tenant_name' => env('TENANT_NAME', 'Open Infrastructure'),
'logo_url' => env('LOGO_URL', '/assets/img/openstack-logo-full.svg'), 'logo_url' => env('LOGO_URL', '/assets/img/openstack-logo-full.svg'),
'tenant_favicon' => env('TENANT_FAV_ICON_URL', '/assets/img/favicon-32x32.png'), 'tenant_favicon' => env('TENANT_FAV_ICON_URL', '/assets/img/favicon-32x32.png'),
'help_email' => env('HELP_EMAIL', 'support@openstack.org'), 'help_email' => env('HELP_EMAIL', 'support@openstack.org'),

View File

@ -6,7 +6,7 @@
<body> <body>
<p>Dear {!!$user_fullname!!},</p> <p>Dear {!!$user_fullname!!},</p>
<p> <p>
Thank you for your interest in joining the Open Infrastructure community! In order to verify your email, Thank you for your interest in joining the {!! Config::get('app.tenant_name') !!} community! In order to verify your email,
please click the verification link: <a href="{!! $verification_link !!}" target="_blank">Verify Email Address.</a> please click the verification link: <a href="{!! $verification_link !!}" target="_blank">Verify Email Address.</a>
</p> </p>
<p> <p>

View File

@ -6,10 +6,15 @@
<body> <body>
<p>Dear {!!$user_fullname!!},</p> <p>Dear {!!$user_fullname!!},</p>
<p> <p>
You will use this account to access all Open Infrastructure community apps and websites that require an {!! Config::get('app.app_name') !!}, You will use this account to access all {!! Config::get('app.tenant_name') !!} community apps and websites that require an {!! Config::get('app.app_name') !!},
including the virtual Open Infrastructure Summit. Your user details are associated with your {!! Config::get('app.app_name') !!} and you including the virtual Open Infrastructure Summit. Your user details are associated with your {!! Config::get('app.app_name') !!} and you
are able to grant access to that information to each app at your discretion. are able to grant access to that information to each app at your discretion.
</p> </p>
@if($verification_link)
<p>
In order to verify your email, please click the verification link: <a href="{!! $verification_link !!}" target="_blank">Verify Email Address.</a>
</p>
@endif
<p> <p>
To edit your profile just click <a href="{!! URL::action("UserController@getLogin") !!}">here</a>. To edit your profile just click <a href="{!! URL::action("UserController@getLogin") !!}">here</a>.
You may update your photo, add a bio, and other information you wish to share. You may update your photo, add a bio, and other information you wish to share.