mirror of
https://github.com/Bubka/2FAuth.git
synced 2025-08-18 17:38:20 +02:00
Reorganize files to prepare API versioning
This commit is contained in:
@@ -1,34 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Auth;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Foundation\Auth\SendsPasswordResetEmails;
|
||||
|
||||
class ForgotPasswordController extends Controller
|
||||
{
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Password Reset Controller
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This controller is responsible for handling password reset emails and
|
||||
| includes a trait which assists in sending these notifications from
|
||||
| your application to your users. Feel free to explore this trait.
|
||||
|
|
||||
*/
|
||||
|
||||
use SendsPasswordResetEmails;
|
||||
|
||||
/**
|
||||
* Validate the email for the given request.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return void
|
||||
*/
|
||||
protected function validateEmail(Request $request)
|
||||
{
|
||||
$request->validate(['email' => 'required|exists:users,email']);
|
||||
}
|
||||
}
|
@@ -1,35 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Auth;
|
||||
|
||||
use App\Http\Requests\UserPatchPwdRequest;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Illuminate\Support\Facades\Hash;
|
||||
|
||||
class PasswordController extends Controller
|
||||
{
|
||||
|
||||
/**
|
||||
* Update the user's password.
|
||||
*
|
||||
* @param \App\Http\Requests\UserPatchPwdRequest $request
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function update(UserPatchPwdRequest $request)
|
||||
{
|
||||
$validated = $request->validated();
|
||||
|
||||
if (!Hash::check( $validated['currentPassword'], Auth::user()->password) ) {
|
||||
return response()->json(['message' => __('errors.wrong_current_password')], 400);
|
||||
}
|
||||
|
||||
if (!config('2fauth.config.isDemoApp') ) {
|
||||
$request->user()->update([
|
||||
'password' => bcrypt($validated['password']),
|
||||
]);
|
||||
}
|
||||
|
||||
return response()->json(['message' => __('auth.forms.password_successfully_changed')]);
|
||||
}
|
||||
}
|
@@ -1,62 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Auth;
|
||||
|
||||
use App\User;
|
||||
use App\Http\Requests\UserStoreRequest;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Support\Facades\Hash;
|
||||
use Illuminate\Auth\Events\Registered;
|
||||
use Illuminate\Foundation\Auth\RegistersUsers;
|
||||
|
||||
class RegisterController extends Controller
|
||||
{
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Register Controller
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This controller handles the registration of new users as well as their
|
||||
| validation and creation. By default this controller uses a trait to
|
||||
| provide this functionality without requiring any additional code.
|
||||
|
|
||||
*/
|
||||
|
||||
use RegistersUsers;
|
||||
|
||||
|
||||
/**
|
||||
* Handle a registration request for the application.
|
||||
*
|
||||
* @param \App\Http\Requests\UserStoreRequest $request
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function register(UserStoreRequest $request)
|
||||
{
|
||||
$validated = $request->validated();
|
||||
event(new Registered($user = $this->create($validated)));
|
||||
|
||||
$this->attemptLogin($request);
|
||||
|
||||
return response()->json([
|
||||
'message' => 'account created',
|
||||
'name' => $user->name,
|
||||
], 201);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Create a new user instance after a valid registration.
|
||||
*
|
||||
* @param array $data
|
||||
* @return \App\User
|
||||
*/
|
||||
protected function create(array $data)
|
||||
{
|
||||
return User::create([
|
||||
'name' => $data['name'],
|
||||
'email' => $data['email'],
|
||||
'password' => Hash::make($data['password']),
|
||||
]);
|
||||
}
|
||||
}
|
@@ -1,24 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Auth;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Foundation\Auth\ResetsPasswords;
|
||||
|
||||
class ResetPasswordController extends Controller
|
||||
{
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Password Reset Controller
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This controller is responsible for handling password reset requests
|
||||
| and uses a simple trait to include this behavior. You're free to
|
||||
| explore this trait and override any methods you wish to tweak.
|
||||
|
|
||||
*/
|
||||
|
||||
use ResetsPasswords;
|
||||
|
||||
}
|
@@ -1,54 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Auth;
|
||||
|
||||
use App\User;
|
||||
use App\Http\Requests\UserUpdateRequest;
|
||||
use App\Http\Resources\UserResource;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Illuminate\Support\Facades\Hash;
|
||||
|
||||
class UserController extends Controller
|
||||
{
|
||||
/**
|
||||
* Get detailed information about a user
|
||||
*
|
||||
* @return \App\Http\Resources\UserResource
|
||||
*/
|
||||
public function show()
|
||||
{
|
||||
$user = User::first();
|
||||
|
||||
return $user
|
||||
? new UserResource($user)
|
||||
: response()->json(['name' => null], 200);
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Update the user's profile information.
|
||||
*
|
||||
* @param \App\Http\Requests\UserUpdateRequest $request
|
||||
* @return \App\Http\Resources\UserResource
|
||||
*/
|
||||
public function update(UserUpdateRequest $request)
|
||||
{
|
||||
$user = $request->user();
|
||||
$validated = $request->validated();
|
||||
|
||||
if (!Hash::check( $request->password, Auth::user()->password) ) {
|
||||
return response()->json(['message' => __('errors.wrong_current_password')], 400);
|
||||
}
|
||||
|
||||
if (!config('2fauth.config.isDemoApp') ) {
|
||||
tap($user)->update([
|
||||
'name' => $validated['name'],
|
||||
'email' => $validated['email'],
|
||||
]);
|
||||
}
|
||||
|
||||
return new UserResource($user);
|
||||
}
|
||||
}
|
@@ -1,139 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Group;
|
||||
use App\Services\GroupService;
|
||||
use App\Http\Requests\GroupStoreRequest;
|
||||
use App\Http\Requests\GroupAssignRequest;
|
||||
use App\Http\Resources\GroupResource;
|
||||
use App\Http\Resources\TwoFAccountCollection;
|
||||
|
||||
class GroupController extends Controller
|
||||
{
|
||||
/**
|
||||
* The TwoFAccount Service instance.
|
||||
*/
|
||||
protected $groupService;
|
||||
|
||||
|
||||
/**
|
||||
* Create a new controller instance.
|
||||
*
|
||||
* @param GroupService $groupService
|
||||
* @return void
|
||||
*/
|
||||
public function __construct(GroupService $groupService)
|
||||
{
|
||||
$this->groupService = $groupService;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Display a listing of the resource.
|
||||
*
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
$groups = $this->groupService->getAll();
|
||||
|
||||
return GroupResource::collection($groups);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Store a newly created resource in storage.
|
||||
*
|
||||
* @param \App\Http\Requests\GroupRequest $request
|
||||
* @return \App\Http\Resources\GroupResource
|
||||
*/
|
||||
public function store(GroupStoreRequest $request)
|
||||
{
|
||||
$validated = $request->validated();
|
||||
|
||||
$group = $this->groupService->Create($validated);
|
||||
|
||||
return (new GroupResource($group))
|
||||
->response()
|
||||
->setStatusCode(201);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Display the specified resource.
|
||||
*
|
||||
* @param \App\Group $group
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function show(Group $group)
|
||||
{
|
||||
return new GroupResource($group);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Update the specified resource in storage.
|
||||
*
|
||||
* @param \App\Http\Requests\GroupRequest $request
|
||||
* @param \App\Group $group
|
||||
* @return \App\Http\Resources\GroupResource
|
||||
*/
|
||||
public function update(GroupStoreRequest $request, Group $group)
|
||||
{
|
||||
$validated = $request->validated();
|
||||
|
||||
$this->groupService->update($group, $validated);
|
||||
|
||||
return new GroupResource($group);
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Associate the specified accounts with the group
|
||||
*
|
||||
* @param \App\Http\Requests\GroupAssignRequest $request
|
||||
* @param \App\Group $group
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function assignAccounts(GroupAssignRequest $request, Group $group)
|
||||
{
|
||||
$validated = $request->validated();
|
||||
|
||||
$this->groupService->assign($validated['ids'], $group);
|
||||
|
||||
return response()->json($group, 200);
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get accounts assign to the group
|
||||
*
|
||||
* @param \App\Group $group
|
||||
* @return \App\Http\Resources\TwoFAccountCollection
|
||||
*/
|
||||
public function accounts(Group $group)
|
||||
{
|
||||
$groups = $this->groupService->getAccounts($group);
|
||||
|
||||
return new TwoFAccountCollection($groups);
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Remove the specified resource from storage.
|
||||
*
|
||||
* @param \App\Group $group
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function destroy(Group $group)
|
||||
{
|
||||
$this->groupService->delete($group->id);
|
||||
|
||||
return response()->json(null, 204);
|
||||
}
|
||||
|
||||
}
|
@@ -1,42 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
|
||||
|
||||
class IconController extends Controller
|
||||
{
|
||||
/**
|
||||
* Handle uploaded icon image
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function upload(Request $request)
|
||||
{
|
||||
$this->validate($request, [
|
||||
'icon' => 'required|image',
|
||||
]);
|
||||
|
||||
$path = $request->file('icon')->store('public/icons');
|
||||
$response['filename'] = pathinfo($path)['basename'];
|
||||
|
||||
return response()->json($response, 201);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* delete an icon
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function delete($icon)
|
||||
{
|
||||
Storage::delete('public/icons/' . $icon);
|
||||
|
||||
return response()->json(null, 204);
|
||||
}
|
||||
}
|
@@ -1,65 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\TwoFAccount;
|
||||
use App\Services\QrCodeService;
|
||||
use App\Services\TwoFAccountService;
|
||||
use App\Http\Requests\QrCodeDecodeRequest;
|
||||
|
||||
|
||||
class QrCodeController extends Controller
|
||||
{
|
||||
/**
|
||||
* The QR code Service instance.
|
||||
*/
|
||||
protected $qrcodeService;
|
||||
|
||||
/**
|
||||
* The TwoFAccount Service instance.
|
||||
*/
|
||||
protected $twofaccountService;
|
||||
|
||||
|
||||
/**
|
||||
* Create a new controller instance.
|
||||
*
|
||||
* @param \App\Services\QrCodeService $qrcodeService
|
||||
* @param \App\Services\TwoFAccountService $twofaccountService
|
||||
* @return void
|
||||
*/
|
||||
public function __construct(QrCodeService $qrcodeService, TwoFAccountService $twofaccountService)
|
||||
{
|
||||
$this->qrcodeService = $qrcodeService;
|
||||
$this->twofaccountService = $twofaccountService;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Show a QR code image
|
||||
*
|
||||
* @param App\TwoFAccount $twofaccount
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function show(TwoFAccount $twofaccount)
|
||||
{
|
||||
$uri = $this->twofaccountService->getURI($twofaccount);
|
||||
|
||||
return response()->json(['qrcode' => $this->qrcodeService->encode($uri)], 200);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Decode an uploaded QR Code image
|
||||
*
|
||||
* @param \App\Http\Requests\QrCodeDecodeRequest $request
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function decode(QrCodeDecodeRequest $request)
|
||||
{
|
||||
$file = $request->file('qrcode');
|
||||
|
||||
return response()->json(['data' => $this->qrcodeService->decode($file)], 200);
|
||||
}
|
||||
|
||||
}
|
@@ -1,154 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Exceptions\DbEncryptionException;
|
||||
use App\Services\DbEncryptionService;
|
||||
use App\Services\SettingServiceInterface;
|
||||
use App\Http\Requests\SettingStoreRequest;
|
||||
use App\Http\Requests\SettingUpdateRequest;
|
||||
use App\Http\Controllers\Controller;
|
||||
|
||||
|
||||
class SettingController extends Controller
|
||||
{
|
||||
|
||||
/**
|
||||
* The Settings Service instance.
|
||||
*/
|
||||
protected SettingServiceInterface $settingService;
|
||||
|
||||
/**
|
||||
* The Settings Service instance.
|
||||
*/
|
||||
protected DbEncryptionService $dbEncryptionService;
|
||||
|
||||
|
||||
/**
|
||||
* Create a new controller instance.
|
||||
*
|
||||
*/
|
||||
public function __construct(SettingServiceInterface $SettingServiceInterface, DbEncryptionService $dbEncryptionService)
|
||||
{
|
||||
$this->settingService = $SettingServiceInterface;
|
||||
$this->dbEncryptionService = $dbEncryptionService;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* List all settings
|
||||
*
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
$settings = $this->settingService->all();
|
||||
$settingsResources = collect();
|
||||
$settings->each(function ($item, $key) use ($settingsResources) {
|
||||
$settingsResources->push([
|
||||
'key' => $key,
|
||||
'value' => $item
|
||||
]);
|
||||
});
|
||||
|
||||
// return SettingResource::collection($tata);
|
||||
return response()->json($settingsResources->all(), 200);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Display a resource
|
||||
*
|
||||
* @param string $settingName
|
||||
*
|
||||
* @return \App\Http\Resources\TwoFAccountReadResource
|
||||
*/
|
||||
public function show($settingName)
|
||||
{
|
||||
$setting = $this->settingService->get($settingName);
|
||||
|
||||
if (!$setting) {
|
||||
abort(404);
|
||||
}
|
||||
|
||||
return response()->json([
|
||||
'key' => $settingName,
|
||||
'value' => $setting
|
||||
], 200);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Save options
|
||||
* @return [type] [description]
|
||||
*/
|
||||
public function store(SettingStoreRequest $request)
|
||||
{
|
||||
$validated = $request->validated();
|
||||
|
||||
$this->settingService->set($validated['key'], $validated['value']);
|
||||
|
||||
return response()->json([
|
||||
'key' => $validated['key'],
|
||||
'value' => $validated['value']
|
||||
], 201);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Save options
|
||||
* @return [type] [description]
|
||||
*/
|
||||
public function update(SettingUpdateRequest $request, $settingName)
|
||||
{
|
||||
$validated = $request->validated();
|
||||
|
||||
// The useEncryption setting impacts records in DB so we delegate the work to the
|
||||
// dedicated db encryption service
|
||||
if( $settingName === 'useEncryption')
|
||||
{
|
||||
try {
|
||||
$this->dbEncryptionService->setTo($validated['value']);
|
||||
}
|
||||
catch(DbEncryptionException $ex) {
|
||||
return response()->json([
|
||||
'message' => $ex->getMessage()
|
||||
], 400);
|
||||
}
|
||||
}
|
||||
else $this->settingService->set($settingName, $validated['value']);
|
||||
|
||||
return response()->json([
|
||||
'key' => $settingName,
|
||||
'value' => $validated['value']
|
||||
], 200);
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Save options
|
||||
* @return [type] [description]
|
||||
*/
|
||||
public function destroy($settingName)
|
||||
{
|
||||
$setting = $this->settingService->get($settingName);
|
||||
|
||||
if (is_null($setting)) {
|
||||
abort(404);
|
||||
}
|
||||
|
||||
$optionsConfig = config('2fauth.options');
|
||||
if(array_key_exists($settingName, $optionsConfig)) {
|
||||
return response()->json(
|
||||
['message' => 'bad request',
|
||||
'reason' => [__('errors.delete_user_setting_only')]
|
||||
], 400);
|
||||
}
|
||||
|
||||
$this->settingService->delete($settingName);
|
||||
|
||||
return response()->json(null, 204);
|
||||
}
|
||||
|
||||
}
|
@@ -1,284 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\TwoFAccount;
|
||||
use App\Exceptions\UndecipherableException;
|
||||
use App\Http\Requests\TwoFAccountReorderRequest;
|
||||
use App\Http\Requests\TwoFAccountStoreRequest;
|
||||
use App\Http\Requests\TwoFAccountUpdateRequest;
|
||||
use App\Http\Requests\TwoFAccountBatchRequest;
|
||||
use App\Http\Requests\TwoFAccountUriRequest;
|
||||
use App\Http\Requests\TwoFAccountDynamicRequest;
|
||||
use App\Http\Resources\TwoFAccountCollection;
|
||||
use App\Http\Resources\TwoFAccountReadResource;
|
||||
use App\Http\Resources\TwoFAccountStoreResource;
|
||||
use App\Services\GroupService;
|
||||
use App\Services\TwoFAccountService;
|
||||
use Illuminate\Support\Arr;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class TwoFAccountController extends Controller
|
||||
{
|
||||
/**
|
||||
* The TwoFAccount Service instance.
|
||||
*/
|
||||
protected $twofaccountService;
|
||||
|
||||
/**
|
||||
* The Group Service instance.
|
||||
*/
|
||||
protected $groupService;
|
||||
|
||||
|
||||
/**
|
||||
* Create a new controller instance.
|
||||
*
|
||||
* @param TwoFAccountService $twofaccountService
|
||||
* @return void
|
||||
*/
|
||||
public function __construct(TwoFAccountService $twofaccountService, GroupService $groupService)
|
||||
{
|
||||
$this->twofaccountService = $twofaccountService;
|
||||
$this->groupService = $groupService;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* List all resources
|
||||
*
|
||||
* @return \App\Http\Resources\TwoFAccountCollection
|
||||
*/
|
||||
public function index(Request $request)
|
||||
{
|
||||
return new TwoFAccountCollection(TwoFAccount::ordered()->get());
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Display a resource
|
||||
*
|
||||
* @param \App\TwoFAccount $twofaccount
|
||||
*
|
||||
* @return \App\Http\Resources\TwoFAccountReadResource
|
||||
*/
|
||||
public function show(TwoFAccount $twofaccount)
|
||||
{
|
||||
return new TwoFAccountReadResource($twofaccount);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Store a newly created resource in storage.
|
||||
*
|
||||
* @param \App\Http\Requests\TwoFAccountDynamicRequest $request
|
||||
* @return \App\Http\Resources\TwoFAccountReadResource
|
||||
*/
|
||||
public function store(TwoFAccountDynamicRequest $request)
|
||||
{
|
||||
// Two possible cases :
|
||||
// - The most common case, an URI is provided by the QuickForm, thanks to a QR code live scan or file upload
|
||||
// -> We use that URI to define the account
|
||||
// - The advanced form has been used and all individual parameters
|
||||
// -> We use the parameters array to define the account
|
||||
|
||||
$validated = $request->validated();
|
||||
|
||||
$twofaccount = Arr::has($validated, 'uri')
|
||||
? $this->twofaccountService->createFromUri($validated['uri'])
|
||||
: $this->twofaccountService->createFromParameters($validated);
|
||||
|
||||
// Possible group association
|
||||
$this->groupService->assign($twofaccount->id);
|
||||
|
||||
return (new TwoFAccountReadResource($twofaccount))
|
||||
->response()
|
||||
->setStatusCode(201);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Update the specified resource in storage.
|
||||
*
|
||||
* @param \App\Http\TwoFAccountUpdateRequest $request
|
||||
* @param \App\TwoFAccount $twofaccount
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function update(TwoFAccountUpdateRequest $request, TwoFAccount $twofaccount)
|
||||
{
|
||||
$validated = $request->validated();
|
||||
|
||||
$this->twofaccountService->update($twofaccount, $validated);
|
||||
|
||||
return (new TwoFAccountReadResource($twofaccount))
|
||||
->response()
|
||||
->setStatusCode(200);
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Set new order.
|
||||
*
|
||||
* @param App\Http\Requests\TwoFAccountReorderRequest $request
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function reorder(TwoFAccountReorderRequest $request)
|
||||
{
|
||||
$validated = $request->validated();
|
||||
|
||||
TwoFAccount::setNewOrder($validated['orderedIds']);
|
||||
|
||||
return response()->json(['message' => 'order saved'], 200);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Preview account using an uri, without any db moves
|
||||
*
|
||||
* @param \App\Http\Requests\TwoFAccountUriRequest $request
|
||||
* @return \App\Http\Resources\TwoFAccountStoreResource
|
||||
*/
|
||||
public function preview(TwoFAccountUriRequest $request)
|
||||
{
|
||||
$twofaccount = $this->twofaccountService->createFromUri($request->uri, false);
|
||||
|
||||
return new TwoFAccountStoreResource($twofaccount);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get a One-Time Password
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @param int $id
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function otp(Request $request, $id = null)
|
||||
{
|
||||
$inputs = $request->all();
|
||||
|
||||
// The request input is the ID of an existing account
|
||||
if ( $id ) {
|
||||
try {
|
||||
$otp = $this->twofaccountService->getOTP((int) $id);
|
||||
}
|
||||
catch (UndecipherableException $ex) {
|
||||
return response()->json([
|
||||
'message' => __('errors.cannot_decipher_secret')
|
||||
], 400);
|
||||
}
|
||||
}
|
||||
|
||||
// The request input is an uri
|
||||
else if ( count($inputs) === 1 && $request->has('uri') ) {
|
||||
$validatedData = $request->validate((new TwoFAccountUriRequest)->rules());
|
||||
$otp = $this->twofaccountService->getOTP($validatedData['uri']);
|
||||
}
|
||||
|
||||
else if ( count($inputs) > 1 && $request->has('uri')) {
|
||||
return response()->json([
|
||||
'message' => 'bad request',
|
||||
'reason' => ['uri' => __('validation.single', ['attribute' => 'uri'])]
|
||||
], 400);
|
||||
}
|
||||
|
||||
// The request inputs should define an account
|
||||
else {
|
||||
$validatedData = $request->validate((new TwoFAccountStoreRequest)->rules());
|
||||
$otp = $this->twofaccountService->getOTP($validatedData);
|
||||
}
|
||||
|
||||
return response()->json($otp, 200);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* A simple and light method to get the account count.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function count(Request $request)
|
||||
{
|
||||
return response()->json([ 'count' => TwoFAccount::count() ], 200);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* Withdraw one or more accounts from their group
|
||||
*
|
||||
* @param \App\Http\Requests\TwoFAccountBatchRequest $request
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function withdraw(TwoFAccountBatchRequest $request)
|
||||
{
|
||||
$validated = $request->validated();
|
||||
|
||||
if ($this->tooManyIds($validated['ids'])) {
|
||||
return response()->json([
|
||||
'message' => 'bad request',
|
||||
'reason' => [__('errors.too_many_ids')]
|
||||
], 400);
|
||||
}
|
||||
|
||||
$this->twofaccountService->withdraw($validated['ids']);
|
||||
|
||||
return response()->json([ 'message' => 'accounts withdrawn' ], 200);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Remove the specified resource from storage.
|
||||
*
|
||||
* @param \App\TwoFAccount $twofaccount
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function destroy(TwoFAccount $twofaccount)
|
||||
{
|
||||
$this->twofaccountService->delete($twofaccount->id);
|
||||
|
||||
return response()->json(null, 204);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Remove the specified resources from storage.
|
||||
*
|
||||
* @param \App\Http\Requests\TwoFAccountBatchRequest $request
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function batchDestroy(TwoFAccountBatchRequest $request)
|
||||
{
|
||||
$validated = $request->validated();
|
||||
|
||||
if ($this->tooManyIds($validated['ids'])) {
|
||||
return response()->json([
|
||||
'message' => 'bad request',
|
||||
'reason' => [__('errors.too_many_ids')]
|
||||
], 400);
|
||||
}
|
||||
|
||||
$this->twofaccountService->delete($validated['ids']);
|
||||
|
||||
return response()->json(null, 204);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Checks ids length
|
||||
*
|
||||
* @param string $ids comma-separated ids
|
||||
* @return bool whether or not the number of ids is acceptable
|
||||
*/
|
||||
private function tooManyIds(string $ids) : bool
|
||||
{
|
||||
$arIds = explode(',', $ids, 100);
|
||||
$nb = count($arIds);
|
||||
|
||||
return $nb > 99 ? true : false;
|
||||
}
|
||||
|
||||
}
|
Reference in New Issue
Block a user