File: /home/mobilech/nepalapplesupport.com/shop/app/Http/Controllers/api/v1/auth/SocialAuthController.php
<?php
namespace App\Http\Controllers\api\v1\auth;
use App\CPU\Helpers;
use App\Http\Controllers\Controller;
use App\User;
use GuzzleHttp\Client;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Str;
use function App\CPU\translate;
use App\Model\BusinessSetting;
class SocialAuthController extends Controller
{
public function social_login(Request $request)
{
$validator = Validator::make($request->all(), [
'token' => 'required',
'unique_id' => 'required',
'email' => 'required',
'medium' => 'required|in:google,facebook,apple',
]);
if ($validator->fails()) {
return response()->json(['errors' => Helpers::error_processor($validator)], 403);
}
$client = new Client();
$token = $request['token'];
$email = $request['email'];
$unique_id = $request['unique_id'];
try {
if ($request['medium'] == 'google') {
$res = $client->request('GET', 'https://www.googleapis.com/oauth2/v1/userinfo?access_token=' . $token);
$data = json_decode($res->getBody()->getContents(), true);
} elseif ($request['medium'] == 'facebook') {
$res = $client->request('GET', 'https://graph.facebook.com/' . $unique_id . '?access_token=' . $token . '&&fields=name,email');
$data = json_decode($res->getBody()->getContents(), true);
} elseif ($request['medium'] == 'apple') {
// $res = $client->request('GET', 'https://graph.facebook.com/' . $unique_id . '?access_token=' . $token . '&&fields=name,email');
// $data = json_decode($res->getBody()->getContents(), true);
$socialLogin = BusinessSetting::where('type', 'social_login')->first();
$client_id = '';
$client_secret = '';
foreach(json_decode($socialLogin['value'], true) as $key => $social){
if($social['login_medium'] == 'apple'){
$client_id = $social['service_id'];
$client_secret = $social['client_secret'];
}
}
$apple_data = [
'grant_type' => 'authorization_code',
'redirect_uri' => 'www.test.com',
'client_id' => $client_id,
'client_secret' => $client_secret,
'code' => $request['token']
];
$response = Request::create('/oauth/token', 'POST', $apple_data);
$data = json_decode($response->getBody()->getContent(), true);
dd($data);
}
} catch (\Exception $exception) {
return response()->json(['error' => 'wrong credential.']);
}
if (strcmp($email, $data['email']) === 0) {
$name = explode(' ', $data['name']);
if (count($name) > 1) {
$fast_name = implode(" ", array_slice($name, 0, -1));
$last_name = end($name);
} else {
$fast_name = implode(" ", $name);
$last_name = '';
}
$user = User::where('email', $email)->first();
if (isset($user) == false) {
$user = User::create([
'f_name' => $fast_name,
'l_name' => $last_name,
'email' => $email,
'phone' => '',
'password' => bcrypt($data['id']),
'is_active' => 1,
'login_medium' => $request['medium'],
'social_id' => $data['id'],
'is_phone_verified' => 0,
'is_email_verified' => 1,
'temporary_token' => Str::random(40)
]);
} else {
$user->temporary_token = Str::random(40);
$user->save();
}
if(!isset($user->phone))
{
return response()->json([
'token_type' => 'update phone number',
'temporary_token' => $user->temporary_token ]);
}
$token = self::login_process_passport($user, $user->email, $data['id']);
if ($token != null) {
return response()->json(['token' => $token]);
}
return response()->json(['error_message' => translate('Customer_not_found_or_Account_has_been_suspended')]);
}
return response()->json(['error' => translate('email_does_not_match')]);
}
public static function login_process_passport($user, $email, $password)
{
$data = [
'email' => $email,
'password' => $password
];
if (isset($user) && $user->is_active && auth()->attempt($data)) {
$token = auth()->user()->createToken('LaravelAuthApp')->accessToken;
} else {
$token = null;
}
return $token;
}
public function update_phone(Request $request)
{
$validator = Validator::make($request->all(), [
'temporary_token' => 'required',
'phone' => 'required|min:11|max:14'
]);
if ($validator->fails()) {
return response()->json(['errors' => Helpers::error_processor($validator)], 403);
}
$user = User::where(['temporary_token' => $request->temporary_token])->first();
$user->phone = $request->phone;
$user->save();
$phone_verification = BusinessSetting::where('type', 'phone_verification')->first();
if($phone_verification->value == 1)
{
return response()->json([
'token_type' => 'phone verification on',
'temporary_token' => $request->temporary_token
]);
}else{
return response()->json(['message' =>'Phone number updated successfully']);
}
}
}