File: /home/bdedition/public_html/core/app/Http/Controllers/User/UserController.php
<?php
namespace App\Http\Controllers\User;
use App\Models\News;
use App\Constants\Status;
use App\Models\DeviceToken;
use Illuminate\Http\Request;
use App\Lib\GoogleAuthenticator;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Validator;
class UserController extends Controller
{
public function home()
{
$pageTitle = 'Dashboard';
//News
$news = News::where('user_id', auth()->id())->with('category')->latest()->take(10)->get();
$widget['total_news'] = News::where('user_id', \auth()->id())->count();
$widget['pending_news'] = News::where('user_id', \auth()->id())->pending()->count();
$widget['approved_news'] = News::where('user_id', \auth()->id())->approved()->count();
$widget['rejected_news'] = News::where('user_id', \auth()->id())->rejected()->count();
return view('staff.dashboard', compact('pageTitle', 'widget', 'news'));
}
public function show2faForm()
{
$ga = new GoogleAuthenticator();
$user = auth()->user();
$secret = $ga->createSecret();
$qrCodeUrl = $ga->getQRCodeGoogleUrl($user->username . '@' . gs('site_name'), $secret);
$pageTitle = '2FA Security';
return view('staff.twofactor', compact('pageTitle', 'secret', 'qrCodeUrl', 'user'));
}
public function create2fa(Request $request)
{
$user = auth()->user();
$request->validate([
'key' => 'required',
'code' => 'required',
]);
$response = verifyG2fa($user, $request->code, $request->key);
if ($response) {
$user->tsc = $request->key;
$user->ts = Status::ENABLE;
$user->save();
$notify[] = ['success', 'Two factor authenticator activated successfully'];
return back()->withNotify($notify);
} else {
$notify[] = ['error', 'Wrong verification code'];
return back()->withNotify($notify);
}
}
public function disable2fa(Request $request)
{
$request->validate([
'code' => 'required',
]);
$user = auth()->user();
$response = verifyG2fa($user, $request->code);
if ($response) {
$user->tsc = null;
$user->ts = Status::DISABLE;
$user->save();
$notify[] = ['success', 'Two factor authenticator deactivated successfully'];
} else {
$notify[] = ['error', 'Wrong verification code'];
}
return back()->withNotify($notify);
}
public function userData()
{
$user = auth()->user();
if ($user->profile_complete == Status::YES) {
return to_route('user.home');
}
$pageTitle = 'User Data';
$info = json_decode(json_encode(getIpInfo()), true);
$mobileCode = @implode(',', $info['code']);
$countries = json_decode(file_get_contents(resource_path('views/partials/country.json')));
return view('staff.user_data', compact('pageTitle', 'user', 'countries', 'mobileCode'));
}
public function userDataSubmit(Request $request)
{
$user = auth()->user();
if ($user->profile_complete == Status::YES) {
return to_route('user.home');
}
$request->validate([
'address' => 'required|string',
'state' => 'required|string',
'zip' => 'required|string',
'city' => 'required|string'
]);
$user->address = $request->address;
$user->city = $request->city;
$user->state = $request->state;
$user->zip = $request->zip;
$user->profile_complete = Status::YES;
$user->save();
return to_route('user.home');
}
public function addDeviceToken(Request $request)
{
$validator = Validator::make($request->all(), [
'token' => 'required',
]);
if ($validator->fails()) {
return ['success' => false, 'errors' => $validator->errors()->all()];
}
$deviceToken = DeviceToken::where('token', $request->token)->first();
if ($deviceToken) {
return ['success' => true, 'message' => 'Already exists'];
}
$deviceToken = new DeviceToken();
$deviceToken->user_id = auth()->user()->id;
$deviceToken->token = $request->token;
$deviceToken->is_app = Status::NO;
$deviceToken->save();
return ['success' => true, 'message' => 'Token saved successfully'];
}
public function downloadAttachment($fileHash)
{
$filePath = decrypt($fileHash);
$extension = pathinfo($filePath, PATHINFO_EXTENSION);
$title = slug(gs('site_name')) . '- attachments.' . $extension;
try {
$mimetype = mime_content_type($filePath);
} catch (\Exception $e) {
$notify[] = ['error', 'File does not exists'];
return back()->withNotify($notify);
}
header('Content-Disposition: attachment; filename="' . $title);
header("Content-Type: " . $mimetype);
return readfile($filePath);
}
}