77 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			77 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| namespace nur\passwd;
 | |
| 
 | |
| use nur\b\IllegalAccessException;
 | |
| use nur\b\ValueException;
 | |
| 
 | |
| class EtuPasswordGenerator {
 | |
|   const V2 = 2, V3 = 3, V4 = 4;
 | |
| 
 | |
|   function __construct(?int $version=null) {
 | |
|     if ($version === null) $version = self::V4;
 | |
|     $this->version = $version;
 | |
|   }
 | |
| 
 | |
|   private $version;
 | |
| 
 | |
|   function getVersion(): int {
 | |
|     return $this->version;
 | |
|   }
 | |
| 
 | |
|   function generate(int $codEtu, ?int $version=null): string {
 | |
|     if ($version === null) $version = $this->version;
 | |
|     switch ($version) {
 | |
|     case self::V2: return $this->generate2($codEtu);
 | |
|     case self::V3: return $this->generate3($codEtu);
 | |
|     case self::V4: return $this->generate4($codEtu);
 | |
|     default: throw ValueException::invalid_value($version, "version");
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   private static $generate2_groups;
 | |
|   static function init_generate2(array $groups): void {
 | |
|     self::$generate2_groups = $groups;
 | |
|   }
 | |
| 
 | |
|   protected function generate2(int $codEtu): string {
 | |
|     $groups = self::$generate2_groups;
 | |
|     if ($groups == null) {
 | |
|       throw IllegalAccessException::unexpected_state("init_generate2");
 | |
|     }
 | |
|     $pass = "";
 | |
|     for ($i = 0; $i < 8; $i++) {
 | |
|       $group = $groups[$i];
 | |
|       $grouplen = strlen($group);
 | |
|       $pass .= $group[$codEtu % $grouplen];
 | |
|     }
 | |
|     return $pass;
 | |
|   }
 | |
| 
 | |
|   /** @var PasswordGenerator */
 | |
|   private $pg;
 | |
| 
 | |
|   /** @var callable */
 | |
|   private static $gen3seed;
 | |
| 
 | |
|   static function init_gen3seed(callable $seed): void {
 | |
|     self::$gen3seed = $seed;
 | |
|   }
 | |
| 
 | |
|   protected function generate3(int $codEtu): string {
 | |
|     if ($this->pg === null) $this->pg = new PasswordGenerator();
 | |
|     return $this->pg->generate(3, 1, (self::$gen3seed)($codEtu));
 | |
|   }
 | |
| 
 | |
|   /** @var callable */
 | |
|   private static $gen4seed;
 | |
| 
 | |
|   static function init_gen4seed(callable $seed): void {
 | |
|     self::$gen4seed = $seed;
 | |
|   }
 | |
| 
 | |
|   protected function generate4(int $codEtu): string {
 | |
|     if ($this->pg === null) $this->pg = new PasswordGenerator();
 | |
|     return $this->pg->generate(4, 1, (self::$gen4seed)($codEtu));
 | |
|   }
 | |
| }
 |