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 operators AND(&), OR(|) and NOT(!) 28 */ 29 @InterfaceAudience.Public 30 @InterfaceStability.Evolving 31 public class CellVisibility { 32 33 private String expression; 34 35 public CellVisibility(String expression) { 36 this.expression = expression; 37 } 38 39 /** 40 * @return The visibility expression 41 */ 42 public String getExpression() { 43 return this.expression; 44 } 45 46 @Override 47 public String toString() { 48 return this.expression; 49 } 50 51 /** 52 * Helps in quoting authentication Strings. Use this if unicode characters to 53 * be used in expression or special characters like '(', ')', 54 * '"','\','&','|','!' 55 */ 56 public static String quote(String auth) { 57 return quote(Bytes.toBytes(auth)); 58 } 59 60 /** 61 * Helps in quoting authentication Strings. Use this if unicode characters to 62 * be used in expression or special characters like '(', ')', 63 * '"','\','&','|','!' 64 */ 65 public static String quote(byte[] auth) { 66 int escapeChars = 0; 67 68 for (int i = 0; i < auth.length; i++) 69 if (auth[i] == '"' || auth[i] == '\\') 70 escapeChars++; 71 72 byte[] escapedAuth = new byte[auth.length + escapeChars + 2]; 73 int index = 1; 74 for (int i = 0; i < auth.length; i++) { 75 if (auth[i] == '"' || auth[i] == '\\') { 76 escapedAuth[index++] = '\\'; 77 } 78 escapedAuth[index++] = auth[i]; 79 } 80 81 escapedAuth[0] = '"'; 82 escapedAuth[escapedAuth.length - 1] = '"'; 83 84 return Bytes.toString(escapedAuth); 85 } 86 }