<?php
namespace nur\ldap;

use nur\ldap\syntaxes\BinarySyntax;
use nur\ldap\syntaxes\BooleanSyntax;
use nur\ldap\syntaxes\DateSyntax;
use nur\ldap\syntaxes\IntegerSyntax;
use nur\ldap\syntaxes\MailSyntax;
use nur\ldap\syntaxes\PostalAddressSyntax;
use nur\ldap\syntaxes\PrintableSyntax;
use nur\ldap\syntaxes\StringSyntax;
use nur\ldap\syntaxes\TelephoneSyntax;

class consts {
  /**
   * @var array[] définitions connues des syntaxes, au cas où le serveur ne les
   * retourne pas
   */
  const KNOWN_SLAPD_SYNTAXES = [
    '1.3.6.1.4.1.1466.115.121.1.4' => [
      'oid' => '1.3.6.1.4.1.1466.115.121.1.4',
      'desc' => 'Audio',
      'x_not_human_readable' => true,
      'x_binary_transfer_required' => false,
    ],
    '1.3.6.1.4.1.1466.115.121.1.5' => [
      'oid' => '1.3.6.1.4.1.1466.115.121.1.5',
      'desc' => 'Binary',
      'x_not_human_readable' => true,
      'x_binary_transfer_required' => false,
    ],
    '1.3.6.1.4.1.1466.115.121.1.6' => [
      'oid' => '1.3.6.1.4.1.1466.115.121.1.6',
      'desc' => 'Bit String',
      'x_not_human_readable' => false,
      'x_binary_transfer_required' => false,
    ],
    '1.3.6.1.4.1.1466.115.121.1.7' => [
      'oid' => '1.3.6.1.4.1.1466.115.121.1.7',
      'desc' => 'Boolean',
      'x_not_human_readable' => false,
      'x_binary_transfer_required' => false,
    ],
    '1.3.6.1.4.1.1466.115.121.1.8' => [
      'oid' => '1.3.6.1.4.1.1466.115.121.1.8',
      'desc' => 'Certificate',
      'x_not_human_readable' => true,
      'x_binary_transfer_required' => true,
    ],
    '1.3.6.1.4.1.1466.115.121.1.9' => [
      'oid' => '1.3.6.1.4.1.1466.115.121.1.9',
      'desc' => 'Certificate List',
      'x_not_human_readable' => true,
      'x_binary_transfer_required' => true,
    ],
    '1.3.6.1.4.1.1466.115.121.1.10' => [
      'oid' => '1.3.6.1.4.1.1466.115.121.1.10',
      'desc' => 'Certificate Pair',
      'x_not_human_readable' => true,
      'x_binary_transfer_required' => true,
    ],
    '1.3.6.1.4.1.4203.666.11.10.2.1' => [
      'oid' => '1.3.6.1.4.1.4203.666.11.10.2.1',
      'desc' => 'X.509 AttributeCertificate',
      'x_not_human_readable' => true,
      'x_binary_transfer_required' => true,
    ],
    '1.3.6.1.4.1.1466.115.121.1.12' => [
      'oid' => '1.3.6.1.4.1.1466.115.121.1.12',
      'desc' => 'Distinguished Name',
      'x_not_human_readable' => false,
      'x_binary_transfer_required' => false,
    ],
    '1.2.36.79672281.1.5.0' => [
      'oid' => '1.2.36.79672281.1.5.0',
      'desc' => 'RDN',
      'x_not_human_readable' => false,
      'x_binary_transfer_required' => false,
    ],
    '1.3.6.1.4.1.1466.115.121.1.14' => [
      'oid' => '1.3.6.1.4.1.1466.115.121.1.14',
      'desc' => 'Delivery Method',
      'x_not_human_readable' => false,
      'x_binary_transfer_required' => false,
    ],
    '1.3.6.1.4.1.1466.115.121.1.15' => [
      'oid' => '1.3.6.1.4.1.1466.115.121.1.15',
      'desc' => 'Directory String',
      'x_not_human_readable' => false,
      'x_binary_transfer_required' => false,
    ],
    '1.3.6.1.4.1.1466.115.121.1.22' => [
      'oid' => '1.3.6.1.4.1.1466.115.121.1.22',
      'desc' => 'Facsimile Telephone Number',
      'x_not_human_readable' => false,
      'x_binary_transfer_required' => false,
    ],
    '1.3.6.1.4.1.1466.115.121.1.23' => [
      'oid' => '1.3.6.1.4.1.1466.115.121.1.23',
      'desc' => 'Fax image',
      'x_not_human_readable' => false,
      'x_binary_transfer_required' => false,
    ],
    '1.3.6.1.4.1.1466.115.121.1.24' => [
      'oid' => '1.3.6.1.4.1.1466.115.121.1.24',
      'desc' => 'Generalized Time',
      'x_not_human_readable' => false,
      'x_binary_transfer_required' => false,
    ],
    '1.3.6.1.4.1.1466.115.121.1.25' => [
      'oid' => '1.3.6.1.4.1.1466.115.121.1.25',
      'desc' => 'Guide',
      'x_not_human_readable' => false,
      'x_binary_transfer_required' => false,
    ],
    '1.3.6.1.4.1.1466.115.121.1.26' => [
      'oid' => '1.3.6.1.4.1.1466.115.121.1.26',
      'desc' => 'IA5 String',
      'x_not_human_readable' => false,
      'x_binary_transfer_required' => false,
    ],
    '1.3.6.1.4.1.1466.115.121.1.27' => [
      'oid' => '1.3.6.1.4.1.1466.115.121.1.27',
      'desc' => 'Integer',
      'x_not_human_readable' => false,
      'x_binary_transfer_required' => false,
    ],
    '1.3.6.1.4.1.1466.115.121.1.28' => [
      'oid' => '1.3.6.1.4.1.1466.115.121.1.28',
      'desc' => 'JPEG',
      'x_not_human_readable' => true,
      'x_binary_transfer_required' => false,
    ],
    '1.3.6.1.4.1.1466.115.121.1.34' => [
      'oid' => '1.3.6.1.4.1.1466.115.121.1.34',
      'desc' => 'Name And Optional UID',
      'x_not_human_readable' => false,
      'x_binary_transfer_required' => false,
    ],
    '1.3.6.1.4.1.1466.115.121.1.36' => [
      'oid' => '1.3.6.1.4.1.1466.115.121.1.36',
      'desc' => 'Numeric String',
      'x_not_human_readable' => false,
      'x_binary_transfer_required' => false,
    ],
    '1.3.6.1.4.1.1466.115.121.1.38' => [
      'oid' => '1.3.6.1.4.1.1466.115.121.1.38',
      'desc' => 'OID',
      'x_not_human_readable' => false,
      'x_binary_transfer_required' => false,
    ],
    '1.3.6.1.4.1.1466.115.121.1.39' => [
      'oid' => '1.3.6.1.4.1.1466.115.121.1.39',
      'desc' => 'Other Mailbox',
      'x_not_human_readable' => false,
      'x_binary_transfer_required' => false,
    ],
    '1.3.6.1.4.1.1466.115.121.1.40' => [
      'oid' => '1.3.6.1.4.1.1466.115.121.1.40',
      'desc' => 'Octet String',
      'x_not_human_readable' => false,
      'x_binary_transfer_required' => false,
    ],
    '1.3.6.1.4.1.1466.115.121.1.41' => [
      'oid' => '1.3.6.1.4.1.1466.115.121.1.41',
      'desc' => 'Postal Address',
      'x_not_human_readable' => false,
      'x_binary_transfer_required' => false,
    ],
    '1.3.6.1.4.1.1466.115.121.1.44' => [
      'oid' => '1.3.6.1.4.1.1466.115.121.1.44',
      'desc' => 'Printable String',
      'x_not_human_readable' => false,
      'x_binary_transfer_required' => false,
    ],
    '1.3.6.1.4.1.1466.115.121.1.11' => [
      'oid' => '1.3.6.1.4.1.1466.115.121.1.11',
      'desc' => 'Country String',
      'x_not_human_readable' => false,
      'x_binary_transfer_required' => false,
    ],
    '1.3.6.1.4.1.1466.115.121.1.45' => [
      'oid' => '1.3.6.1.4.1.1466.115.121.1.45',
      'desc' => 'SubtreeSpecification',
      'x_not_human_readable' => false,
      'x_binary_transfer_required' => false,
    ],
    '1.3.6.1.4.1.1466.115.121.1.49' => [
      'oid' => '1.3.6.1.4.1.1466.115.121.1.49',
      'desc' => 'Supported Algorithm',
      'x_not_human_readable' => true,
      'x_binary_transfer_required' => true,
    ],
    '1.3.6.1.4.1.1466.115.121.1.50' => [
      'oid' => '1.3.6.1.4.1.1466.115.121.1.50',
      'desc' => 'Telephone Number',
      'x_not_human_readable' => false,
      'x_binary_transfer_required' => false,
    ],
    '1.3.6.1.4.1.1466.115.121.1.51' => [
      'oid' => '1.3.6.1.4.1.1466.115.121.1.51',
      'desc' => 'Teletex Terminal Identifier',
      'x_not_human_readable' => false,
      'x_binary_transfer_required' => false,
    ],
    '1.3.6.1.4.1.1466.115.121.1.52' => [
      'oid' => '1.3.6.1.4.1.1466.115.121.1.52',
      'desc' => 'Telex Number',
      'x_not_human_readable' => false,
      'x_binary_transfer_required' => false,
    ],
    '1.3.6.1.4.1.1466.115.121.1.53' => [
      'oid' => '1.3.6.1.4.1.1466.115.121.1.53',
      'desc' => 'UTC Time',
      'x_not_human_readable' => false,
      'x_binary_transfer_required' => false,
    ],
    '1.3.6.1.4.1.1466.115.121.1.54' => [
      'oid' => '1.3.6.1.4.1.1466.115.121.1.54',
      'desc' => 'LDAP Syntax Description',
      'x_not_human_readable' => false,
      'x_binary_transfer_required' => false,
    ],
    '1.3.6.1.1.1.0.0' => [
      'oid' => '1.3.6.1.1.1.0.0',
      'desc' => 'RFC2307 NIS Netgroup Triple',
      'x_not_human_readable' => false,
      'x_binary_transfer_required' => false,
    ],
    '1.3.6.1.1.1.0.1' => [
      'oid' => '1.3.6.1.1.1.0.1',
      'desc' => 'RFC2307 Boot Parameter',
      'x_not_human_readable' => false,
      'x_binary_transfer_required' => false,
    ],
    '1.3.6.1.1.16.1' => [
      'oid' => '1.3.6.1.1.16.1',
      'desc' => 'UUID',
      'x_not_human_readable' => false,
      'x_binary_transfer_required' => false,
    ],
  ];

