mirror of
https://gitlab.com/CIEFWorldwideSdnBhd/izyim-api.git
synced 2026-08-19 12:34:06 +00:00
207 lines
7.4 KiB
PHP
207 lines
7.4 KiB
PHP
<?php
|
|
namespace App\Http\Controllers;
|
|
use Illuminate\Http\Request;
|
|
use App\User;
|
|
use App\UserVerification;
|
|
use JWTAuth;
|
|
use Aloha\Twilio\Twilio;
|
|
use Tymon\JWTAuth\Exceptions\JWTException;
|
|
use Validator, DB, Hash, Mail, Illuminate\Support\Facades\Password;
|
|
|
|
class AuthController extends Controller
|
|
{
|
|
/**
|
|
* API Send verification code
|
|
*
|
|
* @param Request $request
|
|
* @return \Illuminate\Http\JsonResponse
|
|
*/
|
|
public function sendVerification(Request $request){
|
|
$credentials = $request->only('phone');
|
|
$rules = [
|
|
'phone' => 'required|digits:10|unique:users'
|
|
];
|
|
$validator = Validator::make($credentials, $rules);
|
|
|
|
// create user if not exist
|
|
$user = User::firstOrNew([
|
|
'phone' => $request->phone
|
|
]);
|
|
$user->save();
|
|
|
|
// create token if not exist, update if exist
|
|
$token = mt_rand(0000,9999);
|
|
$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;
|
|
//$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.' ]);
|
|
|
|
}
|
|
|
|
/**
|
|
* API Verify User
|
|
*
|
|
* @param Request $request
|
|
* @return \Illuminate\Http\JsonResponse
|
|
*/
|
|
public function verifyUser(Request $request)
|
|
{
|
|
$credentials = $request->only('phone', 'token');
|
|
|
|
// check if user already verified
|
|
$check_user = User::where('phone', $request->phone)->first();
|
|
if(!is_null($check_user)){
|
|
if($check_user->is_verified == 1){
|
|
return response()->json([
|
|
'success'=> true,
|
|
'message'=> 'Account already verified.'
|
|
]);
|
|
}
|
|
}
|
|
else{
|
|
return response()->json([
|
|
'success'=> false,
|
|
'message'=> 'Please contact support.'
|
|
]);
|
|
}
|
|
|
|
// check and verify valid token
|
|
$check_token = $check_user->phoneVerification()->where('token', $request->token)->first();
|
|
if(!is_null($check_token)){
|
|
$check_user->is_verified = 1;
|
|
$check_user->save();
|
|
$check_token->delete();
|
|
|
|
if (!$userToken=JWTAuth::fromUser($check_user)) {
|
|
return response()->json(['error' => 'invalid_credentials'], 401);
|
|
}
|
|
// all good so return the token
|
|
return response()->json(['success' => true, 'data'=> [ 'token' => $userToken ]]);
|
|
}
|
|
return response()->json(['success'=> false, 'error'=> "Verification code is invalid."]);
|
|
}
|
|
|
|
/**
|
|
* API Register
|
|
*
|
|
* @param Request $request
|
|
* @return \Illuminate\Http\JsonResponse
|
|
*/
|
|
public function register(Request $request)
|
|
{
|
|
$credentials = $request->only('role', 'name', 'password', 'confirm_password');
|
|
|
|
$rules = [
|
|
'name' => 'required|max:255',
|
|
'phone' => 'required|digits:10|unique:users',
|
|
'password' => 'required|confirmed|min:6'
|
|
];
|
|
$validator = Validator::make($credentials, $rules);
|
|
if($validator->fails()) {
|
|
return response()->json(['success'=> false, 'error'=> $validator->messages()]);
|
|
}
|
|
$name = $request->name;
|
|
$phone = "+6" . $request->phone;
|
|
$password = $request->password;
|
|
|
|
$user = User::create(['name' => $name, 'phone' => $phone, 'password' => Hash::make($password)]);
|
|
$verification_code = rand (0000,9999); //Generate verification code
|
|
DB::table('user_verifications')->insert(['user_id'=>$user->id,'token'=>$verification_code]);
|
|
|
|
// send SMS
|
|
$message = "IZYIM verification code : 12332";
|
|
$twilio = new Twilio(env('TWILIO_ACC'), env('TWILIO_TOKEN'), env('TWILIO_NUMBER'));
|
|
$twilio->message($phone, $message);
|
|
|
|
return response()->json(['success'=> true, 'message'=> 'A verification code has been send to your mobile number.']);
|
|
}
|
|
|
|
|
|
/**
|
|
* API Login, on success return JWT Auth token
|
|
*
|
|
* @param Request $request
|
|
* @return \Illuminate\Http\JsonResponse
|
|
*/
|
|
public function login(Request $request)
|
|
{
|
|
$credentials = $request->only('phone', 'password');
|
|
|
|
$rules = [
|
|
'phone' => 'required|digits:10|unique:users',
|
|
'password' => 'required',
|
|
];
|
|
$validator = Validator::make($credentials, $rules);
|
|
if($validator->fails()) {
|
|
return response()->json(['success'=> false, 'error'=> $validator->messages()]);
|
|
}
|
|
|
|
$credentials['is_verified'] = 1;
|
|
|
|
try {
|
|
// attempt to verify the credentials and create a token for the user
|
|
if (! $token = JWTAuth::attempt($credentials)) {
|
|
return response()->json(['success' => false, 'error' => 'We cant find an account with this credentials. Please make sure you entered the right information and you have verified your email address.'], 401);
|
|
}
|
|
} catch (JWTException $e) {
|
|
// something went wrong whilst attempting to encode the token
|
|
return response()->json(['success' => false, 'error' => 'Failed to login, please try again.'], 500);
|
|
}
|
|
// all good so return the token
|
|
return response()->json(['success' => true, 'data'=> [ 'token' => $token ]]);
|
|
}
|
|
|
|
/**
|
|
* Log out
|
|
* Invalidate the token, so user cannot use it anymore
|
|
* They have to relogin to get a new token
|
|
*
|
|
* @param Request $request
|
|
*/
|
|
public function logout(Request $request) {
|
|
$this->validate($request, ['token' => 'required']);
|
|
|
|
try {
|
|
JWTAuth::invalidate($request->input('token'));
|
|
return response()->json(['success' => true, 'message'=> "You have successfully logged out."]);
|
|
} catch (JWTException $e) {
|
|
// something went wrong whilst attempting to encode the token
|
|
return response()->json(['success' => false, 'error' => 'Failed to logout, please try again.'], 500);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* API Recover Password
|
|
*
|
|
* @param Request $request
|
|
* @return \Illuminate\Http\JsonResponse
|
|
*/
|
|
public function recover(Request $request)
|
|
{
|
|
$user = User::where('email', $request->email)->first();
|
|
if (!$user) {
|
|
$error_message = "Your email address was not found.";
|
|
return response()->json(['success' => false, 'error' => ['email'=> $error_message]], 401);
|
|
}
|
|
try {
|
|
Password::sendResetLink($request->only('email'), function (Message $message) {
|
|
$message->subject('Your Password Reset Link');
|
|
});
|
|
} catch (\Exception $e) {
|
|
//Return with error
|
|
$error_message = $e->getMessage();
|
|
return response()->json(['success' => false, 'error' => $error_message], 401);
|
|
}
|
|
return response()->json([
|
|
'success' => true, 'data'=> ['message'=> 'A reset email has been sent! Please check your email.']
|
|
]);
|
|
}
|
|
} |