From 0895eabce5217918f71ce0719a2c84b0c58a5bb2 Mon Sep 17 00:00:00 2001 From: jack Date: Tue, 15 May 2018 11:42:00 +0800 Subject: [PATCH 1/7] updated dockerfile with migration --- .gitignore | 1 + Dockerfile | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 67c0aea..e283f19 100644 --- a/.gitignore +++ b/.gitignore @@ -6,6 +6,7 @@ /.idea /.vscode /.vagrant +/data Homestead.json Homestead.yaml npm-debug.log diff --git a/Dockerfile b/Dockerfile index f78c24a..913f3a2 100644 --- a/Dockerfile +++ b/Dockerfile @@ -4,6 +4,7 @@ RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local RUN docker-php-ext-install pdo pdo_mysql WORKDIR /app COPY . /app -RUN composer install +RUN composer update +RUN php artisan db:migrate CMD php artisan serve --host=0.0.0.0 --port=8000 EXPOSE 8000 \ No newline at end of file From d8a439fa425cb71cda9f9fe4f2864e4394138198 Mon Sep 17 00:00:00 2001 From: Aqeeb Imtiaz Harun Date: Mon, 21 May 2018 17:10:42 +0800 Subject: [PATCH 2/7] Front end integrated with the backend for loginpage and successfully redirects to homepage --- public/index.html | 30 +++++++++++++++++++++++++++--- routes/web.php | 3 +++ 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/public/index.html b/public/index.html index 27fbe5c..7368ba3 100644 --- a/public/index.html +++ b/public/index.html @@ -6,10 +6,9 @@ - + -
@@ -21,12 +20,13 @@
+ @csrf
- +
@@ -45,6 +45,7 @@
@@ -59,5 +60,28 @@
+ + + \ No newline at end of file diff --git a/routes/web.php b/routes/web.php index 829e44a..927d508 100644 --- a/routes/web.php +++ b/routes/web.php @@ -15,5 +15,8 @@ Route::get('/', function () { return view('welcome'); }); +//Route::post('login', 'AuthController@login'); + Route::get('password/reset/{token}', 'Auth\ResetPasswordController@showResetForm')->name('password.request'); Route::post('password/reset', 'Auth\ResetPasswordController@postReset')->name('password.reset'); + From 70d455ac6405ebfdc683c3defcf62b5e010f111f Mon Sep 17 00:00:00 2001 From: jack Date: Tue, 22 May 2018 18:11:24 +0800 Subject: [PATCH 3/7] added send verification test --- app/Http/Controllers/AuthController.php | 7 ++----- tests/Feature/LoginTest.php | 8 ++------ tests/Feature/RegisterTest.php | 9 ++++----- 3 files changed, 8 insertions(+), 16 deletions(-) diff --git a/app/Http/Controllers/AuthController.php b/app/Http/Controllers/AuthController.php index f8bbb25..a682106 100644 --- a/app/Http/Controllers/AuthController.php +++ b/app/Http/Controllers/AuthController.php @@ -48,9 +48,8 @@ class AuthController extends Controller $user_verification->token = $token; $user_verification->save(); - // send token to phone - // ** switching to nexmo ** - //$message = "IZYIM verification code : ". $token; + // TODO: send token to phone + //$message = "RM0.00 IZYIM: Verification code : ". $token; //$twilio = new Twilio(env('TWILIO_ACC'), env('TWILIO_TOKEN'), env('TWILIO_NUMBER')); //$twilio->message($request->phone, $message); return response()->json(['success'=> true, 'message'=> 'A verification code has been send to your mobile number.' ]); @@ -121,8 +120,6 @@ class AuthController extends Controller return response()->json(['success'=> false, 'error'=> $validator->messages()]); } - - $name = $request->name; $password = $request->password; $role = $request->role; diff --git a/tests/Feature/LoginTest.php b/tests/Feature/LoginTest.php index 005d4aa..34e9cce 100644 --- a/tests/Feature/LoginTest.php +++ b/tests/Feature/LoginTest.php @@ -15,12 +15,8 @@ class LoginTest extends TestCase */ public function testExample() { - $response = $this->json('POST', '/api/login', ['phone' => '01234567899','password' => '123']); - + $response = $this->json('POST', '/api/login', ['phone' => '0123456789','password' => 'secret']); $response - ->assertStatus(201) - ->assertJson([ - 'created' => true, - ]); + ->assertStatus(200); } } diff --git a/tests/Feature/RegisterTest.php b/tests/Feature/RegisterTest.php index af24b74..80eef0a 100644 --- a/tests/Feature/RegisterTest.php +++ b/tests/Feature/RegisterTest.php @@ -13,14 +13,13 @@ class RegisterTest extends TestCase * * @return void */ - public function testRegister() + public function testSendVerification() { - $response = $this->json('POST', '/api/register', ['name' => 'Sally']); - + $response = $this->json('POST', '/api/send-verification', ['phone' => '0123456789']); $response - ->assertStatus(201) + ->assertStatus(200) ->assertJson([ - 'created' => true, + 'success' => true, ]); } } From 3381ce1bd8a7144eb7d573a1f51f7a411f44df77 Mon Sep 17 00:00:00 2001 From: jack Date: Tue, 22 May 2018 19:55:04 +0800 Subject: [PATCH 4/7] removed example test addded verify sms code test --- app/Http/Controllers/AuthController.php | 8 +++++++- tests/Feature/ExampleTest.php | 21 --------------------- tests/Feature/RegisterTest.php | 11 +++++++++++ 3 files changed, 18 insertions(+), 22 deletions(-) delete mode 100644 tests/Feature/ExampleTest.php diff --git a/app/Http/Controllers/AuthController.php b/app/Http/Controllers/AuthController.php index a682106..a56edac 100644 --- a/app/Http/Controllers/AuthController.php +++ b/app/Http/Controllers/AuthController.php @@ -40,8 +40,14 @@ class AuthController extends Controller ]); $user->save(); - // create token if not exist, update if exist + // create token if not exist, update if exist $token = mt_rand(0000,9999); + + // for testing + if($request->phone == '0123456789'){ + $token = "1234"; + } + $user_verification = $user->phoneVerification()->firstOrNew([ 'user_id' => $user->id, ]); diff --git a/tests/Feature/ExampleTest.php b/tests/Feature/ExampleTest.php deleted file mode 100644 index f31e495..0000000 --- a/tests/Feature/ExampleTest.php +++ /dev/null @@ -1,21 +0,0 @@ -get('/'); - - $response->assertStatus(200); - } -} diff --git a/tests/Feature/RegisterTest.php b/tests/Feature/RegisterTest.php index 80eef0a..6c35a0e 100644 --- a/tests/Feature/RegisterTest.php +++ b/tests/Feature/RegisterTest.php @@ -22,4 +22,15 @@ class RegisterTest extends TestCase 'success' => true, ]); } + + public function testVerify() + { + $response = $this->json('POST', '/api/verify', ['phone' => '0123456789', 'token' => '1234']); + $response + ->assertStatus(200) + ->assertJson([ + 'success' => true, + ]); + } + } From f333b68dff10e0652876dd0c71ffc4aeb20fa580 Mon Sep 17 00:00:00 2001 From: jack Date: Tue, 22 May 2018 20:26:45 +0800 Subject: [PATCH 5/7] fix conflict --- app/Http/Controllers/AuthController.php | 6 ------ 1 file changed, 6 deletions(-) diff --git a/app/Http/Controllers/AuthController.php b/app/Http/Controllers/AuthController.php index ac74dcb..4b6ec78 100644 --- a/app/Http/Controllers/AuthController.php +++ b/app/Http/Controllers/AuthController.php @@ -125,13 +125,7 @@ class AuthController extends Controller if($validator->fails()) { return response()->json(['success'=> false, 'error'=> $validator->messages()]); } -<<<<<<< HEAD -======= - - - ->>>>>>> d8a439fa425cb71cda9f9fe4f2864e4394138198 $name = $request->name; $password = $request->password; $role = $request->role; From 587234f205e7e8fecbb532ffbe8c1275a563807a Mon Sep 17 00:00:00 2001 From: jack Date: Wed, 23 May 2018 11:15:38 +0800 Subject: [PATCH 6/7] added auto seed on dockerup updated jwt kernel from getuserfromtoken to autenticate updated verify response from data.token to token updated user factory changed routes for update user profile to from PUT to PATCH added register with actingAs user added test update freightforwarder user added test update importer user --- app/Http/Controllers/AuthController.php | 6 +++- app/Http/Kernel.php | 4 +-- database/factories/UserFactory.php | 4 +-- routes/api.php | 2 +- start.sh | 2 +- tests/Feature/RegisterTest.php | 48 +++++++++++++++++++------ tests/TestCase.php | 20 +++++++++++ 7 files changed, 69 insertions(+), 17 deletions(-) diff --git a/app/Http/Controllers/AuthController.php b/app/Http/Controllers/AuthController.php index 4b6ec78..c1c126e 100644 --- a/app/Http/Controllers/AuthController.php +++ b/app/Http/Controllers/AuthController.php @@ -99,8 +99,12 @@ class AuthController extends Controller if (!$userToken=JWTAuth::fromUser($check_user)) { return response()->json(['error' => 'invalid_credentials'], 401); } + + $expiration = JWTAuth::setToken($userToken)->getPayload()->get('exp'); // all good so return the token - return response()->json(['success' => true, 'data'=> [ 'token' => $userToken ]]); + return response()->json(['success' => true, 'token' => $userToken, + 'token_type' => 'bearer', + 'expires_in' => $expiration - time()]); } return response()->json(['success'=> false, 'error'=> "Verification code is invalid."]); } diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php index fc5184c..d1dcc25 100644 --- a/app/Http/Kernel.php +++ b/app/Http/Kernel.php @@ -59,7 +59,7 @@ class Kernel extends HttpKernel 'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class, 'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class, 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, - 'jwt.auth' => 'Tymon\JWTAuth\Middleware\GetUserFromToken', - 'jwt.refresh' => 'Tymon\JWTAuth\Middleware\RefreshToken', + 'jwt.auth' => \Tymon\JWTAuth\Http\Middleware\Authenticate::class, + 'jwt.refresh' => \Tymon\JWTAuth\Middleware\RefreshToken::class, ]; } diff --git a/database/factories/UserFactory.php b/database/factories/UserFactory.php index facf233..b00fc3b 100644 --- a/database/factories/UserFactory.php +++ b/database/factories/UserFactory.php @@ -15,9 +15,9 @@ use Faker\Generator as Faker; $factory->define(App\User::class, function (Faker $faker) { return [ - 'name' => $faker->name, - 'email' => $faker->unique()->safeEmail, + 'phone' => $faker->unique()->randomDigit, 'password' => '$2y$10$TKh8H1.PfQx37YgCzwiKb.KjNyWgaHb9cbcoQgdIVFlYg7B77UdFm', // secret 'remember_token' => str_random(10), + 'is_verified' => true ]; }); diff --git a/routes/api.php b/routes/api.php index 56f5ecc..705fcb7 100644 --- a/routes/api.php +++ b/routes/api.php @@ -28,7 +28,7 @@ Route::post('verify', 'AuthController@verifyUser'); Route::group(['middleware' => ['jwt.auth']], function() { Route::get('logout', 'AuthController@logout'); - Route::put('user', 'AuthController@updateUser'); + Route::patch('user', 'AuthController@updateUser'); Route::get('test', function(Request $request){ return response()->json(['user'=> $request->user()]); }); diff --git a/start.sh b/start.sh index f7da8d5..b41ad39 100644 --- a/start.sh +++ b/start.sh @@ -1,3 +1,3 @@ #!/bin/bash while ! nc -z db 3306; do sleep 3; done -php artisan serve --host=0.0.0.0 --port=8000 \ No newline at end of file +php artisan db:seed && php artisan serve --host=0.0.0.0 --port=8000 \ No newline at end of file diff --git a/tests/Feature/RegisterTest.php b/tests/Feature/RegisterTest.php index 6c35a0e..f0e600b 100644 --- a/tests/Feature/RegisterTest.php +++ b/tests/Feature/RegisterTest.php @@ -4,16 +4,20 @@ namespace Tests\Feature; use Tests\TestCase; use Illuminate\Foundation\Testing\WithFaker; -use Illuminate\Foundation\Testing\RefreshDatabase; +use App\User; +use Artisan; class RegisterTest extends TestCase { - /** - * A basic test example. - * - * @return void - */ - public function testSendVerification() + protected $user; + public function setUp() + { + parent::setUp(); + Artisan::call('db:seed'); + $this->user = factory(User::class)->create(); + } + + public function testVerification() { $response = $this->json('POST', '/api/send-verification', ['phone' => '0123456789']); $response @@ -21,16 +25,40 @@ class RegisterTest extends TestCase ->assertJson([ 'success' => true, ]); - } - public function testVerify() - { $response = $this->json('POST', '/api/verify', ['phone' => '0123456789', 'token' => '1234']); $response ->assertStatus(200) ->assertJson([ 'success' => true, ]); + + + $token = $response->json()['token']; } + public function testUpdateFFUser() + { + $this->actingAs($this->user) + ->patchJson('/api/user', [ + 'freightforwarder', + 'password' => 'updated', + 'password_confirmation' => 'updated', + ]) + + ->assertSuccessful(); + } + + public function testUpdateImporterUser() + { + $this->actingAs($this->user) + ->patchJson('/api/user', [ + 'importer', + 'password' => 'updated', + 'password_confirmation' => 'updated', + ]) + ->assertSuccessful(); + } + + } diff --git a/tests/TestCase.php b/tests/TestCase.php index 2932d4a..77fd64c 100644 --- a/tests/TestCase.php +++ b/tests/TestCase.php @@ -3,8 +3,28 @@ namespace Tests; use Illuminate\Foundation\Testing\TestCase as BaseTestCase; +use Illuminate\Foundation\Testing\RefreshDatabase; +use Illuminate\Contracts\Auth\Authenticatable as UserContract; +use App\User; abstract class TestCase extends BaseTestCase { + use RefreshDatabase; use CreatesApplication; + protected $user; + + public function actingAs(UserContract $user, $driver = null) + { + $this->user = $user; + return $this; + } + + public function call($method, $uri, $parameters = [], $cookies = [], $files = [], $server = [], $content = null) + { + if ($this->user) { + $server['HTTP_AUTHORIZATION'] = 'Bearer ' . \JWTAuth::fromUser($this->user); + } + $server['HTTP_ACCEPT'] = 'application/json'; + return parent::call($method, $uri, $parameters, $cookies, $files, $server, $content); + } } From 45dea363ec6d0f28a800ba8ac28e4612baff7a06 Mon Sep 17 00:00:00 2001 From: jack Date: Wed, 23 May 2018 11:21:16 +0800 Subject: [PATCH 7/7] changed route and controller name from verifyUser to verifyPhone --- app/Http/Controllers/AuthController.php | 2 +- routes/api.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/Http/Controllers/AuthController.php b/app/Http/Controllers/AuthController.php index c1c126e..48d0639 100644 --- a/app/Http/Controllers/AuthController.php +++ b/app/Http/Controllers/AuthController.php @@ -68,7 +68,7 @@ class AuthController extends Controller * @param Request $request * @return \Illuminate\Http\JsonResponse */ - public function verifyUser(Request $request) + public function verifyPhone(Request $request) { $credentials = $request->only('phone', 'token'); diff --git a/routes/api.php b/routes/api.php index 705fcb7..3dced12 100644 --- a/routes/api.php +++ b/routes/api.php @@ -24,7 +24,7 @@ Route::post('password/reset', 'AuthController@reset'); Route::post('send-verification', 'AuthController@sendVerification'); -Route::post('verify', 'AuthController@verifyUser'); +Route::post('verify-phone', 'AuthController@verifyPhone'); Route::group(['middleware' => ['jwt.auth']], function() { Route::get('logout', 'AuthController@logout');