  const KNOWN_SYNTAX_CLASSES = [
    '1.3.6.1.4.1.1466.115.121.1.4' => BinarySyntax::class, // audio
    '1.3.6.1.4.1.1466.115.121.1.5' => BinarySyntax::class, // binary
    '1.3.6.1.4.1.1466.115.121.1.6' => BinarySyntax::class, // bit string
    '1.3.6.1.4.1.1466.115.121.1.7' => BooleanSyntax::class, // boolean
    '1.3.6.1.4.1.1466.115.121.1.8' => BinarySyntax::class, // certificate
    '1.3.6.1.4.1.1466.115.121.1.9' => BinarySyntax::class, // certificate list
    '1.3.6.1.4.1.1466.115.121.1.10' => BinarySyntax::class, // certificate pair
    '1.3.6.1.4.1.4203.666.11.10.2.1' => BinarySyntax::class, // X.509 AttributeCertificate
    '1.3.6.1.4.1.1466.115.121.1.12' => StringSyntax::class, // DN
    '1.2.36.79672281.1.5.0' => StringSyntax::class, // RDN
    '1.3.6.1.4.1.1466.115.121.1.14' => StringSyntax::class, // delivery method
    '1.3.6.1.4.1.1466.115.121.1.15' => StringSyntax::class, // directory string
    '1.3.6.1.4.1.1466.115.121.1.22' => TelephoneSyntax::class, // fax number
    '1.3.6.1.4.1.1466.115.121.1.24' => DateSyntax::class, // generalized time
    '1.3.6.1.4.1.1466.115.121.1.26' => StringSyntax::class, // IA5 string
    '1.3.6.1.4.1.1466.115.121.1.27' => IntegerSyntax::class, // integer
    '1.3.6.1.4.1.1466.115.121.1.28' => BinarySyntax::class, // jpeg
    '1.3.6.1.4.1.1466.115.121.1.34' => StringSyntax::class, // name and (opt.) oid
    '1.3.6.1.4.1.1466.115.121.1.36' => IntegerSyntax::class, // numeric string
    '1.3.6.1.4.1.1466.115.121.1.38' => StringSyntax::class, // oid
    '1.3.6.1.4.1.1466.115.121.1.39' => MailSyntax::class, // other mailbox
    '1.3.6.1.4.1.1466.115.121.1.40' => StringSyntax::class, // octet string
    '1.3.6.1.4.1.1466.115.121.1.41' => PostalAddressSyntax::class, // postal address
    '1.3.6.1.4.1.1466.115.121.1.44' => PrintableSyntax::class, // printable string
    '1.3.6.1.4.1.1466.115.121.1.11' => StringSyntax::class, // country string
    '1.3.6.1.4.1.1466.115.121.1.45' => StringSyntax::class, // subtree spec
    '1.3.6.1.4.1.1466.115.121.1.49' => BinarySyntax::class, // supported algorithm
    '1.3.6.1.4.1.1466.115.121.1.50' => TelephoneSyntax::class, // telephone number
    '1.3.6.1.4.1.1466.115.121.1.52' => TelephoneSyntax::class, // telex number
    '1.3.6.1.1.1.0.0' => StringSyntax::class, // RFC2307 NIS Netgroup Triple
    '1.3.6.1.1.1.0.1' => StringSyntax::class, // RFC2307 Boot Parameter
    '1.3.6.1.1.16.1' => StringSyntax::class, // uuid
  ];

