<?php
class IO
{
protected $handle , $storage = array ( ) ;
public function write( $string )
{
echo $string ;
}
public function output( $reference , $request )
{
$this -> write ( $request ) ;
$this -> handle = fopen ( "php://stdin" , "r" ) ; $this -> storage [ $reference ] = fgets ( $this -> handle ) ; }
public function input( $reference )
{
return $this -> storage [ $reference ] ;
}
}
class App
{
public function __construct( IO $terminal )
{
$this -> terminal = $terminal ;
$this -> welcome ( ) ;
$this -> main ( ) ;
}
protected function generate( $chars , $starter )
{
$password = "" ;
while ( strlen ( $password ) < $chars ) {
}
}
protected function welcome( )
{
$this -> terminal -> write ( "
== PHP Password Generator v1.0 ===============
========== By Jeremy Feinstein ===============
" ) ;
}
protected function main( )
{
$this -> terminal -> output ( "chars" , "\n Number of password characters? " ) ;
$this -> terminal -> output ( "starter" , " Give me something random: " ) ;
$chars = $this -> terminal -> input ( "chars" ) ;
$starter = $this -> terminal -> input ( "starter" ) ;
$password = $this -> generate ( $chars , $starter ) ;
$this -> terminal -> write ( "\n Ahh, the fresh smell of a new password: " . $password . "\n \n " ) ;
}
}
$terminal = new IO( ) ;
new App( $terminal ) ;
?>
PD9waHAKY2xhc3MgSU8KewoJcHJvdGVjdGVkICRoYW5kbGUsICRzdG9yYWdlID0gYXJyYXkoKTsKCglwdWJsaWMgZnVuY3Rpb24gd3JpdGUoICRzdHJpbmcgKQoJewoJCWVjaG8gJHN0cmluZzsKCX0KCglwdWJsaWMgZnVuY3Rpb24gb3V0cHV0KCAkcmVmZXJlbmNlLCAkcmVxdWVzdCApCgl7CgkJJHRoaXMtPndyaXRlKCRyZXF1ZXN0KTsKCQkkdGhpcy0+aGFuZGxlID0gZm9wZW4gKCJwaHA6Ly9zdGRpbiIsInIiKTsKCQkkdGhpcy0+c3RvcmFnZVskcmVmZXJlbmNlXSA9IGZnZXRzKCR0aGlzLT5oYW5kbGUpOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBpbnB1dCggJHJlZmVyZW5jZSApCgl7CgkJcmV0dXJuICR0aGlzLT5zdG9yYWdlWyRyZWZlcmVuY2VdOwoJfQp9CgoKY2xhc3MgQXBwCnsKCXB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCggSU8gJHRlcm1pbmFsICkKCXsKCQkkdGhpcy0+dGVybWluYWwgPSAkdGVybWluYWw7CgkJJHRoaXMtPndlbGNvbWUoKTsKCQkkdGhpcy0+bWFpbigpOwoJfQoKCXByb3RlY3RlZCBmdW5jdGlvbiBnZW5lcmF0ZSggJGNoYXJzLCAkc3RhcnRlciApCgl7CgkJJHBhc3N3b3JkID0gIiI7CgoJCXdoaWxlKHN0cmxlbigkcGFzc3dvcmQpIDwgJGNoYXJzKQoJCXsKCQkJJHBhc3N3b3JkIC49IGNyeXB0ICggcmFuZCgwLCA5MDApLiRzdGFydGVyLnJhbmQoMCwgOTAwKSwgcmFuZCgwLCA5MDApLiRzdGFydGVyLnJhbmQoMCwgOTAwKSApOwoJCX0KCgkJcmV0dXJuIHN1YnN0cigkcGFzc3dvcmQsIDAsIGludHZhbCgkY2hhcnMpKTsKCgl9CgoJcHJvdGVjdGVkIGZ1bmN0aW9uIHdlbGNvbWUoKQoJewoJCSR0aGlzLT50ZXJtaW5hbC0+d3JpdGUoIgo9PSBQSFAgUGFzc3dvcmQgR2VuZXJhdG9yIHYxLjAgPT09PT09PT09PT09PT09Cj09PT09PT09PT0gQnkgSmVyZW15IEZlaW5zdGVpbiA9PT09PT09PT09PT09PT0KIik7Cgl9CgoJcHJvdGVjdGVkIGZ1bmN0aW9uIG1haW4oKQoJewoJCSR0aGlzLT50ZXJtaW5hbC0+b3V0cHV0KCAiY2hhcnMiLCAiXG4gTnVtYmVyIG9mIHBhc3N3b3JkIGNoYXJhY3RlcnM/ICIgKTsKCQkkdGhpcy0+dGVybWluYWwtPm91dHB1dCggInN0YXJ0ZXIiLCAiIEdpdmUgbWUgc29tZXRoaW5nIHJhbmRvbTogIiApOwoKCQkkY2hhcnMgPSAkdGhpcy0+dGVybWluYWwtPmlucHV0KCAiY2hhcnMiICk7CgkJJHN0YXJ0ZXIgPSAkdGhpcy0+dGVybWluYWwtPmlucHV0KCAic3RhcnRlciIgKTsKCQkkcGFzc3dvcmQgPSAkdGhpcy0+Z2VuZXJhdGUoICRjaGFycywgJHN0YXJ0ZXIgKTsKCgkJJHRoaXMtPnRlcm1pbmFsLT53cml0ZSggIlxuIEFoaCwgdGhlIGZyZXNoIHNtZWxsIG9mIGEgbmV3IHBhc3N3b3JkOiAiIC4gJHBhc3N3b3JkIC4gIlxuXG4iKTsKCX0KfQoKJHRlcm1pbmFsID0gbmV3IElPKCk7Cm5ldyBBcHAoJHRlcm1pbmFsKTsKPz4=