Skip to content

Commit 0567d1f

Browse files
add user image section and two factor authentication
1 parent d65ba16 commit 0567d1f

21 files changed

+1701
-355
lines changed

.gitignore

+5
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
/apidoc/*
2+
apidoc.json
13
/node_modules
24
/public/hot
35
/public/storage
@@ -6,8 +8,11 @@
68
/.idea
79
/.vscode
810
/.vagrant
11+
/.idea
912
Homestead.json
1013
Homestead.yaml
1114
npm-debug.log
1215
yarn-error.log
1316
.env
17+
composer.lock
18+
package-lock.json
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
<?php
2+
3+
namespace App\Http\Controllers\API;
4+
5+
use Illuminate\Http\Request;
6+
use App\Http\Controllers\Controller;
7+
8+
use Illuminate\Support\Facades\Auth;
9+
10+
use Validator;
11+
use App\Image;
12+
use App\User;
13+
14+
class ImageController extends Controller
15+
{
16+
//
17+
/**
18+
* @api {post} /user/image Add User Image
19+
* @apiName AddUserImage
20+
* @apiGroup User
21+
*
22+
* @apiParam {File} file Image File (required)
23+
*
24+
* @apiExample {js} Response Example:
25+
* {
26+
* "success": {
27+
* "id": 1,
28+
* "name": "hanzala",
29+
* "email": "[email protected]",
30+
* "imageUrl": "http://192.168.5.102/storage/8/download.jpg",
31+
* "isVerified": 1,
32+
* "created_at": "2018-06-12 09:58:28",
33+
* "updated_at": "2018-06-12 10:21:09"
34+
* }
35+
* }
36+
*/
37+
public function addUserImage(Request $request)
38+
{
39+
$user = Auth::user();
40+
$imageDetails = '';
41+
if ($request->isJson()) {
42+
$imageDetails = $request->json()->all();
43+
} else {
44+
$imageDetails = $request->all();
45+
}
46+
47+
$validator = Validator::make($imageDetails, [
48+
'url' => 'required_without_all:file|url',
49+
'file' => 'required_without_all:url|image|max:20000'
50+
]);
51+
52+
if ($validator->fails()) {
53+
$errors = $validator->errors()->all();
54+
$error["message"] = $errors[0];
55+
$error["code"] = 'VALIDATION_ERROR';
56+
return response()->json(["error" => $error], 400);
57+
}
58+
59+
try {
60+
if(isset($imageDetails["url"])){
61+
$user->addMediaFromUrl($imageDetails["url"])
62+
->usingName($user["name"]."'s dp")
63+
->toMediaCollection();
64+
}else{
65+
$file = $request->file('file');
66+
$user->addMedia($file)
67+
->usingName($user["name"]."'s dp")
68+
->toMediaCollection();
69+
}
70+
$image = $user->getMedia()->last();
71+
$extension = explode('/',$image->mime_type);
72+
$image->file_name = str_random(5).'.'. $extension[1];
73+
$image->save();
74+
$user["imageUrl"] = $image->getFullUrl();
75+
$user->save();
76+
unset($user->{"media"});
77+
return response()->json(["success" => $user], 200);
78+
} catch (QueryException $exception) {
79+
return response()->json($exception, 400);
80+
}
81+
}
82+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,122 @@
1+
<?php
2+
3+
namespace App\Http\Controllers\API;
4+
5+
use Illuminate\Http\Request;
6+
use App\Http\Controllers\Controller;
7+
8+
use Illuminate\Support\Facades\Auth;
9+
use Illuminate\Support\Facades\Mail;
10+
11+
use Validator;
12+
use App\Image;
13+
use App\User;
14+
use App\Category;
15+
use App\TwoFACodes;
16+
use App\Mail\VerifyTwoFa;
17+
18+
class SocialLoginController extends Controller
19+
{
20+
//
21+
22+
//User Login
23+
24+
/**
25+
* @api {post} /social-login Social Login
26+
* @apiName SocialUser
27+
* @apiGroup User
28+
*
29+
* @apiParam {String} name Name
30+
* @apiParam {email} email Email
31+
* @apiParam {url} avatar User Image Url
32+
* @apiParam {String} uid User Unique Id
33+
*
34+
* @apiExample {js} Response Example:
35+
* {
36+
* "success": {
37+
* "user": {
38+
* "id": 7,
39+
* "name": "Hanzala",
40+
* "email": "[email protected]",
41+
* "imageUrl": "http://192.168.5.102/storage/7/1522382913_958_stylish-boys-cool-profile-pics-dp-for-facebook-whatsapp.jpg",
42+
* "isVerified": 0,
43+
* "created_at": "2018-06-12 10:14:30",
44+
* "updated_at": "2018-06-12 10:14:32",
45+
* "token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImp0aSI6ImYxNzllMGE5ZmRjMDc5Y2UwZjhlZWQzNDc5ZDBmNmRhZWNkN2MyYWJiMzY5YTIxMDJlMjAxYWJlOTY0MWNlMTM1NDRkMGJhNjI4MmI5MDI1In0.eyJhdWQiOiIxIiwianRpIjoiZjE3OWUwYTlmZGMwNzljZTBmOGVlZDM0NzlkMGY2ZGFlY2Q3YzJhYmIzNjlhMjEwMmUyMDFhYmU5NjQxY2UxMzU0NGQwYmE2MjgyYjkwMjUiLCJpYXQiOjE1Mjg3OTg2MzAsIm5iZiI6MTUyODc5ODYzMCwiZXhwIjoxNTYwMzM0NjMwLCJzdWIiOiI3Iiwic2NvcGVzIjpbXX0.AIM82lV6krAZVMpeqe1Jy0TGMBoBgSIYH6VaiLA2pAzP-ydhRTjF8hVOQMGP4dt_YA695JpeDzu-iVSJqXtYF9lXC2Cu4zBuBgjvbx6vkPtKQGgj5Y04bl5GXIa8UgWIgzwaHCS49_6GsNM92SBn8Bh5TxbfEjzZdPetOR51pnrYvsXfViVIbp1FG-u8oja7R-vOQDu3b7B8NtWUr2F7QdxEeoXfV5hiHoiHvfHbl8j_zR07nTalLkdyBFukPuX5jAmUCdh6pZU98zJ85voe3RwMUhtkVrNelGkk03pLKFyJC0oYfcSfaobDqCvl16LVbumrvTsLNRYJVv_2dHtlfmIvYBfcIFAPnF1W3WD1PI4r0QQ8L9tX64SLGbOI8CcuUL1MV9TPVmIkAmrzfql7XH0s21ubDdudyBzpHSG3_MPI2yANxVPTEnY7xyI-sZBk3Kl1lDlhCgxmlHmZaSZsAY7p9GgxiskG8VYYPZ8Je7BPMqeRd0xvwNmfX14twzVUaaRsIOo04g7g8ndHNCw18ovNxY9cjRGBSr4v6AwzhwY9-op1VoEQ5rziEas1zWHVzWHWH-QOffl0xT7-TiyhPA6W9bzokTxPxnZe9SziA5uFDnWjKP1inuTNPCCsTnYk2HcVRnJUuJy46o9jaY24rr2dy28VO5EMzRzXMm10v54"
46+
* }
47+
* }
48+
* }
49+
*/
50+
public function socialLogin(Request $request){
51+
$userDetails = '';
52+
if ($request->isJson()) {
53+
$userDetails = $request->json()->all();
54+
} else {
55+
$userDetails = $request->all();
56+
}
57+
$validator = Validator::make($userDetails, [
58+
'name' => 'required',
59+
'email' => 'required|email',
60+
'avatar' => 'sometimes|url',
61+
'uid' => 'required|string',
62+
]);
63+
64+
if ($validator->fails()) {
65+
$errors = $validator->errors()->all();
66+
$error["message"] = $errors[0];
67+
$error["code"] = 'VALIDATION_ERROR';
68+
return response()->json(["error" => $error], 400);
69+
}
70+
71+
try {
72+
$user = User::where('email', $request->email)->first();
73+
if(isset($user)){
74+
if($user["2fa"]){
75+
$code = TwoFACodes::create(["user_id" => $user["id"], "code" => substr(uniqid(rand(), true), 16, 7)]);
76+
$user["code"] = $code["code"];
77+
Mail::to($user->email)->send(new VerifyTwoFa($user));
78+
$error['message'] = "Please verify Two-factor Authentication. We have sent a code to your email.";
79+
$error['code'] = "VERIFY_2FA";
80+
return response()->json(['error' => $error], 401);
81+
}
82+
Auth::login($user);
83+
$success['user'] = $user;
84+
$success["user"]["token"] = $user->createToken($user->name)->accessToken;
85+
return response()->json(['success' => $success], 200);
86+
}
87+
$details = [
88+
"name" => $userDetails["name"],
89+
"email" => $userDetails["email"],
90+
"password" => bcrypt($userDetails["uid"])
91+
];
92+
$user = User::create($details);
93+
if(isset($userDetails["avatar"])){
94+
$user->addMediaFromUrl($userDetails["avatar"])
95+
->usingName($userDetails["name"]."'s dp")
96+
->toMediaCollection();
97+
$image = $user->getMedia()->last();
98+
$extension = explode('/',$image->mime_type);
99+
$image->file_name = str_random(5).'.'. $extension[1];
100+
$image->save();
101+
$user["imageUrl"] = $image->getFullUrl();
102+
$user->isVerified = 1;
103+
$user->save();
104+
}
105+
$success['user'] = $user;
106+
$success["user"]["token"] = $user->createToken($user->name)->accessToken;
107+
unset($user->{"media"});
108+
109+
$defaultCategories = ['Work', 'Home', 'Family', 'Sports', 'Travel'];
110+
for($i = 0; $i < 5; $i++){
111+
Category::create([
112+
'user_id' => $user->id,
113+
'name' => $defaultCategories[$i],
114+
'order' => $i + 1
115+
]);
116+
}
117+
return response()->json(['success' => $success], 200);
118+
} catch (QueryException $exception) {
119+
return response()->json($exception, 400);
120+
}
121+
}
122+
}

0 commit comments

Comments
 (0)