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 }