1 /** 2 * Licensed to the Apache Software Foundation (ASF) under one 3 * or more contributor license agreements. See the NOTICE file 4 * distributed with this work for additional information 5 * regarding copyright ownership. The ASF licenses this file 6 * to you under the Apache License, Version 2.0 (the 7 * "License"); you may not use this file except in compliance 8 * with the License. You may obtain a copy of the License at 9 * 10 * http://www.apache.org/licenses/LICENSE-2.0 11 * 12 * Unless required by applicable law or agreed to in writing, software 13 * distributed under the License is distributed on an "AS IS" BASIS, 14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 * See the License for the specific language governing permissions and 16 * limitations under the License. 17 */ 18 package org.apache.hadoop.hbase.security.visibility; 19 20 import org.apache.hadoop.hbase.classification.InterfaceAudience; 21 import org.apache.hadoop.hbase.classification.InterfaceStability; 22 import org.apache.hadoop.hbase.util.Bytes; 23 24 /** 25 * This contains a visibility expression which can be associated with a cell. When it is set with a 26 * Mutation, all the cells in that mutation will get associated with this expression. A visibility 27 * expression can contain visibility labels combined with logical 28 * operators AND(&), OR(|) and NOT(!) 29 */ 30 @InterfaceAudience.Public 31 @InterfaceStability.Evolving 32 public class CellVisibility { 33 34 private String expression; 35 36 public CellVisibility(String expression) { 37 this.expression = expression; 38 } 39 40 /** 41 * @return The visibility expression 42 */ 43 public String getExpression() { 44 return this.expression; 45 } 46 47 @Override 48 public String toString() { 49 return this.expression; 50 } 51 52 /** 53 * Helps in quoting authentication Strings. Use this if unicode characters to 54 * be used in expression or special characters like '(', ')', 55 * '"','\','&','|','!' 56 */ 57 public static String quote(String auth) { 58 return quote(Bytes.toBytes(auth)); 59 } 60 61 /** 62 * Helps in quoting authentication Strings. Use this if unicode characters to 63 * be used in expression or special characters like '(', ')', 64 * '"','\','&','|','!' 65 */ 66 public static String quote(byte[] auth) { 67 int escapeChars = 0; 68 69 for (int i = 0; i < auth.length; i++) 70 if (auth[i] == '"' || auth[i] == '\\') 71 escapeChars++; 72 73 byte[] escapedAuth = new byte[auth.length + escapeChars + 2]; 74 int index = 1; 75 for (int i = 0; i < auth.length; i++) { 76 if (auth[i] == '"' || auth[i] == '\\') { 77 escapedAuth[index++] = '\\'; 78 } 79 escapedAuth[index++] = auth[i]; 80 } 81 82 escapedAuth[0] = '"'; 83 escapedAuth[escapedAuth.length - 1] = '"'; 84 85 return Bytes.toString(escapedAuth); 86 } 87 }