Skip to content

Commit 45ddb3f

Browse files
committed
Merge branch 'main' of https://github.com/inikoo/aiku into main
2 parents 860c23e + 0c0529b commit 45ddb3f

File tree

12 files changed

+234
-312
lines changed

12 files changed

+234
-312
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
<?php
2+
3+
/*
4+
* Author: Raul Perusquia <[email protected]>
5+
* Created: Fri, 14 Mar 2025 11:46:42 Malaysia Time, Kuala Lumpur, Malaysia
6+
* Copyright (c) 2025, Raul A Perusquia Flores
7+
*/
8+
9+
namespace App\Actions\CRM\WebUser;
10+
11+
use App\Enums\CRM\WebUser\WebUserAuthTypeEnum;
12+
use App\Enums\SysAdmin\User\UserAuthTypeEnum;
13+
use App\Models\CRM\WebUser;
14+
use Illuminate\Support\Arr;
15+
use Lorisleiva\Actions\Concerns\AsAction;
16+
17+
class AuthoriseWebUserWithLegacyPassword
18+
{
19+
use AsAction;
20+
21+
public function handle(WebUser $webUser, array $credentials): bool
22+
{
23+
24+
$legacyPassword = Arr::get($webUser->data, 'legacy_password');
25+
if (!$legacyPassword) {
26+
return false;
27+
}
28+
29+
if (is_null($plain = $credentials['password'])) {
30+
return false;
31+
}
32+
33+
if ($webUser->auth_type != WebUserAuthTypeEnum::AURORA) {
34+
return false;
35+
}
36+
37+
if (!$webUser->status) {
38+
return false;
39+
}
40+
41+
42+
if (hash('sha256', $plain) == $legacyPassword) {
43+
$webUser = UpdateWebUser::run(
44+
$webUser,
45+
[
46+
'password' => $plain,
47+
'auth_type' => UserAuthTypeEnum::DEFAULT
48+
]
49+
);
50+
$data = $webUser->data;
51+
Arr::forget($data, 'legacy_password');
52+
$webUser->data = $data;
53+
$webUser->save();
54+
55+
return true;
56+
}
57+
58+
return false;
59+
}
60+
61+
}

app/Actions/CRM/WebUser/Retina/RetinaLogin.php

+67-64
Original file line numberDiff line numberDiff line change
@@ -8,22 +8,25 @@
88

99
namespace App\Actions\CRM\WebUser\Retina;
1010

11-
use App\Actions\CRM\WebUser\LogWebUserFailLogin;
11+
use App\Actions\CRM\WebUser\AuthoriseWebUserWithLegacyPassword;
1212
use App\Actions\CRM\WebUser\LogWebUserLogin;
13+
use App\Actions\SysAdmin\User\LogUserFailLogin;
14+
use App\Actions\Traits\WithLogin;
15+
use App\Enums\CRM\WebUser\WebUserAuthTypeEnum;
1316
use App\Models\CRM\WebUser;
14-
use Illuminate\Auth\Events\Lockout;
1517
use Illuminate\Http\RedirectResponse;
18+
use Illuminate\Support\Arr;
1619
use Illuminate\Support\Facades\Auth;
1720
use Illuminate\Support\Facades\RateLimiter;
1821
use Illuminate\Support\Facades\Session;
19-
use Illuminate\Support\Str;
2022
use Illuminate\Validation\ValidationException;
2123
use Lorisleiva\Actions\ActionRequest;
2224
use Lorisleiva\Actions\Concerns\AsController;
2325

