CoolCMS API

AdvertPasswordResetManager
in package
uses AdvertPasswordResetTrait

FinalYes

"Forgot advert password" of a Bazaar advert 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:Bazaar:Advert:sendPasswordReset / :Api:Bazaar: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

Methods

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
Result

sendPasswordReset()

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
Result
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
Result

passesResetLimit()

private passesResetLimit(string|null $ip) : bool
Parameters
$ip : string|null
Return values
bool

passesSendLimit()

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
bool

updateAdvertColumns()

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>
Return values
Result
On this page

Search results