mirror of
https://gitlab.com/CIEFWorldwideSdnBhd/izyim-api.git
synced 2026-08-19 04:24:01 +00:00
Merge branch 'master' of gitlab.com:CIEFWorldwideSdnBhd/izyim-api into Aqeeb/company
# Conflicts: # routes/web.php
This commit is contained in:
@@ -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
@@ -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,
|
||||
];
|
||||
}
|
||||
|
||||
@@ -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
@@ -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
@@ -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
@@ -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,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
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
// ]);
|
||||
// }
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user