diff --git a/pom.xml b/pom.xml
index 41880de9c..bcbf64eea 100644
--- a/pom.xml
+++ b/pom.xml
@@ -41,7 +41,7 @@
1.1.0-sp9
- 0.7.1
+ 0.7.2
0.6.6
3.1.0
2.3.1
diff --git a/src/main/java/org/codelibs/fess/Constants.java b/src/main/java/org/codelibs/fess/Constants.java
index a99f6d855..bbd285df5 100644
--- a/src/main/java/org/codelibs/fess/Constants.java
+++ b/src/main/java/org/codelibs/fess/Constants.java
@@ -358,4 +358,12 @@ public class Constants extends CoreLibConstants {
public static final String FESS_CONF_PATH = "fess.conf.path";
public static final TimeZone TIMEZONE_UTC = TimeZone.getTimeZone("UTC");
+
+ public static final String LDAP_SECURITY_PRINCIPAL = "ldap.security.principal";
+
+ public static final String LDAP_PROVIDER_URL = "ldap.provider.url";
+
+ public static final String LDAP_SECURITY_AUTHENTICATION = "ldap.security.authentication";
+
+ public static final String LDAP_INITIAL_CONTEXT_FACTORY = "ldap.initial.context.factory";
}
diff --git a/src/main/java/org/codelibs/fess/app/web/admin/general/AdminGeneralAction.java b/src/main/java/org/codelibs/fess/app/web/admin/general/AdminGeneralAction.java
index 77d920eb4..6a6d48140 100644
--- a/src/main/java/org/codelibs/fess/app/web/admin/general/AdminGeneralAction.java
+++ b/src/main/java/org/codelibs/fess/app/web/admin/general/AdminGeneralAction.java
@@ -160,6 +160,8 @@ public class AdminGeneralAction extends FessAdminAction {
updateProperty(Constants.SUGGEST_DOCUMENTS_PROPERTY,
form.suggestDocuments != null && Constants.ON.equalsIgnoreCase(form.suggestDocuments) ? Constants.TRUE : Constants.FALSE);
updateProperty(Constants.PURGE_SUGGEST_SEARCH_LOG_DAY_PROPERTY, form.purgeSuggestSearchLogDay.toString());
+ updateProperty(Constants.LDAP_PROVIDER_URL, form.ldapProviderUrl);
+ updateProperty(Constants.LDAP_SECURITY_PRINCIPAL, form.ldapSecurityPrincipal);
crawlerProperties.store();
saveInfo(messages -> messages.addSuccessUpdateCrawlerParams(GLOBAL));
@@ -195,6 +197,8 @@ public class AdminGeneralAction extends FessAdminAction {
form.purgeSuggestSearchLogDay =
Integer.parseInt(crawlerProperties.getProperty(Constants.PURGE_SUGGEST_SEARCH_LOG_DAY_PROPERTY,
Constants.DEFAULT_SUGGEST_PURGE_DAY));
+ form.ldapProviderUrl = crawlerProperties.getProperty(Constants.LDAP_PROVIDER_URL, StringUtil.EMPTY);
+ form.ldapSecurityPrincipal = crawlerProperties.getProperty(Constants.LDAP_SECURITY_PRINCIPAL, StringUtil.EMPTY);
}
private void updateProperty(final String key, final String value) {
diff --git a/src/main/java/org/codelibs/fess/app/web/admin/general/EditForm.java b/src/main/java/org/codelibs/fess/app/web/admin/general/EditForm.java
index 3ecb39f33..fa6714ab7 100644
--- a/src/main/java/org/codelibs/fess/app/web/admin/general/EditForm.java
+++ b/src/main/java/org/codelibs/fess/app/web/admin/general/EditForm.java
@@ -116,4 +116,9 @@ public class EditForm implements Serializable {
@ValidateTypeFailure
public Integer purgeSuggestSearchLogDay;
+ @Size(max = 1000)
+ public String ldapProviderUrl;
+
+ @Size(max = 1000)
+ public String ldapSecurityPrincipal;
}
diff --git a/src/main/java/org/codelibs/fess/app/web/base/FessSearchAction.java b/src/main/java/org/codelibs/fess/app/web/base/FessSearchAction.java
index 1ec075040..206939bcf 100644
--- a/src/main/java/org/codelibs/fess/app/web/base/FessSearchAction.java
+++ b/src/main/java/org/codelibs/fess/app/web/base/FessSearchAction.java
@@ -193,6 +193,5 @@ public abstract class FessSearchAction extends FessBaseAction {
protected HtmlResponse redirectToRoot() {
final String contextPath = request.getServletContext().getContextPath();
return newHtmlResponseAsRediect(StringUtil.isBlank(contextPath) ? "/" : contextPath);
-
}
}
diff --git a/src/main/java/org/codelibs/fess/app/web/base/login/FessLoginAssist.java b/src/main/java/org/codelibs/fess/app/web/base/login/FessLoginAssist.java
index 0635b6678..37cdc8a64 100644
--- a/src/main/java/org/codelibs/fess/app/web/base/login/FessLoginAssist.java
+++ b/src/main/java/org/codelibs/fess/app/web/base/login/FessLoginAssist.java
@@ -25,6 +25,7 @@ import org.codelibs.fess.es.user.exentity.User;
import org.codelibs.fess.exception.UserRoleLoginException;
import org.codelibs.fess.mylasta.action.FessUserBean;
import org.codelibs.fess.mylasta.direction.FessConfig;
+import org.codelibs.fess.util.ComponentUtil;
import org.dbflute.optional.OptionalEntity;
import org.dbflute.optional.OptionalThing;
import org.lastaflute.core.magic.async.AsyncManager;
@@ -65,6 +66,15 @@ public class FessLoginAssist extends TypicalLoginAssist 0;
}
+ @Override
+ public OptionalEntity findLoginUser(String username, String password) {
+ OptionalEntity ldapUser = ComponentUtil.getLdapManager().login(username, password);
+ if (ldapUser.isPresent()) {
+ return ldapUser;
+ }
+ return doFindLoginUser(username, encryptPassword(password));
+ }
+
@Override
protected OptionalEntity doFindLoginUser(final String username, final String cipheredPassword) {
return userBhv.selectEntity(cb -> {
diff --git a/src/main/java/org/codelibs/fess/app/web/login/LoginAction.java b/src/main/java/org/codelibs/fess/app/web/login/LoginAction.java
index eb4b199e6..52c1f2df4 100644
--- a/src/main/java/org/codelibs/fess/app/web/login/LoginAction.java
+++ b/src/main/java/org/codelibs/fess/app/web/login/LoginAction.java
@@ -17,6 +17,7 @@ package org.codelibs.fess.app.web.login;
import org.codelibs.fess.app.web.admin.dashboard.AdminDashboardAction;
import org.codelibs.fess.app.web.base.FessSearchAction;
+import org.codelibs.fess.mylasta.action.FessUserBean;
import org.lastaflute.web.Execute;
import org.lastaflute.web.login.exception.LoginFailureException;
import org.lastaflute.web.response.HtmlResponse;
@@ -44,10 +45,6 @@ public class LoginAction extends FessSearchAction {
return getHtmlResponse().useForm(LoginForm.class);
}
- private HtmlResponse getHtmlResponse() {
- return getUserBean().map(user -> redirect(AdminDashboardAction.class)).orElse(asHtml(path_Login_IndexJsp));
- }
-
@Execute
public HtmlResponse login(final LoginForm form) {
validate(form, messages -> {}, () -> {
@@ -67,4 +64,15 @@ public class LoginAction extends FessSearchAction {
return redirect(getClass());
}
+ private HtmlResponse getHtmlResponse() {
+ return getUserBean().map(user -> redirectByUser(user)).orElse(asHtml(path_Login_IndexJsp));
+ }
+
+ private HtmlResponse redirectByUser(FessUserBean user) {
+ if (!user.hasRoles(fessConfig.getAuthenticationAdminRoles().split(","))) {
+ return redirectToRoot();
+ }
+ return redirect(AdminDashboardAction.class);
+ }
+
}
\ No newline at end of file
diff --git a/src/main/java/org/codelibs/fess/filter/AdLoginInfoFilter.java b/src/main/java/org/codelibs/fess/filter/AdLoginInfoFilter.java
index 70de4b6db..7e3729954 100644
--- a/src/main/java/org/codelibs/fess/filter/AdLoginInfoFilter.java
+++ b/src/main/java/org/codelibs/fess/filter/AdLoginInfoFilter.java
@@ -38,6 +38,7 @@ import org.codelibs.fess.util.ComponentUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+// TODO refactoring
public class AdLoginInfoFilter implements Filter {
private static final Logger logger = LoggerFactory.getLogger(AdLoginInfoFilter.class);
diff --git a/src/main/java/org/codelibs/fess/helper/AdRoleHelper.java b/src/main/java/org/codelibs/fess/helper/AdRoleHelper.java
index d49b9af76..ba4debd20 100644
--- a/src/main/java/org/codelibs/fess/helper/AdRoleHelper.java
+++ b/src/main/java/org/codelibs/fess/helper/AdRoleHelper.java
@@ -31,6 +31,7 @@ import javax.naming.directory.SearchResult;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+// TODO refactoring
public class AdRoleHelper {
private static final Logger logger = LoggerFactory.getLogger(AdRoleHelper.class);
diff --git a/src/main/java/org/codelibs/fess/ldap/LdapManager.java b/src/main/java/org/codelibs/fess/ldap/LdapManager.java
new file mode 100644
index 000000000..fc303f24c
--- /dev/null
+++ b/src/main/java/org/codelibs/fess/ldap/LdapManager.java
@@ -0,0 +1,71 @@
+/*
+ * Copyright 2012-2015 CodeLibs Project and the Others.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
+ * either express or implied. See the License for the specific language
+ * governing permissions and limitations under the License.
+ */
+package org.codelibs.fess.ldap;
+
+import java.util.Hashtable;
+
+import javax.naming.Context;
+import javax.naming.NamingException;
+import javax.naming.directory.DirContext;
+import javax.naming.directory.InitialDirContext;
+
+import org.codelibs.core.lang.StringUtil;
+import org.codelibs.fess.es.user.exentity.User;
+import org.codelibs.fess.filter.AdLoginInfoFilter;
+import org.codelibs.fess.mylasta.direction.FessConfig;
+import org.codelibs.fess.util.ComponentUtil;
+import org.dbflute.optional.OptionalEntity;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class LdapManager {
+ private static final Logger logger = LoggerFactory.getLogger(AdLoginInfoFilter.class);
+
+ public OptionalEntity login(String username, String password) {
+ FessConfig fessConfig = ComponentUtil.getFessConfig();
+ String providerUrl = fessConfig.getLdapProviderUrl();
+
+ if (StringUtil.isBlank(providerUrl)) {
+ return OptionalEntity.empty();
+ }
+
+ DirContext ctx = null;
+ try {
+ Hashtable env = new Hashtable<>();
+ env.put(Context.INITIAL_CONTEXT_FACTORY, fessConfig.getLdapInitialContextFactory());
+ env.put(Context.SECURITY_AUTHENTICATION, fessConfig.getLdapSecurityAuthentication());
+ env.put(Context.PROVIDER_URL, providerUrl);
+ env.put(Context.SECURITY_PRINCIPAL, fessConfig.getLdapSecurityPrincipal(username));
+ env.put(Context.SECURITY_CREDENTIALS, password);
+ ctx = new InitialDirContext(env);
+ if (logger.isDebugEnabled()) {
+ logger.debug("Logged in.", ctx);
+ }
+ return OptionalEntity.of(new LdapUser(username));
+ } catch (NamingException e) {
+ logger.warn("Login failed.", e);
+ } finally {
+ if (ctx != null) {
+ try {
+ ctx.close();
+ } catch (NamingException e) {
+ // ignore
+ }
+ }
+ }
+ return OptionalEntity.empty();
+ }
+}
diff --git a/src/main/java/org/codelibs/fess/ldap/LdapUser.java b/src/main/java/org/codelibs/fess/ldap/LdapUser.java
new file mode 100644
index 000000000..d2cfc74a7
--- /dev/null
+++ b/src/main/java/org/codelibs/fess/ldap/LdapUser.java
@@ -0,0 +1,28 @@
+/*
+ * Copyright 2012-2015 CodeLibs Project and the Others.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
+ * either express or implied. See the License for the specific language
+ * governing permissions and limitations under the License.
+ */
+package org.codelibs.fess.ldap;
+
+import org.codelibs.fess.es.user.exentity.User;
+
+public class LdapUser extends User {
+
+ private static final long serialVersionUID = 1L;
+
+ public LdapUser(String username) {
+ setId(username);
+ }
+
+}
diff --git a/src/main/java/org/codelibs/fess/mylasta/action/FessLabels.java b/src/main/java/org/codelibs/fess/mylasta/action/FessLabels.java
index ccb16b881..3bbd86c0f 100644
--- a/src/main/java/org/codelibs/fess/mylasta/action/FessLabels.java
+++ b/src/main/java/org/codelibs/fess/mylasta/action/FessLabels.java
@@ -197,7 +197,7 @@ public class FessLabels extends ActionMessages {
/** The key of the message: Failure Count */
public static final String LABELS_FAILURE_COUNT_THRESHOLD = "{labels.failureCountThreshold}";
- /** The key of the message: FS Config Name */
+ /** The key of the message: File System Config Name */
public static final String LABELS_FILE_CONFIG_NAME = "{labels.fileConfigName}";
/** The key of the message: File name */
@@ -425,6 +425,12 @@ public class FessLabels extends ActionMessages {
/** The key of the message: Extended Query */
public static final String LABELS_ex_q = "{labels.ex_q}";
+ /** The key of the message: LDAP URL */
+ public static final String LABELS_LDAP_PROVIDER_URL = "{labels.ldapProviderUrl}";
+
+ /** The key of the message: LDAP Principal */
+ public static final String LABELS_LDAP_SECURITY_PRINCIPAL = "{labels.ldapSecurityPrincipal}";
+
/** The key of the message: System */
public static final String LABELS_menu_system = "{labels.menu_system}";
@@ -1307,10 +1313,10 @@ public class FessLabels extends ActionMessages {
/** The key of the message: Back */
public static final String LABELS_design_button_back = "{labels.design_button_back}";
- /** The key of the message: Data Crawling */
+ /** The key of the message: Data Store Crawling */
public static final String LABELS_data_crawling_configuration = "{labels.data_crawling_configuration}";
- /** The key of the message: Data Crawling Configuration */
+ /** The key of the message: Data Store Crawling Configuration */
public static final String LABELS_data_crawling_title_details = "{labels.data_crawling_title_details}";
/** The key of the message: Handler Name */
@@ -1518,7 +1524,7 @@ public class FessLabels extends ActionMessages {
/** The key of the message: Parameters */
public static final String LABELS_file_auth_parameters = "{labels.file_auth_parameters}";
- /** The key of the message: FS Config */
+ /** The key of the message: File System Config */
public static final String LABELS_file_auth_file_crawling_config = "{labels.file_auth_file_crawling_config}";
/** The key of the message: Samba */
@@ -1974,6 +1980,15 @@ public class FessLabels extends ActionMessages {
/** The key of the message: Suggest */
public static final String LABELS_general_menu_suggest = "{labels.general_menu_suggest}";
+ /** The key of the message: LDAP */
+ public static final String LABELS_general_menu_ldap = "{labels.general_menu_ldap}";
+
+ /** The key of the message: LDAP URL */
+ public static final String LABELS_ldap_provider_url = "{labels.ldap_provider_url}";
+
+ /** The key of the message: LDAP Principal */
+ public static final String LABELS_ldap_security_principal = "{labels.ldap_security_principal}";
+
/** The key of the message: Send TestMail */
public static final String LABELS_send_testmail = "{labels.send_testmail}";
diff --git a/src/main/java/org/codelibs/fess/mylasta/direction/FessConfig.java b/src/main/java/org/codelibs/fess/mylasta/direction/FessConfig.java
index 965abc97a..48bc48c26 100644
--- a/src/main/java/org/codelibs/fess/mylasta/direction/FessConfig.java
+++ b/src/main/java/org/codelibs/fess/mylasta/direction/FessConfig.java
@@ -174,7 +174,7 @@ public interface FessConfig extends FessEnv {
/** The key of the configuration. e.g. 1.3 */
String QUERY_BOOST_CONTENT_LANG = "query.boost.content.lang";
- /** The key of the configuration. e.g. false */
+ /** The key of the configuration. e.g. true */
String ACL_AS_ROLE = "acl.as.role";
/** The key of the configuration. e.g. admin */
@@ -775,7 +775,7 @@ public interface FessConfig extends FessEnv {
/**
* Get the value for the key 'acl.as.role'.
- * The value is, e.g. false
+ * The value is, e.g. true
* comment: acl
* @return The value of found property. (NotNull: if not found, exception but basically no way)
*/
@@ -783,7 +783,7 @@ public interface FessConfig extends FessEnv {
/**
* Is the property for the key 'acl.as.role' true?
- * The value is, e.g. false
+ * The value is, e.g. true
* comment: acl
* @return The determination, true or false. (if not found, exception but basically no way)
*/
diff --git a/src/main/java/org/codelibs/fess/mylasta/direction/FessEnv.java b/src/main/java/org/codelibs/fess/mylasta/direction/FessEnv.java
index d8080c9d3..72afe36a2 100644
--- a/src/main/java/org/codelibs/fess/mylasta/direction/FessEnv.java
+++ b/src/main/java/org/codelibs/fess/mylasta/direction/FessEnv.java
@@ -21,7 +21,7 @@ import org.lastaflute.core.direction.exception.ConfigPropertyNotFoundException;
/**
* @author FreeGen
*/
-public interface FessEnv {
+public interface FessEnv extends FessProp {
/** The key of the configuration. e.g. hot */
String lasta_di_SMART_DEPLOY_MODE = "lasta_di.smart.deploy.mode";
diff --git a/src/main/java/org/codelibs/fess/mylasta/direction/FessProp.java b/src/main/java/org/codelibs/fess/mylasta/direction/FessProp.java
new file mode 100644
index 000000000..d958d30e4
--- /dev/null
+++ b/src/main/java/org/codelibs/fess/mylasta/direction/FessProp.java
@@ -0,0 +1,46 @@
+/*
+ * Copyright 2012-2015 CodeLibs Project and the Others.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
+ * either express or implied. See the License for the specific language
+ * governing permissions and limitations under the License.
+ */
+package org.codelibs.fess.mylasta.direction;
+
+import org.codelibs.core.lang.StringUtil;
+import org.codelibs.fess.Constants;
+import org.codelibs.fess.util.ComponentUtil;
+
+public interface FessProp {
+ public default String getProperty(String key) {
+ return ComponentUtil.getCrawlerProperties().getProperty(key);
+ }
+
+ public default String getProperty(String key, String defaultValue) {
+ return ComponentUtil.getCrawlerProperties().getProperty(key, defaultValue);
+ }
+
+ public default String getLdapInitialContextFactory() {
+ return getProperty(Constants.LDAP_INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
+ }
+
+ public default String getLdapSecurityAuthentication() {
+ return getProperty(Constants.LDAP_SECURITY_AUTHENTICATION, "simple");
+ }
+
+ public default String getLdapProviderUrl() {
+ return getProperty(Constants.LDAP_PROVIDER_URL);
+ }
+
+ public default String getLdapSecurityPrincipal(String username) {
+ return String.format(getProperty(Constants.LDAP_SECURITY_PRINCIPAL, StringUtil.EMPTY), username);
+ }
+}
diff --git a/src/main/java/org/codelibs/fess/util/ComponentUtil.java b/src/main/java/org/codelibs/fess/util/ComponentUtil.java
index 463f5e216..f92999702 100644
--- a/src/main/java/org/codelibs/fess/util/ComponentUtil.java
+++ b/src/main/java/org/codelibs/fess/util/ComponentUtil.java
@@ -47,12 +47,15 @@ import org.codelibs.fess.helper.UserInfoHelper;
import org.codelibs.fess.helper.ViewHelper;
import org.codelibs.fess.indexer.IndexUpdater;
import org.codelibs.fess.job.JobExecutor;
+import org.codelibs.fess.ldap.LdapManager;
import org.codelibs.fess.mylasta.direction.FessConfig;
import org.lastaflute.core.message.MessageManager;
import org.lastaflute.di.core.SingletonLaContainer;
import org.lastaflute.di.core.factory.SingletonLaContainerFactory;
public final class ComponentUtil {
+ private static final String LDAP_MANAGER = "ldapManager";
+
private static final String ROLE_QUERY_HELPER = "roleQueryHelper";
private static final String SUGGEST_HELPER = "suggestHelper";
@@ -278,6 +281,10 @@ public final class ComponentUtil {
return SingletonLaContainer.getComponent(ROLE_QUERY_HELPER);
}
+ public static LdapManager getLdapManager() {
+ return SingletonLaContainer.getComponent(LDAP_MANAGER);
+ }
+
public static boolean hasQueryHelper() {
return SingletonLaContainerFactory.getContainer().hasComponentDef(QUERY_HELPER);
}
diff --git a/src/main/resources/app.xml b/src/main/resources/app.xml
index 17231b67e..52bfaf8e5 100644
--- a/src/main/resources/app.xml
+++ b/src/main/resources/app.xml
@@ -6,7 +6,7 @@
-
+
diff --git a/src/main/resources/fess_config.properties b/src/main/resources/fess_config.properties
index 820a4ce20..111deca72 100644
--- a/src/main/resources/fess_config.properties
+++ b/src/main/resources/fess_config.properties
@@ -96,7 +96,7 @@ query.boost.content=1.0
query.boost.content.lang=1.3
# acl
-acl.as.role=false
+acl.as.role=true
# ========================================================================================
# Web
diff --git a/src/main/resources/fess_label.properties b/src/main/resources/fess_label.properties
index 5d0aa147a..59a3fa4a3 100644
--- a/src/main/resources/fess_label.properties
+++ b/src/main/resources/fess_label.properties
@@ -55,7 +55,7 @@ labels.errorLog=Error Log
labels.errorName=Error Name
labels.expiredTime=Expired
labels.failureCountThreshold=Failure Count
-labels.fileConfigName=FS Config Name
+labels.fileConfigName=File System Config Name
labels.fileName=File name
labels.handlerName=Handler Name
labels.handlerParameter=Parameters
@@ -133,6 +133,8 @@ labels.term=Term
labels.searchParams=Search Parameters
labels.fields=Fields
labels.ex_q=Extended Query
+labels.ldapProviderUrl=LDAP URL
+labels.ldapSecurityPrincipal=LDAP Principal
labels.menu_system=System
labels.menu_wizard=Wizard
@@ -431,8 +433,8 @@ labels.design_file_errorBadRequest=Error Page (BadRequest)
labels.design_title_edit_content=Edit JSP File
labels.design_button_update=Update
labels.design_button_back=Back
-labels.data_crawling_configuration=Data Crawling
-labels.data_crawling_title_details=Data Crawling Configuration
+labels.data_crawling_configuration=Data\u3000Store Crawling
+labels.data_crawling_title_details=Data\u3000Store Crawling Configuration
labels.handler_name=Handler Name
labels.handler_parameter=Parameter
labels.handler_script=Script
@@ -502,7 +504,7 @@ labels.file_auth_scheme=Scheme
labels.file_auth_username=Username
labels.file_auth_password=Password
labels.file_auth_parameters=Parameters
-labels.file_auth_file_crawling_config=FS Config
+labels.file_auth_file_crawling_config=File System Config
labels.file_auth_scheme_samba=Samba
labels.pagination_page_guide_msg={0}/{1} ({2} items)
labels.list_could_not_find_crud_table=No data.
@@ -654,4 +656,7 @@ labels.general_menu_system=System
labels.general_menu_crawler=Crawler
labels.general_menu_logging=Logging
labels.general_menu_suggest=Suggest
+labels.general_menu_ldap=LDAP
+labels.ldap_provider_url=LDAP URL
+labels.ldap_security_principal=LDAP Principal
labels.send_testmail=Send TestMail
diff --git a/src/main/resources/fess_label_en.properties b/src/main/resources/fess_label_en.properties
index bf72ea0d5..59a3fa4a3 100644
--- a/src/main/resources/fess_label_en.properties
+++ b/src/main/resources/fess_label_en.properties
@@ -55,7 +55,7 @@ labels.errorLog=Error Log
labels.errorName=Error Name
labels.expiredTime=Expired
labels.failureCountThreshold=Failure Count
-labels.fileConfigName=FS Config Name
+labels.fileConfigName=File System Config Name
labels.fileName=File name
labels.handlerName=Handler Name
labels.handlerParameter=Parameters
@@ -133,6 +133,8 @@ labels.term=Term
labels.searchParams=Search Parameters
labels.fields=Fields
labels.ex_q=Extended Query
+labels.ldapProviderUrl=LDAP URL
+labels.ldapSecurityPrincipal=LDAP Principal
labels.menu_system=System
labels.menu_wizard=Wizard
@@ -431,8 +433,8 @@ labels.design_file_errorBadRequest=Error Page (BadRequest)
labels.design_title_edit_content=Edit JSP File
labels.design_button_update=Update
labels.design_button_back=Back
-labels.data_crawling_configuration=Data Crawling
-labels.data_crawling_title_details=Data Crawling Configuration
+labels.data_crawling_configuration=Data\u3000Store Crawling
+labels.data_crawling_title_details=Data\u3000Store Crawling Configuration
labels.handler_name=Handler Name
labels.handler_parameter=Parameter
labels.handler_script=Script
@@ -502,7 +504,7 @@ labels.file_auth_scheme=Scheme
labels.file_auth_username=Username
labels.file_auth_password=Password
labels.file_auth_parameters=Parameters
-labels.file_auth_file_crawling_config=FS Config
+labels.file_auth_file_crawling_config=File System Config
labels.file_auth_scheme_samba=Samba
labels.pagination_page_guide_msg={0}/{1} ({2} items)
labels.list_could_not_find_crud_table=No data.
@@ -654,5 +656,7 @@ labels.general_menu_system=System
labels.general_menu_crawler=Crawler
labels.general_menu_logging=Logging
labels.general_menu_suggest=Suggest
+labels.general_menu_ldap=LDAP
+labels.ldap_provider_url=LDAP URL
+labels.ldap_security_principal=LDAP Principal
labels.send_testmail=Send TestMail
-
diff --git a/src/main/resources/fess_label_ja.properties b/src/main/resources/fess_label_ja.properties
index 7b60ac8a8..f00bb8f65 100644
--- a/src/main/resources/fess_label_ja.properties
+++ b/src/main/resources/fess_label_ja.properties
@@ -273,7 +273,7 @@ labels.role_type = \u30ed\u30fc\u30eb
labels.label_type = \u30e9\u30d9\u30eb
labels.file_crawling_button_create = \u4f5c\u6210
labels.file_crawling_button_create_job = \u65b0\u3057\u3044\u30b8\u30e7\u30d6\u306e\u4f5c\u6210
-labels.web_crawling_configuration = \u30a6\u30a7\u30d6\u30af\u30ed\u30fc\u30ea\u30f3\u30b0
+labels.web_crawling_configuration = \u30a6\u30a7\u30d6\u306e\u30af\u30ed\u30fc\u30eb
labels.web_crawling_title_details = \u30a6\u30a7\u30d6\u30af\u30ed\u30fc\u30eb\u8a2d\u5b9a
labels.included_urls = \u30af\u30ed\u30fc\u30eb\u5bfe\u8c61\u3068\u3059\u308bURL
labels.excluded_urls = \u30af\u30ed\u30fc\u30eb\u5bfe\u8c61\u304b\u3089\u9664\u5916\u3059\u308bURL
@@ -428,8 +428,8 @@ labels.design_file_errorBadRequest = \u30a8\u30e9\u30fc\u30da\u30fc\u30b8 (BadRe
labels.design_title_edit_content = \u30da\u30fc\u30b8\u306e\u7de8\u96c6\u30d5\u30a1\u30a4\u30eb\u306e\u8868\u793a
labels.design_button_update = \u66f4\u65b0
labels.design_button_back = \u623b\u308b
-labels.data_crawling_configuration = \u30c7\u30fc\u30bf\u306e\u30af\u30ed\u30fc\u30eb
-labels.data_crawling_title_details = \u30c7\u30fc\u30bf\u306e\u30af\u30ed\u30fc\u30eb\u8a2d\u5b9a
+labels.data_crawling_configuration = \u30c7\u30fc\u30bf\u30b9\u30c8\u30a2\u306e\u30af\u30ed\u30fc\u30eb
+labels.data_crawling_title_details = \u30c7\u30fc\u30bf\u30b9\u30c8\u30a2\u306e\u30af\u30ed\u30fc\u30eb\u8a2d\u5b9a
labels.handler_name = \u30cf\u30f3\u30c9\u30e9\u540d
labels.handler_parameter = \u30d1\u30e9\u30e1\u30fc\u30bf
labels.handler_script = \u30b9\u30af\u30ea\u30d7\u30c8
@@ -487,7 +487,7 @@ labels.file_auth_configuration = \u30d5\u30a1\u30a4\u30eb\u8a8d\u8a3c
labels.file_auth_list_hostname = \u30db\u30b9\u30c8\u540d
labels.file_auth_list_file_crawling_config = \u8a2d\u5b9a\u540d
labels.file_auth_any = \u4efb\u610f
-labels.file_auth_create_file_config = \u65b0\u3057\u3044FS\u8a2d\u5b9a\u306e\u4f5c\u6210
+labels.file_auth_create_file_config = \u65b0\u3057\u3044\u30d5\u30a1\u30a4\u30eb\u30af\u30ed\u30fc\u30eb\u8a2d\u5b9a\u306e\u4f5c\u6210
labels.file_auth_title_details = \u30d5\u30a1\u30a4\u30eb\u8a8d\u8a3c
labels.file_auth_hostname = \u30db\u30b9\u30c8\u540d
labels.file_auth_port = \u30dd\u30fc\u30c8
@@ -495,7 +495,7 @@ labels.file_auth_scheme = \u30b9\u30ad\u30fc\u30e0
labels.file_auth_username = \u30e6\u30fc\u30b6\u30fc\u540d
labels.file_auth_password = \u30d1\u30b9\u30ef\u30fc\u30c9
labels.file_auth_parameters = \u30d1\u30e9\u30e1\u30fc\u30bf
-labels.file_auth_file_crawling_config = FS\u8a2d\u5b9a
+labels.file_auth_file_crawling_config = \u30d5\u30a1\u30a4\u30eb\u30af\u30ed\u30fc\u30eb\u8a2d\u5b9a
labels.file_auth_scheme_samba = Samba
labels.pagination_page_guide_msg = {0}/{1} ({2} \u4ef6)
labels.list_could_not_find_crud_table = \u767b\u9332\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002
@@ -645,3 +645,8 @@ labels.general_menu_crawler = \u30af\u30ed\u30fc\u30e9
labels.general_menu_logging = \u30ed\u30ae\u30f3\u30b0
labels.general_menu_suggest = \u30b5\u30b8\u30a7\u30b9\u30c8
labels.send_testmail=\u30c6\u30b9\u30c8\u30e1\u30fc\u30eb\u306e\u9001\u4fe1
+labels.ldapProviderUrl=LDAP URL
+labels.ldapSecurityPrincipal=LDAP \u30d7\u30ea\u30f3\u30b7\u30d1\u30eb
+labels.general_menu_ldap=LDAP
+labels.ldap_provider_url=LDAP URL
+labels.ldap_security_principal=LDAP \u30d7\u30ea\u30f3\u30b7\u30d1\u30eb
diff --git a/src/main/resources/fess_ldap.xml b/src/main/resources/fess_ldap.xml
new file mode 100644
index 000000000..a6f04cc32
--- /dev/null
+++ b/src/main/resources/fess_ldap.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
diff --git a/src/main/webapp/WEB-INF/view/admin/general/admin_general.jsp b/src/main/webapp/WEB-INF/view/admin/general/admin_general.jsp
index 7a52141b8..d5eea9955 100644
--- a/src/main/webapp/WEB-INF/view/admin/general/admin_general.jsp
+++ b/src/main/webapp/WEB-INF/view/admin/general/admin_general.jsp
@@ -288,6 +288,28 @@
+ <%-- LDAP --%>
+
+
+