1
0
Fork 0
mirror of https://we.phorge.it/source/phorge.git synced 2025-03-28 20:18:13 +01:00
phorge-phorge/src/applications/auth/management/PhabricatorAuthManagementUnlimitWorkflow.php
Andre Klapper 2c7be156a8 Fix PHP 8.1 "strlen(null)" exception for "/bin/auth unlimit" without parameter
Summary:
`strlen()` was used in Phabricator to check if a generic value is a non-empty string.
This behavior is deprecated since PHP 8.1. Phorge adopts `phutil_nonempty_string()` as a replacement.

Note: this may highlight other absurd input values that might be worth correcting
instead of just ignoring. If phutil_nonempty_string() throws an exception in your
instance, report it to Phorge to evaluate and fix that specific corner case.

```
ERROR 8192: strlen(): Passing null to parameter #1 ($string) of type string is deprecated at [/var/www/html/phorge/phorge/src/applications/auth/management/PhabricatorAuthManagementUnlimitWorkflow.php:30]
```

Test Plan: Run `../phorge/bin/auth unlimit`: Get no `strlen()` error anymore but only expected output `Usage Exception: Use --user to choose a user to reset actions for.`

Reviewers: O1 Blessed Committers, valerio.bozzolan

Reviewed By: O1 Blessed Committers, valerio.bozzolan

Subscribers: tobiaswiese, valerio.bozzolan, Matthew, Cigaryno

Differential Revision: https://we.phorge.it/D25582
2024-04-17 00:37:32 +02:00

67 lines
1.8 KiB
PHP

<?php
final class PhabricatorAuthManagementUnlimitWorkflow
extends PhabricatorAuthManagementWorkflow {
protected function didConstruct() {
$this
->setName('unlimit')
->setExamples('**unlimit** --user __username__ --all')
->setSynopsis(
pht(
'Reset action counters so a user can continue taking '.
'rate-limited actions.'))
->setArguments(
array(
array(
'name' => 'user',
'param' => 'username',
'help' => pht('Reset action counters for this user.'),
),
array(
'name' => 'all',
'help' => pht('Reset all counters.'),
),
));
}
public function execute(PhutilArgumentParser $args) {
$username = $args->getArg('user');
if (!phutil_nonempty_string($username)) {
throw new PhutilArgumentUsageException(
pht(
'Use %s to choose a user to reset actions for.', '--user'));
}
$user = id(new PhabricatorPeopleQuery())
->setViewer($this->getViewer())
->withUsernames(array($username))
->executeOne();
if (!$user) {
throw new PhutilArgumentUsageException(
pht(
'No user exists with username "%s".',
$username));
}
$all = $args->getArg('all');
if (!$all) {
// TODO: Eventually, let users reset specific actions. For now, we
// require `--all` so that usage won't change when you can reset in a
// more tailored way.
throw new PhutilArgumentUsageException(
pht(
'Specify %s to reset all action counters.', '--all'));
}
$count = PhabricatorSystemActionEngine::resetActions(
array(
$user->getPHID(),
));
echo pht('Reset %s action(s).', new PhutilNumber($count))."\n";
return 0;
}
}