From d4c089fb22461ee646d81b60dfd008ce7cefea00 Mon Sep 17 00:00:00 2001
From: Supan Adit Pratama
Date: Wed, 1 Jul 2020 21:06:40 +0700
Subject: [PATCH] Login, Register, Forgot Password and List
---
app/Http/Controllers/SecurityController.php | 137 +++++++
.../Controllers/UrlShortenerController.php | 14 +
app/Http/Kernel.php | 1 +
app/Http/Middleware/WebAuthenticate.php | 24 ++
app/Mail/ForgotPassword.php | 37 ++
database/factories/UserFactory.php | 2 +-
resources/views/layout/default.blade.php | 357 +++++++++++++++++-
resources/views/list.blade.php | 84 +++++
.../views/template/email/forgot.blade.php | 5 +
resources/views/welcome.blade.php | 100 -----
routes/web.php | 16 +-
11 files changed, 663 insertions(+), 114 deletions(-)
create mode 100755 app/Http/Controllers/SecurityController.php
create mode 100755 app/Http/Middleware/WebAuthenticate.php
create mode 100644 app/Mail/ForgotPassword.php
create mode 100755 resources/views/list.blade.php
create mode 100644 resources/views/template/email/forgot.blade.php
delete mode 100755 resources/views/welcome.blade.php
diff --git a/app/Http/Controllers/SecurityController.php b/app/Http/Controllers/SecurityController.php
new file mode 100755
index 0000000..69edce1
--- /dev/null
+++ b/app/Http/Controllers/SecurityController.php
@@ -0,0 +1,137 @@
+validate([
+ "email" => "required",
+ "password" => "required",
+ ]);
+ $user = \App\User::where("email", $request->input("email"))->first();
+ if ($user != null) {
+ if (Hash::check($request->input('password'), $user->password)) {
+ // Set Session
+ $request->session()->put('user', $user->id);
+ $request->session()->put('name', $user->name);
+ $request->session()->put('email', $user->email);
+
+ return response()->json([
+ "message" => "Success login",
+ ], 200);
+ } else {
+ return response()->json([
+ "message" => "Username or password is wrong",
+ ], 401);
+ }
+ } else {
+ return response()->json([
+ "message" => "Username or password is wrong",
+ ], 401);
+ }
+ }
+
+ public function formRegister(Request $request)
+ {
+ $request->validate([
+ "name" => "required",
+ "email" => "required",
+ "password" => "required",
+ "password_confirm" => "required",
+ ]);
+ $user = \App\User::where("email", $request->input("email"))->first();
+ if ($user != null) {
+ return response()->json([
+ "message" => "User with email " . $user->email . " is exist",
+ ], 400);
+ } else {
+ if ($request->input('password') != $request->input('password_confirm')) {
+ return response()->json([
+ "message" => "Confirm password is different with provided password",
+ ], 400);
+ } else {
+ $user = new \App\User();
+ $user->name = $request->input("name");
+ $user->email = $request->input("email");
+ $user->password = Hash::make($request->input("password"));
+ if ($user->save()) {
+ return response()->json([
+ "message" => "Register success, now you can login...",
+ ], 200);
+ } else {
+ return response()->json([
+ "message" => "Failed to register new user",
+ ], 400);
+ }
+ }
+ }
+ }
+
+ public function formForgotPassword(Request $request)
+ {
+ $request->validate([
+ "email" => "required",
+ ]);
+ $user = \App\User::where("email", $request->input("email"))->first();
+ if ($user != null) {
+ $name = $user->name;
+ $newPassword = Str::random(4);
+ $user->password = Hash::make($newPassword);
+ Mail::to($user->email)->send(new ForgotPassword($name, $newPassword));
+ $user->save();
+ return response()->json([
+ "message" => "Please check your email",
+ ], 200);
+ } else {
+ return response()->json([
+ "message" => "Email " . $request->input('email') . " is not exist",
+ ], 400);
+ }
+ }
+
+ public function formChangePassword(Request $request)
+ {
+ $request->validate([
+ "email" => "required",
+ "password" => "required",
+ "password_confirm" => "required",
+ ]);
+ $user = \App\User::where("email", $request->input("email"))->first();
+ if ($user != null) {
+ if ($request->input('password') == $request->input('password_confirm')) {
+ $user->password = Hash::make($request->input('password'));
+ if ($user->save()) {
+ return response()->json([
+ "message" => "Success change password",
+ ], 200);
+ } else {
+ return response()->json([
+ "message" => "Failed change password",
+ ], 400);
+ }
+ } else {
+ return response()->json([
+ "message" => "New password is not match with confirm password",
+ ], 400);
+ }
+ } else {
+ return response()->json([
+ "message" => "Email " . $request->input('email') . " is not exist",
+ ], 400);
+ }
+ }
+
+ public function formLogout(Request $request)
+ {
+ $request->session()->flush();
+ return redirect('/');
+ }
+}
diff --git a/app/Http/Controllers/UrlShortenerController.php b/app/Http/Controllers/UrlShortenerController.php
index 12c3b51..0f4982a 100755
--- a/app/Http/Controllers/UrlShortenerController.php
+++ b/app/Http/Controllers/UrlShortenerController.php
@@ -12,6 +12,16 @@ use Illuminate\Support\Str;
class UrlShortenerController extends Controller
{
+ public function viewHome()
+ {
+ return view('home');
+ }
+
+ public function viewList()
+ {
+ return view('list');
+ }
+
public function createShortURL(Request $request)
{
$request->validate([
@@ -44,6 +54,10 @@ class UrlShortenerController extends Controller
$saveGeneratedURL = new UrlAddress();
$saveGeneratedURL['url_destination'] = $request->input('url');
$saveGeneratedURL['path_generated'] = $generatedPath;
+ $userSession = $request->session()->has('user');
+ if ($userSession) {
+ $saveGeneratedURL['user_id'] = $userSession;
+ }
if ($request->input('expired_date') != null && $request->input('expired_date') != "") {
$saveGeneratedURL['date_expired'] = $request->input('expired_date');
diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php
index 99eafe9..901100c 100755
--- a/app/Http/Kernel.php
+++ b/app/Http/Kernel.php
@@ -55,6 +55,7 @@ class Kernel extends HttpKernel
*/
protected $routeMiddleware = [
'auth' => \App\Http\Middleware\Authenticate::class,
+ 'auth.web' => \App\Http\Middleware\WebAuthenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
diff --git a/app/Http/Middleware/WebAuthenticate.php b/app/Http/Middleware/WebAuthenticate.php
new file mode 100755
index 0000000..2e95189
--- /dev/null
+++ b/app/Http/Middleware/WebAuthenticate.php
@@ -0,0 +1,24 @@
+session()->has('user')) {
+ return $next($request);
+ } else {
+ return redirect('login');
+ }
+ }
+}
diff --git a/app/Mail/ForgotPassword.php b/app/Mail/ForgotPassword.php
new file mode 100644
index 0000000..8a44642
--- /dev/null
+++ b/app/Mail/ForgotPassword.php
@@ -0,0 +1,37 @@
+name = $name;
+ $this->password = $password;
+ }
+
+ /**
+ * Build the message.
+ *
+ * @return $this
+ */
+ public function build()
+ {
+ return $this->view('template.email.forgot');
+ }
+}
diff --git a/database/factories/UserFactory.php b/database/factories/UserFactory.php
index d10e02e..d0e3fae 100755
--- a/database/factories/UserFactory.php
+++ b/database/factories/UserFactory.php
@@ -21,7 +21,7 @@ use Illuminate\Support\Str;
$factory->define(User::class, function (Faker $faker) {
return [
'name' => $faker->name,
- 'email' => "admin@admin.com",
+ 'email' => "admin@email.com",
'email_verified_at' => now(),
'password' => Hash::make('123'), // password
'remember_token' => Str::random(10),
diff --git a/resources/views/layout/default.blade.php b/resources/views/layout/default.blade.php
index 0bc77bb..f556640 100755
--- a/resources/views/layout/default.blade.php
+++ b/resources/views/layout/default.blade.php
@@ -64,20 +64,40 @@
@@ -120,6 +140,152 @@
+@if(Session::get('user') == null)
+ {{-- Forgot Password Modal --}}
+
+
+ {{-- Sign In Modal --}}
+
+
+ {{-- Register Modal --}}
+
+@else
+ {{-- Change Password Modal --}}
+
+@endif
+
@@ -143,6 +309,177 @@
+
+
@yield('js')
-
- @if (Route::has('login'))
-
- @auth
-
Home
- @else
-
Login
-
- @if (Route::has('register'))
-
Register
- @endif
- @endauth
-
- @endif
-
-
-
-
diff --git a/resources/views/list.blade.php b/resources/views/list.blade.php
new file mode 100755
index 0000000..dc3b184
--- /dev/null
+++ b/resources/views/list.blade.php
@@ -0,0 +1,84 @@
+@extends('layout.default')
+
+@section('title')
+ My URL Shortener
+@endsection
+
+@section('subtitle')
+ List all of your own URL Shortener
+@endsection
+
+@section('content')
+
+
+@endsection
+
+@section('js')
+
+@endsection
diff --git a/resources/views/template/email/forgot.blade.php b/resources/views/template/email/forgot.blade.php
new file mode 100644
index 0000000..269231d
--- /dev/null
+++ b/resources/views/template/email/forgot.blade.php
@@ -0,0 +1,5 @@
+
diff --git a/resources/views/welcome.blade.php b/resources/views/welcome.blade.php
deleted file mode 100755
index 3fb48cc..0000000
--- a/resources/views/welcome.blade.php
+++ /dev/null
@@ -1,100 +0,0 @@
-
-
-