From a5c3bf71785ea2bdb83b35978c3447481bf0afc3 Mon Sep 17 00:00:00 2001 From: ro Date: Thu, 17 Apr 2025 17:14:15 -0600 Subject: [PATCH] admin account set up after the site is installed and the DB set up, there needed to be a way to create the first account that will be used as the admin to access the den, the admin section of tbs the system makes a check to see if this account exists and if there isn't one present, it shows the admin account set up screen on the index. it goes away after the account is created. --- app/Http/Controllers/FrontIndexController.php | 34 +++-- app/Http/Controllers/MemberController.php | 28 +++++ app/Repositories/MemberRepository.php | 44 +++++-- resources/views/back/member.blade.php | 79 +++++++----- resources/views/forms/member-edit.blade.php | 119 ++++++++++-------- routes/web.php | 1 + 6 files changed, 194 insertions(+), 111 deletions(-) diff --git a/app/Http/Controllers/FrontIndexController.php b/app/Http/Controllers/FrontIndexController.php index 0a94782..f61943a 100644 --- a/app/Http/Controllers/FrontIndexController.php +++ b/app/Http/Controllers/FrontIndexController.php @@ -6,39 +6,49 @@ use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; use App\Repositories\LocationRepository; use App\Repositories\SourceRepository; +use App\Repositories\MemberRepository; use App\Services\PaginationService; class FrontIndexController extends Controller { protected $location; protected $source; + protected $member; protected $pagination; public function __construct( LocationRepository $locationRepository, SourceRepository $sourceRepository, + MemberRepository $memberRepository, PaginationService $paginationService ) { $this->location = $locationRepository; $this->source = $sourceRepository; + $this->member = $memberRepository; $this->pagination = $paginationService; } public function start() { - //for fresh installs that dont have any source data yet - $latest_update = 'Never Run'; - if(count($this->location->getRecent()) != 0) - { - $latest_update = $this->location->getRecent()[0]->updated_at->format('Y M d'); + //check to see if there are any accounts + if (count($this->member->getAll()) == 0) { + return view('back.member', [ + 'mode' => 'admin-create', + 'title' => "Welcome, welcome"]); + } else { + //for fresh installs that dont have any source data yet + $latest_update = 'Never Run'; + if (count($this->location->getRecent()) != 0) { + $latest_update = $this->location->getRecent()[0]->updated_at->format('Y M d'); + } + return view('front.index', [ + 'count' => count($this->location->getActiveLocations()), + 'sources' => count($this->source->getActive()), + 'recent' => $this->location->getRecent(), + 'latest_date' => $latest_update, + 'title' => "The Bad Space" + ]); } - return view('front.index', [ - 'count' => count($this->location->getActiveLocations()), - 'sources' => count($this->source->getActive()), - 'recent' => $this->location->getRecent(), - 'latest_date' => $latest_update, - 'title' => "The Bad Space" - ]); } public function indexSearch(Request $request) diff --git a/app/Http/Controllers/MemberController.php b/app/Http/Controllers/MemberController.php index 9458ba9..2000dfb 100644 --- a/app/Http/Controllers/MemberController.php +++ b/app/Http/Controllers/MemberController.php @@ -151,4 +151,32 @@ class MemberController extends Controller return back()->withErrors(['Nah, you can\'t do this. Wrong permissions.']); } } + + public function adminCreate(Request $request) + { + //should only be run of no members exist + if (count($this->member->getAll()) == 0) { + $token = csrf_token(); + $valid = $request->validate([ + 'handle' => ['required'], + 'email' => ['required'], + 'pronouns' => ['required'], + 'fresh_pass' => ['required'], + 'fresh_pass_confirm' => ['required'], + ]); + + if ($valid) { + $response = $this->member->add($request); + if ($response['status'] == true) { + return redirect('/den/member')->with('message', $response['message']); + } else { + return back()->withErrors([$response['message']]); + } + } else { + return back()->withErrors(['Misssing some required info, homie.']); + } + } else { + return back()->withErrors(['Shame on you for even trying that.']); + } + } } diff --git a/app/Repositories/MemberRepository.php b/app/Repositories/MemberRepository.php index bbb7305..2c0a1ab 100644 --- a/app/Repositories/MemberRepository.php +++ b/app/Repositories/MemberRepository.php @@ -60,25 +60,43 @@ class MemberRepository public function add($request) { - $password = []; + $password = []; + $newFriend = []; if ($request->fresh_pass === $request->fresh_pass_confirm) { $password = Hash::make($request->fresh_pass); } else { return ['status' => false, 'message' => "Passwords Do Not Match"]; } - $newFriend = $this->model::create([ - 'uuid' => Uuid::uuid4(), - 'avatar' => 'default-member-avatar', - 'handle' => $request->handle, - 'email' => $request->email, - 'pronoun' => $request->pronouns, - 'role' => $request->role, - 'active' => $request->status, - 'password' => $password, - 'created_at' => Carbon::now(), - 'last_login' => Carbon::now(), - ]); + //if role paramter is set, not an admin add + if (isset($request->role)) { + $newFriend = $this->model::create([ + 'uuid' => Uuid::uuid4(), + 'avatar' => 'default-member-avatar', + 'handle' => $request->handle, + 'email' => $request->email, + 'pronoun' => $request->pronouns, + 'role' => $request->role, + 'active' => $request->status, + 'password' => $password, + 'created_at' => Carbon::now(), + 'last_login' => Carbon::now(), + ]); + } else { + //set up admin + $newFriend = $this->model::create([ + 'uuid' => Uuid::uuid4(), + 'avatar' => 'default-member-avatar', + 'handle' => $request->handle, + 'email' => $request->email, + 'pronoun' => $request->pronouns, + 'role' => 0, + 'active' => true, + 'password' => $password, + 'created_at' => Carbon::now(), + 'last_login' => Carbon::now(), + ]); + } if ($newFriend) { return ['status' => true, 'message' => "New Friend Made!"]; diff --git a/resources/views/back/member.blade.php b/resources/views/back/member.blade.php index 1f3b1de..44803de 100644 --- a/resources/views/back/member.blade.php +++ b/resources/views/back/member.blade.php @@ -2,38 +2,51 @@ @section('title', 'Den | Member Admin') - @php - if($mode == 'member-create') - { - $action_url = '/den/member/create'; - }else{ - $action_url = '/den/member/edit'; - } - @endphp - @section('main-content') -
-
- @switch($mode) - @case('member-edit') -

Edit Info for {{$member->handle}}

- @include('forms.member-edit') -
- @break + @php + switch($mode) + { + case 'member-create': + $action_url = '/den/member/create'; + break; + case 'member-edit': + $action_url = '/den/member/edit'; + break; + case 'admin-create': + $action_url = '/den/member/admin-create'; + break; + } + @endphp + @section('main-content') +
+
+ @switch($mode) + @case('member-edit') +

Edit Info for {{$member->handle}}

+ @include('forms.member-edit') +
+ @break - @case('member-create') -

New Member Info

- @include('forms.member-edit') -
- @break + @case('member-create') +

New Member Info

+ @include('forms.member-edit') +
+ @break - @default -

Member Listing

- @foreach($members as $member) - {{$member->handle}}
- @endforeach -

Add Member

- Make a new friend
- @endswitch -
-
- @endsection \ No newline at end of file + @case('admin-create') +

Make your first account

+ *This will be your administrator account. + @include('forms.member-edit') +
+ @break + + @default +

Member Listing

+ @foreach($members as $member) + {{$member->handle}}
+ @endforeach +

Add Member

+ Make a new friend
+ @endswitch +
+
+ @endsection \ No newline at end of file diff --git a/resources/views/forms/member-edit.blade.php b/resources/views/forms/member-edit.blade.php index 3d8c7c2..5d1942b 100644 --- a/resources/views/forms/member-edit.blade.php +++ b/resources/views/forms/member-edit.blade.php @@ -1,61 +1,74 @@
-
- @php +
+ @php isset($avatar) ? $avi = $avatar : $avi = ''; - @endphp - -
-
- @php + @endphp + +
+
+ @php isset($member->handle) ? $handle = $member->handle : $handle = ''; - @endphp - -
- @php + @endphp + +
+ @php isset($member->email) ? $email = $member->email : $email = ''; - @endphp -
- -
- @php + @endphp +
+ +
+ @php isset($member->pronoun) ? $pronoun = $member->pronoun : $pronoun = ''; - @endphp -
- -
- @php - isset($member->role) ? $role = $member->role : $role = 2; - @endphp -
- -
- @if($mode == 'member-create') -
- -
-
- -
- @endif - @php + @endphp +
+ +
+ @php + isset($member->role) ? $role = $member->role : $role = 2; + //for creation of initial admin account + if($mode == 'admin-create') + { + $role = 0; + } + @endphp + + @if($mode != 'admin-create') +
+ +
+ @endif + + @if($mode == 'member-create' || $mode == 'admin-create') +
+ +
+
+ +
+ @endif + @php isset($member->active) ? $status = $member->active : $status = false; - @endphp -
- -
-
- @csrf - @php + @endphp + + @if($mode != 'admin-create') +
+ +
+ @endif + +
+ @csrf + @php isset($member->uuid) ? $uuid = $member->uuid : $uuid = 0; - @endphp - - + @endphp + +
\ No newline at end of file diff --git a/routes/web.php b/routes/web.php index 9c65116..74a4b84 100644 --- a/routes/web.php +++ b/routes/web.php @@ -28,6 +28,7 @@ Route::get("/location/{uuid}", [FrontIndexController::class, 'location']); Route::get("/appeals", [FrontIndexController::class, 'appeals']); Route::post("/search", [FrontIndexController::class, 'indexSearch']); Route::post("/appeal", [AppealController::class, 'sendAppeal']); +Route::post("/den/member/admin-create", [MemberController::class, 'adminCreate']); //exports Route::get("/exports", [ExportController::class, 'exportIndex']);