Mass removal of all Tabs (Style Warnings)
[aaf/authz.git] / auth / auth-core / src / main / java / org / onap / aaf / auth / validation / Validator.java
1 /**
2  * ============LICENSE_START====================================================
3  * org.onap.aaf
4  * ===========================================================================
5  * Copyright (c) 2018 AT&T Intellectual Property. All rights reserved.
6  * ===========================================================================
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  * 
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  * 
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  * ============LICENSE_END====================================================
19  *
20  */
21
22 package org.onap.aaf.auth.validation;
23
24 import java.util.ArrayList;
25 import java.util.List;
26 import java.util.regex.Pattern;
27
28 import org.onap.aaf.auth.layer.Result;
29
30
31 public class Validator {
32     private static final String ESSENTIAL = "\\x25\\x28\\x29\\x2C-\\x2E\\x30-\\x39\\x3D\\x40-\\x5A\\x5F\\x61-\\x7A";
33     private static final Pattern ESSENTIAL_CHARS = Pattern.compile("["+ESSENTIAL+"]+");
34     public static final Pattern ACTION_CHARS = Pattern.compile(
35                 "["+ESSENTIAL+"]+" +    // All AlphaNumeric+
36                 "|\\*"                        // Just Star
37                 );
38     public static final Pattern INST_CHARS = Pattern.compile(
39                 "["+ESSENTIAL+"]+[\\*]*" +                // All AlphaNumeric+ possibly ending with *
40                 "|\\*" +                                // Just Star
41                 "|(([:/]\\*)|([:/][!]{0,1}["+ESSENTIAL+"]+[\\*]*[:/]*))+"    // Key :asdf:*:sdf*:sdk
42                 );
43     public static final Pattern ID_CHARS = Pattern.compile("[\\w.-]+@[\\w.-]+");
44     public static final Pattern NAME_CHARS = Pattern.compile("[\\w.-]+");
45     public static final Pattern DESC_CHAR = Pattern.compile("["+ESSENTIAL+"\\x20]+");
46     protected static List<String> nsKeywords;
47     private final Pattern actionChars;
48     private final Pattern instChars;
49     private StringBuilder msgs;
50
51     static {
52         nsKeywords = new ArrayList<>();
53         nsKeywords.add(".access");
54         nsKeywords.add(".owner");
55         nsKeywords.add(".admin");
56         nsKeywords.add(".member");
57         nsKeywords.add(".perm");
58         nsKeywords.add(".role");
59         nsKeywords.add(".ns");
60         nsKeywords.add(".cred");
61     }
62
63     public Validator() {
64         actionChars = ACTION_CHARS;
65         instChars = INST_CHARS;
66     }
67     
68     public final String errs() {
69         return msgs.toString();
70     }
71
72     public final Validator nullOrBlank(String name, String str) {
73         if(str==null) {
74             msg(name + " is null.");
75         } else if(str.length()==0) {
76             msg(name + " is blank.");
77         }
78         return this;
79     }
80
81     public final Validator isNull(String name, Object o) {
82         if(o==null) {
83             msg(name + " is null.");
84         }
85         return this;
86     }
87
88     protected final boolean noMatch(String str, Pattern p) {
89         return !p.matcher(str).matches();
90     }
91     protected final boolean nob(String str, Pattern p) {
92         return str==null || !p.matcher(str).matches(); 
93     }
94
95     protected final void msg(String ... strs) {
96         if(msgs==null) {
97             msgs=new StringBuilder();
98         }
99         for(String str : strs) {
100             msgs.append(str);
101         }
102         msgs.append('\n');
103     }
104
105     public final boolean err() {
106         return msgs!=null;
107     }
108
109     public final Validator notOK(Result<?> res) {
110         if(res==null) {
111             msgs.append("Result object is blank");
112         } else if(res.notOK()) {
113             msgs.append(res.getClass().getSimpleName()).append(" is not OK");
114         }
115         return this;
116     }
117
118     protected Validator intRange(String text, int target, int start, int end) {
119         if(target<start || target>end) {
120             msg(text + " is out of range (" + start + '-' + end + ')');
121         }
122         return this;
123     }
124
125     protected Validator floatRange(String text, float target, float start, float end) {
126         if(target<start || target>end) {
127             msg(text + " is out of range (" + start + '-' + end + ')');
128         }
129         return this;
130     }
131
132     protected Validator description(String type, String description) {
133         if (description != null && noMatch(description, DESC_CHAR)) {
134             msg(type + " Description is invalid.");
135         }
136         return this;
137     }
138
139     public final Validator permType(String type) {
140         if(nob(type,NAME_CHARS)) {
141             msg("Perm Type [" +type + "] is invalid.");
142         }
143         return this;
144     }
145
146     public final Validator permType(String type, String ns) {
147         if(type==null) {
148             msg("Perm Type is null");
149         } else if(ns==null) {
150             msg("Perm NS is null");
151         } else if(nob(type,NAME_CHARS)) {
152             msg("Perm Type [" + (ns+(type.length()==0?"":'.')) + type + "] is invalid.");
153         }
154         return this;
155     }
156
157     public final Validator permInstance(String instance) {
158         if(nob(instance,instChars)) {
159             msg("Perm Instance [" + instance + "] is invalid.");
160         }
161         return this;
162     }
163
164     public final Validator permAction(String action) {
165         // TODO check for correct Splits?  Type|Instance|Action ?
166         if(nob(action, actionChars)) {
167             msg("Perm Action [" + action + "] is invalid.");
168         }
169         return this;
170     }
171
172     public final Validator role(String role) {
173         if(nob(role, NAME_CHARS)) {
174             msg("Role [" + role + "] is invalid.");
175         }
176         return this;
177     }
178
179     public final Validator ns(String ns) {
180         if(ns==null) {
181             msg("NS is null");
182             return this;
183         } else if(nob(ns,NAME_CHARS)) {
184             msg("NS [" + ns + "] is invalid.");
185         } 
186         for(String s : nsKeywords) {
187             if(ns.endsWith(s)) {
188                 msg("NS [" + ns + "] may not be named with NS keywords");
189                 break;
190             }
191         }
192         return this;
193     }
194
195     public final Validator key(String key) {
196         if(nob(key,NAME_CHARS)) {
197             msg("NS Prop Key [" + key + "] is invalid");
198         }
199         return this;
200     }
201
202     public final Validator value(String value) {
203         if(nob(value,ESSENTIAL_CHARS)) {
204             msg("NS Prop value [" + value + "] is invalid");
205         }
206         return this;
207     }
208
209
210 }