From 71c79d3b2a0d8e52abfb52279a9d0f5caf705a4c Mon Sep 17 00:00:00 2001 From: mwalbeck <magn3200@gmail.com> Date: Sat, 22 Oct 2016 17:22:26 +0200 Subject: [PATCH] Added validation to site with barebones error reporting to users --- app/Http/Controllers/GroupController.php | 9 ++-- app/Http/Controllers/HomeController.php | 15 +++++-- app/Http/Controllers/TestController.php | 9 ++-- app/Http/Controllers/UserController.php | 5 ++- app/Http/Requests/StoreGroup.php | 39 +++++++++++++++++ app/Http/Requests/StoreOptions.php | 40 +++++++++++++++++ app/Http/Requests/StoreQuestion.php | 43 +++++++++++++++++++ app/Http/Requests/StoreTest.php | 10 ++--- app/Http/Requests/StoreUser.php | 15 ++++++- app/Question.php | 2 +- app/Test.php | 4 +- app/User.php | 10 +++-- resources/views/tests/edit.blade.php | 9 ++++ resources/views/tests/question/edit.blade.php | 9 ++++ resources/views/tests/question/new.blade.php | 9 ++++ resources/views/users/new.blade.php | 13 +++++- resources/views/users/settings.blade.php | 9 ++++ 17 files changed, 221 insertions(+), 29 deletions(-) create mode 100644 app/Http/Requests/StoreGroup.php create mode 100644 app/Http/Requests/StoreOptions.php create mode 100644 app/Http/Requests/StoreQuestion.php diff --git a/app/Http/Controllers/GroupController.php b/app/Http/Controllers/GroupController.php index f46f02d..40598bf 100644 --- a/app/Http/Controllers/GroupController.php +++ b/app/Http/Controllers/GroupController.php @@ -5,6 +5,7 @@ namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Http\Requests; +use App\Http\Requests\StoreGroup; use App\Group; class GroupController extends Controller @@ -25,10 +26,10 @@ class GroupController extends Controller return view('groups.new'); } - public function addGroup() + public function addGroup(StoreGroup $request) { $group = new Group; - $group->addGroup(request()->all()); + $group->addGroup($request->all()); return redirect('/admin/groups'); } @@ -37,9 +38,9 @@ class GroupController extends Controller return view('groups.edit', compact('group')); } - public function updateGroup(Group $group) + public function updateGroup(Group $group, StoreGroup $request) { - $group->updateGroup(request()->all()); + $group->updateGroup($request->all()); return redirect("/admin/groups"); } diff --git a/app/Http/Controllers/HomeController.php b/app/Http/Controllers/HomeController.php index 9a04dc9..89aa7b5 100644 --- a/app/Http/Controllers/HomeController.php +++ b/app/Http/Controllers/HomeController.php @@ -41,17 +41,24 @@ class HomeController extends Controller return view('users.settings', compact('user')); } - public function updatePassword() + public function updatePassword(Request $request) { + $this->validate($request, [ + "password1_new" => "required|string|alpha_dash|min:8", + "password2_new" => "required|string|alpha_dash|min:8" + ]); $user = Auth::user(); - $user->updatePassword(request()->all()); + $user->updatePassword($request->all()); return redirect('/settings'); } - public function updateEmail() + public function updateEmail(Request $request) { + $this->validate($request, [ + "email" => "required|email" + ]); $user = Auth::user(); - $user->updateEmail(request()->all()); + $user->updateEmail($request->all()); return redirect('/settings'); } } diff --git a/app/Http/Controllers/TestController.php b/app/Http/Controllers/TestController.php index 34218ad..c2b679d 100644 --- a/app/Http/Controllers/TestController.php +++ b/app/Http/Controllers/TestController.php @@ -11,6 +11,7 @@ use App\Question; use App\Option; use App\Group; use App\Http\Requests\StoreTest; +use App\Http\Requests\StoreQuestion; class TestController extends Controller { @@ -40,13 +41,13 @@ class TestController extends Controller return view('tests.index', compact('question'), compact('options')); } - public function answerQuestion() + public function answerQuestion(Request $request) { $question = session('questions')->get(session('question_counter')-1); $options = session('options'); $answers = collect([]); foreach ($options as $option) { - if (array_key_exists("answer{$option->id}", request()->all())) { + if (array_key_exists("answer{$option->id}", $request->all())) { $answers->push($option); } } @@ -201,7 +202,7 @@ class TestController extends Controller return view('tests.edit', compact('test')); } - public function addQuestion(Test $test, Request $request) + public function addQuestion(Test $test, StoreQuestion $request) { $question = new Question; $question->addQuestion($test, $request); @@ -216,7 +217,7 @@ class TestController extends Controller return redirect("/admin/tests/$test->id"); } - public function updateQuestion(Question $question, Request $request) + public function updateQuestion(Question $question, StoreQuestion $request) { $test = $question->test; $question->updateQuestion($request); diff --git a/app/Http/Controllers/UserController.php b/app/Http/Controllers/UserController.php index 13ea978..f3363ed 100644 --- a/app/Http/Controllers/UserController.php +++ b/app/Http/Controllers/UserController.php @@ -5,6 +5,7 @@ namespace App\Http\Controllers; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; use App\Http\Requests; +use App\Http\Requests\StoreUser; use App\User; use App\Group; @@ -31,10 +32,10 @@ class UserController extends Controller return redirect('/admin/users'); } - public function addUser() + public function addUser(StoreUser $request) { $user = new User; - $user->addUser(request()->all()); + $user->addUser($request->all()); return redirect('/admin/users'); } diff --git a/app/Http/Requests/StoreGroup.php b/app/Http/Requests/StoreGroup.php new file mode 100644 index 0000000..c0fadcb --- /dev/null +++ b/app/Http/Requests/StoreGroup.php @@ -0,0 +1,39 @@ +<?php + +namespace App\Http\Requests; + +use Illuminate\Foundation\Http\FormRequest; +use Illuminate\Support\Facades\Auth; + +class StoreGroup extends FormRequest +{ + /** + * Determine if the user is authorized to make this request. + * + * @return bool + */ + public function authorize() + { + if (Auth::user()->isAdministrator()) { + return true; + } + + if (Auth::user()->isModerator()) { + return true; + } + return false; + } + + /** + * Get the validation rules that apply to the request. + * + * @return array + */ + public function rules() + { + return [ + "name" => "required|string|alpha_dash|max:255", + "enabled" => "boolean" + ]; + } +} diff --git a/app/Http/Requests/StoreOptions.php b/app/Http/Requests/StoreOptions.php new file mode 100644 index 0000000..e2a96f1 --- /dev/null +++ b/app/Http/Requests/StoreOptions.php @@ -0,0 +1,40 @@ +<?php + +namespace App\Http\Requests; + +use Illuminate\Foundation\Http\FormRequest; +use Illuminate\Support\Facades\Auth; + +class StoreOptions extends FormRequest +{ + /** + * Determine if the user is authorized to make this request. + * + * @return bool + */ + public function authorize() + { + if (Auth::user()->isAdministrator()) { + return true; + } + + if (Auth::user()->isModerator()) { + return true; + } + return false; + } + + /** + * Get the validation rules that apply to the request. + * + * @return array + */ + public function rules() + { + return [ + "question_id" => "required|integer|exists:questions,id|min:1", + "option" => "required|string|alpha_dash|max:255", + "correct_answer" => "boolean" + ]; + } +} diff --git a/app/Http/Requests/StoreQuestion.php b/app/Http/Requests/StoreQuestion.php new file mode 100644 index 0000000..7a24661 --- /dev/null +++ b/app/Http/Requests/StoreQuestion.php @@ -0,0 +1,43 @@ +<?php + +namespace App\Http\Requests; + +use Illuminate\Foundation\Http\FormRequest; +use Illuminate\Support\Facades\Auth; + +class StoreQuestion extends FormRequest +{ + /** + * Determine if the user is authorized to make this request. + * + * @return bool + */ + public function authorize() + { + if (Auth::user()->isAdministrator()) { + return true; + } + + if (Auth::user()->isModerator()) { + return true; + } + return false; + } + + /** + * Get the validation rules that apply to the request. + * + * @return array + */ + public function rules() + { + return [ + "test_id" => "integer|exists:tests,id|min:1", + "title" => "required|string|alpha_dash|max:255", + "question" => "required|string|alpha_dash", + "question_type" => "string|in:radio,checkbox|max:255", + "correct_answers" => "integer|min:1", + "multiple_anwsers_question" => "boolean" + ]; + } +} diff --git a/app/Http/Requests/StoreTest.php b/app/Http/Requests/StoreTest.php index dbbdd6c..41f1dc9 100644 --- a/app/Http/Requests/StoreTest.php +++ b/app/Http/Requests/StoreTest.php @@ -32,11 +32,11 @@ class StoreTest extends FormRequest public function rules() { return [ - "title" => "required|max:255|string", - "question_count" => "required|numeric", - "question_count_to_fail" => "numeric", - "time_limit" => "numeric", - "group_id" => "numeric" + "title" => "required|string|alpha_dash|max:255", + "question_count" => "required|integer|min:1", + "question_count_to_fail" => "integer|min:0", + "time_limit" => "integer|min:0", + "group_id" => "integer|exists:groups,id|min:1" ]; } } diff --git a/app/Http/Requests/StoreUser.php b/app/Http/Requests/StoreUser.php index 60cd2e1..7a05eb5 100644 --- a/app/Http/Requests/StoreUser.php +++ b/app/Http/Requests/StoreUser.php @@ -3,6 +3,7 @@ namespace App\Http\Requests; use Illuminate\Foundation\Http\FormRequest; +use Illuminate\Support\Facades\Auth; class StoreUser extends FormRequest { @@ -13,6 +14,13 @@ class StoreUser extends FormRequest */ public function authorize() { + if (Auth::user()->isAdministrator()) { + return true; + } + + if (Auth::user()->isModerator()) { + return true; + } return false; } @@ -24,7 +32,12 @@ class StoreUser extends FormRequest public function rules() { return [ - // + "name" => "required|string|alpha_dash|max:255", + "email" => "required|email|unique:users,email|max:255", + "password" => "required|alpha_dash|min:8", + "group_id" => "integer|exists:groups,id|min:1", + "enabled" => "required|boolean", + "access_level" => "integer|min:1", ]; } } diff --git a/app/Question.php b/app/Question.php index d0e9e05..e84a96a 100644 --- a/app/Question.php +++ b/app/Question.php @@ -65,7 +65,7 @@ class Question extends Model $test->questions()->save($this); } - public function updateQuestion($request) + public function updateQuestion(Request $request) { $this->title = $request->title; $this->question = $request->question; diff --git a/app/Test.php b/app/Test.php index 2739a5a..03b7357 100644 --- a/app/Test.php +++ b/app/Test.php @@ -47,7 +47,7 @@ class Test extends Model return false; } - public function createTest(Request $request) + public function createTest($request) { $this->title = $request["title"]; $this->question_count = $request["question_count"]; @@ -64,7 +64,7 @@ class Test extends Model return true; } - public function updateTest(Request $request) + public function updateTest($request) { $this->update($request); } diff --git a/app/User.php b/app/User.php index 99b495c..6f2687f 100644 --- a/app/User.php +++ b/app/User.php @@ -52,7 +52,7 @@ class User extends Authenticatable public function passwordCompare($password1, $password2) { - return $password1 == $password2; + return $password1 === $password2; } public function passwordVerify($password, $hash) @@ -62,7 +62,7 @@ class User extends Authenticatable public function isModerator() { - if ($this->access_level == 2) { + if ($this->access_level === 2) { return true; } return false; @@ -70,7 +70,7 @@ class User extends Authenticatable public function isAdministrator() { - if ($this->access_level == 3) { + if ($this->access_level === 3) { return true; } return false; @@ -86,7 +86,9 @@ class User extends Authenticatable $this->name = $request["name"]; $this->email = $request["email"]; $this->passwordHash($request["password"]); - $this->enabled = $request["enabled"]; + if ($request["enabled"]) { + $this->enabled = $request["enabled"]; + } if (Auth::user()->isModerator()) { Group::find(Auth::user()->group_id)->tests()->save($this); return true; diff --git a/resources/views/tests/edit.blade.php b/resources/views/tests/edit.blade.php index 341b9bf..e3fe54c 100644 --- a/resources/views/tests/edit.blade.php +++ b/resources/views/tests/edit.blade.php @@ -3,6 +3,15 @@ @section('content') <div class="container-fluid"> <div class="col-md-6 col-md-offset-3"> + @if (count($errors) > 0) + <div class="alert alert-danger"> + <ul> + @foreach ($errors->all() as $error) + <li>{{ $error }}</li> + @endforeach + </ul> + </div> + @endif <h1>Edit Test: {{ $test->title }}</h1> </br> <form method="POST" action="/{{ Auth::user()->getAdminPath() }}/tests/{{ $test->id }}/edit"> diff --git a/resources/views/tests/question/edit.blade.php b/resources/views/tests/question/edit.blade.php index 29b723e..18a9c87 100644 --- a/resources/views/tests/question/edit.blade.php +++ b/resources/views/tests/question/edit.blade.php @@ -4,6 +4,15 @@ <div class="container-fluid"> <div class="col-md-6 col-md-offset-3"> + @if (count($errors) > 0) + <div class="alert alert-danger"> + <ul> + @foreach ($errors->all() as $error) + <li>{{ $error }}</li> + @endforeach + </ul> + </div> + @endif <h1>Edit Question</h1> </br> <form method="POST" action="/{{ Auth::user()->getAdminPath() }}/questions/{{ $question->id }}"> diff --git a/resources/views/tests/question/new.blade.php b/resources/views/tests/question/new.blade.php index fcca9c8..06d2942 100644 --- a/resources/views/tests/question/new.blade.php +++ b/resources/views/tests/question/new.blade.php @@ -3,6 +3,15 @@ @section('content') <div class="container-fluid"> <div class="col-md-6 col-md-offset-3"> + @if (count($errors) > 0) + <div class="alert alert-danger"> + <ul> + @foreach ($errors->all() as $error) + <li>{{ $error }}</li> + @endforeach + </ul> + </div> + @endif <h1>Question {{ $question_number }}</h1> </br> <form method="POST" action="/{{ Auth::user()->getAdminPath() }}/tests/{{ $test->id }}/question"> diff --git a/resources/views/users/new.blade.php b/resources/views/users/new.blade.php index 41ad8e2..e76b9c3 100644 --- a/resources/views/users/new.blade.php +++ b/resources/views/users/new.blade.php @@ -3,9 +3,18 @@ @section('content') <div class="container-fluid"> <div class="col-md-6 col-md-offset-3"> + @if (count($errors) > 0) + <div class="alert alert-danger"> + <ul> + @foreach ($errors->all() as $error) + <li>{{ $error }}</li> + @endforeach + </ul> + </div> + @endif <h1>Create New User</h1> </br> - <form method="POST" action="//users/new"> + <form method="POST" action="/{{ Auth::user()->getAdminPath() }}/users/new"> {{ csrf_field() }} <div class="form-group"> <label>Name</label> @@ -21,7 +30,7 @@ </div> <div class="form-group"> <label>Enabled</label> - <select class="form-control"> + <select name="enabled" class="form-control"> <option value="1">Yes</option> <option value="0">No</option> </select> diff --git a/resources/views/users/settings.blade.php b/resources/views/users/settings.blade.php index c5aa239..2956f80 100644 --- a/resources/views/users/settings.blade.php +++ b/resources/views/users/settings.blade.php @@ -4,6 +4,15 @@ <div class="container-fluid"> <div class="row"> <div class="col-md-6 col-md-offset-3"> + @if (count($errors) > 0) + <div class="alert alert-danger"> + <ul> + @foreach ($errors->all() as $error) + <li>{{ $error }}</li> + @endforeach + </ul> + </div> + @endif <div class="panel panel-default"> <div class="panel-heading">Password</div> <div class="panel-body">