extend('beforeFindAdministrator'); // Check if we have default admins if ( !static::$has_default_admin || empty(static::$default_username) || empty(static::$default_password) ) { return null; } // Find or create ADMIN group Group::singleton()->requireDefaultRecords(); $adminGroup = Permission::get_groups_by_permission('ADMIN')->first(); if (!$adminGroup) { Group::singleton()->requireDefaultRecords(); $adminGroup = Permission::get_groups_by_permission('ADMIN')->first(); } // Find member /** @skipUpgrade */ $admin = Member::get() ->filter('Email', static::getDefaultAdminUsername()) ->first(); // If no admin is found, create one if (!$admin) { // 'Password' is not set to avoid creating // persistent logins in the database. See Security::setDefaultAdmin(). // Set 'Email' to identify this as the default admin $admin = Member::create(); $admin->FirstName = _t(__CLASS__ . '.DefaultAdminFirstname', 'Default Admin'); $admin->Email = static::getDefaultAdminUsername(); $admin->write(); } // Ensure this user is in the admin group if (!$admin->inGroup($adminGroup)) { // Add member to group instead of adding group to member // This bypasses the privilege escallation code in Member_GroupSet $adminGroup ->DirectMembers() ->add($admin); } $this->extend('afterFindAnAdministrator'); return $admin; } /** * @param string $username * @param string $password * @return ValidationResult */ public function validateDefaultAdmin($username, $password) { $result = new ValidationResult(); if ( static::$default_username === $username && static::$default_password === $password && static::$has_default_admin ) { return $result; } $result->addError('No valid default admin found'); return $result; } }