AdvertPasswordResetManager
in package
uses
AdvertPasswordResetTrait
"Forgot advert password" of a Comcat company profile placed without an account: one-time link instead of a plain-text password ({@see AdvertPasswordResetTrait}).
Manager tier beside AdvertManager (reads and column writes go through it), reached
from :Api:Comcat:Advert:sendPasswordReset / :Api:Comcat:Advert:resetPassword.
Table of Contents
Properties
- $advertManager : AdvertManager
- $appContext : AppContext
- $emailManager : EmailManager
- $passwordHasher : PasswordHasher
- $rateLimit : RateLimit
- $rateLimitConfig : RateLimitConfig
Methods
- __construct() : mixed
- resetPassword() : Result
- `USER_PASSWORD_RESET_KEY_INVALID` for an unknown advert and for a wrong, expired or used token alike; `INVALID_LENGTH` for a short password (the token is not consumed then).
- sendPasswordReset() : Result
- Always `success(OK)` — whether the advert exists, the e-mail matches, the limit was hit or the delivery failed. Internal failures go to the `email` / `auth` log only.
- deliverPasswordResetLink() : Result
- findAdvertForReset() : Advert|null
- getDetailSlug() : int
- getEditSlug() : int
- getFrontPresenter() : string
- getResetEmailKey() : string
- getResetModule() : string
- passesResetLimit() : bool
- passesSendLimit() : bool
- Two dimensions, both must pass (values of `ratelimit.sendNewPassword`): per advert stops a botnet flooding one owner, per IP stops one client walking many adverts. The IP is hashed.
- updateAdvertColumns() : Result
Properties
$advertManager read-only
private
AdvertManager
$advertManager
$appContext read-only
private
AppContext
$appContext
$emailManager read-only
private
EmailManager
$emailManager
$passwordHasher read-only
private
PasswordHasher
$passwordHasher
$rateLimit read-only
private
RateLimit
$rateLimit
$rateLimitConfig read-only
private
RateLimitConfig
$rateLimitConfig
Methods
__construct()
public
__construct(AdvertManager $advertManager, EmailManager $emailManager, PasswordHasher $passwordHasher, RateLimit $rateLimit, RateLimitConfig $rateLimitConfig, AppContext $appContext) : mixed
Parameters
- $advertManager : AdvertManager
- $emailManager : EmailManager
- $passwordHasher : PasswordHasher
- $rateLimit : RateLimit
- $rateLimitConfig : RateLimitConfig
- $appContext : AppContext
resetPassword()
`USER_PASSWORD_RESET_KEY_INVALID` for an unknown advert and for a wrong, expired or used token alike; `INVALID_LENGTH` for a short password (the token is not consumed then).
public
resetPassword(int $advertId, string $key, string $password, string|null $ip) : Result
Success writes the hash and clears the token — the link works once.
Parameters
- $advertId : int
- $key : string
- $password : string
- $ip : string|null
Return values
ResultsendPasswordReset()
Always `success(OK)` — whether the advert exists, the e-mail matches, the limit was hit or the delivery failed. Internal failures go to the `email` / `auth` log only.
public
sendPasswordReset(int $advertId, string $email, string|null $ip) : Result
Parameters
- $advertId : int
- $email : string
- $ip : string|null
Return values
ResultdeliverPasswordResetLink()
private
deliverPasswordResetLink(int $advertId, string $email, string $advertName, array<string, mixed> $previous) : Result
Parameters
- $advertId : int
- $email : string
- $advertName : string
- $previous : array<string, mixed>
-
token columns before this request (fresh from the DB)
Return values
ResultfindAdvertForReset()
private
findAdvertForReset(int $advertId) : Advert|null
Parameters
- $advertId : int
Return values
Advert|nullgetDetailSlug()
private
getDetailSlug() : int
Return values
intgetEditSlug()
private
getEditSlug() : int
Return values
intgetFrontPresenter()
private
getFrontPresenter() : string
Return values
stringgetResetEmailKey()
private
getResetEmailKey() : string
Return values
stringgetResetModule()
private
getResetModule() : string
Return values
stringpassesResetLimit()
private
passesResetLimit(string|null $ip) : bool
Parameters
- $ip : string|null
Return values
boolpassesSendLimit()
Two dimensions, both must pass (values of `ratelimit.sendNewPassword`): per advert stops a botnet flooding one owner, per IP stops one client walking many adverts. The IP is hashed.
private
passesSendLimit(int $advertId, string|null $ip) : bool
Parameters
- $advertId : int
- $ip : string|null
Return values
boolupdateAdvertColumns()
private
updateAdvertColumns(int|array<int, array<int|string, mixed>> $advertId, array<string, mixed> $values) : Result
Parameters
- $advertId : int|array<int, array<int|string, mixed>>
-
id, or a compound WHERE for a conditional update
- $values : array<string, mixed>