mirror of
https://github.com/archtechx/tenancy.git
synced 2026-05-06 18:04:03 +00:00
Add validateFilename()
Use validateFilename instead of validateParameter in SQLiteDatabaseManager. Directories are no longer considered valid SQLite database names.
This commit is contained in:
parent
2bd3a868ec
commit
76c324d758
3 changed files with 37 additions and 18 deletions
|
|
@ -28,6 +28,16 @@ trait ValidatesDatabaseParameters
|
|||
return 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_-';
|
||||
}
|
||||
|
||||
/**
|
||||
* Characters allowed in filenames (SQLite databases).
|
||||
*
|
||||
* Allows dots to support file extensions (e.g. '.sqlite').
|
||||
*/
|
||||
protected static function filenameAllowlist(): string
|
||||
{
|
||||
return 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_-.';
|
||||
}
|
||||
|
||||
/**
|
||||
* Characters allowed in database user passwords.
|
||||
*
|
||||
|
|
@ -66,7 +76,7 @@ trait ValidatesDatabaseParameters
|
|||
|
||||
foreach (str_split($parameter) as $char) {
|
||||
if (! str_contains($allowlist, $char)) {
|
||||
throw new InvalidArgumentException("Forbidden character '{$char}' in database parameter.");
|
||||
throw new InvalidArgumentException("Forbidden character '{$char}' in parameter.");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -75,8 +85,8 @@ trait ValidatesDatabaseParameters
|
|||
/**
|
||||
* Ensure password only contains allowed characters before used in SQL statements.
|
||||
*
|
||||
* Used as a shorthand for calling validateParameter() with the less strict allowlist
|
||||
* to validate database user passwords.
|
||||
* Used in permission controlled managers as a shorthand for calling validateParameter()
|
||||
* with the less strict allowlist to validate database user passwords.
|
||||
*
|
||||
* @throws InvalidArgumentException
|
||||
*/
|
||||
|
|
@ -84,4 +94,20 @@ trait ValidatesDatabaseParameters
|
|||
{
|
||||
$this->validateParameter($password, static::passwordAllowlist());
|
||||
}
|
||||
|
||||
/**
|
||||
* Ensure filename only contains allowed characters and is not a directory name
|
||||
* before used in file paths (e.g. SQLite databases).
|
||||
*
|
||||
* @throws InvalidArgumentException
|
||||
* @see Stancl\Tenancy\Database\TenantDatabaseManagers\SQLiteDatabaseManager
|
||||
*/
|
||||
protected function validateFilename(string|null $filename): void
|
||||
{
|
||||
if (is_dir($filename)) {
|
||||
throw new InvalidArgumentException("Filename '{$filename}' is a directory.");
|
||||
}
|
||||
|
||||
$this->validateParameter($filename, static::filenameAllowlist());
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue