Skip to content

Commit

Permalink
Merge pull request #4 from thedevsbuddy/new-features
Browse files Browse the repository at this point in the history
- Added Default mail templates.
- Added registration email verifications.
- Added Queues for sending emails.
- Added Settings for features like toggle ```email verification``` and toggle ```Email Queue```
- Fixed some bugs
  • Loading branch information
thedevsbuddy authored May 1, 2022
2 parents e7dd2a0 + 9fe60f4 commit fb64c1d
Show file tree
Hide file tree
Showing 62 changed files with 1,441 additions and 6,102 deletions.
2 changes: 1 addition & 1 deletion .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ DB_PASSWORD=
BROADCAST_DRIVER=log
CACHE_DRIVER=file
FILESYSTEM_DISK=local
QUEUE_CONNECTION=sync
QUEUE_CONNECTION=database
SESSION_DRIVER=file
SESSION_LIFETIME=120

Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
Homestead.json
Homestead.yaml
npm-debug.log
/storage/logs/*.log
yarn-error.log
/.idea
/.vscode
10 changes: 10 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,16 @@

**All notable changes to `AdminR` will be documented in this file**


==================================================

## Release v0.2.5 - May 02, 2022

- Added Default mail templates.
- Added registration email verifications.
- Added Queues for sending emails.
- Added Settings for features like toggle ```email verification``` and toggle ```Email Queue```

==================================================

## Release v0.2.1 - May 01, 2022
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# AdminR v0.2.1
# AdminR v0.2.5

<p align="center">
<a href="https://travis-ci.org/thedevsbuddy/adminr"><img src="https://travis-ci.org/thedevsbuddy/adminr.svg" alt="Build Status"></a>
Expand Down
37 changes: 33 additions & 4 deletions app/Http/Controllers/Admin/SettingController.php
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,39 @@ public function index(): View|RedirectResponse
{
try {
return view('adminr.settings.index');
} catch (\Exception $e){
return $this->backError('Error: ' . $e->getMessage());
} catch (\Error $e){
return $this->backError('Error: ' . $e->getMessage());
} catch (\Exception | \Error $e){
info($e->getMessage());
return $this->backError('Something went wrong!');
}
}

public function general(): View|RedirectResponse
{
try {
return view('adminr.settings.general');
} catch (\Exception | \Error $e){
info($e->getMessage());
return $this->backError('Something went wrong!');
}
}

public function email(): View|RedirectResponse
{
try {
return view('adminr.settings.email');
} catch (\Exception | \Error $e){
info($e->getMessage());
return $this->backError('Something went wrong!');
}
}

public function features(): View|RedirectResponse
{
try {
return view('adminr.settings.features');
} catch (\Exception | \Error $e){
info($e->getMessage());
return $this->backError('Something went wrong!');
}
}

Expand Down
7 changes: 3 additions & 4 deletions app/Http/Controllers/Admin/TemplateController.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;
use Devsbuddy\AdminrEngine\Models\MailTemplate;
use App\Models\MailTemplate;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
Expand Down Expand Up @@ -81,17 +81,16 @@ public function update(Request $request, $id): RedirectResponse
{
$request->validate([
'subject' => ['required'],
'code' => ['required'],
'content' => ['required'],
]);

try{
MailTemplate::where('id', $id)->update([
'subject' => trim($request->get('subject')),
'code' => Str::kebab(trim($request->get('code'))),
'purpose' => trim($request->get('purpose')),
'content' => $request->get('content'),
]);
return $this->backSuccess('Mail template created successfully!');
return $this->backSuccess('Mail template updated successfully!');
} catch (\Exception $e){
return $this->backError('Error: ' . $e->getMessage());
} catch (\Error $e){
Expand Down
1 change: 1 addition & 0 deletions app/Http/Controllers/Admin/UserController.php
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,7 @@ public function store(Request $request): RedirectResponse
'email' => $request->get('email'),
'phone' => $request->get('phone'),
'avatar' => $avatar,
'email_verified_at' => now(),
'password' => bcrypt($request->get('password')),
]);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,14 @@

namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;
use App\Models\User;
use Devsbuddy\AdminrEngine\Http\Controllers\AdminrController;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Spatie\Permission\Models\Role;

class AuthController extends AdminrController
class AuthController extends Controller
{
public function login(Request $request): JsonResponse
{
Expand Down
123 changes: 123 additions & 0 deletions app/Http/Controllers/Api/Auth/VerificationController.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,123 @@
<?php

namespace App\Http\Controllers\Api\Auth;

use App\Http\Controllers\Controller;
use App\Models\User;
use App\Models\VerificationToken;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\RedirectResponse;

class VerificationController extends Controller
{

public function sendEmailVerificationMail(): JsonResponse
{
try{
$user = User::where('email', request('email'))->first();

if(!$user){
return $this->errorMessage(message: "Provided email is not registered with us.", statusCode: 200);
}

$user->mail(template: "email-verification-mail", replaceable: [
"{email}" => $user->email,
"{verify_link}" => route('auth.verify-email') . "?token=" . $this->generateTokenForUser(user: $user)->token,
]);

return $this->successMessage(message: "Verification mail is sent to your email " . request('email'));

} catch (\Exception | \Error $e){
info($e->getMessage());
return $this->errorMessage(message: "Something went wrong!", statusCode: 200);
}

}

public function sendOtpVerificationMail(): JsonResponse|RedirectResponse
{
try{
$user = User::where('email', request('email'))->first();

if(!$user){
return $this->errorMessage(message: "Provided email is not registered with us.", statusCode: 200);
}

$user->mail(template: "email-verification-otp-mail", replaceable: [
"{email}" => $user->email,
"{otp}" => $this->generateOtpForUser(user: $user),
]);

$user->mail(template: "email-verification-otp-mail", replaceable: []);

return $this->successMessage(message: "Verification mail is sent to your email " . request('email'));

} catch (\Exception | \Error $e){
info($e->getMessage());
return $this->errorMessage(message: 'Something went wrong!', statusCode: 200);
}

}

public function verifyEmail(): JsonResponse
{
$verifyUser = VerificationToken::where('token', request('token'))
->with('user')
->first();

if(!is_null($verifyUser) ){
$user = $verifyUser->user;
if(is_null($user->email_verified_at)) {

$user->update([
"email_verified_at" => now(),
]);

$message = "Your e-mail is verified. You can now login to your account.";
} else {
$message = "Your e-mail is already verified. You can login to your account.";
}

$user->mail(template: "email-verification-success-mail", replaceable: [
"{login_link}" => route('auth.login'),
]);

// Delete token after successful verification.
$verifyUser->delete();

} else {
return $this->errorMessage(message: "Sorry your email cannot be identified.", statusCode: 200);
}

return $this->successMessage(message: $message);
}

public function verifyOtp(): JsonResponse
{
try{
$user = User::where('email', request('email'))->first();

if(!$user){
return $this->errorMessage(message: "Provided email is not registered with us.", statusCode: 200);
}

if($user->otp != request('otp')){
return $this->errorMessage(message: "Verification code is invalid.", statusCode: 200);
}

$user->update([
"email_verified_at" => now(),
]);

$user->mail(template: "email-verification-success-mail", replaceable: [
"{login_link}" => route('auth.login'),
]);

return $this->successMessage(message: "Account verified successfully!");
} catch (\Exception | \Error $e){
info($e->getMessage());
return $this->errorMessage('Something went wrong!');
}
}

}
31 changes: 22 additions & 9 deletions app/Http/Controllers/Auth/RegisterController.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,10 @@
namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use App\Providers\RouteServiceProvider;
use App\Models\User;
use Illuminate\Auth\Events\Registered;
use Illuminate\Foundation\Auth\RegistersUsers;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Validator;
use Illuminate\View\View;
use Spatie\Permission\Models\Role;

Expand All @@ -33,15 +28,15 @@ public function showRegisterForm(): View|RedirectResponse
}
}

public function register(Request $request)
public function register(Request $request): JsonResponse|RedirectResponse
{

$request->validate([
'name' => ['required'],
'username' => ['required', 'unique:users'],
'email' => ['required', 'email', 'unique:users'],
'phone' => ['required', 'unique:users'],
'password' => ['required', 'confirm'],
'password' => ['required'],
]);

try {
Expand All @@ -53,9 +48,26 @@ public function register(Request $request)
'password' => bcrypt($request->get('password')),
]);

$user->syncRoles(Role::where('name', 'user')->first()->id);
$user->syncRoles(Role::where('name', 'user')->value('id'));

// Check if verification enabled and send verification mail
if(!is_null(getSetting('email_verification_enabled')) && (int)getSetting('email_verification_enabled')){
$user->mail(template: "registration-email-verification-mail", replaceable: [
"{name}" => $user->name,
"{username}" => $user->username,
"{email}" => $user->email,
"{verify_link}" => route('auth.verify-email') . "?token=" . $this->generateTokenForUser(user: $user)->token,
]);
} else {
// Send welcome mail if verification is disabled
$user->mail(template: "registration-welcome-mail", replaceable: [
"{name}" => $user->name,
"{username}" => $user->username,
"{email}" => $user->email,
]);
auth()->login($user);
}

auth()->login($user);

return $request->wantsJson()
? $this->successMessage(message: "Registered successfully!")
Expand All @@ -68,4 +80,5 @@ public function register(Request $request)
}

}

}
Loading

0 comments on commit fb64c1d

Please sign in to comment.