mirror of
https://github.com/silverstripe/silverstripe-framework
synced 2024-10-22 14:05:37 +02:00
d1af214ef5
Rely on standard vendor/bin/phpunit via CLI instead. See https://github.com/silverstripe/silverstripe-framework/issues/4254 - Not disabling xdebug. That should be harmful, and is actively harming test development - No longer able to specifically skip tests via the `SkipTests` request parameter. Use phpunit.xml groups and the `--exclude-group` CLI argument instead - No longer able to specify multiple comma-separated module folders. use phpunit.xml groups and the `--group` CLI argument instead - Not explicitly calling `SSViewer::flush_template_cache()` (was never the case on running `phpunit` CLI anyway, and shouldn't be required any more)
76 lines
2.1 KiB
PHP
76 lines
2.1 KiB
PHP
<?php
|
|
/**
|
|
* Encrypt all passwords
|
|
*
|
|
* Action to encrypt all *clear text* passwords in the database according
|
|
* to the current settings.
|
|
* If the current settings are so that passwords shouldn't be encrypted,
|
|
* an explanation will be printed out.
|
|
*
|
|
* To run this action, the user needs to have administrator rights!
|
|
*
|
|
* @package framework
|
|
* @subpackage tasks
|
|
*/
|
|
class EncryptAllPasswordsTask extends BuildTask {
|
|
protected $title = 'Encrypt all passwords tasks';
|
|
|
|
protected $description = 'Convert all plaintext passwords on the Member table to the default encryption/hashing
|
|
algorithm. Note: This mainly applies to passwords in SilverStripe 2.1 or earlier, passwords in newer versions
|
|
are hashed by default.';
|
|
|
|
public function init() {
|
|
parent::init();
|
|
|
|
if(!Permission::check('ADMIN')) {
|
|
return Security::permissionFailure($this);
|
|
}
|
|
}
|
|
|
|
public function run($request) {
|
|
$algo = Security::config()->password_encryption_algorithm;
|
|
if($algo == 'none') {
|
|
$this->debugMessage('Password encryption disabled');
|
|
return;
|
|
}
|
|
|
|
// Are there members with a clear text password?
|
|
$members = DataObject::get("Member")->where(array(
|
|
'"Member"."PasswordEncryption"' => 'none',
|
|
'"Member"."Password" IS NOT NULL'
|
|
));
|
|
|
|
if(!$members) {
|
|
$this->debugMessage('No passwords to encrypt');
|
|
return;
|
|
}
|
|
|
|
// Encrypt the passwords...
|
|
$this->debugMessage('Encrypting all passwords');
|
|
$this->debugMessage(sprintf(
|
|
'The passwords will be encrypted using the %s algorithm',
|
|
$algo
|
|
));
|
|
|
|
foreach($members as $member) {
|
|
// Force the update of the member record, as new passwords get
|
|
// automatically encrypted according to the settings, this will do all
|
|
// the work for us
|
|
$member->PasswordEncryption = $algo;
|
|
$member->forceChange();
|
|
$member->write();
|
|
|
|
$this->debugMessage(sprintf('Encrypted credentials for member #%d;', $member->ID));
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @todo This should really be taken care of by the testing framework
|
|
*/
|
|
protected function debugMessage($msg) {
|
|
if(class_exists('SapphireTest', false) && !SapphireTest::is_running_test()) {
|
|
Debug::message($msg);
|
|
}
|
|
}
|
|
}
|