user = $user;
$this->format = $httpStatusCode;
$this->module = "User";
$this->model = "User";
$this->admin = $admin;
$this->password_logs = $password_logs;
$this->loyalty_card = $loyalty_card;
$this->personal_details = $personal_details;
$this->otp_logs = $otp_logs;
$this->admin_logs = $admin_logs;
$this->lcard_logs = $lcard_logs;
$this->system_preferences = $system_preferences;
$this->otp_attempts = $otp_attempts;
$this->mobile_usage = $mobile_usage;
$this->mpin_codes = $mpin_codes;
}
/**
* CMS api
*
* @return \Illuminate\Http\Response
*/
public function cms_usernameLogin(Request $request)
{
$admin = $this->admin->getByField([
'username' => $request->get('username'),
'is_active' => 1,
]);
if($admin->count())
{
if($admin[0]['status'] == 1)
{
$data['inactive'] = true;
return $this->format->unprocessableEntity("Username does not exist.",$data);
}
elseif($admin[0]['is_active'] == 1)
{
// note : password checking must be in the password form
// $password_log = $this->password_logs->getLastLog($admin[0]['admin_id']);
// if($password_log)
// {
// $hasExceeded = StringHelper::check_time_exceeded($password_log['created_dt'], '+15 minutes');
// if($password_log['generated_password'] != null && $hasExceeded == false)
// {
// $data['expired'] = true;
// return $this->format->unprocessableEntity("Your password is expired",$data);
// }
// }
$data['is_verified'] = true;
$data['role'] = $admin[0]['role'];
return $this->format->success("Success",$data);
}
}
$data['is_verified'] = false;
return $this->format->unprocessableEntity("Username does not exist.",$data);
}
public function cms_login()
{
if(Auth::attempt(['username' => request('username'), 'password' => request('password')]))
{
$user = Auth::user();
$admin = $this->admin->getByField([
'username' => request('username'),
'is_active' => 1,
]);
if($admin[0]['is_passwordChanged'] == 1)
{
$this->admin_logs->log($admin[0]['admin_id'],self::MODULE,'LOGIN');
// $success['token'] = $user->createToken('Admin')->accessToken;
$data = [
'grant_type' => 'password',
'client_id' => env("PASSPORT_ADMIN_CLIENT_ID", 2),
'client_secret' => env("PASSPORT_ADMIN_CLIENT_SECRET", "test"),
'username' => $admin[0]['email'],
'password' => request('password'),
'scope' => ''
];
$request = Request::create('/oauth/token', 'POST', $data);
$result = app()->handle($request)->getContent();
$result = json_decode($result);
$success['token'] = $result->access_token;
// $success['refresh_token'] = $result->refresh_token;
$message = 'Success';
}
else
{
$password_log = $this->password_logs->getLastLog($admin[0]['admin_id']);
if($password_log)
{
$hasExceeded = StringHelper::check_time_exceeded($password_log['created_dt'], '+15 minutes');
if($password_log['generated_password'] != null && $hasExceeded == false)
{
$data['expired'] = true;
return $this->format->unprocessableEntity("Your password is expired",$data);
}
}
$success['prompt_password'] = 1;
$success['admin_uuid'] = $admin[0]['admin_uuid'];
$message = 'User must change password';
}
return $this->format->success($message,$success);
}
else{
return $this->format->unauthorized("Incorrect Password");
}
}
public function cms_changePassword(UserFormValidation $request)
{
$admin = $this->admin->getByField(['admin_uuid' => $request->get('admin_uuid')]);
//added this to check if the admin uuid is correct and to avoid Undefined offset: 0
if ($admin->count() == 0){
return $this->format->unauthorized();
}
// Shall not be the same with the previous 2 passwords.
$logs = $this->password_logs->getByField([
'admin_id' =>$admin[0]['admin_id'],
'is_generated' => 0
]);
$good_password = true;
if(count($logs) > 0)
{
$ctr = 1;
foreach ($logs as $key => $value) {
if($ctr <= 2)
{
if($value['password'] == md5($request->get('password')))
$good_password = false;
}
$ctr++;
}
}
if($good_password)
{
$success_admin = $this->admin->changePassword($request);
$success_user = $this->user->changePassword($request,$admin[0]['username']);
$this->password_logs->store($admin[0]['admin_id'],$request->get('password'),$admin[0]['admin_id']);
if($success_user && $success_admin)
{
$this->admin_logs->log($admin[0]['admin_id'],self::MODULE,'UPDATE','Changed Password');
if(Auth::attempt(['username' => $admin[0]['username'], 'password' => $request->get('password')]))
{
$auth = Auth::user();
// $success['token'] = $auth->createToken('Admin')->accessToken;
$data = [
'grant_type' => 'password',
'client_id' => env("PASSPORT_ADMIN_CLIENT_ID", 2),
'client_secret' => env("PASSPORT_ADMIN_CLIENT_SECRET", "test"),
'username' => $admin[0]['email'],
'password' => $request->get('password'),
'scope' => ''
];
$auth_request = Request::create('/oauth/token', 'POST', $data);
$result = app()->handle($auth_request)->getContent();
$result = json_decode($result);
$success['token'] = $result->access_token;
// $success['refresh_token'] = $result->refresh_token;
$this->admin_logs->log($admin[0]['admin_id'],self::MODULE,'LOGIN');
return $this->format->success("SUCCESS",$success);
}
else
{
return $this->format->unauthorized();
}
}
}
else
{
$data['password'] = 'Shall not be the same with the previous 2 passwords';
return $this->format->unprocessableEntity("Shall not be the same with the previous 2 passwords",$data);
}
}
public function logout_cms()
{
if (Auth::check()) {
// Auth::user()->AauthAcessToken()->delete();
Auth::user()->token()->revoke();
return $this->format->success("Logout Success");
}
}
/**
* Mobile api
*
* @return \Illuminate\Http\Response
*/
public function mobile_loginCardNumber(LoginCardNumberFormValidation $request)
{
$cardnumber = $request->get('card_number');
$lcard_uuid = "";
$cyware = new CywareLibrary();
$cyware->setCardNumber($cardnumber);
$cyware->state_validate();
if ($cyware->response['status_code'] == "200" && $cyware->response['data'] != null)
{
// check if locked
$member_det = $this->loyalty_card->getByField([
'card_number' => $cardnumber,
'is_active' => 1
]);
if(count($member_det))
{
if($member_det[0]['is_locked'] == 1)
{
if(!StringHelper::check_time_exceeded($member_det[0]['lock_dt'],'+24 hours'))
{
$this->loyalty_card->activate_locked($member_det[0]['lcard_uuid']);
$this->lcard_logs->log($member_det[0]['lcard_id'],'LOGIN','UPDATE','System automatically changes lock status to activated');
}
else
{
$customer_service_email = $this->system_preferences->getByField('name','contact_email_address_mobile');
$customer_service_number = $this->system_preferences->getByField('name','contact_number_mobile');
return $this->format->mobile_error('The account you are trying to access is locked. Please contact Customer Service for assistance, call or email customer service.',[
'code' => 1,
'email' => $customer_service_email[0]['value'],
'number' => $customer_service_number[0]['value'],
]);
}
}
$this->loyalty_card->update_deviceuuid($member_det[0]['lcard_id'],$request->get('deviceUUID'));
$lcard_uuid = $member_det[0]['lcard_uuid'];
// todo remove this comment on live
// if($member_det[0]['deviceUUID'] != "" && $member_det[0]['deviceUUID'] != $request->get('deviceUUID'))
// {
// return $this->format->mobile_error('Your account is already logged in a different device',['code' => 3]);
// }
}else{
$cyware = new CywareLibrary();
$cyware->setCardNumber($cardnumber);
$cyware->state_validate();
if ($cyware->response['status_code'] == "200" && $cyware->response['data'] != null)
{
$pd_id = $this->personal_details->store($cyware->response['data']);
$lcard_store = $this->loyalty_card->store($pd_id, $cyware->response['data'], $request->get('deviceUUID'),1);
$this->user->store_member($cyware->response['data']);
$this->mobile_usage->add_inactive();
$lcard_uuid = $lcard_store['lcard_uuid'];
$this->lcard_logs->log($lcard_store['lcard_id'],'LOGIN','STORE','Member added a verified account to database');
}else{
return $this->format->mobile_error($cyware->response['message'],['code' => 2]);
}
}
return $this->format->mobile_success('Success',[
'is_valid' => 1,
'card_number' => $cardnumber,
'user_id' => $lcard_uuid,
'number' => $cyware->response['data']->mobile
]);
}else{
return $this->format->mobile_error($cyware->response['message'],['code' => 2]);
}
}
public function mobile_loginCardNumberOld(LoginMobileNumberFormValidation $request)
{
$member_det = $this->loyalty_card->getByField([
'mobile' => '63'.$request->get('mobile_number'),
'is_active' => 1
]);
$cardnumber = null;
if($member_det != null && count($member_det) > 0 && $member_det[0]['card_number'] != null){
$cardnumber = $member_det[0]['card_number'];
}else{
return $this->format->mobile_error("Mobile number is not yet registered",['code' => 2]);
}
$cyware = new CywareLibrary();
$cyware->setCardNumber($cardnumber);
$cyware->state_validate();
if ($cyware->response['status_code'] == "200" && $cyware->response['data'] != null)
{
// check if locked
$member_det = $this->loyalty_card->getByField([
'card_number' => $cardnumber,
'is_active' => 1
]);
if(count($member_det))
{
if($member_det[0]['is_locked'] == 1)
{
if(!StringHelper::check_time_exceeded($member_det[0]['lock_dt'],'+24 hours'))
{
$this->loyalty_card->activate_locked($member_det[0]['lcard_uuid']);
$this->lcard_logs->log($member_det[0]['lcard_id'],'LOGIN','UPDATE','System automatically changes lock status to activated');
}
else
{
$customer_service_email = $this->system_preferences->getByField('name','contact_email_address_mobile');
$customer_service_number = $this->system_preferences->getByField('name','contact_number_mobile');
return $this->format->mobile_error('The account you are trying to access is locked. Please contact Customer Service for assistance, call or email customer service.',[
'code' => 1,
'email' => $customer_service_email[0]['value'],
'number' => $customer_service_number[0]['value'],
]);
}
}
// todo remove this comment on live
// if($member_det[0]['deviceUUID'] != "" && $member_det[0]['deviceUUID'] != $request->get('deviceUUID'))
// {
// return $this->format->mobile_error('Your account is already logged in a different device',['code' => 3]);
// }
}
return $this->format->mobile_success('Success',[
'is_valid' => 1,
'card_number' => $cardnumber
]);
}else{
return $this->format->mobile_error($cyware->response['message'],['code' => 2]);
}
}
public function mobile_loginMobileNumber(LoginMobileNumberFormValidation $request)
{
$cyware = new CywareLibrary();
$cyware->setMobile('63'.$request->get('mobile_number'));
$cyware->state_mobilevalidate();
$lcard_uuid = "";
if ($cyware->response['status_code'] == "200" && $cyware->response['data'] != null)
{
//get card number details
$dataResult = $cyware->response['data'];
$cardnumber = null;
if(is_array($dataResult)){
//get latest card
foreach ($dataResult as $key => $part) {
$sort[$key] = strtotime($part->app_date.$part->app_time);
}
array_multisort($sort, SORT_DESC, $dataResult);
$cardnumber = $dataResult[0]->card_number;
}else
$cardnumber = $dataResult->card_number;
// check if locked
$member_det = $this->loyalty_card->getByField([
'card_number' => $cardnumber,
'is_active' => 1
]);
if(count($member_det))
{
if($member_det[0]['is_locked'] == 1)
{
if(!StringHelper::check_time_exceeded($member_det[0]['lock_dt'],'+24 hours'))
{
$this->loyalty_card->activate_locked($member_det[0]['lcard_uuid']);
$this->lcard_logs->log($member_det[0]['lcard_id'],'LOGIN','UPDATE','System automatically changes lock status to activated');
}
else
{
$customer_service_email = $this->system_preferences->getByField('name','contact_email_address_mobile');
$customer_service_number = $this->system_preferences->getByField('name','contact_number_mobile');
return $this->format->mobile_error('The account you are trying to access is locked. Please contact Customer Service for assistance, call or email customer service.',[
'code' => 1,
'email' => $customer_service_email[0]['value'],
'number' => $customer_service_number[0]['value'],
]);
}
}
// todo remove this comment on live
// if($member_det[0]['deviceUUID'] != "" && $member_det[0]['deviceUUID'] != $request->get('deviceUUID'))
// {
// return $this->format->mobile_error('Your account is already logged in a different device',['code' => 3]);
// }
$lcard_uuid = $member_det[0]['lcard_uuid'];
}
else{
$cyware = new CywareLibrary();
$cyware->setCardNumber($cardnumber);
$cyware->state_validate();
if ($cyware->response['status_code'] == "200" && $cyware->response['data'] != null)
{
$pd_id = $this->personal_details->store($cyware->response['data']);
$lcard_store = $this->loyalty_card->store($pd_id, $cyware->response['data'], $request->get('deviceUUID'),1);
$this->user->store_member($cyware->response['data']);
$this->mobile_usage->add_inactive();
$lcard_uuid = $lcard_store['lcard_uuid'];
$this->lcard_logs->log($lcard_store['lcard_id'],'LOGIN','STORE','Member added a verified account to database');
}else{
return $this->format->mobile_error($cyware->response['message'],['code' => 2]);
}
}
return $this->format->mobile_success('Success',[
'is_valid' => 1,
'card_number' => $cardnumber,
'user_id' => $lcard_uuid
]);
}else{
return $this->format->mobile_error($cyware->response['message'],['code' => 2]);
}
}
public function mobile_loginCardNumber_enroll(LoginCardNumberFormValidation $request)
{
// // Number Verification Code
// $loyalty_card = $this->loyalty_card->getByField([
// 'mobile' => $request->get('mobile'),
// 'is_active' => 1,
// ]);
$cyware = new CywareLibrary();
$cyware->setCardNumber($request->get('card_number'));
$cyware->state_entry();
if ($cyware->response['status_code'] == "200" && $cyware->response['message'] == 'Pin is required')
{
$cyware->setCardNumber($request->get('card_number'));
$cyware->state_validate();
if ($cyware->response['status_code'] == "200" && $cyware->response['message'] == 'No Records Found')
{
return $this->format->mobile_success('Success',[
'is_valid' => 1
]);
}
else
{
$message = $cyware->response['message'];
$code = 2;
if(isset($cyware->response['message']) && $cyware->response['message'] == "Success")
{
// check if locked
$member_det = $this->loyalty_card->getByField([
'card_number' => $request->get('card_number'),
'is_active' => 1
]);
if(count($member_det))
{
if($member_det[0]['is_locked'] == 1)
{
if(!StringHelper::check_time_exceeded($member_det[0]['lock_dt'],'+24 hours'))
{
$this->loyalty_card->activate_locked($member_det[0]['lcard_uuid']);
$this->lcard_logs->log($member_det[0]['lcard_id'],'LOGIN','UPDATE','System automatically changes lock status to activated');
}
else
{
$customer_service_email = $this->system_preferences->getByField('name','contact_email_address_mobile');
$customer_service_number = $this->system_preferences->getByField('name','contact_number_mobile');
return $this->format->mobile_error('The account you are trying to access is locked. Please contact Customer Service for assistance, call or email customer service.',[
'code' => 1,
'email' => $customer_service_email[0]['value'],
'number' => $customer_service_number[0]['value'],
]);
}
}
// todo remove this comment on live
// if($member_det[0]['deviceUUID'] != "" && $member_det[0]['deviceUUID'] != $request->get('deviceUUID'))
// {
// return $this->format->mobile_error('Your account is already logged in a different device',['code' => 3]);
// }
}
$message = 'Card Number is already registered. Do you want to proceed to login?';
$code = 4;
return $this->format->mobile_error($message,['code' => $code,'number' => $cyware->response['data']->mobile]);
}
return $this->format->mobile_error($message,['code' => $code]);
}
}
else
{
return $this->format->mobile_error($cyware->response['message'],['code' => 2]);
}
}
public function mobile_loginBirthdate(LoginBirthdateFormValidation $request)
{
$cyware = new CywareLibrary();
$cyware->setCardNumber($request->get('card_number'));
$cyware->state_validate();
if ($cyware->response['status_code'] == "200" && $cyware->response['data'] != null)
{
if(Carbon::parse($request->get('birthdate'))->age < 18)
{
return $this->format->mobile_error('You must be at least 18 years old to join the Loyalty Program');
}
elseif($cyware->response['data']->birthdate != $request->get('birthdate'))
{
return $this->format->mobile_error( 'Incorrect Birthdate');
}
else
{
$loyalty_card = $this->loyalty_card->getByField([
'card_number' => $request->get('card_number'),
'is_active' => 1
],'codeCardType');
if(count($loyalty_card))
{
$cyware->state_retrieve();
// update device uuid
$this->loyalty_card->update_deviceuuid($loyalty_card[0]['lcard_id'],$request->get('deviceUUID'));
$success = [
'mobile_number' => $loyalty_card[0]['mobile'],
// 'card_type' => $loyalty_card[0]['card_type']['code'],
// 'card_number' => $loyalty_card[0]['card_number'],
'lcard_uuid' => $loyalty_card[0]['lcard_uuid'],
'state_retrieve' => $cyware->response["data"]
];
$this->lcard_logs->log($loyalty_card[0]['lcard_id'],'LOGIN','LOGIN','Member logs in a verified account');
}
else
{
// add details to database
$pd_id = $this->personal_details->store($cyware->response['data']);
$lcard_store = $this->loyalty_card->store($pd_id, $cyware->response['data'], $request->get('deviceUUID'),1);
$this->user->store_member($cyware->response['data']);
$this->mobile_usage->add_inactive();
$success = [
'mobile_number' => $cyware->response['data']->mobile,
// 'card_type' => $cyware->response['data']->card_type_code,
// 'card_number' => $cyware->response['data']->card_number,
'lcard_uuid' => $lcard_store['lcard_uuid'],
];
$this->lcard_logs->log($lcard_store['lcard_id'],'LOGIN','STORE','Member added a verified account to database');
}
return $this->format->mobile_success('Success',$success);
}
}else{
return $this->format->mobile_error('Error',['card_number' => $cyware->response['message']]);
}
}
public function create_otp(Request $request)
{
$loyalty_card = $this->loyalty_card->getByField([
'lcard_uuid' => $request->get('lcard_uuid'),
'is_active' => 1
]);
if(count($loyalty_card))
{
// get if loyalty card is less than 30 seconds
// this is due to iOS' double request for OTP
$last_log = $this->otp_logs->getLastLog($loyalty_card[0]['lcard_id']);
if((isset($last_log->created_at) && strtotime($last_log->created_at.' +30 seconds') > strtotime(date('Y-m-d H:i:s'))) && $request->is_resend == 'true')
return $this->format->mobile_success('Success');
if($request->has('is_resend') && $request->is_resend != 'true')
{
// reset otp_attempts
$this->otp_attempts->delete($loyalty_card[0]['lcard_id']);
}
$transid = date('YmdHis').$loyalty_card[0]['lcard_id'];
$mobile = $request->has('mobile') ? '63'.$request->mobile : $loyalty_card[0]['mobile'];
if(env("M360_ENV", 'TEST') == 'LOCAL'){
$otp = StringHelper::random_num(4);
$content = 'Your Unioil Mobile Application OTP Code is '.$otp;
$data = [
'otp' => $otp,
'msisdn' => $mobile,
'content' => $content,
'rcvd_transid' => $transid,
'transid' => $transid // $m360->get_transid()
];
if($this->otp_logs->store($loyalty_card[0]['lcard_id'],$data))
{
$this->lcard_logs->log($loyalty_card[0]['lcard_id'],'OTP','GENERATE','Member requested to generate an OTP');
return $this->format->mobile_success('Success');
}
else
{
return $this->format->mobile_error('Something went wrong');
}
}
else{
$otp = StringHelper::random_num(4);
$content = 'Your Unioil Mobile Application OTP Code is '.$otp;
$m360 = new M360();
$m360->set_msisdn($mobile);
$m360->set_content($content);
$m360->set_rcvd_transid($transid);
$m360->send();
if($m360->success())
{
$data = [
'otp' => $otp,
'msisdn' => $mobile,
'content' => $content,
'rcvd_transid' => $transid,
'transid' => $m360->get_transid()
];
if($this->otp_logs->store($loyalty_card[0]['lcard_id'],$data))
{
$this->lcard_logs->log($loyalty_card[0]['lcard_id'],'OTP','GENERATE','Member requested to generate an OTP');
return $this->format->mobile_success('Success');
}
else
{
return $this->format->mobile_error('Something went wrong');
}
}
else
{
return $this->format->mobile_error($m360->get_response_name(),$m360->get_response_message());
}
}
}
else
{
return $this->format->mobile_error('User doesn\'t exist');
}
}
public function mobile_otp(Request $request){
if($request->has('mobile')){
$mobile = '63'.$request->mobile;
$loyalty_card = $this->loyalty_card->getByField([
'mobile' => $mobile,
'is_active' => 1,
]);
if(count($loyalty_card)>0){
return $this->format->mobile_error('Mobile number already used.');
}else{
$lastlog = $this->otp_logs->getLastLogByNumber($mobile);
if($lastlog != null){
$timeB = time();
$lastlog = strtotime($lastlog->created_at);
if($lastlog+30 > $timeB){
return $this->format->mobile_error("OTP too fast to request.");
}
}
if(env("M360_ENV", 'TEST') == 'LOCAL'){
$otp = StringHelper::random_num(4);
$content = 'Your Unioil Mobile Application OTP Code is '.$otp;
$transid = date('YmdHis')."validate";
$data = [
'otp' => $otp,
'msisdn' => $mobile,
'content' => $content,
'rcvd_transid' => $transid,
'transid' => $transid
];
if($this->otp_logs->store("validation",$data)){
$this->lcard_logs->log("validation",'OTP','GENERATE','Member requested to generate an OTP');
return $this->format->mobile_success('Success', [
'trans_id' => $transid
]);
}else{
return $this->format->mobile_error('Something went wrong');
}
}else{
$otp = StringHelper::random_num(4);
$content = 'Your Unioil Mobile Application OTP Code is '.$otp;
$transid = date('YmdHis')."validate";
$m360 = new M360();
$m360->set_msisdn($mobile);
$m360->set_content($content);
$m360->set_rcvd_transid($transid);
$m360->send();
if($m360->success()){
$data = [
'otp' => $otp,
'msisdn' => $mobile,
'content' => $content,
'rcvd_transid' => $transid,
'transid' => $m360->get_transid()
];
// return $this->format->mobile_success('Success');
if($this->otp_logs->store("validation",$data)){
$this->lcard_logs->log("validation",'OTP','GENERATE','Member requested to generate an OTP');
return $this->format->mobile_success('Success', [
'trans_id' => $transid
]);
}else{
return $this->format->mobile_error('Something went wrong');
}
}else{
return $this->format->mobile_error($m360->get_response_name(),$m360->get_response_message());
}
}
// return $this->format->mobile_success("Mobile number is valid.");
}
}else{
return $this->format->mobile_error("Mobile number is required");
}
}
public function mobile_updateMpin(MpinFormValidation $request){
//check if code exist
$loyalty_card = $this->loyalty_card->getByField([
'lcard_uuid' => $request->get('lcard_uuid'),
'is_active' => 1
]);
if(count($loyalty_card))
{
$cardNumber = $loyalty_card[0]['card_number'];
$cyware = new CywareLibrary();
$cyware->setCardNumber($cardNumber);
$cyware->state_validate();
if ($cyware->response['status_code'] == "200" && $cyware->response['data'] != null)
{
//check if mpin exist
$mpin = $this->mpin_codes->getMpin($cyware->response['data']->customer_number);
if($mpin){
//update
$data = [];
$data['mpin_code'] = $request->get('mpin');
$res = $this->mpin_codes->updateMpin($cyware->response['data']->customer_number,$data);
if($res){
return $this->format->mobile_success('Success', [
'mpin' => $request->get('mpin')
]);
}else{
return $this->format->mobile_error('Something went wrong.');
}
}else{
//store
$data = [];
$data['customer_number'] = $cyware->response['data']->customer_number;
$data['mpin_code'] = $request->get('mpin');
$res = $this->mpin_codes->store($data);
if($res){
return $this->format->mobile_success('Success', [
'mpin' => $request->get('mpin')
]);
}else{
return $this->format->mobile_error('Something went wrong.');
}
}
}else{
return $this->format->mobile_error($cyware->response['message'],['code' => 2]);
}
}else{
return $this->format->mobile_error('User doesn\'t exist');
}
}
public function mobile_getPin(Request $request){
$loyalty_card = $this->loyalty_card->getByField([
'lcard_uuid' => $request->get('lcard_uuid'),
'is_active' => 1
]);
if(count($loyalty_card))
{
$cardNumber = $loyalty_card[0]['card_number'];
$cyware = new CywareLibrary();
$cyware->setCardNumber($cardNumber);
$cyware->state_validate();
if ($cyware->response['status_code'] == "200" && $cyware->response['data'] != null)
{
$mpin = $this->mpin_codes->getMpin($cyware->response['data']->customer_number);
if($mpin){
return $this->format->mobile_success('Success', [
'mpin' => $mpin->mpin_code
]);
}else{
return $this->format->mobile_error('MPIN is not yet set by the user.');
}
}else{
return $this->format->mobile_error($cyware->response['message'],['code' => 2]);
}
}else{
return $this->format->mobile_error('User doesn\'t exist');
}
}
public function mobile_validate_otp(Request $request){
$otp_log = $this->otp_logs->getByField([
'rcvd_transid' => $request->trans_id
]);
if(count($otp_log)>0){
$_otp = $otp_log[0]->otp;
$_otp_id = $otp_log[0]->otplog_id;
$_otp_used = $otp_log[0]->used;
// return $this->format->mobile_success("test", $otp_log[0]->otp);
if($_otp_used == 0){
if($_otp == $request->otp){
if($this->otp_logs->setUsed($_otp_id)){
return $this->format->mobile_success('Success');
}else{
return $this->format->mobile_error("Something went wrong.");
}
}else{
return $this->format->mobile_error('Incorrect OTP. The OTP you have entered does not exist.',['code' => 2]);
}
}else{
return $this->format->mobile_error('The OTP you have entered has already used.');
}
}else{
return $this->format->mobile_error('Incorrect OTP. The OTP you have entered does not exist.',['code' => 2]);
}
}
public function validate_otp(Request $request)
{
// lock after 3 attempts
$numberOfAttempts = 0;
$attempts = $this->loyalty_card->numberOfOTPAttempts($request->get('lcard_uuid'));
if(!is_null($attempts))
{
$numberOfAttempts = $attempts->otpAttempts->count();
}
if($numberOfAttempts >= 3)
{
$customer_service_email = $this->system_preferences->getByField('name','contact_email_address_mobile');
$customer_service_number = $this->system_preferences->getByField('name','contact_number_mobile');
return $this->format->mobile_error('You already entered the wrong OTP 3 times. Your account is locked for 24 hours. Please contact Customer Service for assistance, call or email customer service.',[
'code' => 1,
'email' => $customer_service_email[0]['value'],
'number' => $customer_service_number[0]['value'],
]);
}
else
{
$loyalty_card = $this->loyalty_card->getByField([
'lcard_uuid' => $request->get('lcard_uuid'),
'is_active' => 1
],'personalDetails');
$getuserDetails = $this->loyalty_card->show($request->get('lcard_uuid'),['personalDetails','codeVehicleOwn','codeCivilStatus','codeGender','codeCardType','codeCity','codeFuelType']);
$data = new MobileUserProfileResource($getuserDetails);
$userDetails = null;
if($data != null){
$userDetails = $data->toArray($getuserDetails);
}
$numberOfAttempts++;
$this->otp_attempts->store($loyalty_card[0]['lcard_id'],$request->get('otp'));
$this->lcard_logs->log($loyalty_card[0]['lcard_id'],'OTP','ATTEMPT','Member entered otp '.$request->get('otp'));
// check if correct
$otpLog = $this->otp_logs->getByField(['lcard_id' => $loyalty_card[0]['lcard_id'], 'otp' => $request->get('otp')]);
//var_dump($otpLog);
if(count($otpLog))
{
$latestOtp = $this->otp_logs->getLastLog($loyalty_card[0]['lcard_id']);
// checks if otp entered is expired and it's the latest otp created
if(!StringHelper::check_time_exceeded($otpLog[0]['created_at'],'+5 minutes') || $latestOtp->otp != $request->get('otp'))
{
if($numberOfAttempts >= 3)
{
return $this->format->mobile_error('You have entered the wrong OTP for 3 times. Your account is now locked for 24 hours, call or email customer service.',$this->lock_member($loyalty_card));
}
return $this->format->mobile_error('The OTP you have entered has already expired. Please select the Resend OTP option',['code' => 3]);
}
else
{
if($loyalty_card[0]['cyware_synced'] == 0)
{
$cyware_response = $this->cyware_activate($loyalty_card[0]);
if($cyware_response['success'] == true && isset($cyware_response['data']))
{
$this->loyalty_card->cyware_activate($loyalty_card[0]['lcard_id'],$cyware_response['data']);
$this->user->store_member($cyware_response['data']);
$this->lcard_logs->log($loyalty_card[0]['lcard_id'],'LOGIN','ACTIVATE','Member activated a card');
}
else
{
return $this->format->mobile_error($cyware_response['message']);
}
}
if(Auth::attempt([ 'username' => $loyalty_card[0]['card_number'], 'password' => $loyalty_card[0]['birthdate']->toDateString() ]))
{
if($loyalty_card[0]['is_validated'] == 0)
{
$this->loyalty_card->validateMember($loyalty_card[0]['lcard_id']);
$this->mobile_usage->add_active();
}
$mpin = null;
$cyware = new CywareLibrary();
$cyware->setCardNumber($loyalty_card[0]['card_number']);
$cyware->state_validate();
if ($cyware->response['status_code'] == "200" && $cyware->response['data'] != null)
{
$mpin = $this->mpin_codes->getMpin($cyware->response['data']->customer_number);
}else{
return $this->format->mobile_error($cyware_response['message']);
}
$this->otp_logs->setUsed($latestOtp->otplog_id);
$user = Auth::user();
$success['is_valid'] = 1;
// $success['token'] = $user->createToken('Mobile')->accessToken; // for multiple login
// ---------------------------------------------------------------- new login start
$data = [
'grant_type' => 'password',
'client_id' => env("PASSPORT_ADMIN_CLIENT_ID", 2),
'client_secret' => env("PASSPORT_ADMIN_CLIENT_SECRET", "test"),
'username' => $loyalty_card[0]['card_number'],
'password' => $loyalty_card[0]['birthdate']->toDateString(),
'scope' => ''
];
// dd($data);
$request = Request::create('/oauth/token', 'POST', $data);
$result = app()->handle($request)->getContent();
$result = json_decode($result);
$success['token'] = $result->access_token;
$userDetails['customer_number'] = $cyware->response['data']->customer_number;
$success['userDetails'] = $userDetails;
if($mpin){
$success['userDetails']['mpin'] = $mpin->mpin_code;
}
// ---------------------------------------------------------------- new login end
$this->lcard_logs->log($loyalty_card[0]['lcard_id'],'LOGIN','LOGIN','Member successfully logs in');
return $this->format->mobile_success('Sucess',$success,$data);
}
}
}
else
{
if($numberOfAttempts >= 3)
{
return $this->format->mobile_error('You have entered the wrong OTP for 3 times. Your account is now locked for 24 hours, call or email customer service.',$this->lock_member($loyalty_card));
}
return $this->format->mobile_error('Incorrect OTP. The OTP you have entered does not exist.',['code' => 2]);
}
}
}
private function cyware_activate($loyalty_card)
{
$err = '';
$cyware = new CywareLibrary();
$cyware->setCardNumber($loyalty_card['card_number']);
$cyware->setPin($loyalty_card['pin']);
$cyware->setFirstName($loyalty_card['personalDetails']['firstname']);
$cyware->setLastName($loyalty_card['personalDetails']['lastname']);
$cyware->setBirthday(date('Ymd',strtotime($loyalty_card['birthdate'])));
$cyware->setMobile($loyalty_card['mobile']);
$cyware->setEmail($loyalty_card['email']);
$cyware->state_entry();
if ($cyware->response['status_code'] == 200 && $cyware->response['message'] == 'success')
{
$cyware->state_validate();
if ($cyware->response['status_code'] == 200 && $cyware->response['data'] != null)
{
return ['success' => true , 'data' => $cyware->response['data']];
}
else
$err = $cyware->response['message'];
}
else
$err = $cyware->response['message'];
return ['success' => false , 'message' => $err];
}
private function lock_member($loyalty_card)
{
$this->loyalty_card->lockMember($loyalty_card[0]['lcard_id'],'01');
$this->lcard_logs->log($loyalty_card[0]['lcard_id'],'OTP','LOCKED','Account is locked due to wrong OTP entered for 3 times during login');
$this->mobile_usage->add_locked();
$customer_service_email = $this->system_preferences->getByField('name','contact_email_address_mobile');
$customer_service_number = $this->system_preferences->getByField('name','contact_number_mobile');
return [
'code' => 1,
'email' => $customer_service_email[0]['value'],
'number' => $customer_service_number[0]['value'],
];
}
public function mobile_validatePin(Request $request)
{
$cyware = new CywareLibrary();
$cyware->setCardNumber($request->get('card_number'));
$cyware->setPin($request->get('pin'));
$cyware->state_entry();
if ($cyware->response['status_code'] == "200" && $cyware->response['message'] == 'First name is required')
{
return $this->format->mobile_success('Success');
}
else
{
return $this->format->mobile_error($cyware->response['message']);
}
}
public function mobile_activateCard(LoginActivateCardFormValidation $request)
{
// check if exists
$loyalty_card = $this->loyalty_card->getByField([
'card_number' => $request->card_number,
'cyware_synced' => 0,
'is_active' => 1
],'personalDetails');
if(count($loyalty_card) > 0)
{
$pd_id = $this->personal_details->update_non_cyware_synced($loyalty_card[0]['pd_id'],$request);
$lcard_store = $this->loyalty_card->update_non_cyware_synced($loyalty_card[0]['lcard_id'], $request);
$this->lcard_logs->log($loyalty_card[0]['lcard_id'],'LOGIN','UPDATE','Member updated form for card activation');
}
else
{
$pd_id = $this->personal_details->store($request);
$lcard_store = $this->loyalty_card->store($pd_id, $request);
$this->lcard_logs->log($lcard_store['lcard_id'],'LOGIN','STORE','Member filed for card activation');
// ------ send OTP start
$loyalty_card = $this->loyalty_card->getByField([
'lcard_uuid' => $lcard_store['lcard_uuid'],
'is_active' => 1
]);
}
if(count($loyalty_card))
{
// reset otp_attempts
$this->otp_attempts->delete($loyalty_card[0]['lcard_id']);
$otp = StringHelper::random_num(4);
$content = 'Your Unioil Mobile Application OTP Code is '.$otp;
$transid = date('YmdHis').$loyalty_card[0]['lcard_id'];
if(env("M360_ENV", 'TEST') == 'LOCAL'){
$data = [
'otp' => $otp,
'msisdn' => $loyalty_card[0]['mobile'],
'content' => $content,
'rcvd_transid' => $transid,
'transid' => $transid
];
if($this->otp_logs->store($loyalty_card[0]['lcard_id'],$data))
{
$this->lcard_logs->log($loyalty_card[0]['lcard_id'],'OTP','GENERATE','Member requested to generate an OTP');
return $this->format->mobile_success('Success',[
'mobile_number' => $loyalty_card[0]['mobile'],
'lcard_uuid' => $loyalty_card[0]['lcard_uuid'],
]);
}
else
{
return $this->format->mobile_error('Something went wrong');
}
}else{
$m360 = new M360();
$m360->set_msisdn($loyalty_card[0]['mobile']);
$m360->set_content($content);
$m360->set_rcvd_transid($transid);
$m360->send();
if($m360->success())
{
// error_log('SMS Sent Activation!');
$data = [
'otp' => $otp,
'msisdn' => $loyalty_card[0]['mobile'],
'content' => $content,
'rcvd_transid' => $transid,
'transid' => $m360->get_transid()
];
if($this->otp_logs->store($loyalty_card[0]['lcard_id'],$data))
{
$this->lcard_logs->log($loyalty_card[0]['lcard_id'],'OTP','GENERATE','Member requested to generate an OTP');
return $this->format->mobile_success('Success',[
'mobile_number' => $loyalty_card[0]['mobile'],
'lcard_uuid' => $loyalty_card[0]['lcard_uuid'],
]);
}
else
{
return $this->format->mobile_error('Something went wrong');
}
}
else
{
// return $this->format->mobile_error($m360->get_response_name(),$m360->get_response_message());
return $this->format->mobile_error('There was a problem sending your OTP. Please try again.',$m360->get_response_message());
}
}
}
else
{
return $this->format->mobile_error('User doesn\'t exist');
}
// ------ send OTP end
}
public function logout_mobile()
{
if (Auth::check()) {
$this->lcard_logs->log(0,'LOGIN','LOGOUT','Member logged out');
$this->loyalty_card->remove_deviceuuid(Auth::user()->username);
// Auth::user()->AauthAcessToken()->delete();
Auth::user()->token()->revoke();
return $this->format->mobile_success("Logout Success");
}
}
public function checkTime()
{
echo date('Y-m-d H:i:s').'
';
echo config('app.timezone');
}
public function convertmd5()
{
echo md5(request('value'));
}
public function checkOTP($card_number)
{
$loyalty_card = $this->loyalty_card->getByField([
'card_number' => $card_number,
'is_active' => 1,
]);
if(count($loyalty_card)>0)
{
$logs = $this->otp_logs->getLastLog_limit(1, $loyalty_card[0]->lcard_id);
if(count($logs) > 0)
{
foreach ($logs as $k => $v)
{
echo '