/solr/solrj/src/java/org/apache/solr/common/cloud/VMParamsAllAndReadonlyDigestZkACLProvider.java
http://github.com/apache/lucene-solr · Java · 117 lines · 70 code · 19 blank · 28 comment · 6 complexity · df3c3f572bbc3cbbedc41069ed425315 MD5 · raw file
- /*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.apache.solr.common.cloud;
- import java.security.NoSuchAlgorithmException;
- import java.util.ArrayList;
- import java.util.List;
- import org.apache.solr.common.StringUtils;
- import org.apache.zookeeper.ZooDefs;
- import org.apache.zookeeper.data.ACL;
- import org.apache.zookeeper.data.Id;
- import org.apache.zookeeper.server.auth.DigestAuthenticationProvider;
- public class VMParamsAllAndReadonlyDigestZkACLProvider extends SecurityAwareZkACLProvider {
- public static final String DEFAULT_DIGEST_READONLY_USERNAME_VM_PARAM_NAME = "zkDigestReadonlyUsername";
- public static final String DEFAULT_DIGEST_READONLY_PASSWORD_VM_PARAM_NAME = "zkDigestReadonlyPassword";
-
- final String zkDigestAllUsernameVMParamName;
- final String zkDigestAllPasswordVMParamName;
- final String zkDigestReadonlyUsernameVMParamName;
- final String zkDigestReadonlyPasswordVMParamName;
-
- public VMParamsAllAndReadonlyDigestZkACLProvider() {
- this(
- VMParamsSingleSetCredentialsDigestZkCredentialsProvider.DEFAULT_DIGEST_USERNAME_VM_PARAM_NAME,
- VMParamsSingleSetCredentialsDigestZkCredentialsProvider.DEFAULT_DIGEST_PASSWORD_VM_PARAM_NAME,
- DEFAULT_DIGEST_READONLY_USERNAME_VM_PARAM_NAME,
- DEFAULT_DIGEST_READONLY_PASSWORD_VM_PARAM_NAME
- );
- }
-
- public VMParamsAllAndReadonlyDigestZkACLProvider(String zkDigestAllUsernameVMParamName, String zkDigestAllPasswordVMParamName,
- String zkDigestReadonlyUsernameVMParamName, String zkDigestReadonlyPasswordVMParamName) {
- this.zkDigestAllUsernameVMParamName = zkDigestAllUsernameVMParamName;
- this.zkDigestAllPasswordVMParamName = zkDigestAllPasswordVMParamName;
- this.zkDigestReadonlyUsernameVMParamName = zkDigestReadonlyUsernameVMParamName;
- this.zkDigestReadonlyPasswordVMParamName = zkDigestReadonlyPasswordVMParamName;
- }
- /**
- * @return Set of ACLs to return for non-security related znodes
- */
- @Override
- protected List<ACL> createNonSecurityACLsToAdd() {
- return createACLsToAdd(true);
- }
- /**
- * @return Set of ACLs to return security-related znodes
- */
- @Override
- protected List<ACL> createSecurityACLsToAdd() {
- return createACLsToAdd(false);
- }
- protected List<ACL> createACLsToAdd(boolean includeReadOnly) {
- String digestAllUsername = System.getProperty(zkDigestAllUsernameVMParamName);
- String digestAllPassword = System.getProperty(zkDigestAllPasswordVMParamName);
- String digestReadonlyUsername = System.getProperty(zkDigestReadonlyUsernameVMParamName);
- String digestReadonlyPassword = System.getProperty(zkDigestReadonlyPasswordVMParamName);
- return createACLsToAdd(includeReadOnly,
- digestAllUsername, digestAllPassword,
- digestReadonlyUsername, digestReadonlyPassword);
- }
- /**
- * Note: only used for tests
- */
- protected List<ACL> createACLsToAdd(boolean includeReadOnly,
- String digestAllUsername, String digestAllPassword,
- String digestReadonlyUsername, String digestReadonlyPassword) {
- try {
- List<ACL> result = new ArrayList<ACL>();
-
- // Not to have to provide too much credentials and ACL information to the process it is assumed that you want "ALL"-acls
- // added to the user you are using to connect to ZK (if you are using VMParamsSingleSetCredentialsDigestZkCredentialsProvider)
- if (!StringUtils.isEmpty(digestAllUsername) && !StringUtils.isEmpty(digestAllPassword)) {
- result.add(new ACL(ZooDefs.Perms.ALL, new Id("digest", DigestAuthenticationProvider.generateDigest(digestAllUsername + ":" + digestAllPassword))));
- }
- if (includeReadOnly) {
- // Besides that support for adding additional "READONLY"-acls for another user
- if (!StringUtils.isEmpty(digestReadonlyUsername) && !StringUtils.isEmpty(digestReadonlyPassword)) {
- result.add(new ACL(ZooDefs.Perms.READ, new Id("digest", DigestAuthenticationProvider.generateDigest(digestReadonlyUsername + ":" + digestReadonlyPassword))));
- }
- }
-
- if (result.isEmpty()) {
- result = ZooDefs.Ids.OPEN_ACL_UNSAFE;
- }
-
- return result;
- } catch (NoSuchAlgorithmException e) {
- throw new RuntimeException(e);
- }
- }
- }