  const LDAP_CONTROL_CONSTANTS = [
    # pas toutes ne sont définies en fonction de la version de PHP
    "LDAP_CONTROL_MANAGEDSAIT",
    "LDAP_CONTROL_PROXY_AUTHZ",
    "LDAP_CONTROL_SUBENTRIES",
    "LDAP_CONTROL_VALUESRETURNFILTER",
    "LDAP_CONTROL_ASSERT",
    "LDAP_CONTROL_PRE_READ",
    "LDAP_CONTROL_POST_READ",
    "LDAP_CONTROL_SORTREQUEST",
    "LDAP_CONTROL_SORTRESPONSE",
    "LDAP_CONTROL_PAGEDRESULTS",
    "LDAP_CONTROL_SYNC",
    "LDAP_CONTROL_SYNC_STATE",
    "LDAP_CONTROL_SYNC_DONE",
    "LDAP_CONTROL_DONTUSECOPY",
    "LDAP_CONTROL_PASSWORDPOLICYREQUEST",
    "LDAP_CONTROL_PASSWORDPOLICYRESPONSE",
    "LDAP_CONTROL_X_INCREMENTAL_VALUES",
    "LDAP_CONTROL_X_DOMAIN_SCOPE",
    "LDAP_CONTROL_X_PERMISSIVE_MODIFY",
    "LDAP_CONTROL_X_SEARCH_OPTIONS",
    "LDAP_CONTROL_X_TREE_DELETE",
    "LDAP_CONTROL_X_EXTENDED_DN",
    "LDAP_CONTROL_VLVREQUEST",
    "LDAP_CONTROL_VLVRESPONSE",
    "LDAP_EXOP_MODIFY_PASSWD",
    "LDAP_EXOP_REFRESH",
    "LDAP_EXOP_START_TLS",
    "LDAP_EXOP_TURN",
    "LDAP_EXOP_WHO_AM_I",
    "LDAP_CONTROL_AUTHZID_REQUEST",
    "LDAP_CONTROL_AUTHZID_RESPONSE",
  ];

  const ROOT_DSE_LITERALS = [
    # Constantes non définies de façon normalisée
    ["1.3.6.1.1.8", "/*Cancel Extended Request*/ \"1.3.6.1.1.8\""],
    ["1.3.6.1.1.14", "/*Modify-Increment*/ \"1.3.6.1.1.14\""],
    ["1.3.6.1.4.1.4203.1.5.1", "/*All Op Attrs*/ \"1.3.6.1.4.1.4203.1.5.1\""],
    ["1.3.6.1.4.1.4203.1.5.2", "/*OC AD Lists*/ \"1.3.6.1.4.1.4203.1.5.2\""],
    ["1.3.6.1.4.1.4203.1.5.3", "/*LDAP Protocol Mechanism*/ \"1.3.6.1.4.1.4203.1.5.3\""],
    ["1.3.6.1.4.1.4203.1.5.4", "/*draft-zeilenga-ldap-rfc2596*/ \"1.3.6.1.4.1.4203.1.5.4\""],
    ["1.3.6.1.4.1.4203.1.5.5", "/*draft-zeilenga-ldap-rfc2596*/ \"1.3.6.1.4.1.4203.1.5.5\""],
  ];
}