Merge branch 'master' of gitlab.com:CIEFWorldwideSdnBhd/izyim-api into Aqeeb/company

# Conflicts:
#	routes/web.php
This commit is contained in:
jack
2018-05-23 12:16:36 +08:00
11 changed files with 127 additions and 60 deletions
+16 -9
View File
@@ -41,16 +41,21 @@ class AuthController extends Controller
$user->save();
// create token if not exist, update if exist
$token = mt_rand(0000,9999);
$token = mt_rand(0000,9999);
// for testing
if($request->phone == '0123456789'){
$token = "1234";
}
$user_verification = $user->phoneVerification()->firstOrNew([
'user_id' => $user->id,
]);
$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.' ]);
@@ -63,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');
@@ -94,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."]);
}
@@ -120,9 +129,7 @@ class AuthController extends Controller
if($validator->fails()) {
return response()->json(['success'=> false, 'error'=> $validator->messages()]);
}
$name = $request->name;
$password = $request->password;
$role = $request->role;
+2 -2
View File
@@ -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,
];
}
+2 -2
View File
@@ -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
];
});
+27 -3
View File
@@ -6,10 +6,9 @@
<meta name="viewport" content="width=device-width, initial-scale=1">
<link href="https://fonts.googleapis.com/css?family=Nunito:300,400,600,700,900" rel="stylesheet">
<link rel="stylesheet" type="text/css" href="css/font-awesome.min.css">
<link rel="stylesheet" type="text/css" href="css/global.style.css">
<link rel="stylesheet" type="text/css" href="css/global.style.css">
</head>
<body>
<div class="wrapper">
<div class="wrapper-inline">
@@ -21,12 +20,13 @@
<main>
<section class="container">
<form>
@csrf
<div class="form-row-group with-icons">
<div class="form-row no-padding">
<div style="position:absolute; top: 10px;">
<a class="fa fa-user" style="color: black"></a>
</div>
<input id="mobile" type="text" class="form-element" placeholder="Mobile.No" required />
<input id="phone" type="text" class="form-element" placeholder="Mobile.No" required />
</div>
<div class="form-row no-padding">
<div style="position:absolute; top: 10px;">
@@ -45,6 +45,7 @@
<div class="form-divider"></div>
<div class="form-row">
<a href="#" id="login" class="button block green" type="submit">Sign In</a>
<a href="home.html" class="button block green" id="signin">Sign In</a>
</div>
@@ -59,5 +60,28 @@
</div>
</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
$('#login').click(function() {
$.ajax({
type: "POST",
url: "api/login",
data: {
phone: $('#phone').val(),
password: $('#password').val()
},
success: function(data) {
localStorage.token = data.data.token;
document.location.href="home.html";
alert('Got a token from the server! Token: ' + data.data.token);
},
error: function() {
alert("Login Failed");}
});
})
})
</script>
</body>
</html>
+2 -2
View File
@@ -24,11 +24,11 @@ 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');
Route::put('user', 'AuthController@updateUser');
Route::patch('user', 'AuthController@updateUser');
Route::get('test', function(Request $request){
return response()->json(['user'=> $request->user()]);
});
+2 -1
View File
@@ -15,7 +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');
Route::get('/company', 'CompanyController@index');
+1 -1
View File
@@ -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
php artisan db:seed && php artisan serve --host=0.0.0.0 --port=8000
-21
View File
@@ -1,21 +0,0 @@
<?php
namespace Tests\Feature;
use Tests\TestCase;
use Illuminate\Foundation\Testing\RefreshDatabase;
class ExampleTest extends TestCase
{
/**
* A basic test example.
*
* @return void
*/
public function testBasicTest()
{
$response = $this->get('/');
$response->assertStatus(200);
}
}
+2 -4
View File
@@ -15,10 +15,8 @@ class LoginTest extends TestCase
*/
public function testExample()
{
$response = $this->json('POST', '/api/login', ['phone' => '01234567890','password' => 'secret']);
$response = $this->json('POST', '/api/login', ['phone' => '0123456789','password' => 'secret']);
$response
->assertStatus(200)
->assertJsonStructure(['data']);
->assertStatus(200);
}
}
+53 -15
View File
@@ -4,23 +4,61 @@ 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 testRegister()
// {
// $response = $this->json('POST', '/api/register', ['name' => 'Sally']);
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
->assertStatus(200)
->assertJson([
'success' => true,
]);
$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();
}
// $response
// ->assertStatus(201)
// ->assertJson([
// 'created' => true,
// ]);
// }
}
+20
View File
@@ -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);
}
}