63 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			63 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
namespace nur\ldap\app;
 | 
						|
 | 
						|
use nur\b\IllegalAccessException;
 | 
						|
use nur\ldap\io\LdapWriter;
 | 
						|
use nur\ldap\io\LdifWriter;
 | 
						|
use nur\ldap\io\YamlWriter;
 | 
						|
use nur\ldap\LdapSearch;
 | 
						|
use nur\ldap\LdapWalker;
 | 
						|
 | 
						|
class LdapSearchApp extends LdapApplication {
 | 
						|
  const ARGS = [
 | 
						|
    "merge" => parent::ARGS,
 | 
						|
    ["-s", "--scope", "args" => 1],
 | 
						|
    ["-b", "--searchbase", "args" => 1],
 | 
						|
    ["-B", "--searchbase-exact", "args" => 1],
 | 
						|
    ["-o", "--output", "args" => "file"],
 | 
						|
    ["group",
 | 
						|
      ["-F", "--format", "args" => 1],
 | 
						|
      ["--ldif", "dest" => "format", "value" => "ldif"],
 | 
						|
      ["--yaml", "dest" => "format", "value" => "yaml"],
 | 
						|
    ],
 | 
						|
  ];
 | 
						|
 | 
						|
  protected $scope;
 | 
						|
  protected $searchbase, $searchbaseExact;
 | 
						|
  protected $output;
 | 
						|
  protected $format = "ldif";
 | 
						|
  protected $args;
 | 
						|
 | 
						|
  function getWriter(): LdapWriter {
 | 
						|
    switch ($this->format) {
 | 
						|
    case "ldif":
 | 
						|
    case "l":
 | 
						|
      return new LdifWriter($this->output);
 | 
						|
    case "yaml":
 | 
						|
    case "y":
 | 
						|
      return new YamlWriter($this->output);
 | 
						|
    }
 | 
						|
    throw IllegalAccessException::unexpected_state();
 | 
						|
  }
 | 
						|
 | 
						|
  function main() {
 | 
						|
    $conn = $this->getConn();
 | 
						|
 | 
						|
    $params = [];
 | 
						|
    LdapSearch::parse_args($params, $this->args
 | 
						|
      , $this->searchbase, $this->searchbaseExact
 | 
						|
      , $this->scope);
 | 
						|
    /** @var LdapWalker $lo */
 | 
						|
    $lo = $conn->search(null, $params);
 | 
						|
    $writer = null;
 | 
						|
    while ($lo->next($first)) {
 | 
						|
      if ($first) {
 | 
						|
        $first = false;
 | 
						|
        $writer = $this->getWriter();
 | 
						|
      }
 | 
						|
      $writer->write($lo);
 | 
						|
    }
 | 
						|
    if ($writer !== null) $writer->close();
 | 
						|
  }
 | 
						|
}
 |