refactor: code style changes

Signed-off-by: miguel456 <me@nogueira.codes>
This commit is contained in:
2023-01-15 00:04:00 +00:00
parent 25155bff2e
commit 3727c84f3e
146 changed files with 1013 additions and 1341 deletions

View File

@@ -5,24 +5,20 @@ namespace App\Http\Controllers;
use App\Absence;
use App\Exceptions\AbsenceNotActionableException;
use App\Http\Requests\StoreAbsenceRequest;
use App\Http\Requests\UpdateAbsenceRequest;
use App\Services\AbsenceService;
use App\User;
use Illuminate\Auth\Access\AuthorizationException;
use Illuminate\Contracts\Auth\Authenticatable;
use Illuminate\Http\RedirectResponse;
use Illuminate\Support\Carbon;
use Illuminate\Support\Facades\Auth;
class AbsenceController extends Controller
{
private AbsenceService $absenceService;
public function __construct (AbsenceService $absenceService) {
public function __construct(AbsenceService $absenceService)
{
$this->absenceService = $absenceService;
}
/**
@@ -38,11 +34,11 @@ class AbsenceController extends Controller
->with('absences', Absence::paginate(6));
}
/**
* Display a listing of absences belonging to the current user.
*
* @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View
*
* @throws AuthorizationException
*/
public function showUserAbsences()
@@ -54,11 +50,8 @@ class AbsenceController extends Controller
return view('dashboard.absences.own')
->with('absences', $absences);
}
/**
* Show the form for creating a new absence request.
*
@@ -98,7 +91,8 @@ class AbsenceController extends Controller
/**
* Display the specified absence request.
*
* @param \App\Absence $absence
* @param \App\Absence $absence
*
* @throws AuthorizationException
*/
public function show(Absence $absence)
@@ -107,28 +101,26 @@ class AbsenceController extends Controller
return view('dashboard.absences.view')
->with([
'absence' => $absence,
'totalDays' => Carbon::parse($absence->start)->diffInDays($absence->predicted_end)
'absence' => $absence,
'totalDays' => Carbon::parse($absence->start)->diffInDays($absence->predicted_end),
]);
}
/**
* Approve the specified absence.
*
* @param Absence $absence
* @param Absence $absence
* @return RedirectResponse
*
* @throws AuthorizationException
*/
public function approveAbsence(Absence $absence): RedirectResponse
{
$this->authorize('approve', $absence);
try
{
try {
$this->absenceService->approveAbsence($absence);
}
catch (AbsenceNotActionableException $notActionableException)
{
} catch (AbsenceNotActionableException $notActionableException) {
return redirect()
->back()
->with('error', $notActionableException->getMessage());
@@ -139,23 +131,21 @@ class AbsenceController extends Controller
->with('success', __('Absence request successfully approved. It will automatically transition to "Ended" on its predicted end date.'));
}
/**
* Decline the specified absence.
*
* @param Absence $absence
* @param Absence $absence
* @return RedirectResponse
*
* @throws AuthorizationException
*/
public function declineAbsence(Absence $absence): RedirectResponse
{
$this->authorize('decline', $absence);
try
{
try {
$this->absenceService->declineAbsence($absence);
} catch (AbsenceNotActionableException $notActionableException)
{
} catch (AbsenceNotActionableException $notActionableException) {
return redirect()
->back()
->with('error', $notActionableException->getMessage());
@@ -166,24 +156,21 @@ class AbsenceController extends Controller
->with('success', __('Absence request successfully declined.'));
}
/**
* Cancel the specified absence.
*
* @param Absence $absence
* @param Absence $absence
* @return \Illuminate\Http\RedirectResponse
*
* @throws AuthorizationException
*/
public function cancelAbsence(Absence $absence): \Illuminate\Http\RedirectResponse
public function cancelAbsence(Absence $absence): RedirectResponse
{
$this->authorize('cancel', $absence);
try
{
try {
$this->absenceService->cancelAbsence($absence);
}
catch (AbsenceNotActionableException $notActionableException)
{
} catch (AbsenceNotActionableException $notActionableException) {
return redirect()
->back()
->with('error', $notActionableException->getMessage());

View File

@@ -29,23 +29,19 @@ use App\Exceptions\IncompleteApplicationException;
use App\Exceptions\InvalidAgeException;
use App\Exceptions\UnavailableApplicationException;
use App\Exceptions\VacancyNotFoundException;
use App\Facades\IP;
use App\Services\ApplicationService;
use App\Vacancy;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
class ApplicationController extends Controller
{
private $applicationService;
public function __construct(ApplicationService $applicationService) {
public function __construct(ApplicationService $applicationService)
{
$this->applicationService = $applicationService;
}
public function showUserApps()
{
return view('dashboard.user.applications')
@@ -67,7 +63,6 @@ class ApplicationController extends Controller
'canVote' => $this->applicationService->canVote($application->votes),
]
);
}
public function showAllApps(Request $request)
@@ -76,42 +71,36 @@ class ApplicationController extends Controller
return view('dashboard.appmanagement.all')
->with('applications', Application::orderBy('applicationStatus', 'ASC')->paginate(6));
}
public function discordApply(Request $request, $vacancySlug) {
public function discordApply(Request $request, $vacancySlug)
{
$request->session()->put('discordApplicationRedirectedSlug', $vacancySlug);
return redirect(route('discordRedirect'));
return redirect(route('discordRedirect'));
}
public function renderApplicationForm($vacancySlug)
{
try {
return $this->applicationService->renderForm($vacancySlug);
}
catch (ApplicationNotFoundException $ex) {
} catch (ApplicationNotFoundException $ex) {
return redirect()
->back()
->with('error', $ex->getMessage());
} catch (DiscordAccountRequiredException $e) {
\Log::info('Redirecting user: ' . $e->getMessage(), [
'user' => Auth::user()->email
\Log::info('Redirecting user: '.$e->getMessage(), [
'user' => Auth::user()->email,
]);
request()->session()->put('discordApplicationRedirectedSlug', $vacancySlug);
return redirect(route('discordRedirect'));
} catch (IncompatibleAgeException $e) {
return redirect()
->to(route('dashboard'))
->with('error', $e->getMessage());
} catch (InvalidAgeException $e) {
return view('dashboard.application-rendering.add-age');
}
}
@@ -121,9 +110,7 @@ class ApplicationController extends Controller
if (Auth::user()->isEligible()) {
try {
$this->applicationService->fillForm(Auth::user(), $request->all(), $vacancySlug);
} catch (VacancyNotFoundException | IncompleteApplicationException | UnavailableApplicationException $e) {
} catch (VacancyNotFoundException|IncompleteApplicationException|UnavailableApplicationException $e) {
return redirect()
->back()
->with('error', $e->getMessage());
@@ -146,8 +133,7 @@ class ApplicationController extends Controller
try {
$status = $this->applicationService->updateStatus($application, $newStatus);
} catch (\LogicException $ex)
{
} catch (\LogicException $ex) {
return redirect()
->back()
->with('error', $ex->getMessage());
@@ -170,6 +156,5 @@ class ApplicationController extends Controller
return redirect()
->back()
->with('success', __('Application deleted. Comments, appointments and responses have also been deleted.'));
}
}

View File

@@ -36,13 +36,12 @@ use Illuminate\Http\Request;
class AppointmentController extends Controller
{
private $appointmentService;
private $meetingNoteService;
public function __construct(AppointmentService $appointmentService, MeetingNoteService $meetingNoteService) {
public function __construct(AppointmentService $appointmentService, MeetingNoteService $meetingNoteService)
{
$this->appointmentService = $appointmentService;
$this->meetingNoteService = $meetingNoteService;
}
@@ -56,7 +55,7 @@ class AppointmentController extends Controller
return redirect()
->back()
->with('success',__('Appointment successfully scheduled @ :appointmentTime', ['appointmentTime', $appointmentDate->toDateTimeString()]));
->with('success', __('Appointment successfully scheduled @ :appointmentTime', ['appointmentTime', $appointmentDate->toDateTimeString()]));
}
/**
@@ -71,10 +70,8 @@ class AppointmentController extends Controller
return redirect()
->back()
->with('success', __("Interview finished! Staff members can now vote on it."));
}
catch (InvalidAppointmentStatusException $ex) {
->with('success', __('Interview finished! Staff members can now vote on it.'));
} catch (InvalidAppointmentStatusException $ex) {
return redirect()
->back()
->with('error', $ex->getMessage());
@@ -86,35 +83,26 @@ class AppointmentController extends Controller
$this->authorize('update', $application->appointment);
try {
$this->appointmentService->deleteAppointment($application, $request->reason);
return redirect()
->back()
->with('success', __('Appointment cancelled.'));
}
catch (\Exception $ex) {
} catch (\Exception $ex) {
return redirect()
->back()
->with('error', $ex->getMessage());
}
}
public function saveNotes(SaveNotesRequest $request, Application $application)
{
try {
$this->meetingNoteService->addToApplication($application, $request->noteText);
return redirect()
->back()
->with('success', __('Saved notes.'));
} catch (InvalidAppointmentException $ex) {
return redirect()
->back()

View File

@@ -21,46 +21,39 @@
namespace App\Http\Controllers\Auth;
use App\Facades\Discord;
use App\Facades\Options;
use App\Http\Controllers\Controller;
use App\User;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Crypt;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Str;
use Laravel\Socialite\Facades\Socialite;
use Laravel\Socialite\Two\InvalidStateException;
class DiscordController extends Controller
{
public function discordRedirect() {
public function discordRedirect()
{
return Socialite::driver('discord')
->scopes(['email', 'guilds.join', 'guilds.members.read', 'guilds'])
->redirect();
}
public function discordCallback() {
public function discordCallback()
{
try {
$discordUser = Socialite::driver('discord')->user();
} catch (InvalidStateException $stateException) {
Log::warning('Invalid state for social authentication: ', [
'message' => $stateException->getMessage(),
'ua' => request()->userAgent(),
'ip' => request()->ip()
'ip' => request()->ip(),
]);
return redirect(route('discordRedirect'));
}
$appUser = User::where('email', $discordUser->getEmail())->first();
if ($appUser) {
$appUser->discord_token = $discordUser->token;
$appUser->discord_refresh_token = $discordUser->refreshToken;
$appUser->discord_user_id = $discordUser->getId();
@@ -68,9 +61,7 @@ class DiscordController extends Controller
$appUser->save();
Auth::login($appUser, true);
} else {
$oAuthUser = User::create([
'uuid' => null,
'name' => $discordUser->getName(),
@@ -82,7 +73,7 @@ class DiscordController extends Controller
'discord_user_id' => $discordUser->getId(),
'discord_pfp' => $discordUser->getAvatar(),
'discord_token' => $discordUser->token,
'discord_refresh_token' => $discordUser->refreshToken
'discord_refresh_token' => $discordUser->refreshToken,
]);
$oAuthUser->assignRole('user');
@@ -97,5 +88,4 @@ class DiscordController extends Controller
return redirect()
->route('dashboard');
}
}

View File

@@ -21,17 +21,13 @@
namespace App\Http\Controllers\Auth;
use App\Facades\IP;
use App\Http\Controllers\Controller;
use App\Services\AccountSuspensionService;
use App\User;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Crypt;
use Illuminate\Support\Facades\Log;
use App\Facades\IP;
use Illuminate\Support\Str;
use Laravel\Socialite\Facades\Socialite;
class LoginController extends Controller
{
@@ -79,12 +75,11 @@ class LoginController extends Controller
$isLocked = $service->isLocked($user);
if ($isBanned || $isLocked) {
Log::alert('Restricted user attempting to login.', [
'ip' => $request->ip(),
'email' => $user->email,
'isBanned' => $isBanned,
'isLocked' => $isLocked
'isLocked' => $isLocked,
]);
return false;
@@ -99,17 +94,14 @@ class LoginController extends Controller
public function authenticated(Request $request, User $user)
{
if (IP::shouldCollect()) {
if ($user->originalIP !== $request->ip())
{
if ($user->originalIP !== $request->ip()) {
Log::alert('User IP address changed from last login. Updating.', [
'prev' => $user->originalIP,
'new' => $request->ip()
'new' => $request->ip(),
]);
$user->currentIp = $request->ip();
$user->save();
}
}
}
}

View File

@@ -21,15 +21,12 @@
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use App\Profile;
use App\Services\AccountSuspensionService;
use App\User;
use App\Facades\Options;
use App\Facades\IP;
use App\Facades\Options;
use App\Http\Controllers\Controller;
use App\User;
use Illuminate\Foundation\Auth\RegistersUsers;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Validator;
class RegisterController extends Controller
@@ -74,8 +71,7 @@ class RegisterController extends Controller
{
$password = ['required', 'string', 'confirmed'];
switch (Options::getOption('pw_security_policy'))
{ // this could be better structured, switch doesn't feel right
switch (Options::getOption('pw_security_policy')) { // this could be better structured, switch doesn't feel right
case 'off':
$password = ['required', 'string', 'confirmed'];
break;
@@ -102,7 +98,7 @@ class RegisterController extends Controller
'dob.before' => __('You must be 13 years of age or older in order to sign up for an account.'),
'dob.required' => __('Please enter your date of birth.'),
'uuid.required' => __('Please enter a valid (and Premium) Minecraft username! We do not support cracked users.'),
'acceptTerms.required' => __('Please accept the Community Guidelines, Terms of Service and Privacy Policy to continue.')
'acceptTerms.required' => __('Please accept the Community Guidelines, Terms of Service and Privacy Policy to continue.'),
]);
}
@@ -117,13 +113,13 @@ class RegisterController extends Controller
$ip = IP::shouldCollect() ? request()->ip() : '0.0.0.0';
$user = User::create([
'uuid' => $data['uuid'] ?? "disabled",
'uuid' => $data['uuid'] ?? 'disabled',
'name' => $data['name'],
'email' => $data['email'],
'password' => Hash::make($data['password']),
'registrationIp' => $ip,
'currentIp' => $ip,
'dob' => $data['dob']
'dob' => $data['dob'],
]);
$user->assignRole('user');

View File

@@ -26,13 +26,13 @@ use App\Comment;
use App\Http\Requests\NewCommentRequest;
use App\Services\CommentService;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
class CommentController extends Controller
{
private $commentService;
public function __construct(CommentService $commentService) {
public function __construct(CommentService $commentService)
{
$this->commentService = $commentService;
}

View File

@@ -39,12 +39,12 @@ class DashboardController extends Controller
$totalDeniedSingle = Application::where([
['applicationStatus', '=', 'DENIED'],
['applicantUserID', '=', Auth::user()->id]
['applicantUserID', '=', Auth::user()->id],
])->get();
$totalNewSingle = Application::where([
['applicationStatus', '=', 'STAGE_SUBMITTED'],
['applicantUserID', '=', Auth::user()->id]
['applicantUserID', '=', Auth::user()->id],
])->get();
return view('dashboard.dashboard')
@@ -55,7 +55,7 @@ class DashboardController extends Controller
'totalPeerReview' => $totalPeerReview,
'totalNewApplications' => $totalNewApplications,
'totalNewSingle' => $totalNewSingle->count(),
'totalDeniedSingle' => $totalDeniedSingle->count()
'totalDeniedSingle' => $totalDeniedSingle->count(),
]);
}
}

View File

@@ -33,17 +33,20 @@ use Illuminate\Support\Facades\Log;
class DevToolsController extends Controller
{
public function __construct() {
public function __construct()
{
//
}
private function singleAuthorise() {
private function singleAuthorise()
{
if (! Auth::user()->can('admin.developertools.use')) {
abort(403, __('You\'re not authorized to access this page.'));
}
}
public function index() {
public function index()
{
$this->singleAuthorise();
return view('dashboard.administration.devtools')
@@ -54,7 +57,8 @@ class DevToolsController extends Controller
/**
* Force an application to be approved.
*/
public function forceApprovalEvent(Request $request) {
public function forceApprovalEvent(Request $request)
{
$this->singleAuthorise();
$application = Application::find($request->application);
@@ -80,20 +84,19 @@ class DevToolsController extends Controller
->with('success', __('Event dispatched; Candidate rejection sequence initiated.'));
}
public function evaluateVotes() {
public function evaluateVotes()
{
$this->singleAuthorise();
$code = Artisan::call("votes:evaluate");
$code = Artisan::call('votes:evaluate');
return redirect()
->back()
->with('success', __('Ran vote evaluation logic, with exit code :exitCode ', ['exitCode' => $code]));
}
public function purgeSuspensions(AccountSuspensionService $service) {
public function purgeSuspensions(AccountSuspensionService $service)
{
$this->singleAuthorise();
if ($service->purgeExpired()) {
@@ -105,7 +108,6 @@ class DevToolsController extends Controller
return redirect()
->back()
->with('error', __('There were no expired suspensions (or no suspensions at all) to purge.'));
}
public function endAbsencesNow(AbsenceService $service)

View File

@@ -25,14 +25,14 @@ use App\Exceptions\EmptyFormException;
use App\Exceptions\FormHasConstraintsException;
use App\Form;
use App\Services\FormManagementService;
use ContextAwareValidator;
use Illuminate\Http\Request;
class FormController extends Controller
{
private $formService;
public function __construct(FormManagementService $formService) {
public function __construct(FormManagementService $formService)
{
$this->formService = $formService;
}
@@ -56,17 +56,14 @@ class FormController extends Controller
{
try {
$form = $this->formService->addForm($request->all());
}
catch (EmptyFormException $ex)
{
} catch (EmptyFormException $ex) {
return redirect()
->back()
->with('exception', $ex->getMessage());
}
// Form is boolean or array
if ($form)
{
if ($form) {
return redirect()
->back()
->with('success', __('Form created!'));
@@ -81,18 +78,15 @@ class FormController extends Controller
{
$this->authorize('delete', $form);
try {
$this->formService->deleteForm($form);
return redirect()
->back()
->with('success', __('Form deleted successfuly'));
} catch (FormHasConstraintsException $ex) {
return redirect()
->back()
->with('error', $ex->getMessage());
}
}

View File

@@ -24,20 +24,17 @@ namespace App\Http\Controllers;
use App\Exceptions\InvalidGamePreferenceException;
use App\Exceptions\OptionNotFoundException;
use App\Facades\Options;
use App\Options as Option;
use App\Services\ConfigurationService;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Log;
class OptionsController extends Controller
{
private $configurationService;
public function __construct(ConfigurationService $configurationService) {
public function __construct(ConfigurationService $configurationService)
{
$this->configurationService = $configurationService;
}
/**
@@ -56,16 +53,15 @@ class OptionsController extends Controller
'graceperiod' => Options::getOption('graceperiod'),
'pwExpiry' => Options::getOption('password_expiry'),
'requiresPMC' => Options::getOption('requireGameLicense'),
'enforce2fa' => Options::getOption('force2fa')
'enforce2fa' => Options::getOption('force2fa'),
],
'currentGame' => Options::getOption('currentGame')
'currentGame' => Options::getOption('currentGame'),
]);
}
public function saveSettings(Request $request): \Illuminate\Http\RedirectResponse
{
try {
if (Auth::user()->can('admin.settings.edit')) {
$this->configurationService->saveConfiguration($request->all());
@@ -73,13 +69,10 @@ class OptionsController extends Controller
->back()
->with('success', __('Options updated successfully!'));
}
} catch (OptionNotFoundException | \Exception $ex) {
} catch (OptionNotFoundException|\Exception $ex) {
return redirect()
->back()
->with('error', $ex->getMessage());
}
return redirect()
@@ -90,12 +83,11 @@ class OptionsController extends Controller
public function saveGameIntegration(Request $request)
{
try {
$this->configurationService->saveGameIntegration($request->gamePref);
return redirect()
->back()
->with('success', __('Game preference updated.'));
} catch (InvalidGamePreferenceException $ex) {
return redirect()
->back()

View File

@@ -21,8 +21,6 @@
namespace App\Http\Controllers;
use App\Exceptions\ProfileAlreadyExistsException;
use App\Exceptions\ProfileCreationFailedException;
use App\Exceptions\ProfileNotFoundException;
use App\Facades\IP;
use App\Http\Requests\ProfileSave;
@@ -32,13 +30,13 @@ use App\User;
use Carbon\Carbon;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Spatie\Permission\Models\Role;
class ProfileController extends Controller
{
private ProfileService $profileService;
public function __construct(ProfileService $profileService) {
public function __construct(ProfileService $profileService)
{
$this->profileService = $profileService;
}
@@ -60,27 +58,22 @@ class ProfileController extends Controller
public function showSingleProfile(AccountSuspensionService $accountSuspensionService, User $user)
{
if (is_null($user->profile)) {
return redirect()
->back()
->with('error', "This user doesn't have a profile.");
}
$socialMediaProfiles = json_decode($user->profile->socialLinks, true);
$createdDate = Carbon::parse($user->created_at);
$suspensionInfo = null;
if ($accountSuspensionService->isSuspended($user))
{
if ($accountSuspensionService->isSuspended($user)) {
$suspensionInfo = [
'isPermanent' => $user->bans->isPermanent,
'reason' => $user->bans->reason,
'bannedUntil' => $user->bans->bannedUntil
'bannedUntil' => $user->bans->bannedUntil,
];
}
@@ -94,7 +87,7 @@ class ProfileController extends Controller
'discord' => $socialMediaProfiles['links']['discord'] ?? 'UpdateMe#12345',
'since' => $createdDate->englishMonth.' '.$createdDate->year,
'ipInfo' => IP::lookup($user->currentIp),
'suspensionInfo' => $suspensionInfo
'suspensionInfo' => $suspensionInfo,
]);
} else {
abort(403, __('You cannot view someone else\'s profile.'));
@@ -104,23 +97,20 @@ class ProfileController extends Controller
public function saveProfile(ProfileSave $request)
{
$this->profileService->updateProfile(Auth::user()->id, $request);
return redirect()
->back()
->with('success', __('Profile updated.'));
}
public function createProfile(Request $request)
{
try {
$this->profileService->createProfile($request->user());
} catch (\Exception $e) {
return redirect()
->back()
->with('error', $e->getMessage());
}
return redirect()
@@ -128,24 +118,18 @@ class ProfileController extends Controller
->with('success', __('Your profile has been created.'));
}
public function deleteProfile(Request $request)
{
try {
$this->profileService->deleteProfile($request->user());
} catch (ProfileNotFoundException $e) {
return redirect()
->back()
->with('error', $e->getMessage());
}
return redirect()
->back()
->with('success', __('Profile deleted successfully.'));
}
}

View File

@@ -2,34 +2,29 @@
namespace App\Http\Controllers;
use App\Facades\Options;
use App\Http\Requests\SaveSecuritySettings;
use App\Services\SecuritySettingsService;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Log;
use function PHPSTORM_META\map;
class SecuritySettingsController extends Controller
{
private $securityService;
public function __construct(SecuritySettingsService $securityService) {
public function __construct(SecuritySettingsService $securityService)
{
$this->securityService = $securityService;
}
public function save(SaveSecuritySettings $request)
{
$this->securityService->save($request->secPolicy, [
'graceperiod' => $request->graceperiod,
'pwExpiry' => $request->pwExpiry,
'enforce2fa' => $request->enforce2fa,
'requirePMC' => $request->requirePMC
'graceperiod' => $request->graceperiod,
'pwExpiry' => $request->pwExpiry,
'enforce2fa' => $request->enforce2fa,
'requirePMC' => $request->requirePMC,
]);
return redirect()
->back()
->with('success', __('Settings saved.'));
}
}

View File

@@ -27,7 +27,6 @@ use App\Exceptions\UserAlreadyInvitedException;
use App\Http\Requests\EditTeamRequest;
use App\Http\Requests\NewTeamRequest;
use App\Http\Requests\SendInviteRequest;
use App\Mail\InviteToTeam;
use App\Services\TeamService;
use App\Team;
use App\User;
@@ -35,22 +34,19 @@ use App\Vacancy;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Mail;
use Mpociot\Teamwork\Exceptions\UserNotInTeamException;
use Mpociot\Teamwork\Facades\Teamwork;
use Mpociot\Teamwork\TeamInvite;
class TeamController extends Controller
{
private $teamService;
public function __construct(TeamService $teamService) {
public function __construct(TeamService $teamService)
{
$this->teamService = $teamService;
}
/**
* Display a listing of the resource.
*
*/
public function index()
{
@@ -65,8 +61,9 @@ class TeamController extends Controller
/**
* Store a newly created resource in storage.
*
* @param NewTeamRequest $request
* @param NewTeamRequest $request
* @return RedirectResponse
*
* @throws \Illuminate\Auth\Access\AuthorizationException
*/
public function store(NewTeamRequest $request)
@@ -82,27 +79,30 @@ class TeamController extends Controller
/**
* Show the form for editing the specified resource.
*
* @param Team $team
* @param Team $team
* @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View|\Illuminate\Http\Response
*
* @throws \Illuminate\Auth\Access\AuthorizationException
*/
public function edit(Team $team)
{
$this->authorize('update', $team);
return view('dashboard.teams.edit-team')
->with([
'team' => $team,
'users' => User::all(),
'vacancies' => Vacancy::with('teams')->get()->all()
'team' => $team,
'users' => User::all(),
'vacancies' => Vacancy::with('teams')->get()->all(),
]);
}
/**
* Update the specified resource in storage.
*
* @param EditTeamRequest $request
* @param Team $team
* @param EditTeamRequest $request
* @param Team $team
* @return RedirectResponse
*
* @throws \Illuminate\Auth\Access\AuthorizationException
*/
public function update(EditTeamRequest $request, Team $team): RedirectResponse
@@ -110,7 +110,6 @@ class TeamController extends Controller
$this->authorize('update', $team);
$team = $this->teamService->updateTeam($team, $request->teamDescription, $request->joinType);
if ($team) {
return redirect()
->to(route('teams.index'))
@@ -138,14 +137,12 @@ class TeamController extends Controller
$this->authorize('invite', $team);
try {
$this->teamService->inviteUser($team, $request->user);
return redirect()
->back()
->with('success', __('User invited successfully!'));
} catch (UserAlreadyInvitedException | PublicTeamInviteException $ex) {
} catch (UserAlreadyInvitedException|PublicTeamInviteException $ex) {
return redirect()
->back()
->with('error', $ex->getMessage());
@@ -155,19 +152,15 @@ class TeamController extends Controller
public function processInviteAction(Request $request, $action, $token): RedirectResponse
{
try {
$this->teamService->processInvite(Auth::user(), $action, $token);
return redirect()
->to(route('teams.index'))
->with('success', __('Invite processed successfully!'));
} catch (InvalidInviteException $e) {
return redirect()
->back()
->with('error', $e->getMessage());
}
}

View File

@@ -4,46 +4,38 @@ namespace App\Http\Controllers;
// Most of these namespaces have no effect on the code, however, they're used by IDEs so they can resolve return types and for PHPDocumentor as well
use App\Exceptions\FileUploadException;
use App\Http\Requests\UploadFileRequest;
use App\Services\TeamFileService;
use App\TeamFile;
use App\Http\Requests\UploadFileRequest;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Storage;
use League\Flysystem\FileNotFoundException;
// Documentation-purpose namespaces
use Illuminate\Contracts\Foundation\Application;
use Illuminate\Contts\View\Factory;
use Illuminate\Contracts\View\View;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Illuminate\Support\Facades\Auth;
// Documentation-purpose namespaces
use Illuminate\Support\Facades\Storage;
use League\Flysystem\FileNotFoundException;
class TeamFileController extends Controller
{
private $fileService;
public function __construct(TeamFileService $fileService) {
public function __construct(TeamFileService $fileService)
{
$this->fileService = $fileService;
}
/**
* Display a listing of the resource.
*
* @param Request $request
* @param Request $request
*/
public function index(Request $request)
{
$this->authorize('index', TeamFile::class);
if (is_null(Auth::user()->currentTeam))
{
if (is_null(Auth::user()->currentTeam)) {
$request->session()->flash('error', __('Please choose a team before viewing it\'s files.'));
return redirect()->to(route('teams.index'));
}
@@ -51,19 +43,17 @@ class TeamFileController extends Controller
->with('files', TeamFile::with('team', 'uploader')->paginate(6));
}
/**
* Store a newly created resource in storage.
*
* @param UploadFileRequest $request
* @param UploadFileRequest $request
* @return RedirectResponse
*/
public function store(UploadFileRequest $request)
{
$this->authorize('store', TeamFile::class);
if (config('demo.is_enabled'))
{
if (config('demo.is_enabled')) {
return redirect()
->back()
->with('error', __('This feature is disabled'));
@@ -78,61 +68,49 @@ class TeamFileController extends Controller
return redirect()
->back()
->with('success', __('File uploaded successfully.'));
} catch (FileUploadException $uploadException) {
return redirect()
->back()
->with('error', $uploadException->getMessage());
}
}
public function download(Request $request, TeamFile $teamFile)
{
$this->authorize('download', TeamFile::class);
try
{
try {
return Storage::download($teamFile->fs_location, $teamFile->name);
}
catch (FileNotFoundException $ex)
{
$request->session()->flash('error', __('Sorry, but the requested file could not be found in storage. Sometimes, files may be physically deleted by admins, but not from the app\'s database.'));
return redirect()->back();
} catch (FileNotFoundException $ex) {
$request->session()->flash('error', __('Sorry, but the requested file could not be found in storage. Sometimes, files may be physically deleted by admins, but not from the app\'s database.'));
return redirect()->back();
}
}
/**
* Remove the specified resource from storage.
*
* @param Request $request
* @param \App\TeamFile $teamFile
* @param Request $request
* @param \App\TeamFile $teamFile
* @return RedirectResponse
*/
public function destroy(Request $request, TeamFile $teamFile)
{
$this->authorize('delete', $teamFile);
if (config('demo.is_enabled'))
{
if (config('demo.is_enabled')) {
return redirect()
->back()
->with('error', __('This feature is disabled'));
}
try
{
try {
Storage::delete($teamFile->fs_location);
$teamFile->delete();
$request->session()->flash('success', __('File deleted successfully.'));
}
catch (\Exception $ex)
{
} catch (\Exception $ex) {
$request->session()->flash('error', __('There was an error deleting the file: :msg', ['msg' => $ex->getMessage()]));
}

View File

@@ -22,7 +22,6 @@
namespace App\Http\Controllers;
use App\Ban;
use App\Facades\IP;
use App\Facades\Options;
use App\Http\Requests\Add2FASecretRequest;
use App\Http\Requests\AddDobRequest;
@@ -44,7 +43,6 @@ use App\Services\AccountSuspensionService;
use App\Services\DiscordService;
use App\Traits\DisablesFeatures;
use App\Traits\HandlesAccountDeletion;
use App\Traits\ReceivesAccountTokens;
use App\User;
use Google2FA;
use Illuminate\Contracts\Foundation\Application;
@@ -61,11 +59,11 @@ class UserController extends Controller
{
use HandlesAccountDeletion, DisablesFeatures;
/**
* Shows list of users
*
* @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View
*
* @throws \Illuminate\Auth\Access\AuthorizationException
*/
public function showUsers()
@@ -80,13 +78,14 @@ class UserController extends Controller
]);
}
/**
* Searches for a player with the given search query.
*
* @deprecated Until Algolia implementation
* @param SearchPlayerRequest $request
*
* @param SearchPlayerRequest $request
* @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View|\Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector
*
* @throws \Illuminate\Auth\Access\AuthorizationException
*/
public function showPlayersLike(SearchPlayerRequest $request)
@@ -115,12 +114,12 @@ class UserController extends Controller
}
}
/**
* Shows the user account's settings page
*
* @param Request $request
* @param Request $request
* @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View
*
* @throws \PragmaRX\Google2FA\Exceptions\IncompatibleWithGoogleAuthenticatorException
* @throws \PragmaRX\Google2FA\Exceptions\InvalidCharactersException
* @throws \PragmaRX\Google2FA\Exceptions\SecretKeyTooShortException
@@ -138,9 +137,9 @@ class UserController extends Controller
}
$QRCode = Google2FA::getQRCodeInline(
config('app.name'),
$request->user()->email,
$twoFactorSecret
config('app.name'),
$request->user()->email,
$twoFactorSecret
);
}
@@ -149,19 +148,18 @@ class UserController extends Controller
->with('twofaQRCode', $QRCode);
}
/**
* Show account management screen
*
* @param AccountSuspensionService $suspensionService
* @param Request $request
* @param User $user
* @param AccountSuspensionService $suspensionService
* @param Request $request
* @param User $user
* @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View
*
* @throws \Illuminate\Auth\Access\AuthorizationException
*/
public function showAcocuntManagement(AccountSuspensionService $suspensionService, Request $request, User $user)
{
$this->authorize('adminEdit', $user);
$systemRoles = Role::all()->pluck('name')->all();
@@ -179,7 +177,7 @@ class UserController extends Controller
return view('dashboard.user.manage')
->with([
'user' => $user,
'user' => $user,
'roles' => $roleList,
'isVerified' => $user->isVerified(),
'isLocked' => $suspensionService->isLocked($user),
@@ -190,15 +188,16 @@ class UserController extends Controller
'suspensionReason' => $suspensionService->getSuspensionReason($user),
'suspensionDuration' => $suspensionService->getSuspensionDuration($user),
'has2FA' => $user->has2FA(),
'applications' => $user->applications()->get()
'applications' => $user->applications()->get(),
]);
}
/**
* Log out other sessions for the current user
*
* @param FlushSessionsRequest $request
* @param FlushSessionsRequest $request
* @return \Illuminate\Http\RedirectResponse
*
* @throws \Illuminate\Auth\AuthenticationException
*/
public function flushSessions(FlushSessionsRequest $request)
@@ -208,23 +207,21 @@ class UserController extends Controller
Auth::logoutOtherDevices($request->currentPasswordFlush);
Log::notice('User '.Auth::user()->name.' has logged out other devices in their account',
[
'originIPAddress' => $request->ip(),
'userID' => Auth::user()->id,
'timestamp' => now(),
]);
[
'originIPAddress' => $request->ip(),
'userID' => Auth::user()->id,
'timestamp' => now(),
]);
$request->session()->flash('success', __('Successfully logged out other devices. Remember to change your password if you think you\'ve been compromised.'));
return redirect()->back();
}
/**
* Change the current user's password
*
* @param ChangePasswordRequest $request
* @param ChangePasswordRequest $request
* @return \Illuminate\Http\RedirectResponse|void
*/
public function changePassword(ChangePasswordRequest $request)
@@ -255,17 +252,15 @@ class UserController extends Controller
}
}
/**
* Sets a new password for the user.
*
* @param SetNewPasswordRequest $request
* @param SetNewPasswordRequest $request
* @return Application|RedirectResponse|Redirector
*/
public function setPassword(SetNewPasswordRequest $request) {
if (!Auth::user()->hasPassword()) {
public function setPassword(SetNewPasswordRequest $request)
{
if (! Auth::user()->hasPassword()) {
Auth::user()->password = Hash::make($request->newpass);
Auth::user()->save();
@@ -281,12 +276,11 @@ class UserController extends Controller
->with('error', __('Your account already has a password.'));
}
/**
* Sets a user's password and removes their discord information from storage
*
* @param User $user
* @param SetNewPasswordRequest $request
* @param User $user
* @param SetNewPasswordRequest $request
* @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector
*/
public function unlinkDiscordAccount(Request $request, DiscordService $discordService)
@@ -295,40 +289,39 @@ class UserController extends Controller
try {
$discordService->revokeAccountTokens(Auth::user());
Log::warning('Revoking social account tokens, user initiated', [
'user' => Auth::user()->email
'user' => Auth::user()->email,
]);
} catch (RequestException $requestException) {
if ($requestException->getCode() == 401) {
return redirect(route('discordRedirect'));
}
Log::error('Error while trying to revoke Discord credentials', [$requestException->getMessage()]);
return redirect()
->back()
->with('error', __('An unknown error ocurred. Please try again later.'));
}
$request->session()->flash('success', __('Discord account unlinked successfully. Link it again by re-authorizing the app with the same account in the login screen, or through your account settings.'));
return redirect()->back();
}
return redirect()
->back()
->with('error', __('Please set a password for your account first before trying to unlink Discord.'));
}
/**
* Change the current user's email address
*
* @param ChangeEmailRequest $request
* @param ChangeEmailRequest $request
* @return \Illuminate\Http\RedirectResponse
*/
public function changeEmail(ChangeEmailRequest $request)
{
$this->disable();
$this->disable();
$user = User::find(Auth::user()->id);
@@ -351,16 +344,16 @@ class UserController extends Controller
return redirect()->back();
}
/**
* Removes the user's password and notifies them.
*
* @param User $user The user to remove the password for
* @param User $user The user to remove the password for
* @return \Illuminate\Http\RedirectResponse
*
* @throws \Illuminate\Auth\Access\AuthorizationException
*/
public function forcePasswordReset(User $user) {
public function forcePasswordReset(User $user)
{
$this->authorize('adminEdit', $user);
if ($user->hasPassword()) {
@@ -369,10 +362,9 @@ class UserController extends Controller
$user->password = null;
$user->save();
Log::alert("Removed account password", [
Log::alert('Removed account password', [
'target' => $user,
'actor' => Auth::user()
'actor' => Auth::user(),
]);
return redirect()
@@ -385,15 +377,14 @@ class UserController extends Controller
->with('error', __('This user doesn\'t have a password to reset.'));
}
/**
* Adds a user's date of birth if they don't have one.
*
* @param AddDobRequest $request
* @param AddDobRequest $request
* @return RedirectResponse
*/
public function addDob(AddDobRequest $request) {
public function addDob(AddDobRequest $request)
{
Auth::user()->dob = $request->dob;
Auth::user()->save();
@@ -401,13 +392,13 @@ class UserController extends Controller
->back();
}
/**
* Delete the given user's account
*
* @param DeleteUserRequest $request
* @param User $user
* @param DeleteUserRequest $request
* @param User $user
* @return \Illuminate\Http\RedirectResponse
*
* @throws \Illuminate\Auth\Access\AuthorizationException
*/
public function delete(DeleteUserRequest $request, User $user)
@@ -426,13 +417,13 @@ class UserController extends Controller
return redirect()->route('registeredPlayerList');
}
/**
* Update a given user's details
*
* @param UpdateUserRequest $request
* @param User $user
* @param UpdateUserRequest $request
* @param User $user
* @return \Illuminate\Http\RedirectResponse
*
* @throws \Illuminate\Auth\Access\AuthorizationException
*/
public function update(UpdateUserRequest $request, User $user)
@@ -470,12 +461,12 @@ class UserController extends Controller
return redirect()->back();
}
/**
* Generate and add a 2FA secret for the current user
*
* @param Add2FASecretRequest $request
* @param Add2FASecretRequest $request
* @return \Illuminate\Http\RedirectResponse
*
* @throws \PragmaRX\Google2FA\Exceptions\IncompatibleWithGoogleAuthenticatorException
* @throws \PragmaRX\Google2FA\Exceptions\InvalidCharactersException
* @throws \PragmaRX\Google2FA\Exceptions\SecretKeyTooShortException
@@ -522,11 +513,10 @@ class UserController extends Controller
return redirect()->back();
}
/**
* Remove the current user's two factor secret key
*
* @param Remove2FASecretRequest $request
* @param Remove2FASecretRequest $request
* @return \Illuminate\Http\RedirectResponse
*/
public function remove2FASecret(Remove2FASecretRequest $request)
@@ -544,15 +534,15 @@ class UserController extends Controller
return redirect()->back();
}
/**
* Remove the given user's two factor secret key
*
* @param Reset2FASecretRequest $request
* @param User $user
* @param Reset2FASecretRequest $request
* @param User $user
* @return \Illuminate\Http\RedirectResponse
*/
public function reset2FASecret(Reset2FASecretRequest $request, User $user) {
public function reset2FASecret(Reset2FASecretRequest $request, User $user)
{
// note: could invalidate other sessions for increased security
if ($user->has2FA()) {
Log::warning('SECURITY: Disabling two factor authentication (admin initiated)', [
@@ -580,10 +570,11 @@ class UserController extends Controller
/**
* Suspend the given user
*
* @param AccountSuspensionService $suspensionService
* @param BanUserRequest $request
* @param User $user
* @param AccountSuspensionService $suspensionService
* @param BanUserRequest $request
* @param User $user
* @return \Illuminate\Http\RedirectResponse
*
* @throws \Illuminate\Auth\Access\AuthorizationException
*/
public function suspend(AccountSuspensionService $suspensionService, BanUserRequest $request, User $user)
@@ -591,17 +582,15 @@ class UserController extends Controller
$this->authorize('create', [Ban::class, $user]);
$this->disable();
if ($suspensionService->isSuspended($user))
{
if ($suspensionService->isSuspended($user)) {
return redirect()
->back()
->with('error', __('Account already suspended.'));
}
if ($request->suspensionType = "on") {
if ($request->suspensionType = 'on') {
$suspensionService->suspend($user, $request->reason, $request->duration);
}
else {
} else {
$suspensionService->suspend($user, $request->reason);
}
@@ -611,10 +600,11 @@ class UserController extends Controller
/**
* Unsuspend the given user
*
* @param AccountSuspensionService $suspensionService
* @param Request $request
* @param User $user
* @param AccountSuspensionService $suspensionService
* @param Request $request
* @param User $user
* @return \Illuminate\Http\RedirectResponse
*
* @throws \Illuminate\Auth\Access\AuthorizationException
*/
public function unsuspend(AccountSuspensionService $suspensionService, Request $request, User $user)
@@ -623,15 +613,12 @@ class UserController extends Controller
$this->disable();
if ($suspensionService->isSuspended($user)) {
$suspensionService->unsuspend($user);
$request->session()->flash('success', __('Account unsuspended successfully!'));
} else {
$request->session()->flash('error', __('This account isn\'t suspended!'));
}
return redirect()->back();
}
}

View File

@@ -21,7 +21,6 @@
namespace App\Http\Controllers;
use App\Facades\JSON;
use App\Form;
use App\Http\Requests\VacancyEditRequest;
use App\Http\Requests\VacancyRequest;
@@ -50,8 +49,6 @@ class VacancyController extends Controller
$messageIsError = false;
$this->authorize('create', Vacancy::class);
$form = Form::find($request->vacancyFormID);
if (! is_null($form)) {
@@ -71,12 +68,11 @@ class VacancyController extends Controller
'vacancyFormID' => $request->vacancyFormID,
'vacancyCount' => $request->vacancyCount,
'requiresDiscord' => $request->requireDiscordAccount == 'on',
'requiredAge' => $request->requiredAge
'requiredAge' => $request->requiredAge,
]);
$message = __('Vacancy successfully opened. It will now show in the home page.');
} else {
$message = __('You cannot create a vacancy without a valid form.');
$messageIsError = true;
@@ -108,12 +104,9 @@ class VacancyController extends Controller
break;
default:
$message = __("Please do not tamper with the URLs. To report a bug, please contact an administrator.");
$message = __('Please do not tamper with the URLs. To report a bug, please contact an administrator.');
$type = 'error';
}
} else {
$message = __("The position you're trying to update doesn't exist!");
$type = 'error';
@@ -126,7 +119,6 @@ class VacancyController extends Controller
return redirect()
->back()
->with($type, $message);
}
public function edit(Request $request, Vacancy $vacancy)
@@ -141,7 +133,7 @@ class VacancyController extends Controller
{
$this->authorize('update', $vacancy);
$vacancy->vacancyFullDescription = $request->vacancyFullDescription;
$vacancy->vacancyFullDescription = $request->vacancyFullDescription;
$vacancy->vacancyDescription = $request->vacancyDescription;
$vacancy->vacancyCount = $request->vacancyCount;
$vacancy->requiresDiscord = $request->requireDiscordAccount == 'on';
@@ -159,7 +151,6 @@ class VacancyController extends Controller
$this->authorize('delete', $vacancy);
if ($vacancy->teams->isEmpty()) {
$vacancy->delete();
return redirect()