2426
class RetinaLogin
2527
{
2628
use AsController;
29+
use WithLogin;
2730

2831
private string $gate = 'retina';
2932

@@ -32,32 +35,83 @@ class RetinaLogin
3235
*/
3336
public function handle(ActionRequest $request): RedirectResponse
3437
{
35-
3638
$this->ensureIsNotRateLimited($request);
3739

38-
if (!Auth::guard('retina')->attempt(
39-
array_merge($request->validated(), ['status' => true]),
40-
$request->boolean('remember')
41-
)) {
42-
RateLimiter::hit($this->throttleKey($request));
40+
$websiteId = $request->get('website')->id;
41+
$rememberMe = $request->boolean('remember');
42+
43+
$authorised = false;
44+
$processed = false;
45+
if (config('app.with_user_legacy_passwords')) {
46+
$handle = Arr::get($request->validated(), 'username');
47+
48+
49+
$webUser = WebUser::where('website_id', $websiteId)
50+
->where('status', true)
51+
->where('username', $handle)->first();
52+
if (!$webUser) {
53+
$webUser = WebUser::where('website_id', $websiteId)
54+
->where('status', true)
55+
->where('email', $handle)->first();
56+
}
57+
58+
if ($webUser and $webUser->auth_type == WebUserAuthTypeEnum::AURORA) {
59+
$processed = true;
60+
$authorised = AuthoriseWebUserWithLegacyPassword::run($webUser, $request->validated());
61+
if ($authorised) {
62+
Auth::guard('retina')->login($webUser, $rememberMe);
63+
}
64+
}
65+
}
66+
67+
if (!$processed) {
68+
$credentials = array_merge(
69+
$request->validated(),
70+
[
71+
'website_id' => $websiteId,
72+
'status' => true
73+
]
74+
);
75+
76+
$authorised = Auth::guard('retina')->attempt($credentials, $rememberMe);
77+
4378

79+
if (!$authorised) {
80+
// try now with email
81+
data_set($credentials, 'email', $credentials['username']);
82+
data_forget($credentials, 'username');
4483

45-
LogWebUserFailLogin::run(
46-
$request->get('website'),
84+
$authorised = Auth::guard('retina')->attempt($credentials, $rememberMe);
85+
}
86+
}
87+
88+
if (!$authorised) {
89+
RateLimiter::hit($this->throttleKey($request));
90+
91+
LogUserFailLogin::dispatch(
4792
credentials: $request->validated(),
4893
ip: request()->ip(),
4994
userAgent: $request->header('User-Agent'),
5095
datetime: now()
5196
);
5297

53-
54-
5598
throw ValidationException::withMessages([
5699
'username' => trans('auth.failed'),
57100
]);
58101
}
59102

103+
RateLimiter::clear($this->throttleKey($request));
60104

105+
$retinaHome = 'app/dashboard';
106+
if ($ref = $request->get('ref')) {
107+
$retinaHome = $ref;
108+
}
109+
110+
return $this->postProcessRetinaLogin($request, $retinaHome);
111+
}
112+
113+
public function postProcessRetinaLogin($request, $retinaHome): RedirectResponse
114+
{
61115
RateLimiter::clear($this->throttleKey($request));
62116

63117
/** @var WebUser $webUser */
@@ -80,58 +134,7 @@ public function handle(ActionRequest $request): RedirectResponse
80134
app()->setLocale($language->code);
81135
}
82136

83-
$retinaHome = 'app/dashboard';
84-
if ($ref = $request->get('ref')) {
85-
$retinaHome = $ref;
86-
}
87-
88137
return redirect()->intended($retinaHome);
89138
}
90139

91-
public function rules(): array
92-
{
93-
return [
94-
'username' => ['required', 'string'],
95-
'password' => ['required', 'string'],
96-
];
97-
}
98-
99-
/**
100-
* @throws \Illuminate\Validation\ValidationException
101-
*/
102-
public function asController(ActionRequest $request): RedirectResponse
103-
{
104-
return $this->handle($request);
105-
}
106-
107-
108-
/**
109-
* @throws \Illuminate\Validation\ValidationException
110-
*/
111-
public function ensureIsNotRateLimited(ActionRequest $request): void
112-
{
113-
if (!RateLimiter::tooManyAttempts($this->throttleKey($request), 5)) {
114-
return;
115-
}
116-
117-
event(new Lockout($request));
118-
119-
$seconds = RateLimiter::availableIn($this->throttleKey($request));
120-
121-
throw ValidationException::withMessages([
122-
'username' => trans('auth.throttle', [
123-
'seconds' => $seconds,
124-
'minutes' => ceil($seconds / 60),
125-
]),
126-
]);
127-
}
128-
129-
/**
130-
* Get the rate limiting throttle key for the request.
131-
*/
132-
public function throttleKey(ActionRequest $request): string
133-
{
134-
return Str::transliterate(Str::lower($request->input('username')).'|'.$request->ip());
135-
}
136-
137140
}

app/Actions/CRM/WebUser/Retina/RetinaRegister.php

-133
This file was deleted.

app/Actions/Fulfilment/FulfilmentCustomer/Hydrators/FulfilmentCustomerHydrateStatus.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ public function handle(FulfilmentCustomer $fulfilmentCustomer): void
6363
protected function getStatusWhenActiveRentalAgreement(FulfilmentCustomer $fulfilmentCustomer): FulfilmentCustomerStatusEnum
6464
{
6565

66-
$status=FulfilmentCustomerStatusEnum::ACTIVE;
66+
$status = FulfilmentCustomerStatusEnum::ACTIVE;
6767

6868
$createdAt = $fulfilmentCustomer->rentalAgreement->created_at;
6969
if ($createdAt->lessThan($createdAt->addMonths(3))

0 commit comments

Comments
 (0)