All Downloads are FREE. Search and download functionalities are using the official Maven repository.

web-interface.assets.30.30.a37bd6c43e2b13149f99.js.map Maven / Gradle / Ivy

There is a newer version: 6.0.5
Show newest version
{"version":3,"sources":["webpack:///30.30.a37bd6c43e2b13149f99.js","webpack:///./src/components/ldap/LdapComponent.jsx?56c6","webpack:///./src/components/ldap/TestLdapConnection.jsx?6b7c","webpack:///./src/components/ldap/TestLdapLogin.jsx?af4a","webpack:///./src/components/ldap/TestLdapLogin.css?0946","webpack:///./src/components/ldap/TestLdapLogin.css?3ec1*","webpack:///./src/pages/LdapPage.jsx"],"names":["webpackJsonp","292","module","exports","__webpack_require__","_interopRequireDefault","obj","__esModule","default","Object","defineProperty","value","_typeof","Symbol","iterator","constructor","prototype","_react","_react2","_reflux","_reflux2","_reactBootstrap","_reactRouterBootstrap","_urijs","_urijs2","_javascriptNaturalSort","_javascriptNaturalSort2","_common","_ObjectUtils","_ObjectUtils2","_Routes","_Routes2","_TestLdapConnection","_TestLdapConnection2","_TestLdapLogin","_TestLdapLogin2","_StoreProvider","_StoreProvider2","_ActionsProvider","_ActionsProvider2","RolesStore","getStore","LdapStore","LdapActions","getActions","HelperText","activeDirectory","SYSTEM_USERNAME","createElement","SYSTEM_PASSWORD","SEARCH_BASE","SEARCH_PATTERN","className","DISPLAY_NAME","GROUP_SEARCH_BASE","GROUP_PATTERN","GROUP_ID","DEFAULT_GROUP","LinkContainer","to","SYSTEM","LDAP","GROUPS","ADDITIONAL_GROUPS","ldap","LdapComponent","createClass","displayName","mixins","listenTo","propTypes","onCancel","PropTypes","func","isRequired","getInitialState","ldapSettings","undefined","ldapUri","roles","componentDidMount","_this","this","loadRoles","then","setState","_formatAdditionalRoles","filter","r","name","toLowerCase","sort","r1","r2","map","label","_onLdapSettingsChange","state","settings","clone","ldap_uri","_isLoading","_bindChecked","ev","_setSetting","target","checked","_bindValue","_updateSsl","_setUriScheme","attribute","newState","formattedValue","toString","serverConnectionStatus","scheme","_uriScheme","_setUriHost","host","hostname","_uriHost","_setUriPort","port","_uriPort","_setAdditionalDefaultGroups","rolesString","split","v","_saveSettings","event","preventDefault","update","render","_this2","Spinner","isAD","active_directory","disabled","enabled","help","rolesOptions","Row","Col","lg","id","onSubmit","Input","type","wrapperClassName","onChange","labelClassName","placeholder","required","min","max","style","width","use_start_tls","trust_all_certificates","system_username","system_password","search_base","search_pattern","display_name_attribute","group_search_base","group_search_pattern","group_id_attribute","sm","default_group","smOffset","Panel","bsStyle","MultiSelect","ref","options","additional_default_groups","Button","onClick","props","294","TestLdapConnection","object","bool","componentWillReceiveProps","nextProps","JSON","stringify","_testServerConnection","testServerConnection","triggerPromise","result","connected","loading","success","error","exception","_getServerConnectionStyle","isDisabled","serverConnectionResult","Alert","295","TestLdapLogin","loginUser","loginPassword","loginStatus","use","componentWillUnmount","unuse","_changeLoginForm","key","_disableSubmitOnEnter","_testLogin","testLogin","login_authenticated","isEmpty","entry","_loginTestButtonStyle","_formatLoginStatus","title","userFound","loginCheck","serverResponse","attributes","keys","formattedEntry","length","groups","group","formattedGroups","padding","header","loginDisabled","onKeyPress","testLoginPassword","369","push","505","dispose","refs","content","locals","unref","865","_DocsHelper","_DocsHelper2","_DocumentationLink","_DocumentationLink2","_LdapComponent","_LdapComponent2","LdapPage","PageHeader","page","PAGES","USERS_ROLES","text","IfPermitted","permissions","AUTHENTICATION","USERS","LIST","md"],"mappings":"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","file":"30.30.a37bd6c43e2b13149f99.js","sourcesContent":["webpackJsonp([30],{\n\n/***/ 292:\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t  value: true\n\t});\n\t\n\tvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\t\n\tvar _react = __webpack_require__(1);\n\t\n\tvar _react2 = _interopRequireDefault(_react);\n\t\n\tvar _reflux = __webpack_require__(4);\n\t\n\tvar _reflux2 = _interopRequireDefault(_reflux);\n\t\n\tvar _reactBootstrap = __webpack_require__(2);\n\t\n\tvar _reactRouterBootstrap = __webpack_require__(18);\n\t\n\tvar _urijs = __webpack_require__(65);\n\t\n\tvar _urijs2 = _interopRequireDefault(_urijs);\n\t\n\tvar _javascriptNaturalSort = __webpack_require__(48);\n\t\n\tvar _javascriptNaturalSort2 = _interopRequireDefault(_javascriptNaturalSort);\n\t\n\tvar _common = __webpack_require__(5);\n\t\n\tvar _ObjectUtils = __webpack_require__(47);\n\t\n\tvar _ObjectUtils2 = _interopRequireDefault(_ObjectUtils);\n\t\n\tvar _Routes = __webpack_require__(11);\n\t\n\tvar _Routes2 = _interopRequireDefault(_Routes);\n\t\n\tvar _TestLdapConnection = __webpack_require__(294);\n\t\n\tvar _TestLdapConnection2 = _interopRequireDefault(_TestLdapConnection);\n\t\n\tvar _TestLdapLogin = __webpack_require__(295);\n\t\n\tvar _TestLdapLogin2 = _interopRequireDefault(_TestLdapLogin);\n\t\n\tvar _StoreProvider = __webpack_require__(3);\n\t\n\tvar _StoreProvider2 = _interopRequireDefault(_StoreProvider);\n\t\n\tvar _ActionsProvider = __webpack_require__(6);\n\t\n\tvar _ActionsProvider2 = _interopRequireDefault(_ActionsProvider);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\tvar RolesStore = _StoreProvider2.default.getStore('Roles');\n\tvar LdapStore = _StoreProvider2.default.getStore('Ldap');\n\t\n\tvar LdapActions = _ActionsProvider2.default.getActions('Ldap');\n\t\n\tvar HelperText = {\n\t  activeDirectory: {\n\t    SYSTEM_USERNAME: _react2.default.createElement(\n\t      'span',\n\t      null,\n\t      'The username for the initial connection to the Active Directory server, e.g. ',\n\t      _react2.default.createElement(\n\t        'code',\n\t        null,\n\t        '[email protected]'\n\t      ),\n\t      '.',\n\t      _react2.default.createElement('br', null),\n\t      'This needs to match the ',\n\t      _react2.default.createElement(\n\t        'code',\n\t        null,\n\t        'userPrincipalName'\n\t      ),\n\t      ' of that user.'\n\t    ),\n\t    SYSTEM_PASSWORD: 'The password for the initial connection to the Active Directory server.',\n\t    SEARCH_BASE: _react2.default.createElement(\n\t      'span',\n\t      null,\n\t      'The base tree to limit the Active Directory search query to, e.g. ',\n\t      _react2.default.createElement(\n\t        'code',\n\t        null,\n\t        'cn=users,dc=example,dc=com'\n\t      ),\n\t      '.'\n\t    ),\n\t    SEARCH_PATTERN: _react2.default.createElement(\n\t      'span',\n\t      null,\n\t      'For example ',\n\t      _react2.default.createElement(\n\t        'code',\n\t        { className: 'text-nowrap' },\n\t        '(&(objectClass=user)(sAMAccountName={0}))'\n\t      ),\n\t      '.',\n\t      ' ',\n\t      'The string ',\n\t      _react2.default.createElement(\n\t        'code',\n\t        null,\n\t        '{0}'\n\t      ),\n\t      ' will be replaced by the entered username.'\n\t    ),\n\t    DISPLAY_NAME: _react2.default.createElement(\n\t      'span',\n\t      null,\n\t      'Which Active Directory attribute to use for the full name of the user in Graylog, e.g. ',\n\t      _react2.default.createElement(\n\t        'code',\n\t        null,\n\t        'displayName'\n\t      ),\n\t      '.',\n\t      _react2.default.createElement('br', null),\n\t      'Try to load a test user using the form below, if you are unsure which attribute to use.'\n\t    ),\n\t    GROUP_SEARCH_BASE: _react2.default.createElement(\n\t      'span',\n\t      null,\n\t      'The base tree to limit the Active Directory group search query to, e.g. ',\n\t      _react2.default.createElement(\n\t        'code',\n\t        null,\n\t        'cn=users,dc=example,dc=com'\n\t      ),\n\t      '.'\n\t    ),\n\t    GROUP_PATTERN: _react2.default.createElement(\n\t      'span',\n\t      null,\n\t      'The search pattern used to find groups in Active Directory for mapping to Graylog roles, e.g.',\n\t      ' ',\n\t      _react2.default.createElement(\n\t        'code',\n\t        { className: 'text-nowrap' },\n\t        '(objectClass=group)'\n\t      ),\n\t      ' or',\n\t      ' ',\n\t      _react2.default.createElement(\n\t        'code',\n\t        { className: 'text-nowrap' },\n\t        '(&(objectClass=group)(cn=graylog*))'\n\t      ),\n\t      '.'\n\t    ),\n\t    GROUP_ID: _react2.default.createElement(\n\t      'span',\n\t      null,\n\t      'Which Active Directory attribute to use for the full name of the group, usually ',\n\t      _react2.default.createElement(\n\t        'code',\n\t        null,\n\t        'cn'\n\t      ),\n\t      '.'\n\t    ),\n\t    DEFAULT_GROUP: _react2.default.createElement(\n\t      'span',\n\t      null,\n\t      'The default Graylog role determines whether a user created via Active Directory can access the entire system, or has limited access.',\n\t      _react2.default.createElement('br', null),\n\t      'You can assign additional permissions by',\n\t      ' ',\n\t      _react2.default.createElement(\n\t        _reactRouterBootstrap.LinkContainer,\n\t        { to: _Routes2.default.SYSTEM.LDAP.GROUPS },\n\t        _react2.default.createElement(\n\t          'a',\n\t          null,\n\t          'mapping Active Directory groups to Graylog roles'\n\t        )\n\t      ),\n\t      ',',\n\t      ' ',\n\t      'or you can assign additional Graylog roles to Active Directory users below.'\n\t    ),\n\t    ADDITIONAL_GROUPS: 'Choose the additional roles each Active Directory user will have by default, leave it empty if you want to map Active Directory groups to Graylog roles.'\n\t  },\n\t\n\t  ldap: {\n\t    SYSTEM_USERNAME: _react2.default.createElement(\n\t      'span',\n\t      null,\n\t      'The username for the initial connection to the LDAP server, e.g.',\n\t      ' ',\n\t      _react2.default.createElement(\n\t        'code',\n\t        { className: 'text-nowrap' },\n\t        'uid=admin,ou=system'\n\t      ),\n\t      ', this might be optional depending on your LDAP server.'\n\t    ),\n\t    SYSTEM_PASSWORD: 'The password for the initial connection to the LDAP server.',\n\t    SEARCH_BASE: _react2.default.createElement(\n\t      'span',\n\t      null,\n\t      'The base tree to limit the LDAP search query to, e.g. ',\n\t      _react2.default.createElement(\n\t        'code',\n\t        {\n\t          className: 'text-nowrap' },\n\t        'cn=users,dc=example,dc=com'\n\t      ),\n\t      '.'\n\t    ),\n\t    SEARCH_PATTERN: _react2.default.createElement(\n\t      'span',\n\t      null,\n\t      'For example ',\n\t      _react2.default.createElement(\n\t        'code',\n\t        { className: 'text-nowrap' },\n\t        '(&(objectClass=inetOrgPerson)(uid={0}))'\n\t      ),\n\t      '.',\n\t      ' ',\n\t      'The string ',\n\t      _react2.default.createElement(\n\t        'code',\n\t        null,\n\t        '{0}'\n\t      ),\n\t      ' will be replaced by the entered username.'\n\t    ),\n\t    DISPLAY_NAME: _react2.default.createElement(\n\t      'span',\n\t      null,\n\t      'Which LDAP attribute to use for the full name of the user in Graylog, e.g. ',\n\t      _react2.default.createElement(\n\t        'code',\n\t        null,\n\t        'cn'\n\t      ),\n\t      '.',\n\t      _react2.default.createElement('br', null),\n\t      'Try to load a test user using the form below, if you are unsure which attribute to use.'\n\t    ),\n\t    GROUP_SEARCH_BASE: _react2.default.createElement(\n\t      'span',\n\t      null,\n\t      'The base tree to limit the LDAP group search query to, e.g. ',\n\t      _react2.default.createElement(\n\t        'code',\n\t        null,\n\t        'cn=users,dc=example,dc=com'\n\t      ),\n\t      '.'\n\t    ),\n\t    GROUP_PATTERN: _react2.default.createElement(\n\t      'span',\n\t      null,\n\t      'The search pattern used to find groups in LDAP for mapping to Graylog roles, e.g.',\n\t      ' ',\n\t      _react2.default.createElement(\n\t        'code',\n\t        null,\n\t        '(objectClass=groupOfNames)'\n\t      ),\n\t      ' or',\n\t      ' ',\n\t      _react2.default.createElement(\n\t        'code',\n\t        { className: 'text-nowrap' },\n\t        '(&(objectClass=groupOfNames)(cn=graylog*))'\n\t      ),\n\t      '.'\n\t    ),\n\t    GROUP_ID: _react2.default.createElement(\n\t      'span',\n\t      null,\n\t      'Which LDAP attribute to use for the full name of the group, usually ',\n\t      _react2.default.createElement(\n\t        'code',\n\t        null,\n\t        'cn'\n\t      ),\n\t      '.'\n\t    ),\n\t    DEFAULT_GROUP: _react2.default.createElement(\n\t      'span',\n\t      null,\n\t      'The default Graylog role determines whether a user created via LDAP can access the entire system, or has limited access.',\n\t      _react2.default.createElement('br', null),\n\t      'You can assign additional permissions by',\n\t      ' ',\n\t      _react2.default.createElement(\n\t        _reactRouterBootstrap.LinkContainer,\n\t        { to: _Routes2.default.SYSTEM.LDAP.GROUPS },\n\t        _react2.default.createElement(\n\t          'a',\n\t          null,\n\t          'mapping LDAP groups to Graylog roles'\n\t        )\n\t      ),\n\t      ',',\n\t      ' ',\n\t      'or you can assign additional Graylog roles to LDAP users below.'\n\t    ),\n\t    ADDITIONAL_GROUPS: 'Choose the additional roles each LDAP user will have by default, leave it empty if you want to map LDAP groups to Graylog roles.'\n\t  }\n\t};\n\t\n\tvar LdapComponent = _react2.default.createClass({\n\t  displayName: 'LdapComponent',\n\t\n\t  mixins: [_reflux2.default.listenTo(LdapStore, '_onLdapSettingsChange', '_onLdapSettingsChange')],\n\t\n\t  propTypes: {\n\t    onCancel: _react2.default.PropTypes.func.isRequired\n\t  },\n\t\n\t  getInitialState: function getInitialState() {\n\t    return {\n\t      ldapSettings: undefined,\n\t      ldapUri: undefined,\n\t      roles: undefined\n\t    };\n\t  },\n\t  componentDidMount: function componentDidMount() {\n\t    var _this = this;\n\t\n\t    RolesStore.loadRoles().then(function (roles) {\n\t      _this.setState({ roles: _this._formatAdditionalRoles(roles) });\n\t    });\n\t  },\n\t  _formatAdditionalRoles: function _formatAdditionalRoles(roles) {\n\t    return roles.filter(function (r) {\n\t      return !(r.name.toLowerCase() === 'reader' || r.name.toLowerCase() === 'admin');\n\t    }).sort(function (r1, r2) {\n\t      return (0, _javascriptNaturalSort2.default)(r1.name.toLowerCase(), r2.name.toLowerCase());\n\t    }).map(function (r) {\n\t      return { label: r.name, value: r.name };\n\t    });\n\t  },\n\t  _onLdapSettingsChange: function _onLdapSettingsChange(state) {\n\t    if (!state.ldapSettings) {\n\t      return;\n\t    }\n\t\n\t    // Clone settings object, so we don't the store reference\n\t    var settings = _ObjectUtils2.default.clone(state.ldapSettings);\n\t    var ldapUri = new _urijs2.default(settings.ldap_uri);\n\t    this.setState({ ldapSettings: settings, ldapUri: ldapUri });\n\t  },\n\t  _isLoading: function _isLoading() {\n\t    return !this.state.ldapSettings || !this.state.roles;\n\t  },\n\t  _bindChecked: function _bindChecked(ev, value) {\n\t    this._setSetting(ev.target.name, typeof value === 'undefined' ? ev.target.checked : value);\n\t  },\n\t  _bindValue: function _bindValue(ev) {\n\t    this._setSetting(ev.target.name, ev.target.value);\n\t  },\n\t  _updateSsl: function _updateSsl(ev) {\n\t    this._setUriScheme(ev.target.checked ? 'ldaps' : 'ldap');\n\t  },\n\t  _setSetting: function _setSetting(attribute, value) {\n\t    var newState = {};\n\t\n\t    var formattedValue = value;\n\t    // Convert URI object into string to store it in the state\n\t    if (attribute === 'ldap_uri' && (typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object') {\n\t      newState.ldapUri = value;\n\t      formattedValue = value.toString();\n\t    }\n\t\n\t    // Clone state to not modify it directly\n\t    var settings = _ObjectUtils2.default.clone(this.state.ldapSettings);\n\t    settings[attribute] = formattedValue;\n\t    newState.ldapSettings = settings;\n\t    newState.serverConnectionStatus = {};\n\t    this.setState(newState);\n\t  },\n\t  _setUriScheme: function _setUriScheme(scheme) {\n\t    var ldapUri = this.state.ldapUri.clone();\n\t    ldapUri.scheme(scheme);\n\t    this._setSetting('ldap_uri', ldapUri);\n\t  },\n\t  _uriScheme: function _uriScheme() {\n\t    return this.state.ldapUri.scheme() + '://';\n\t  },\n\t  _setUriHost: function _setUriHost(host) {\n\t    var ldapUri = this.state.ldapUri.clone();\n\t    ldapUri.hostname(host);\n\t    this._setSetting('ldap_uri', ldapUri);\n\t  },\n\t  _uriHost: function _uriHost() {\n\t    return this.state.ldapUri.hostname();\n\t  },\n\t  _setUriPort: function _setUriPort(port) {\n\t    var ldapUri = this.state.ldapUri.clone();\n\t    ldapUri.port(port);\n\t    this._setSetting('ldap_uri', ldapUri);\n\t  },\n\t  _uriPort: function _uriPort() {\n\t    return this.state.ldapUri.port();\n\t  },\n\t  _setAdditionalDefaultGroups: function _setAdditionalDefaultGroups(rolesString) {\n\t    // only keep non-empty entries\n\t    var roles = rolesString.split(',').filter(function (v) {\n\t      return v !== '';\n\t    });\n\t    this._setSetting('additional_default_groups', roles);\n\t  },\n\t  _saveSettings: function _saveSettings(event) {\n\t    event.preventDefault();\n\t    LdapActions.update(this.state.ldapSettings);\n\t  },\n\t  render: function render() {\n\t    var _this2 = this;\n\t\n\t    if (this._isLoading()) {\n\t      return _react2.default.createElement(_common.Spinner, null);\n\t    }\n\t\n\t    var isAD = this.state.ldapSettings.active_directory;\n\t    var disabled = !this.state.ldapSettings.enabled;\n\t    var help = isAD ? HelperText.activeDirectory : HelperText.ldap;\n\t\n\t    var rolesOptions = this.state.roles;\n\t\n\t    return _react2.default.createElement(\n\t      _reactBootstrap.Row,\n\t      null,\n\t      _react2.default.createElement(\n\t        _reactBootstrap.Col,\n\t        { lg: 8 },\n\t        _react2.default.createElement(\n\t          'form',\n\t          { id: 'ldap-settings-form', className: 'form-horizontal', onSubmit: this._saveSettings },\n\t          _react2.default.createElement(_reactBootstrap.Input, { type: 'checkbox', label: 'Enable LDAP',\n\t            help: 'User accounts will be taken from LDAP/Active Directory, the administrator account will still be available.',\n\t            wrapperClassName: 'col-sm-offset-3 col-sm-9',\n\t            name: 'enabled',\n\t            checked: this.state.ldapSettings.enabled,\n\t            onChange: this._bindChecked }),\n\t          _react2.default.createElement(\n\t            'fieldset',\n\t            null,\n\t            _react2.default.createElement(\n\t              'legend',\n\t              { className: 'col-sm-12' },\n\t              '1. Server configuration'\n\t            ),\n\t            _react2.default.createElement(\n\t              _reactBootstrap.Input,\n\t              { id: 'active_directory', labelClassName: 'col-sm-3',\n\t                wrapperClassName: 'col-sm-9', label: 'Server Type' },\n\t              _react2.default.createElement(\n\t                'label',\n\t                { className: 'radio-inline' },\n\t                _react2.default.createElement('input', { type: 'radio', name: 'active_directory',\n\t                  checked: !isAD, disabled: disabled,\n\t                  onChange: function onChange(ev) {\n\t                    return _this2._bindChecked(ev, false);\n\t                  } }),\n\t                'LDAP'\n\t              ),\n\t              _react2.default.createElement(\n\t                'label',\n\t                { className: 'radio-inline' },\n\t                _react2.default.createElement('input', { type: 'radio', name: 'active_directory',\n\t                  checked: isAD, disabled: disabled,\n\t                  onChange: function onChange(ev) {\n\t                    return _this2._bindChecked(ev, true);\n\t                  } }),\n\t                'Active Directory'\n\t              )\n\t            ),\n\t            _react2.default.createElement(\n\t              _reactBootstrap.Input,\n\t              { id: 'ldap-uri-host', labelClassName: 'col-sm-3',\n\t                wrapperClassName: 'col-sm-9', label: 'Server Address' },\n\t              _react2.default.createElement(\n\t                'div',\n\t                { className: 'input-group' },\n\t                _react2.default.createElement(\n\t                  'span',\n\t                  { className: 'input-group-addon' },\n\t                  this._uriScheme()\n\t                ),\n\t                _react2.default.createElement('input', { type: 'text', className: 'form-control', id: 'ldap-uri-host', value: this._uriHost(),\n\t                  placeholder: 'Hostname', required: true, onChange: function onChange(ev) {\n\t                    return _this2._setUriHost(ev.target.value);\n\t                  },\n\t                  disabled: disabled }),\n\t                _react2.default.createElement(\n\t                  'span',\n\t                  { className: 'input-group-addon input-group-separator' },\n\t                  ':'\n\t                ),\n\t                _react2.default.createElement('input', { type: 'number', className: 'form-control', id: 'ldap-uri-port', value: this._uriPort(), min: '1',\n\t                  max: '65535', placeholder: 'Port',\n\t                  required: true, style: { width: 120 }, onChange: function onChange(ev) {\n\t                    return _this2._setUriPort(ev.target.value);\n\t                  },\n\t                  disabled: disabled })\n\t              ),\n\t              _react2.default.createElement(\n\t                'label',\n\t                { className: 'checkbox-inline' },\n\t                _react2.default.createElement('input', { type: 'checkbox', name: 'ssl', checked: this.state.ldapUri.scheme() === 'ldaps',\n\t                  onChange: this._updateSsl,\n\t                  disabled: disabled }),\n\t                ' SSL'\n\t              ),\n\t              _react2.default.createElement(\n\t                'label',\n\t                { className: 'checkbox-inline' },\n\t                _react2.default.createElement('input', { type: 'checkbox', name: 'use_start_tls', value: 'true', id: 'ldap-uri-starttls',\n\t                  checked: this.state.ldapSettings.use_start_tls, onChange: this._bindChecked,\n\t                  disabled: disabled }),\n\t                ' StartTLS'\n\t              ),\n\t              _react2.default.createElement(\n\t                'label',\n\t                { className: 'checkbox-inline' },\n\t                _react2.default.createElement('input', { type: 'checkbox', name: 'trust_all_certificates', value: 'true', id: 'trust-all-certificates',\n\t                  checked: this.state.ldapSettings.trust_all_certificates, onChange: this._bindChecked,\n\t                  disabled: disabled }),\n\t                ' Allow self-signed certificates'\n\t              )\n\t            ),\n\t            _react2.default.createElement(_reactBootstrap.Input, { type: 'text', id: 'system_username', name: 'system_username', labelClassName: 'col-sm-3',\n\t              wrapperClassName: 'col-sm-9', placeholder: 'System User DN', label: 'System Username',\n\t              value: this.state.ldapSettings.system_username, help: help.SYSTEM_USERNAME,\n\t              onChange: this._bindValue, disabled: disabled }),\n\t            _react2.default.createElement(_reactBootstrap.Input, { type: 'password', id: 'system_password', name: 'system_password', labelClassName: 'col-sm-3',\n\t              wrapperClassName: 'col-sm-9', placeholder: 'System Password', label: 'System Password',\n\t              value: this.state.ldapSettings.system_password, help: help.SYSTEM_PASSWORD,\n\t              onChange: this._bindValue, disabled: disabled })\n\t          ),\n\t          _react2.default.createElement(\n\t            'fieldset',\n\t            null,\n\t            _react2.default.createElement(\n\t              'legend',\n\t              { className: 'col-sm-12' },\n\t              '2. Connection Test'\n\t            ),\n\t            _react2.default.createElement(_TestLdapConnection2.default, { ldapSettings: this.state.ldapSettings, ldapUri: this.state.ldapUri, disabled: disabled })\n\t          ),\n\t          _react2.default.createElement(\n\t            'fieldset',\n\t            null,\n\t            _react2.default.createElement(\n\t              'legend',\n\t              { className: 'col-sm-12' },\n\t              '3. User mapping'\n\t            ),\n\t            _react2.default.createElement(_reactBootstrap.Input, { type: 'text', id: 'search_base', name: 'search_base', labelClassName: 'col-sm-3',\n\t              wrapperClassName: 'col-sm-9', placeholder: 'Search Base', label: 'Search Base DN',\n\t              value: this.state.ldapSettings.search_base, help: help.SEARCH_BASE,\n\t              onChange: this._bindValue, disabled: disabled, required: true }),\n\t            _react2.default.createElement(_reactBootstrap.Input, { type: 'text', id: 'search_pattern', name: 'search_pattern', labelClassName: 'col-sm-3',\n\t              wrapperClassName: 'col-sm-9', placeholder: 'Search Pattern', label: 'User Search Pattern',\n\t              value: this.state.ldapSettings.search_pattern, help: help.SEARCH_PATTERN,\n\t              onChange: this._bindValue, disabled: disabled, required: true }),\n\t            _react2.default.createElement(_reactBootstrap.Input, { type: 'text', id: 'display_name_attribute', name: 'display_name_attribute', labelClassName: 'col-sm-3',\n\t              wrapperClassName: 'col-sm-9', placeholder: 'Display Name Attribute', label: 'Display Name attribute',\n\t              value: this.state.ldapSettings.display_name_attribute, help: help.DISPLAY_NAME,\n\t              onChange: this._bindValue, disabled: disabled, required: true })\n\t          ),\n\t          _react2.default.createElement(\n\t            'fieldset',\n\t            null,\n\t            _react2.default.createElement(\n\t              'legend',\n\t              { className: 'col-sm-12' },\n\t              '4. Group Mapping',\n\t              _react2.default.createElement(\n\t                'small',\n\t                null,\n\t                '(optional)'\n\t              )\n\t            ),\n\t            _react2.default.createElement(_reactBootstrap.Input, { type: 'text', id: 'group_search_base', name: 'group_search_base', labelClassName: 'col-sm-3',\n\t              wrapperClassName: 'col-sm-9', placeholder: 'Group Search Base', label: 'Group Search Base DN',\n\t              value: this.state.ldapSettings.group_search_base, help: help.GROUP_SEARCH_BASE,\n\t              onChange: this._bindValue, disabled: disabled }),\n\t            _react2.default.createElement(_reactBootstrap.Input, { type: 'text', id: 'group_search_pattern', name: 'group_search_pattern', labelClassName: 'col-sm-3',\n\t              wrapperClassName: 'col-sm-9', placeholder: 'Group Search Pattern', label: 'Group Search Pattern',\n\t              value: this.state.ldapSettings.group_search_pattern, help: help.GROUP_PATTERN,\n\t              onChange: this._bindValue, disabled: disabled }),\n\t            _react2.default.createElement(_reactBootstrap.Input, { type: 'text', id: 'group_id_attribute', name: 'group_id_attribute', labelClassName: 'col-sm-3',\n\t              wrapperClassName: 'col-sm-9', placeholder: 'Group Id Attribute', label: 'Group Name Attribute',\n\t              value: this.state.ldapSettings.group_id_attribute, help: help.GROUP_ID,\n\t              onChange: this._bindValue, disabled: disabled }),\n\t            _react2.default.createElement(\n\t              _reactBootstrap.Input,\n\t              { id: 'default_group', labelClassName: 'col-sm-3',\n\t                wrapperClassName: 'col-sm-9', label: 'Default User Role',\n\t                help: help.DEFAULT_GROUP },\n\t              _react2.default.createElement(\n\t                _reactBootstrap.Row,\n\t                null,\n\t                _react2.default.createElement(\n\t                  _reactBootstrap.Col,\n\t                  { sm: 4 },\n\t                  _react2.default.createElement(\n\t                    'select',\n\t                    { id: 'default_group', name: 'default_group', className: 'form-control', required: true,\n\t                      value: this.state.ldapSettings.default_group.toLowerCase(), disabled: disabled,\n\t                      onChange: function onChange(ev) {\n\t                        return _this2._setSetting('default_group', ev.target.value);\n\t                      } },\n\t                    _react2.default.createElement(\n\t                      'option',\n\t                      { value: 'reader' },\n\t                      'Reader - basic access'\n\t                    ),\n\t                    _react2.default.createElement(\n\t                      'option',\n\t                      { value: 'admin' },\n\t                      'Administrator - complete access'\n\t                    )\n\t                  )\n\t                )\n\t              )\n\t            ),\n\t            _react2.default.createElement(\n\t              _reactBootstrap.Row,\n\t              null,\n\t              _react2.default.createElement(\n\t                _reactBootstrap.Col,\n\t                { sm: 9, smOffset: 3 },\n\t                _react2.default.createElement(\n\t                  _reactBootstrap.Panel,\n\t                  { bsStyle: 'info' },\n\t                  'Changing the static role assignment will only affect to new users created via LDAP/Active Directory!',\n\t                  _react2.default.createElement('br', null),\n\t                  'Existing user accounts will be updated on their next login, or if you edit their roles manually.'\n\t                )\n\t              )\n\t            ),\n\t            _react2.default.createElement(\n\t              _reactBootstrap.Input,\n\t              { id: 'additional_default_groups', labelClassName: 'col-sm-3',\n\t                wrapperClassName: 'col-sm-9', label: 'Additional Default Roles',\n\t                help: help.ADDITIONAL_GROUPS },\n\t              _react2.default.createElement(_common.MultiSelect, {\n\t                ref: 'select',\n\t                options: rolesOptions,\n\t                disabled: disabled,\n\t                value: this.state.ldapSettings.additional_default_groups,\n\t                onChange: function onChange(roles) {\n\t                  return _this2._setAdditionalDefaultGroups(roles);\n\t                },\n\t                placeholder: 'Choose additional roles...'\n\t              })\n\t            ),\n\t            _react2.default.createElement(\n\t              _reactBootstrap.Row,\n\t              null,\n\t              _react2.default.createElement(\n\t                _reactBootstrap.Col,\n\t                { sm: 9, smOffset: 3 },\n\t                _react2.default.createElement(\n\t                  _reactBootstrap.Panel,\n\t                  { bsStyle: 'info' },\n\t                  'Changing the static role assignment will only affect to new users created via LDAP/Active Directory!',\n\t                  _react2.default.createElement('br', null),\n\t                  'Existing user accounts will be updated on their next login, or if you edit their roles manually.'\n\t                )\n\t              )\n\t            )\n\t          ),\n\t          _react2.default.createElement(\n\t            'fieldset',\n\t            null,\n\t            _react2.default.createElement(\n\t              'legend',\n\t              { className: 'col-sm-12' },\n\t              '5. Login test'\n\t            ),\n\t            _react2.default.createElement(_TestLdapLogin2.default, { ldapSettings: this.state.ldapSettings, disabled: disabled })\n\t          ),\n\t          _react2.default.createElement(\n\t            'fieldset',\n\t            null,\n\t            _react2.default.createElement(\n\t              'legend',\n\t              { className: 'col-sm-12' },\n\t              '6. Store settings'\n\t            ),\n\t            _react2.default.createElement(\n\t              'div',\n\t              { className: 'form-group' },\n\t              _react2.default.createElement(\n\t                _reactBootstrap.Col,\n\t                { sm: 9, smOffset: 3 },\n\t                _react2.default.createElement(\n\t                  _reactBootstrap.Button,\n\t                  { type: 'submit', bsStyle: 'primary', className: 'save-button-margin' },\n\t                  'Save LDAP settings'\n\t                ),\n\t                _react2.default.createElement(\n\t                  _reactBootstrap.Button,\n\t                  { onClick: this.props.onCancel },\n\t                  'Cancel'\n\t                )\n\t              )\n\t            )\n\t          )\n\t        )\n\t      )\n\t    );\n\t  }\n\t});\n\t\n\texports.default = LdapComponent;\n\tmodule.exports = exports['default'];\n\n/***/ },\n\n/***/ 294:\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t  value: true\n\t});\n\t\n\tvar _react = __webpack_require__(1);\n\t\n\tvar _react2 = _interopRequireDefault(_react);\n\t\n\tvar _reactBootstrap = __webpack_require__(2);\n\t\n\tvar _ActionsProvider = __webpack_require__(6);\n\t\n\tvar _ActionsProvider2 = _interopRequireDefault(_ActionsProvider);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\tvar LdapActions = _ActionsProvider2.default.getActions('Ldap');\n\t\n\tvar TestLdapConnection = _react2.default.createClass({\n\t  displayName: 'TestLdapConnection',\n\t\n\t  propTypes: {\n\t    ldapSettings: _react.PropTypes.object.isRequired,\n\t    ldapUri: _react.PropTypes.object.isRequired,\n\t    disabled: _react.PropTypes.bool\n\t  },\n\t\n\t  getInitialState: function getInitialState() {\n\t    return {\n\t      serverConnectionStatus: {}\n\t    };\n\t  },\n\t  componentWillReceiveProps: function componentWillReceiveProps(nextProps) {\n\t    // Reset connection status if ldapSettings changed\n\t    if (JSON.stringify(this.props.ldapSettings) !== JSON.stringify(nextProps.ldapSettings)) {\n\t      this.setState({ serverConnectionStatus: {} });\n\t    }\n\t  },\n\t  _testServerConnection: function _testServerConnection() {\n\t    var _this = this;\n\t\n\t    LdapActions.testServerConnection.triggerPromise(this.props.ldapSettings).then(function (result) {\n\t      if (result.connected) {\n\t        _this.setState({ serverConnectionStatus: { loading: false, success: true } });\n\t      } else {\n\t        _this.setState({ serverConnectionStatus: { loading: false, error: result.exception } });\n\t      }\n\t    }, function () {\n\t      _this.setState({\n\t        serverConnectionStatus: {\n\t          loading: false,\n\t          error: 'Unable to check connection, please try again.'\n\t        }\n\t      });\n\t    });\n\t\n\t    this.setState({ serverConnectionStatus: { loading: true } });\n\t  },\n\t  _getServerConnectionStyle: function _getServerConnectionStyle() {\n\t    if (this.state.serverConnectionStatus.success) {\n\t      return 'success';\n\t    }\n\t    if (this.state.serverConnectionStatus.error) {\n\t      return 'danger';\n\t    }\n\t\n\t    return 'info';\n\t  },\n\t  render: function render() {\n\t    var serverConnectionStatus = this.state.serverConnectionStatus;\n\t    var isDisabled = this.props.disabled || this.props.ldapUri.hostname() === '' || serverConnectionStatus.loading;\n\t\n\t    var serverConnectionResult = void 0;\n\t    if (serverConnectionStatus.error) {\n\t      serverConnectionResult = _react2.default.createElement(\n\t        _reactBootstrap.Alert,\n\t        { bsStyle: 'danger' },\n\t        serverConnectionStatus.error\n\t      );\n\t    }\n\t    if (serverConnectionStatus.success) {\n\t      serverConnectionResult = _react2.default.createElement(\n\t        _reactBootstrap.Alert,\n\t        { bsStyle: 'success' },\n\t        'Connection to server was successful'\n\t      );\n\t    }\n\t\n\t    return _react2.default.createElement(\n\t      'div',\n\t      { className: 'form-group' },\n\t      _react2.default.createElement(\n\t        _reactBootstrap.Row,\n\t        null,\n\t        _react2.default.createElement(\n\t          _reactBootstrap.Col,\n\t          { sm: 9, smOffset: 3 },\n\t          _react2.default.createElement(\n\t            _reactBootstrap.Button,\n\t            { id: 'ldap-test-connection', bsStyle: this._getServerConnectionStyle(),\n\t              disabled: isDisabled,\n\t              onClick: this._testServerConnection },\n\t            serverConnectionStatus.loading ? 'Testing...' : 'Test Server Connection'\n\t          ),\n\t          _react2.default.createElement(\n\t            'span',\n\t            {\n\t              className: 'help-block' },\n\t            'Performs a background connection check with the address and credentials above.'\n\t          ),\n\t          serverConnectionResult\n\t        )\n\t      )\n\t    );\n\t  }\n\t});\n\t\n\texports.default = TestLdapConnection;\n\tmodule.exports = exports['default'];\n\n/***/ },\n\n/***/ 295:\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t  value: true\n\t});\n\t\n\tvar _react = __webpack_require__(1);\n\t\n\tvar _react2 = _interopRequireDefault(_react);\n\t\n\tvar _reactBootstrap = __webpack_require__(2);\n\t\n\tvar _ObjectUtils = __webpack_require__(47);\n\t\n\tvar _ObjectUtils2 = _interopRequireDefault(_ObjectUtils);\n\t\n\tvar _ActionsProvider = __webpack_require__(6);\n\t\n\tvar _ActionsProvider2 = _interopRequireDefault(_ActionsProvider);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\tvar LdapActions = _ActionsProvider2.default.getActions('Ldap');\n\t\n\tvar TestLdapLogin = _react2.default.createClass({\n\t  displayName: 'TestLdapLogin',\n\t\n\t  propTypes: {\n\t    ldapSettings: _react.PropTypes.object.isRequired,\n\t    disabled: _react.PropTypes.bool\n\t  },\n\t\n\t  getInitialState: function getInitialState() {\n\t    return {\n\t      loginUser: '',\n\t      loginPassword: '',\n\t      loginStatus: {}\n\t    };\n\t  },\n\t  componentDidMount: function componentDidMount() {\n\t    this.style.use();\n\t  },\n\t  componentWillReceiveProps: function componentWillReceiveProps(nextProps) {\n\t    // Reset login status if ldapSettings changed\n\t    if (JSON.stringify(this.props.ldapSettings) !== JSON.stringify(nextProps.ldapSettings)) {\n\t      this.setState({ loginStatus: {} });\n\t    }\n\t  },\n\t  componentWillUnmount: function componentWillUnmount() {\n\t    this.style.unuse();\n\t  },\n\t\n\t\n\t  style: __webpack_require__(505),\n\t\n\t  _changeLoginForm: function _changeLoginForm(event) {\n\t    var newState = {};\n\t    var key = event.target.name === 'test_login_username' ? 'loginUser' : 'loginPassword';\n\t    newState[key] = event.target.value;\n\t    newState.loginStatus = {};\n\t    this.setState(newState);\n\t  },\n\t  _disableSubmitOnEnter: function _disableSubmitOnEnter(event) {\n\t    if (event.key && event.key === 'Enter') {\n\t      event.preventDefault();\n\t    }\n\t  },\n\t  _testLogin: function _testLogin() {\n\t    var _this = this;\n\t\n\t    LdapActions.testLogin.triggerPromise(this.props.ldapSettings, this.state.loginUser, this.state.loginPassword).then(function (result) {\n\t      if (result.connected && (result.login_authenticated || !_ObjectUtils2.default.isEmpty(result.entry))) {\n\t        _this.setState({ loginStatus: { loading: false, success: true, result: result } });\n\t      } else {\n\t        _this.setState({ loginStatus: { loading: false, error: true, result: result } });\n\t      }\n\t    }, function () {\n\t      _this.setState({\n\t        loginStatus: {\n\t          loading: false,\n\t          error: true,\n\t          result: {\n\t            exception: 'Unable to test login, please try again.'\n\t          }\n\t        }\n\t      });\n\t    });\n\t\n\t    this.setState({ loginStatus: { loading: true } });\n\t  },\n\t  _loginTestButtonStyle: function _loginTestButtonStyle() {\n\t    if (this.state.loginStatus.success) {\n\t      return 'success';\n\t    }\n\t    if (this.state.loginStatus.error) {\n\t      return 'danger';\n\t    }\n\t\n\t    return 'info';\n\t  },\n\t  _formatLoginStatus: function _formatLoginStatus(loginStatus) {\n\t    // Don't show any status if login didn't complete\n\t    if (!loginStatus.error && !loginStatus.success) {\n\t      return null;\n\t    }\n\t\n\t    var title = 'Connection ' + (loginStatus.error ? 'failed' : 'successful');\n\t    var style = loginStatus.error ? 'danger' : 'success';\n\t\n\t    var userFound = void 0;\n\t    if (_ObjectUtils2.default.isEmpty(loginStatus.result.entry)) {\n\t      userFound = _react2.default.createElement('i', { className: 'fa fa-times ldap-failure' });\n\t    } else {\n\t      userFound = _react2.default.createElement('i', { className: 'fa fa-check ldap-success' });\n\t    }\n\t\n\t    var loginCheck = void 0;\n\t    if (loginStatus.result.login_authenticated) {\n\t      loginCheck = _react2.default.createElement('i', { className: 'fa fa-check ldap-success' });\n\t    } else {\n\t      if (this.state.loginPassword === '') {\n\t        loginCheck = _react2.default.createElement('i', { className: 'fa fa-question ldap-info' });\n\t      } else {\n\t        loginCheck = _react2.default.createElement('i', { className: 'fa fa-times ldap-failure' });\n\t      }\n\t    }\n\t\n\t    var serverResponse = void 0;\n\t    if (loginStatus.result.exception) {\n\t      serverResponse = _react2.default.createElement(\n\t        'pre',\n\t        null,\n\t        loginStatus.result.exception\n\t      );\n\t    }\n\t\n\t    var attributes = Object.keys(loginStatus.result.entry).map(function (key) {\n\t      return [_react2.default.createElement(\n\t        'dt',\n\t        null,\n\t        key\n\t      ), _react2.default.createElement(\n\t        'dd',\n\t        null,\n\t        loginStatus.result.entry[key]\n\t      )];\n\t    });\n\t    var formattedEntry = attributes.length > 0 ? _react2.default.createElement(\n\t      'dl',\n\t      null,\n\t      attributes\n\t    ) : _react2.default.createElement(\n\t      'p',\n\t      null,\n\t      'LDAP server did not return any attributes for the user.'\n\t    );\n\t\n\t    var groups = loginStatus.result.groups ? loginStatus.result.groups.map(function (group) {\n\t      return _react2.default.createElement(\n\t        'li',\n\t        { key: group },\n\t        group\n\t      );\n\t    }) : [];\n\t    var formattedGroups = groups.length > 0 ? _react2.default.createElement(\n\t      'ul',\n\t      { style: { padding: 0 } },\n\t      groups\n\t    ) : _react2.default.createElement(\n\t      'p',\n\t      null,\n\t      'LDAP server did not return any groups for the user.'\n\t    );\n\t\n\t    return _react2.default.createElement(\n\t      _reactBootstrap.Row,\n\t      null,\n\t      _react2.default.createElement(\n\t        _reactBootstrap.Col,\n\t        { sm: 9, smOffset: 3 },\n\t        _react2.default.createElement(\n\t          _reactBootstrap.Panel,\n\t          { header: title, bsStyle: style, className: 'ldap-test-login-result' },\n\t          _react2.default.createElement(\n\t            'ul',\n\t            { className: 'login-status' },\n\t            _react2.default.createElement(\n\t              'li',\n\t              null,\n\t              _react2.default.createElement(\n\t                'h4',\n\t                null,\n\t                'User found ',\n\t                userFound\n\t              )\n\t            ),\n\t            _react2.default.createElement(\n\t              'li',\n\t              null,\n\t              _react2.default.createElement(\n\t                'h4',\n\t                null,\n\t                'Login attempt ',\n\t                loginCheck\n\t              )\n\t            )\n\t          ),\n\t          serverResponse && _react2.default.createElement(\n\t            'h4',\n\t            null,\n\t            'Server response'\n\t          ),\n\t          serverResponse,\n\t          _react2.default.createElement(\n\t            'h4',\n\t            null,\n\t            'User\\'s LDAP attributes'\n\t          ),\n\t          formattedEntry,\n\t          _react2.default.createElement(\n\t            'h4',\n\t            null,\n\t            'User\\'s LDAP groups'\n\t          ),\n\t          formattedGroups\n\t        )\n\t      )\n\t    );\n\t  },\n\t  render: function render() {\n\t    var loginStatus = this.state.loginStatus;\n\t    var loginDisabled = this.props.disabled || !this.state.loginUser || loginStatus.loading;\n\t\n\t    return _react2.default.createElement(\n\t      'div',\n\t      null,\n\t      _react2.default.createElement(\n\t        _reactBootstrap.Input,\n\t        { id: 'test_login_username', labelClassName: 'col-sm-3', wrapperClassName: 'col-sm-9', label: 'Login test',\n\t          help: 'Verify the previous settings by loading the entry for the given user name. If you omit the password, no authentication attempt will be made.' },\n\t        _react2.default.createElement(\n\t          _reactBootstrap.Row,\n\t          { className: 'row-sm' },\n\t          _react2.default.createElement(\n\t            _reactBootstrap.Col,\n\t            { sm: 5 },\n\t            _react2.default.createElement('input', { type: 'text', id: 'test_login_username', name: 'test_login_username', className: 'form-control',\n\t              value: this.state.loginUser, onChange: this._changeLoginForm,\n\t              onKeyPress: this._disableSubmitOnEnter,\n\t              placeholder: 'Username for login test', disabled: this.props.disabled })\n\t          ),\n\t          _react2.default.createElement(\n\t            _reactBootstrap.Col,\n\t            { sm: 5 },\n\t            _react2.default.createElement('input', { type: 'password', id: 'test_login_password', name: 'test_login_password', className: 'form-control',\n\t              value: this.state.testLoginPassword, onChange: this._changeLoginForm,\n\t              onKeyPress: this._disableSubmitOnEnter,\n\t              placeholder: 'Password', disabled: this.props.disabled })\n\t          ),\n\t          _react2.default.createElement(\n\t            _reactBootstrap.Col,\n\t            { sm: 2 },\n\t            _react2.default.createElement(\n\t              _reactBootstrap.Button,\n\t              { bsStyle: this._loginTestButtonStyle(), disabled: loginDisabled,\n\t                onClick: this._testLogin },\n\t              loginStatus.loading ? 'Testing...' : 'Test login'\n\t            )\n\t          )\n\t        )\n\t      ),\n\t      this._formatLoginStatus(loginStatus)\n\t    );\n\t  }\n\t});\n\t\n\texports.default = TestLdapLogin;\n\tmodule.exports = exports['default'];\n\n/***/ },\n\n/***/ 369:\n/***/ function(module, exports, __webpack_require__) {\n\n\texports = module.exports = __webpack_require__(19)();\n\t// imports\n\t\n\t\n\t// module\n\texports.push([module.id, \".ldap-test-login-result h4{margin-bottom:10px}.ldap-test-login-result .login-status{padding:0;margin-bottom:10px}.ldap-test-login-result .login-status li{display:inline-block;margin-right:20px}.ldap-success{color:green}.ldap-failure{color:maroon}.ldap-info{color:#337ab7}\", \"\"]);\n\t\n\t// exports\n\n\n/***/ },\n\n/***/ 505:\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar refs = 0;\n\tvar dispose;\n\tvar content = __webpack_require__(369);\n\tif(typeof content === 'string') content = [[module.id, content, '']];\n\texports.use = exports.ref = function() {\n\t\tif(!(refs++)) {\n\t\t\texports.locals = content.locals;\n\t\t\tdispose = __webpack_require__(20)(content, {});\n\t\t}\n\t\treturn exports;\n\t};\n\texports.unuse = exports.unref = function() {\n\t\tif(!(--refs)) {\n\t\t\tdispose();\n\t\t\tdispose = null;\n\t\t}\n\t};\n\tif(false) {\n\t\tvar lastRefs = module.hot.data && module.hot.data.refs || 0;\n\t\tif(lastRefs) {\n\t\t\texports.ref();\n\t\t\tif(!content.locals) {\n\t\t\t\trefs = lastRefs;\n\t\t\t}\n\t\t}\n\t\tif(!content.locals) {\n\t\t\tmodule.hot.accept();\n\t\t}\n\t\tmodule.hot.dispose(function(data) {\n\t\t\tdata.refs = content.locals ? 0 : refs;\n\t\t\tif(dispose) {\n\t\t\t\tdispose();\n\t\t\t}\n\t\t});\n\t}\n\n/***/ },\n\n/***/ 865:\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t  value: true\n\t});\n\t\n\tvar _react = __webpack_require__(1);\n\t\n\tvar _react2 = _interopRequireDefault(_react);\n\t\n\tvar _reactBootstrap = __webpack_require__(2);\n\t\n\tvar _reactRouterBootstrap = __webpack_require__(18);\n\t\n\tvar _DocsHelper = __webpack_require__(17);\n\t\n\tvar _DocsHelper2 = _interopRequireDefault(_DocsHelper);\n\t\n\tvar _Routes = __webpack_require__(11);\n\t\n\tvar _Routes2 = _interopRequireDefault(_Routes);\n\t\n\tvar _common = __webpack_require__(5);\n\t\n\tvar _DocumentationLink = __webpack_require__(29);\n\t\n\tvar _DocumentationLink2 = _interopRequireDefault(_DocumentationLink);\n\t\n\tvar _LdapComponent = __webpack_require__(292);\n\t\n\tvar _LdapComponent2 = _interopRequireDefault(_LdapComponent);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\tvar LdapPage = _react2.default.createClass({\n\t  displayName: 'LdapPage',\n\t  render: function render() {\n\t    return _react2.default.createElement(\n\t      'span',\n\t      null,\n\t      _react2.default.createElement(\n\t        _common.PageHeader,\n\t        { title: 'LDAP Settings' },\n\t        _react2.default.createElement(\n\t          'span',\n\t          null,\n\t          'This page is the only resource you need to set up the Graylog LDAP integration. You can test the connection to your LDAP server and even try to log in with an LDAP account of your choice right away.'\n\t        ),\n\t        _react2.default.createElement(\n\t          'span',\n\t          null,\n\t          'Read more about LDAP configuration in the ',\n\t          _react2.default.createElement(_DocumentationLink2.default, { page: _DocsHelper2.default.PAGES.USERS_ROLES, text: 'documentation' }),\n\t          '.'\n\t        ),\n\t        _react2.default.createElement(\n\t          'span',\n\t          null,\n\t          _react2.default.createElement(\n\t            _common.IfPermitted,\n\t            { permissions: 'LDAPGROUPS_EDIT' },\n\t            _react2.default.createElement(\n\t              _reactRouterBootstrap.LinkContainer,\n\t              { to: _Routes2.default.SYSTEM.LDAP.GROUPS },\n\t              _react2.default.createElement(\n\t                _reactBootstrap.Button,\n\t                { bsStyle: 'info' },\n\t                'LDAP Group Mapping'\n\t              )\n\t            )\n\t          ),\n\t          '\\xA0',\n\t          _react2.default.createElement(\n\t            _common.IfPermitted,\n\t            { permissions: 'USERS_LIST' },\n\t            _react2.default.createElement(\n\t              _reactRouterBootstrap.LinkContainer,\n\t              { to: _Routes2.default.SYSTEM.AUTHENTICATION.USERS.LIST },\n\t              _react2.default.createElement(\n\t                _reactBootstrap.Button,\n\t                { bsStyle: 'info' },\n\t                'Manage users'\n\t              )\n\t            )\n\t          )\n\t        )\n\t      ),\n\t      _react2.default.createElement(\n\t        _reactBootstrap.Row,\n\t        { className: 'content' },\n\t        _react2.default.createElement(\n\t          _reactBootstrap.Col,\n\t          { md: 12 },\n\t          _react2.default.createElement(_LdapComponent2.default, null)\n\t        )\n\t      )\n\t    );\n\t  }\n\t});\n\t\n\texports.default = LdapPage;\n\tmodule.exports = exports['default'];\n\n/***/ }\n\n});\n\n\n/** WEBPACK FOOTER **\n ** 30.30.a37bd6c43e2b13149f99.js\n **/","import React from 'react';\nimport Reflux from 'reflux';\nimport { Row, Col, Input, Button, Panel } from 'react-bootstrap';\nimport { LinkContainer } from 'react-router-bootstrap';\nimport URI from 'urijs';\nimport naturalSort from 'javascript-natural-sort';\n\nimport { MultiSelect, Spinner } from 'components/common';\nimport ObjectUtils from 'util/ObjectUtils';\nimport Routes from 'routing/Routes';\n\nimport TestLdapConnection from './TestLdapConnection';\nimport TestLdapLogin from './TestLdapLogin';\n\nimport StoreProvider from 'injection/StoreProvider';\nconst RolesStore = StoreProvider.getStore('Roles');\nconst LdapStore = StoreProvider.getStore('Ldap');\n\nimport ActionsProvider from 'injection/ActionsProvider';\nconst LdapActions = ActionsProvider.getActions('Ldap');\n\nconst HelperText = {\n  activeDirectory: {\n    SYSTEM_USERNAME: (\n      \n        The username for the initial connection to the Active Directory server, e.g. [email protected].
\n This needs to match the userPrincipalName of that user.\n
\n ),\n SYSTEM_PASSWORD: ('The password for the initial connection to the Active Directory server.'),\n SEARCH_BASE: (\n \n The base tree to limit the Active Directory search query to, e.g. cn=users,dc=example,dc=com.\n \n ),\n SEARCH_PATTERN: (\n \n For example {'(&(objectClass=user)(sAMAccountName={0}))'}.{' '}\n The string {'{0}'} will be replaced by the entered username.\n \n ),\n DISPLAY_NAME: (\n \n Which Active Directory attribute to use for the full name of the user in Graylog, e.g. displayName.
\n Try to load a test user using the form below, if you are unsure which attribute to use.\n
\n ),\n GROUP_SEARCH_BASE: (\n \n The base tree to limit the Active Directory group search query to, e.g. cn=users,dc=example,dc=com.\n \n ),\n GROUP_PATTERN: (\n \n The search pattern used to find groups in Active Directory for mapping to Graylog roles, e.g.{' '}\n (objectClass=group) or{' '}\n (&(objectClass=group)(cn=graylog*)).\n \n ),\n GROUP_ID: (\n Which Active Directory attribute to use for the full name of the group, usually cn.\n ),\n DEFAULT_GROUP: (\n \n The default Graylog role determines whether a user created via Active Directory can access the entire system, or has limited access.
\n You can assign additional permissions by{' '}\n mapping Active Directory groups to Graylog roles,{' '}\n or you can assign additional Graylog roles to Active Directory users below.\n
\n ),\n ADDITIONAL_GROUPS: (\n 'Choose the additional roles each Active Directory user will have by default, leave it empty if you want to map Active Directory groups to Graylog roles.'\n ),\n },\n\n ldap: {\n SYSTEM_USERNAME: (\n \n The username for the initial connection to the LDAP server, e.g.{' '}\n uid=admin,ou=system, this might be optional depending on your LDAP server.\n \n ),\n SYSTEM_PASSWORD: ('The password for the initial connection to the LDAP server.'),\n SEARCH_BASE: (\n \n The base tree to limit the LDAP search query to, e.g. cn=users,dc=example,dc=com
.\n \n ),\n SEARCH_PATTERN: (\n \n For example {'(&(objectClass=inetOrgPerson)(uid={0}))'}.{' '}\n The string {'{0}'} will be replaced by the entered username.\n \n ),\n DISPLAY_NAME: (\n \n Which LDAP attribute to use for the full name of the user in Graylog, e.g. cn.
\n Try to load a test user using the form below, if you are unsure which attribute to use.\n
\n ),\n GROUP_SEARCH_BASE: (\n \n The base tree to limit the LDAP group search query to, e.g. cn=users,dc=example,dc=com.\n \n ),\n GROUP_PATTERN: (\n \n The search pattern used to find groups in LDAP for mapping to Graylog roles, e.g.{' '}\n (objectClass=groupOfNames) or{' '}\n (&(objectClass=groupOfNames)(cn=graylog*)).\n \n ),\n GROUP_ID: (\n Which LDAP attribute to use for the full name of the group, usually cn.\n ),\n DEFAULT_GROUP: (\n \n The default Graylog role determines whether a user created via LDAP can access the entire system, or has limited access.
\n You can assign additional permissions by{' '}\n mapping LDAP groups to Graylog roles,{' '}\n or you can assign additional Graylog roles to LDAP users below.\n
\n ),\n ADDITIONAL_GROUPS: (\n 'Choose the additional roles each LDAP user will have by default, leave it empty if you want to map LDAP groups to Graylog roles.'\n ),\n },\n};\n\nconst LdapComponent = React.createClass({\n mixins: [Reflux.listenTo(LdapStore, '_onLdapSettingsChange', '_onLdapSettingsChange')],\n\n propTypes: {\n onCancel: React.PropTypes.func.isRequired,\n },\n\n getInitialState() {\n return {\n ldapSettings: undefined,\n ldapUri: undefined,\n roles: undefined,\n };\n },\n\n componentDidMount() {\n RolesStore.loadRoles().then(roles => {\n this.setState({roles: this._formatAdditionalRoles(roles)});\n });\n },\n\n _formatAdditionalRoles(roles) {\n return roles\n .filter((r) => !(r.name.toLowerCase() === 'reader' || r.name.toLowerCase() === 'admin'))\n .sort((r1, r2) => naturalSort(r1.name.toLowerCase(), r2.name.toLowerCase()))\n .map((r) => {\n return {label: r.name, value: r.name};\n });\n },\n\n _onLdapSettingsChange(state) {\n if (!state.ldapSettings) {\n return;\n }\n\n // Clone settings object, so we don't the store reference\n const settings = ObjectUtils.clone(state.ldapSettings);\n const ldapUri = new URI(settings.ldap_uri);\n this.setState({ldapSettings: settings, ldapUri: ldapUri});\n },\n\n _isLoading() {\n return !this.state.ldapSettings || !this.state.roles;\n },\n\n _bindChecked(ev, value) {\n this._setSetting(ev.target.name, typeof value === 'undefined' ? ev.target.checked : value);\n },\n\n _bindValue(ev) {\n this._setSetting(ev.target.name, ev.target.value);\n },\n\n _updateSsl(ev) {\n this._setUriScheme(ev.target.checked ? 'ldaps' : 'ldap');\n },\n\n _setSetting(attribute, value) {\n const newState = {};\n\n let formattedValue = value;\n // Convert URI object into string to store it in the state\n if (attribute === 'ldap_uri' && typeof value === 'object') {\n newState.ldapUri = value;\n formattedValue = value.toString();\n }\n\n // Clone state to not modify it directly\n const settings = ObjectUtils.clone(this.state.ldapSettings);\n settings[attribute] = formattedValue;\n newState.ldapSettings = settings;\n newState.serverConnectionStatus = {};\n this.setState(newState);\n },\n\n _setUriScheme(scheme) {\n const ldapUri = this.state.ldapUri.clone();\n ldapUri.scheme(scheme);\n this._setSetting('ldap_uri', ldapUri);\n },\n\n _uriScheme() {\n return this.state.ldapUri.scheme() + '://';\n },\n\n _setUriHost(host) {\n const ldapUri = this.state.ldapUri.clone();\n ldapUri.hostname(host);\n this._setSetting('ldap_uri', ldapUri);\n },\n\n _uriHost() {\n return this.state.ldapUri.hostname();\n },\n\n _setUriPort(port) {\n const ldapUri = this.state.ldapUri.clone();\n ldapUri.port(port);\n this._setSetting('ldap_uri', ldapUri);\n },\n\n _uriPort() {\n return this.state.ldapUri.port();\n },\n\n _setAdditionalDefaultGroups(rolesString) {\n // only keep non-empty entries\n const roles = rolesString.split(',').filter((v) => v !== '');\n this._setSetting('additional_default_groups', roles);\n },\n\n _saveSettings(event) {\n event.preventDefault();\n LdapActions.update(this.state.ldapSettings);\n },\n\n render() {\n if (this._isLoading()) {\n return ;\n }\n\n const isAD = this.state.ldapSettings.active_directory;\n const disabled = !this.state.ldapSettings.enabled;\n const help = isAD ? HelperText.activeDirectory : HelperText.ldap;\n\n const rolesOptions = this.state.roles;\n\n return (\n \n \n
\n \n\n
\n 1. Server configuration\n \n \n \n \n\n \n
\n {this._uriScheme()}\n this._setUriHost(ev.target.value)}\n disabled={disabled}/>\n :\n this._setUriPort(ev.target.value)}\n disabled={disabled}/>\n
\n \n \n \n \n\n \n\n \n
\n\n
\n 2. Connection Test\n \n
\n\n
\n 3. User mapping\n \n\n \n\n \n
\n\n
\n 4. Group Mapping\n (optional)\n \n \n\n \n\n \n\n \n \n \n \n \n \n \n\n \n \n \n Changing the static role assignment will only affect to new users created via LDAP/Active Directory!
\n Existing user accounts will be updated on their next login, or if you edit their roles manually.\n
\n \n
\n\n \n this._setAdditionalDefaultGroups(roles)}\n placeholder=\"Choose additional roles...\"\n />\n \n\n \n \n \n Changing the static role assignment will only affect to new users created via LDAP/Active Directory!
\n Existing user accounts will be updated on their next login, or if you edit their roles manually.\n
\n \n
\n
\n\n
\n 5. Login test\n \n
\n\n
\n 6. Store settings\n
\n \n \n \n \n
\n
\n
\n \n
\n );\n },\n});\n\nexport default LdapComponent;\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/components/ldap/LdapComponent.jsx\n **/","import React, {PropTypes} from 'react';\nimport { Row, Col, Button, Alert } from 'react-bootstrap';\n\nimport ActionsProvider from 'injection/ActionsProvider';\nconst LdapActions = ActionsProvider.getActions('Ldap');\n\nconst TestLdapConnection = React.createClass({\n propTypes: {\n ldapSettings: PropTypes.object.isRequired,\n ldapUri: PropTypes.object.isRequired,\n disabled: PropTypes.bool,\n },\n\n getInitialState() {\n return {\n serverConnectionStatus: {},\n };\n },\n\n componentWillReceiveProps(nextProps) {\n // Reset connection status if ldapSettings changed\n if (JSON.stringify(this.props.ldapSettings) !== JSON.stringify(nextProps.ldapSettings)) {\n this.setState({serverConnectionStatus: {}});\n }\n },\n\n _testServerConnection() {\n LdapActions.testServerConnection.triggerPromise(this.props.ldapSettings)\n .then(\n result => {\n if (result.connected) {\n this.setState({serverConnectionStatus: {loading: false, success: true}});\n } else {\n this.setState({serverConnectionStatus: {loading: false, error: result.exception}});\n }\n },\n () => {\n this.setState({\n serverConnectionStatus: {\n loading: false,\n error: 'Unable to check connection, please try again.',\n },\n });\n }\n );\n\n this.setState({serverConnectionStatus: {loading: true}});\n },\n\n _getServerConnectionStyle() {\n if (this.state.serverConnectionStatus.success) {\n return 'success';\n }\n if (this.state.serverConnectionStatus.error) {\n return 'danger';\n }\n\n return 'info';\n },\n\n render() {\n const serverConnectionStatus = this.state.serverConnectionStatus;\n const isDisabled = this.props.disabled || this.props.ldapUri.hostname() === '' || serverConnectionStatus.loading;\n\n let serverConnectionResult;\n if (serverConnectionStatus.error) {\n serverConnectionResult = {serverConnectionStatus.error};\n }\n if (serverConnectionStatus.success) {\n serverConnectionResult = Connection to server was successful;\n }\n\n return (\n
\n \n \n \n Performs a background connection check with the address and credentials above.\n {serverConnectionResult}\n \n \n
\n );\n },\n});\n\nexport default TestLdapConnection;\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/components/ldap/TestLdapConnection.jsx\n **/","import React, { PropTypes } from 'react';\nimport { Row, Col, Input, Button, Panel } from 'react-bootstrap';\n\nimport ObjectUtils from 'util/ObjectUtils';\n\nimport ActionsProvider from 'injection/ActionsProvider';\nconst LdapActions = ActionsProvider.getActions('Ldap');\n\nconst TestLdapLogin = React.createClass({\n propTypes: {\n ldapSettings: PropTypes.object.isRequired,\n disabled: PropTypes.bool,\n },\n\n getInitialState() {\n return {\n loginUser: '',\n loginPassword: '',\n loginStatus: {},\n };\n },\n\n componentDidMount() {\n this.style.use();\n },\n\n componentWillReceiveProps(nextProps) {\n // Reset login status if ldapSettings changed\n if (JSON.stringify(this.props.ldapSettings) !== JSON.stringify(nextProps.ldapSettings)) {\n this.setState({loginStatus: {}});\n }\n },\n\n componentWillUnmount() {\n this.style.unuse();\n },\n\n style: require('!style/useable!css!./TestLdapLogin.css'),\n\n _changeLoginForm(event) {\n const newState = {};\n const key = (event.target.name === 'test_login_username' ? 'loginUser' : 'loginPassword');\n newState[key] = event.target.value;\n newState.loginStatus = {};\n this.setState(newState);\n },\n\n _disableSubmitOnEnter(event) {\n if (event.key && event.key === 'Enter') {\n event.preventDefault();\n }\n },\n\n _testLogin() {\n LdapActions.testLogin.triggerPromise(this.props.ldapSettings, this.state.loginUser, this.state.loginPassword)\n .then(\n result => {\n if (result.connected && (result.login_authenticated || !ObjectUtils.isEmpty(result.entry))) {\n this.setState({loginStatus: {loading: false, success: true, result: result}});\n } else {\n this.setState({loginStatus: {loading: false, error: true, result: result}});\n }\n },\n () => {\n this.setState({\n loginStatus: {\n loading: false,\n error: true,\n result: {\n exception: 'Unable to test login, please try again.',\n },\n },\n });\n }\n );\n\n this.setState({loginStatus: {loading: true}});\n },\n\n _loginTestButtonStyle() {\n if (this.state.loginStatus.success) {\n return 'success';\n }\n if (this.state.loginStatus.error) {\n return 'danger';\n }\n\n return 'info';\n },\n\n _formatLoginStatus(loginStatus) {\n // Don't show any status if login didn't complete\n if (!loginStatus.error && !loginStatus.success) {\n return null;\n }\n\n const title = `Connection ${loginStatus.error ? 'failed' : 'successful'}`;\n const style = loginStatus.error ? 'danger' : 'success';\n\n let userFound;\n if (ObjectUtils.isEmpty(loginStatus.result.entry)) {\n userFound = ;\n } else {\n userFound = ;\n }\n\n let loginCheck;\n if (loginStatus.result.login_authenticated) {\n loginCheck = ;\n } else {\n if (this.state.loginPassword === '') {\n loginCheck = ;\n } else {\n loginCheck = ;\n }\n }\n\n let serverResponse;\n if (loginStatus.result.exception) {\n serverResponse =
{loginStatus.result.exception}
;\n }\n\n const attributes = Object.keys(loginStatus.result.entry).map(key => {\n return [\n
{key}
,\n
{loginStatus.result.entry[key]}
,\n ];\n });\n const formattedEntry = (attributes.length > 0 ?
{attributes}
:\n

LDAP server did not return any attributes for the user.

);\n\n const groups = (loginStatus.result.groups ? loginStatus.result.groups.map(group =>
  • {group}
  • ) : []);\n const formattedGroups = (groups.length > 0 ?
      {groups}
    :\n

    LDAP server did not return any groups for the user.

    );\n\n return (\n \n \n \n
      \n
    • User found {userFound}

    • \n
    • Login attempt {loginCheck}

    • \n
    \n {serverResponse &&

    Server response

    }\n {serverResponse}\n

    User's LDAP attributes

    \n {formattedEntry}\n

    User's LDAP groups

    \n {formattedGroups}\n
    \n \n
    \n );\n },\n\n render() {\n const loginStatus = this.state.loginStatus;\n const loginDisabled = this.props.disabled || !this.state.loginUser || loginStatus.loading;\n\n return (\n
    \n \n \n \n \n \n \n \n \n \n \n \n \n \n {this._formatLoginStatus(loginStatus)}\n
    \n );\n },\n});\n\nexport default TestLdapLogin;\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/components/ldap/TestLdapLogin.jsx\n **/","exports = module.exports = require(\"./../../../node_modules/css-loader/lib/css-base.js\")();\n// imports\n\n\n// module\nexports.push([module.id, \".ldap-test-login-result h4{margin-bottom:10px}.ldap-test-login-result .login-status{padding:0;margin-bottom:10px}.ldap-test-login-result .login-status li{display:inline-block;margin-right:20px}.ldap-success{color:green}.ldap-failure{color:maroon}.ldap-info{color:#337ab7}\", \"\"]);\n\n// exports\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/css-loader!./src/components/ldap/TestLdapLogin.css\n ** module id = 369\n ** module chunks = 18 30\n **/","var refs = 0;\nvar dispose;\nvar content = require(\"!!./../../../node_modules/css-loader/index.js!./TestLdapLogin.css\");\nif(typeof content === 'string') content = [[module.id, content, '']];\nexports.use = exports.ref = function() {\n\tif(!(refs++)) {\n\t\texports.locals = content.locals;\n\t\tdispose = require(\"!./../../../node_modules/style-loader/addStyles.js\")(content, {});\n\t}\n\treturn exports;\n};\nexports.unuse = exports.unref = function() {\n\tif(!(--refs)) {\n\t\tdispose();\n\t\tdispose = null;\n\t}\n};\nif(module.hot) {\n\tvar lastRefs = module.hot.data && module.hot.data.refs || 0;\n\tif(lastRefs) {\n\t\texports.ref();\n\t\tif(!content.locals) {\n\t\t\trefs = lastRefs;\n\t\t}\n\t}\n\tif(!content.locals) {\n\t\tmodule.hot.accept();\n\t}\n\tmodule.hot.dispose(function(data) {\n\t\tdata.refs = content.locals ? 0 : refs;\n\t\tif(dispose) {\n\t\t\tdispose();\n\t\t}\n\t});\n}\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/style-loader/useable.js!./~/css-loader!./src/components/ldap/TestLdapLogin.css\n ** module id = 505\n ** module chunks = 18 30\n **/","import React from 'react';\nimport { Button, Row, Col } from 'react-bootstrap';\nimport { LinkContainer } from 'react-router-bootstrap';\n\nimport DocsHelper from 'util/DocsHelper';\nimport Routes from 'routing/Routes';\n\nimport { IfPermitted, PageHeader } from 'components/common';\nimport DocumentationLink from 'components/support/DocumentationLink';\nimport LdapComponent from 'components/ldap/LdapComponent';\n\nconst LdapPage = React.createClass({\n render() {\n return (\n \n \n This page is the only resource you need to set up the Graylog LDAP integration. You can test the connection to your LDAP server and even try to log in with an LDAP account of your choice right away.\n\n Read more about LDAP configuration in the .\n\n \n \n \n \n \n \n  \n \n \n \n \n \n \n \n\n \n \n \n \n \n \n );\n },\n});\n\nexport default LdapPage;\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/pages/LdapPage.jsx\n **/"],"sourceRoot":""}