index.js 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. 'use strict'
  2. const { Ber } = require('@ldapjs/asn1')
  3. const Control = require('./lib/control')
  4. const EntryChangeNotificationControl = require('./lib/controls/entry-change-notification-control')
  5. const PagedResultsControl = require('./lib/controls/paged-results-control')
  6. const PasswordPolicyControl = require('./lib/controls/password-policy-control')
  7. const PersistentSearchControl = require('./lib/controls/persistent-search-control')
  8. const ServerSideSortingRequestControl = require('./lib/controls/server-side-sorting-request-control')
  9. const ServerSideSortingResponseControl = require('./lib/controls/server-side-sorting-response-control')
  10. const VirtualListViewRequestControl = require('./lib/controls/virtual-list-view-request-control')
  11. const VirtualListViewResponseControl = require('./lib/controls/virtual-list-view-response-control')
  12. module.exports = {
  13. getControl: function getControl (ber) {
  14. if (!ber) throw TypeError('ber must be provided')
  15. if (ber.readSequence() === null) { return null }
  16. let type
  17. const opts = {
  18. criticality: false,
  19. value: null
  20. }
  21. /* istanbul ignore else */
  22. if (ber.length) {
  23. const end = ber.offset + ber.length
  24. type = ber.readString()
  25. /* istanbul ignore else */
  26. if (ber.offset < end) {
  27. /* istanbul ignore else */
  28. if (ber.peek() === Ber.Boolean) { opts.criticality = ber.readBoolean() }
  29. }
  30. if (ber.offset < end) { opts.value = ber.readString(Ber.OctetString, true) }
  31. }
  32. let control
  33. switch (type) {
  34. case EntryChangeNotificationControl.OID: {
  35. control = new EntryChangeNotificationControl(opts)
  36. break
  37. }
  38. case PagedResultsControl.OID: {
  39. control = new PagedResultsControl(opts)
  40. break
  41. }
  42. case PasswordPolicyControl.OID: {
  43. control = new PasswordPolicyControl(opts)
  44. break
  45. }
  46. case PersistentSearchControl.OID: {
  47. control = new PersistentSearchControl(opts)
  48. break
  49. }
  50. case ServerSideSortingRequestControl.OID: {
  51. control = new ServerSideSortingRequestControl(opts)
  52. break
  53. }
  54. case ServerSideSortingResponseControl.OID: {
  55. control = new ServerSideSortingResponseControl(opts)
  56. break
  57. }
  58. case VirtualListViewRequestControl.OID: {
  59. control = new VirtualListViewRequestControl(opts)
  60. break
  61. }
  62. case VirtualListViewResponseControl.OID: {
  63. control = new VirtualListViewResponseControl(opts)
  64. break
  65. }
  66. default: {
  67. opts.type = type
  68. control = new Control(opts)
  69. break
  70. }
  71. }
  72. return control
  73. },
  74. Control,
  75. EntryChangeNotificationControl,
  76. PagedResultsControl,
  77. PasswordPolicyControl,
  78. PersistentSearchControl,
  79. ServerSideSortingRequestControl,
  80. ServerSideSortingResponseControl,
  81. VirtualListViewRequestControl,
  82. VirtualListViewResponseControl
  83. }