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

web-interface.assets.d5f85445-52.a49ba8ace624afae35ed.js.map Maven / Gradle / Ivy

There is a newer version: 6.0.6
Show newest version
{"version":3,"sources":["webpack:///./src/components/authentication/MongoDbPasswordConfig.jsx","webpack:///./src/components/authentication/MongoDbSessionConfig.jsx","webpack:///./src/components/ldap/TestLdapConnection.jsx","webpack:///./src/components/ldap/TestLdapLogin.jsx","webpack:///./src/components/ldap/LdapComponent.jsx","webpack:///./src/components/ldap/LdapGroupsComponent.jsx","webpack:///./src/components/authentication/LegacyLdapConfig.jsx","webpack:///./src/components/authentication/RootUserConfig.jsx","webpack:///./src/components/authentication/AccessTokenConfig.jsx","webpack:///./src/components/authentication/index.js","webpack:///./src/components/authentication/AuthProvidersConfig.jsx","webpack:///./src/components/authentication/AuthenticationComponent.jsx","webpack:///./src/pages/AuthenticationPage.jsx","webpack:///./src/util/SortUtils.js","webpack:///./src/components/ldap/LdapComponent.css","webpack:///./src/components/ldap/LdapComponent.css?c886"],"names":["MongoDbPasswordConfig","title","subpage","React","Component","config","PropTypes","object","MongoDbSessionConfig","LdapActions","ActionsProvider","getActions","TestLdapConnection","serverConnectionStatus","testServerConnection","triggerPromise","props","ldapSettings","then","result","connected","setState","loading","success","error","exception","state","nextProps","JSON","stringify","this","serverConnectionResult","isDisabled","disabled","ldapUri","hostname","bsStyle","className","sm","smOffset","id","_getServerConnectionStyle","onClick","_testServerConnection","isRequired","bool","LoginResultPanel","styled","Panel","StatusIcon","Icon","status","theme","color","variant","TestLdapLogin","event","key","target","name","value","loginUser","loginPassword","testLogin","login_authenticated","ObjectUtils","isEmpty","entry","loginStatus","successStyle","userFound","loginCheck","serverResponse","style","attributes","Object","keys","map","formattedEntry","length","groups","group","formattedGroups","padding","header","loginDisabled","_disableSubmitOnEnter","preventDefault","labelClassName","wrapperClassName","label","help","type","onChange","_changeLoginForm","onKeyPress","placeholder","_loginTestButtonStyle","_testLogin","_formatLoginStatus","RolesStore","CombinedProvider","get","GroupMappingLink","text","bsSize","propTypes","string","func","HelperText","activeDirectory","SYSTEM_USERNAME","SYSTEM_PASSWORD","SEARCH_BASE","SEARCH_PATTERN","DISPLAY_NAME","GROUP_SEARCH_BASE","GROUP_PATTERN","GROUP_ID","defaultGroup","onClickHandler","ADDITIONAL_GROUPS","ldap","LdapComponent","undefined","roles","hidePasswordInput","sort","r1","r2","naturalSort","toLowerCase","r","settings","cloneDeep","URI","ldap_uri","system_password_set","ev","_setSetting","checked","_setUriScheme","attribute","newState","formattedValue","toString","scheme","nextLdapUri","clone","host","port","rolesString","split","filter","v","update","onShowGroups","loadSettings","_onLdapSettingsChange","loadRoles","_formatAdditionalRoles","_isLoading","rolesOptions","onCancel","isAD","active_directory","enabled","ldapPasswordInput","controlId","LdapComponentStyle","passwordSet","_showPasswordInput","system_password","_bindValue","additionalDefaultGroups","additional_default_groups","additionalDefaultGroupsString","Array","isArray","join","lg","onSubmit","_saveSettings","_bindChecked","htmlFor","_uriScheme","_uriHost","required","_setUriHost","_uriPort","min","max","width","_setUriPort","_updateSsl","use_start_tls","trust_all_certificates","system_username","search_base","search_pattern","display_name_attribute","md","mdOffset","_onShowGroups","group_search_base","group_search_pattern","group_id_attribute","options","default_group","role","_setAdditionalDefaultGroups","LdapGroupsActions","LdapStore","StyledLegend","legend","LdapGroupsComponent","mapping","groupsErrorMessage","getAttribute","set","saveMapping","toJS","onShowConfig","naturalSortIgnoreCase","data-group","_updateMapping","loadMapping","Immutable","Map","loadGroups","Set","additional","_onShowConfig","message","size","currentLdapSearchGroups","previousMappings","keySeq","contains","_saveMapping","_renderGroupMappingInputs","mdPush","connect","ldapStore","LegacyLdapConfig","showSettings","_toggleButton","history","push","Routes","SYSTEM","AUTHENTICATION","OVERVIEW","toggleButtonText","activeComponent","_onCancel","_onSettingsCancel","RootUserConfig","AccessTokenConfig","PluginStore","register","PluginManifest","authenticatorConfigurations","displayName","description","canBeDisabled","component","AuthProvidersConfig","createReactClass","descriptors","updateConfig","getInitialState","disabled_realms","realm_order","inputs","_openModal","configModal","open","_closeModal","close","_saveConfig","_hasNoActiveRealm","_resetConfig","_updateSorting","newSorting","_toggleStatus","realmName","disabledProcessors","p","indexOf","_noActiveRealmWarning","_summary","idx","disabledName","realm","replace","_sortableItems","_statusForm","a","b","ref","elem","render","permissions","striped","bordered","BootstrapModalForm","onSubmitForm","onModalClose","submitButtonText","items","onMoveItem","condensed","AuthenticationActions","AuthenticationStore","StoreProvider","getStore","CurrentUserStore","SubNavigationCol","Col","gray","ContentPaneCol","NavItemDivider","NavItem","AuthenticationComponent","params","children","element","mixins","Reflux","PermissionsMixin","getDefaultProps","componentDidMount","load","exports","forEach","authConfig","_pluginPane","auth","createElement","_onUpdateProviders","_contentComponent","authenticators","auths","currentUser","isPermitted","numberedTitle","to","PROVIDERS","provider","unshift","CONFIG","ROLES","USERS","LIST","edit","encodeURIComponent","username","TOKENS","subnavigation","stacked","contentComponent","Children","count","only","AuthenticationPage","location","PageHeader","DocumentationLink","page","DocsHelper","PAGES","USERS_ROLES","sortByDate","d1","d2","sortOrder","effectiveSortOrder","d1Time","moment","d2Time","isBefore","s1","s2","module","i","locals","content","transform"],"mappings":"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","file":"d5f85445-52.a49ba8ace624afae35ed.js","sourcesContent":["import PropTypes from 'prop-types';\nimport React from 'react';\nimport { DocumentTitle, PageHeader } from 'components/common';\n\nclass MongoDbPasswordConfig extends React.Component {\n  static propTypes = {\n    config: PropTypes.object,\n  };\n\n  render() {\n    return (\n      \n        \n          \n            This authenticator uses the password stored in MongoDB to grant access to users, it usually runs last, so that other authentication sources have priority.\n          \n          If you only rely on external authentication systems, such as LDAP or Active Directory, you can disable this authenticator. It currently has no configuration options.\n        \n      \n    );\n  }\n}\n\nexport default MongoDbPasswordConfig;\n","import React from 'react';\nimport { DocumentTitle, PageHeader } from 'components/common';\n\nconst MongoDbSessionConfig = () => {\n  return (\n    \n      \n        \n          This authenticator uses the session supplied from the web interface to grant access to logged in users, it usually runs first.\n        \n        Since sessions are necessary to let the web interface function it cannot be disabled.\n      \n    \n  );\n};\n\nexport default MongoDbSessionConfig;\n","import PropTypes from 'prop-types';\nimport React from 'react';\n\nimport { Row, Col, Alert, Button } from 'components/graylog';\nimport ActionsProvider from 'injection/ActionsProvider';\n\nconst LdapActions = ActionsProvider.getActions('Ldap');\n\nclass TestLdapConnection extends React.Component {\n  static propTypes = {\n    ldapSettings: PropTypes.object.isRequired,\n    ldapUri: PropTypes.object.isRequired,\n    disabled: PropTypes.bool,\n  };\n\n  state = {\n    serverConnectionStatus: {},\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;\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 \n {serverConnectionResult}\n \n \n
\n );\n }\n}\n\nexport default TestLdapConnection;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport styled from 'styled-components';\n\nimport { Row, Col, Panel, Button } from 'components/graylog';\nimport { Icon } from 'components/common';\nimport { Input } from 'components/bootstrap';\nimport ObjectUtils from 'util/ObjectUtils';\nimport ActionsProvider from 'injection/ActionsProvider';\n\nconst LdapActions = ActionsProvider.getActions('Ldap');\n\nconst LoginResultPanel = styled(Panel)`\n h4 {\n margin-bottom: 10px;\n }\n\n .login-status {\n padding: 0;\n margin-bottom: 10px;\n }\n\n .login-status li {\n display: inline-block;\n margin-right: 20px;\n }\n`;\n\nconst StatusIcon = styled(Icon)(({ status, theme }) => `\n color: ${theme.color.variant[status]};\n`);\n\n\nclass TestLdapLogin extends React.Component {\n static propTypes = {\n ldapSettings: PropTypes.object.isRequired,\n disabled: PropTypes.bool,\n }\n\n static defaultProps = {\n disabled: false,\n }\n\n constructor(props) {\n super(props);\n\n this.state = {\n loginUser: '',\n loginPassword: '',\n loginStatus: {},\n };\n }\n\n // eslint-disable-next-line camelcase\n UNSAFE_componentWillReceiveProps(nextProps) {\n const { ldapSettings } = this.props;\n // Reset login status if ldapSettings changed\n if (JSON.stringify(ldapSettings) !== JSON.stringify(nextProps.ldapSettings)) {\n this.setState({ loginStatus: {} });\n }\n }\n\n _changeLoginForm = (event) => {\n const key = (event.target.name === 'test_login_username' ? 'loginUser' : 'loginPassword');\n\n this.setState({ [key]: event.target.value });\n }\n\n _testLogin = () => {\n const { loginUser, loginPassword } = this.state;\n const { ldapSettings } = this.props;\n\n LdapActions.testLogin.triggerPromise(ldapSettings, loginUser, 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 const { loginStatus } = this.state;\n const successStyle = loginStatus.success ? 'success' : 'info';\n\n return loginStatus.error ? 'danger' : successStyle;\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 { loginPassword } = this.state;\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 if (loginPassword === '') {\n loginCheck = ;\n } else {\n loginCheck = ;\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, loginUser, loginPassword } = this.state;\n const { disabled } = this.props;\n const loginDisabled = disabled || !loginUser || loginStatus.loading;\n\n const _disableSubmitOnEnter = (event) => {\n if (event.key && event.key === 'Enter') {\n event.preventDefault();\n }\n };\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\n\nexport default TestLdapLogin;\n","import PropTypes from 'prop-types';\nimport React from 'react';\nimport URI from 'urijs';\nimport naturalSort from 'javascript-natural-sort';\nimport { cloneDeep } from 'lodash';\n\nimport { Row, Col, Panel, FormGroup, ControlLabel, Button } from 'components/graylog';\nimport { Input, InputWrapper } from 'components/bootstrap';\n\nimport { MultiSelect, Select, Spinner } from 'components/common';\n\nimport CombinedProvider from 'injection/CombinedProvider';\nimport TestLdapConnection from './TestLdapConnection';\nimport TestLdapLogin from './TestLdapLogin';\nimport LdapComponentStyle from './LdapComponent.css';\n\n\nconst { RolesStore } = CombinedProvider.get('Roles');\nconst { LdapActions } = CombinedProvider.get('Ldap');\n\nconst GroupMappingLink = ({ text, onClick }) => {\n return (\n \n );\n};\nGroupMappingLink.propTypes = {\n text: PropTypes.string.isRequired,\n onClick: PropTypes.func.isRequired,\n};\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 defaultGroup: (onClickHandler) => (\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 ,{' '}\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.{' '}\n 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 defaultGroup: (onClickHandler) => (\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 ,{' '}\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\nclass LdapComponent extends React.Component {\n static propTypes = {\n onCancel: PropTypes.func.isRequired,\n onShowGroups: PropTypes.func.isRequired,\n };\n\n state = {\n ldapSettings: undefined,\n ldapUri: undefined,\n roles: undefined,\n hidePasswordInput: true,\n };\n\n componentDidMount() {\n LdapActions.loadSettings().then(this._onLdapSettingsChange);\n RolesStore.loadRoles().then((roles) => {\n this.setState({ roles: this._formatAdditionalRoles(roles) });\n });\n }\n\n _formatAdditionalRoles = (roles) => {\n return roles\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 = (ldapSettings) => {\n const settings = cloneDeep(ldapSettings);\n const ldapUri = new URI(settings.ldap_uri);\n this.setState({ ldapSettings: settings, ldapUri: ldapUri, hidePasswordInput: settings.system_password_set });\n };\n\n _isLoading = () => {\n const { ldapSettings, roles } = this.state;\n return !ldapSettings || !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 { ldapSettings } = this.state;\n const settings = cloneDeep(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;\n const nextLdapUri = ldapUri.clone();\n nextLdapUri.scheme(scheme);\n this._setSetting('ldap_uri', nextLdapUri);\n };\n\n _uriScheme = () => {\n const { ldapUri } = this.state;\n return `${ldapUri.scheme()}://`;\n };\n\n _setUriHost = (host) => {\n const { ldapUri } = this.state;\n const nextLdapUri = ldapUri.clone();\n nextLdapUri.hostname(host);\n this._setSetting('ldap_uri', nextLdapUri);\n };\n\n _uriHost = () => {\n const { ldapUri } = this.state;\n return ldapUri.hostname();\n };\n\n _setUriPort = (port) => {\n const { ldapUri } = this.state;\n const nextLdapUri = ldapUri.clone();\n nextLdapUri.port(port);\n this._setSetting('ldap_uri', nextLdapUri);\n };\n\n _uriPort = () => {\n const { ldapUri } = this.state;\n return 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 const { ldapSettings } = this.state;\n LdapActions.update(ldapSettings);\n };\n\n _onShowGroups = (event) => {\n event.preventDefault();\n const { onShowGroups } = this.props;\n onShowGroups();\n };\n\n _showPasswordInput = () => {\n this.setState({ hidePasswordInput: false });\n };\n\n render() {\n if (this._isLoading()) {\n return ;\n }\n\n const { hidePasswordInput, ldapSettings, ldapUri, roles: rolesOptions } = this.state;\n const { onCancel } = this.props;\n\n const isAD = ldapSettings.active_directory;\n const disabled = !ldapSettings.enabled;\n const help = isAD ? HelperText.activeDirectory : HelperText.ldap;\n\n const ldapPasswordInput = hidePasswordInput\n ? (\n \n System Password\n \n Password is set\n \n \n \n )\n : (\n \n );\n\n const additionalDefaultGroups = ldapSettings.additional_default_groups;\n const additionalDefaultGroupsString = Array.isArray(additionalDefaultGroups)\n ? additionalDefaultGroups.join(',')\n : additionalDefaultGroups;\n\n return (\n \n \n
    \n \n\n
    \n \n \n 1. Server configuration\n \n \n \n <>\n \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 {ldapPasswordInput}\n
    \n\n
    \n \n \n 2. Connection Test\n \n \n \n
    \n\n
    \n \n \n 3. User mapping\n \n \n \n\n \n\n \n
    \n\n
    \n \n \n 4. Group Mapping (optional)\n \n \n \n Remember to review the{' '}\n {' '}\n after making changes in this section.\n \n \n \n \n\n \n\n \n\n \n \n this._setAdditionalDefaultGroups(roles)}\n placeholder=\"Choose additional roles...\" />\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 \n \n 5. Login test\n \n \n \n
    \n\n
    \n \n \n 6. Store settings\n \n \n
    \n \n \n \n \n
    \n
    \n
    \n \n
    \n );\n }\n}\n\nexport default LdapComponent;\n","import PropTypes from 'prop-types';\nimport React from 'react';\nimport Immutable from 'immutable';\nimport styled from 'styled-components';\nimport { Button, Col, Panel, Row } from 'components/graylog';\n\nimport { Input } from 'components/bootstrap';\nimport { Spinner } from 'components/common';\nimport { naturalSortIgnoreCase } from 'util/SortUtils';\n\nimport CombinedProvider from 'injection/CombinedProvider';\nimport connect from 'stores/connect';\n\nconst { LdapGroupsActions } = CombinedProvider.get('LdapGroups');\nconst { LdapStore } = CombinedProvider.get('Ldap');\nconst { RolesStore } = CombinedProvider.get('Roles');\n\nconst StyledLegend = styled.legend`\n font-size: 1.5em;\n`;\n\nclass LdapGroupsComponent extends React.Component {\n static propTypes = {\n ldapSettings: PropTypes.object.isRequired,\n onCancel: PropTypes.func.isRequired,\n onShowConfig: PropTypes.func.isRequired,\n };\n\n state = {\n groups: undefined,\n roles: undefined,\n mapping: undefined,\n groupsErrorMessage: null,\n };\n\n componentDidMount() {\n LdapGroupsActions.loadMapping().then((mapping) => this.setState({ mapping: Immutable.Map(mapping) }));\n LdapGroupsActions.loadGroups()\n .then(\n (groups) => this.setState({ groups: Immutable.Set(groups) }),\n (error) => {\n if (error.additional.status !== 400) {\n this.setState({ groupsErrorMessage: error });\n }\n },\n );\n RolesStore.loadRoles().then((roles) => this.setState({ roles: Immutable.Set(roles) }));\n }\n\n _updateMapping = (event) => {\n const role = event.target.value;\n const group = event.target.getAttribute('data-group');\n const { mapping } = this.state;\n this.setState({ mapping: mapping.set(group, role) });\n };\n\n _saveMapping = (event) => {\n event.preventDefault();\n const { mapping } = this.state;\n LdapGroupsActions.saveMapping(mapping.filter((role) => role !== '').toJS());\n };\n\n _onShowConfig = () => {\n const { onShowConfig } = this.props;\n onShowConfig();\n };\n\n _isLoading = () => {\n const { groups, mapping, roles } = this.state;\n return !(mapping && groups && roles);\n };\n\n _renderGroupMappingInputs = (groups, options) => {\n const { mapping } = this.state;\n\n return groups\n .sort(naturalSortIgnoreCase)\n .map((group) => {\n return (\n \n \n {options}\n \n );\n });\n };\n\n render() {\n const { ldapSettings } = this.props;\n if (!ldapSettings.enabled) {\n return (\n \n

    Please enable and configure LDAP to proceed.

    \n \n
    \n );\n }\n\n if (this._isLoading()) {\n return ;\n }\n const { groups, groupsErrorMessage, mapping, roles } = this.state;\n const { onCancel } = this.props;\n\n if (groupsErrorMessage) {\n return (\n \n The error message was:
    {groupsErrorMessage.message}\n
    \n );\n }\n\n if (groups.size === 0 && mapping.size === 0) {\n return (\n \n

    Please verify that your LDAP group mapping settings are correct.

    \n \n
    \n );\n }\n\n const options = roles.sort((r1, r2) => naturalSortIgnoreCase(r1.name, r2.name)).map((role) => {\n return ;\n });\n\n const currentLdapSearchGroups = groups;\n const previousMappings = Immutable.Set(mapping.keySeq()).filter((group) => !groups.contains(group));\n\n return (\n
    \n \n \n Group mapping from LDAP\n {currentLdapSearchGroups.size === 0\n ?

    No LDAP groups found, please verify your LDAP group mapping settings.

    \n : (\n <>\n

    Assign Graylog roles to LDAP groups.

    \n {this._renderGroupMappingInputs(currentLdapSearchGroups, options)}\n \n )}\n\n {previousMappings.size > 0 && (\n <>\n Previously configured group mapping\n

    \n Some LDAP groups not matching your current settings were previously assigned Graylog\n roles. This mapping is still active for users logging into Graylog until you remove it.\n

    \n {this._renderGroupMappingInputs(previousMappings, options)}\n \n )}\n \n \n \n \n \n
    \n
    \n );\n }\n}\n\nexport default connect(LdapGroupsComponent, { ldapStore: LdapStore },\n ({ ldapStore, ...otherProps }) => ({ ...otherProps, ldapSettings: ldapStore.ldapSettings }));\n","import React from 'react';\nimport { DocumentTitle, PageHeader } from 'components/common';\n\nimport { Button } from 'components/graylog';\nimport LdapComponent from 'components/ldap/LdapComponent';\nimport LdapGroupsComponent from 'components/ldap/LdapGroupsComponent';\n\nimport history from 'util/History';\nimport CombinedProvider from 'injection/CombinedProvider';\n\nimport Routes from 'routing/Routes';\n\nconst { LdapActions } = CombinedProvider.get('Ldap');\n\nclass LegacyLdapConfig extends React.Component {\n state = {\n showSettings: true,\n };\n\n componentDidMount() {\n LdapActions.loadSettings();\n }\n\n _toggleButton = () => {\n this.setState({ showSettings: !this.state.showSettings });\n };\n\n _onSettingsCancel = () => {\n this._toggleButton();\n };\n\n _onCancel = () => {\n history.push(Routes.SYSTEM.AUTHENTICATION.OVERVIEW);\n };\n\n render() {\n const toggleButtonText = this.state.showSettings ? 'LDAP Group Mapping' : 'LDAP Settings';\n const activeComponent = (this.state.showSettings\n ? \n : );\n\n return (\n \n \n \n \n This page is the only resource you need to set up the Graylog LDAP integration. You can test the\n connection to your LDAP server and even try to log in with an LDAP account of your choice right away.\n \n {null}\n \n \n \n \n {activeComponent}\n \n \n );\n }\n}\n\nexport default LegacyLdapConfig;\n","import React from 'react';\nimport { DocumentTitle, PageHeader } from 'components/common';\n\nconst RootUserConfig = () => {\n return (\n \n \n \n This authenticator grants access to the admin user specified in the configuration file.\n \n Currently the admin user authenticator cannot be configured outside of the configuration file. It can also not be disabled at the moment.\n \n \n );\n};\n\nexport default RootUserConfig;\n","import React from 'react';\nimport { DocumentTitle, PageHeader } from 'components/common';\n\nconst AccessTokenConfig = () => {\n return (\n \n \n \n Each user can generate access tokens to avoid having to use their main password in insecure scripts.\n \n There currently is no configuration available for access tokens. You can safely disable this authenticator if you do not use access tokens.\n \n \n );\n};\n\nexport default AccessTokenConfig;\n","import { PluginManifest, PluginStore } from 'graylog-web-plugin/plugin';\nimport MongoDbPasswordConfig from './MongoDbPasswordConfig';\nimport MongoDbSessionConfig from './MongoDbSessionConfig';\nimport LegacyLdapConfig from './LegacyLdapConfig';\nimport RootUserConfig from './RootUserConfig';\nimport AccessTokenConfig from './AccessTokenConfig';\n\nPluginStore.register(new PluginManifest({}, {\n authenticatorConfigurations: [\n {\n name: 'mongodb-password',\n displayName: 'Passwords',\n description: 'Graylog managed account passwords (from MongoDB)',\n canBeDisabled: true,\n component: MongoDbPasswordConfig,\n },\n {\n name: 'mongodb-session',\n displayName: 'Sessions',\n description: 'Established session authenticator',\n canBeDisabled: false,\n component: MongoDbSessionConfig,\n },\n {\n name: 'legacy-ldap',\n displayName: 'LDAP/Active Directory',\n description: 'Authenticates against external system and creates accounts in Graylog',\n canBeDisabled: true,\n component: LegacyLdapConfig,\n },\n {\n name: 'root-user',\n displayName: 'Admin user',\n description: 'Static account configured in the server configuration file',\n canBeDisabled: false,\n component: RootUserConfig,\n },\n {\n name: 'access-token',\n displayName: 'API Tokens',\n description: 'Per user tokens which do not establish sessions',\n canBeDisabled: true,\n component: AccessTokenConfig,\n },\n ],\n}));\n","import PropTypes from 'prop-types';\nimport React from 'react';\nimport createReactClass from 'create-react-class';\n\nimport { Alert, Col, Row, Table, Button } from 'components/graylog';\nimport BootstrapModalForm from 'components/bootstrap/BootstrapModalForm';\nimport { DocumentTitle, IfPermitted, PageHeader, SortableList } from 'components/common';\nimport Routes from 'routing/Routes';\nimport ObjectUtils from 'util/ObjectUtils';\nimport history from 'util/History';\nimport naturalSort from 'javascript-natural-sort';\n\nconst AuthProvidersConfig = createReactClass({\n displayName: 'AuthProvidersConfig',\n\n propTypes: {\n config: PropTypes.object.isRequired,\n descriptors: PropTypes.object.isRequired,\n updateConfig: PropTypes.func.isRequired,\n },\n\n getInitialState() {\n const { config } = this.props;\n\n return {\n config: {\n disabled_realms: config.disabled_realms,\n realm_order: config.realm_order,\n },\n };\n },\n\n inputs: {},\n\n _openModal() {\n this.configModal.open();\n },\n\n _closeModal() {\n this.configModal.close();\n },\n\n _saveConfig() {\n const { updateConfig } = this.props;\n const { config } = this.state;\n\n if (!this._hasNoActiveRealm()) {\n updateConfig(config).then(() => {\n this._closeModal();\n });\n }\n },\n\n _resetConfig() {\n // Reset to initial state when the modal is closed without saving.\n this.setState(this.getInitialState());\n },\n\n _onCancel() {\n history.push(Routes.SYSTEM.AUTHENTICATION.OVERVIEW);\n },\n\n _updateSorting(newSorting) {\n const { config } = this.state;\n const update = ObjectUtils.clone(config);\n\n update.realm_order = newSorting.map((entry) => entry.id);\n\n this.setState({ config: update });\n },\n\n _toggleStatus(realmName) {\n const { config } = this.state;\n return () => {\n const disabledProcessors = config.disabled_realms;\n const update = ObjectUtils.clone(config);\n const { checked } = this.inputs[realmName];\n\n if (checked) {\n update.disabled_realms = disabledProcessors.filter((p) => p !== realmName);\n } else if (disabledProcessors.indexOf(realmName) === -1) {\n update.disabled_realms.push(realmName);\n }\n\n this.setState({ config: update });\n };\n },\n\n _hasNoActiveRealm() {\n const { config } = this.state;\n\n return config.disabled_realms.length >= config.realm_order.length;\n },\n\n _noActiveRealmWarning() {\n if (this._hasNoActiveRealm()) {\n return (\n \n ERROR: No active authentication provider!\n \n );\n }\n return null;\n },\n\n _summary() {\n const { config } = this.state;\n const { descriptors } = this.props;\n\n return config.realm_order.map((name, idx) => {\n const status = config.disabled_realms.filter((disabledName) => disabledName === name).length > 0 ? 'disabled' : 'active';\n const realm = (descriptors[name] || { id: name, title: 'Unavailable' });\n\n return (\n \n {idx + 1}\n {realm.displayName}\n {realm.description}\n {status}\n \n );\n });\n },\n\n _sortableItems() {\n const { config } = this.state;\n const { descriptors } = this.props;\n\n return config.realm_order.map((name) => {\n const realm = (descriptors[name] || { id: name, title: 'Unavailable' });\n return { id: realm.name, title: realm.displayName };\n });\n },\n\n _statusForm() {\n const { config } = this.state;\n const { descriptors } = this.props;\n\n return ObjectUtils.clone(config.realm_order).sort((a, b) => naturalSort(a.displayName, b.displayName)).map((realmName) => {\n const enabled = config.disabled_realms.filter((disabledName) => disabledName === realmName).length < 1;\n const realm = (descriptors[realmName] || { id: realmName, displayName: 'Unavailable' });\n\n return (\n \n {realm.displayName}\n \n { this.inputs[realm.name] = elem; }}\n type=\"checkbox\"\n checked={enabled}\n disabled={!realm.canBeDisabled}\n onChange={this._toggleStatus(realm.name)} />\n \n \n );\n });\n },\n\n render() {\n return (\n \n \n \n The following authentication providers executed in order during login. Disabled providers will be\n skipped.
    A user is authenticated by the first matching provider, a successful match can cause a Graylog account for\n this user to be created.\n
    \n
    \n \n \n \n \n \n \n \n \n \n \n \n \n \n {this._summary()}\n \n
    #ProviderDescriptionStatus
    \n\n \n \n \n \n\n { this.configModal = configModal; }}\n title=\"Update Authentication Provider Configuration\"\n onSubmitForm={this._saveConfig}\n onModalClose={this._resetConfig}\n submitButtonText=\"Save\">\n

    Order

    \n

    Use drag and drop to change the execution order of the authentication providers.

    \n \n\n

    Status

    \n

    Change the checkboxes to change the status of an authentication provider.

    \n \n \n \n \n \n \n \n \n {this._statusForm()}\n \n
    ProviderEnabled
    \n {this._noActiveRealmWarning()}\n
    \n \n
    \n
    \n
    \n
    \n );\n },\n});\n\nexport default AuthProvidersConfig;\n","import PropTypes from 'prop-types';\nimport React from 'react';\n// eslint-disable-next-line no-restricted-imports\nimport createReactClass from 'create-react-class';\nimport Reflux from 'reflux';\nimport { LinkContainer } from 'react-router-bootstrap';\nimport styled from 'styled-components';\n\nimport { Alert, Nav, NavItem, Row, Col } from 'components/graylog';\nimport { Spinner } from 'components/common';\nimport Routes from 'routing/Routes';\nimport { PluginStore } from 'graylog-web-plugin/plugin';\nimport PermissionsMixin from 'util/PermissionsMixin';\nimport ActionsProvider from 'injection/ActionsProvider';\nimport StoreProvider from 'injection/StoreProvider';\n\nimport AuthProvidersConfig from './AuthProvidersConfig';\n\nconst AuthenticationActions = ActionsProvider.getActions('Authentication');\nconst AuthenticationStore = StoreProvider.getStore('Authentication');\nconst CurrentUserStore = StoreProvider.getStore('CurrentUser');\n\nconst SubNavigationCol = styled(Col)(({ theme }) => `\n border-right: ${theme.color.gray[80]} solid 1px;\n`);\n\nconst ContentPaneCol = styled(Col)(({ theme }) => `\n border-left: ${theme.color.gray[80]} solid 1px;\n margin-left: -1px;\n`);\n\nconst NavItemDivider = styled(NavItem)(({ theme }) => `\n border-bottom: ${theme.color.gray[80]} solid 1px;\n`);\n\nconst AuthenticationComponent = createReactClass({\n displayName: 'AuthenticationComponent',\n\n propTypes: {\n params: PropTypes.object.isRequired,\n children: PropTypes.element,\n },\n\n mixins: [Reflux.connect(AuthenticationStore), Reflux.connect(CurrentUserStore), PermissionsMixin],\n\n getDefaultProps() {\n return {\n children: null,\n };\n },\n\n componentDidMount() {\n AuthenticationActions.load();\n\n PluginStore.exports('authenticatorConfigurations').forEach((authConfig) => {\n this.authenticatorConfigurations[authConfig.name] = authConfig;\n // TODO load per authenticator config\n });\n },\n\n // contains the 'authname' -> plugin descriptor\n authenticatorConfigurations: {},\n\n _pluginPane() {\n const { params } = this.props;\n const auth = this.authenticatorConfigurations[params.name];\n\n if (auth) {\n return React.createElement(auth.component, {\n key: `auth-configuration-${params.name}`,\n });\n }\n return (Plugin component missing for authenticator {params.name}, this is an error.);\n },\n\n _onUpdateProviders(config) {\n return AuthenticationActions.update('providers', config);\n },\n\n _contentComponent() {\n const { authenticators } = this.state;\n const { params } = this.props;\n\n if (!authenticators) {\n return ;\n }\n if (params.name === undefined) {\n return (\n \n );\n }\n return this._pluginPane();\n },\n\n render() {\n const { authenticators: auths, currentUser } = this.state;\n const { children } = this.props;\n let authenticators = [];\n\n if (auths) {\n // only show the entries if the user is permitted to change them, makes no sense otherwise\n if (this.isPermitted(currentUser.permissions, ['authentication:edit'])) {\n authenticators = auths.realm_order.map((name, idx) => {\n const auth = this.authenticatorConfigurations[name];\n const title = (auth || { displayName: name }).displayName;\n const numberedTitle = `${idx + 1}. ${title}`;\n return (\n \n {numberedTitle}\n \n );\n });\n\n authenticators.unshift(\n Provider Settings,\n );\n authenticators.unshift(\n \n Configure Provider Order\n ,\n );\n }\n } else {\n authenticators = [Loading...];\n }\n\n // add submenu items based on permissions\n if (this.isPermitted(currentUser.permissions, ['roles:read'])) {\n authenticators.unshift(\n \n Roles\n ,\n );\n }\n if (this.isPermitted(currentUser.permissions, ['users:list'])) {\n authenticators.unshift(\n \n Users\n ,\n );\n }\n\n if (authenticators.length === 0) {\n // special case, this is a user editing their own profile\n authenticators = [\n \n Edit Profile\n ,\n \n Edit Tokens\n ,\n ];\n }\n const subnavigation = (\n \n );\n\n const contentComponent = React.Children.count(children) === 1 ? React.Children.only(children) : this._contentComponent();\n\n return (\n \n {subnavigation}\n {contentComponent}\n \n );\n },\n});\n\nexport default AuthenticationComponent;\n","import PropTypes from 'prop-types';\nimport React from 'react';\nimport createReactClass from 'create-react-class';\nimport { Row, Col } from 'components/graylog';\n\nimport DocsHelper from 'util/DocsHelper';\nimport PermissionsMixin from 'util/PermissionsMixin';\n\nimport {} from 'components/authentication'; // Make sure to load all auth config plugins!\n\nimport PageHeader from 'components/common/PageHeader';\nimport DocumentationLink from 'components/support/DocumentationLink';\n\nimport AuthenticationComponent from 'components/authentication/AuthenticationComponent';\n\nconst AuthenticationPage = createReactClass({\n displayName: 'AuthenticationPage',\n\n propTypes: {\n children: PropTypes.object,\n location: PropTypes.object.isRequired,\n params: PropTypes.object.isRequired,\n },\n\n mixins: [PermissionsMixin],\n\n render() {\n return (\n \n \n Configure Graylog's authentication providers and manage the active users of this Graylog cluster.\n Read more authentication in the .\n \n \n\n \n \n \n {this.props.children}\n \n \n \n \n );\n },\n});\n\nexport default AuthenticationPage;\n","import moment from 'moment';\nimport naturalSort from 'javascript-natural-sort';\n\n// sortOrder: \"asc\"|\"desc\"\nexport function sortByDate(d1, d2, sortOrder) {\n const effectiveSortOrder = sortOrder || 'asc';\n const d1Time = moment(d1);\n const d2Time = moment(d2);\n\n if (effectiveSortOrder === 'asc') {\n return (d1Time.isBefore(d2Time) ? -1 : d2Time.isBefore(d1Time) ? 1 : 0);\n }\n return (d2Time.isBefore(d1Time) ? -1 : d1Time.isBefore(d2Time) ? 1 : 0);\n}\n\nexport function naturalSortIgnoreCase(s1, s2, sortOrder) {\n const effectiveSortOrder = sortOrder || 'asc';\n return (effectiveSortOrder === 'asc' ? naturalSort(s1.toLowerCase(), s2.toLowerCase()) : naturalSort(s2.toLowerCase(), s1.toLowerCase()));\n}\n","exports = module.exports = require(\"../../../node_modules/css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \"._3G8z_IybCp1JuEj6El2vKB{font-size:14px;margin-right:12px}\", \"\"]);\n\n// exports\nexports.locals = {\n\t\"passwordSet\": \"_3G8z_IybCp1JuEj6El2vKB\"\n};","\nvar content = require(\"!!../../../node_modules/css-loader/index.js??ref--10-1!./LdapComponent.css\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../../node_modules/css-loader/index.js??ref--10-1!./LdapComponent.css\", function() {\n\t\tvar newContent = require(\"!!../../../node_modules/css-loader/index.js??ref--10-1!./LdapComponent.css\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}"],"sourceRoot":""}




    © 2015 - 2024 Weber Informatics LLC | Privacy Policy