Update Fixes from testing
[aaf/authz.git] / auth / auth-core / src / main / java / org / onap / aaf / auth / env / AuthzTransImpl.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.env;
23
24 import java.util.Date;
25
26 import javax.servlet.http.HttpServletRequest;
27 import javax.servlet.http.HttpServletResponse;
28
29 import org.onap.aaf.auth.org.Organization;
30 import org.onap.aaf.auth.org.OrganizationFactory;
31 import org.onap.aaf.cadi.Lur;
32 import org.onap.aaf.cadi.Permission;
33 import org.onap.aaf.cadi.principal.TaggedPrincipal;
34 import org.onap.aaf.misc.env.LogTarget;
35 import org.onap.aaf.misc.env.impl.BasicTrans;
36
37 public class AuthzTransImpl extends BasicTrans implements AuthzTrans {
38     private static final String N_A = "n/a";
39     private static final String BLANK = "";
40     private HttpServletRequest hreq;
41     private HttpServletResponse hresp;
42     private TaggedPrincipal user;
43     private Lur lur;
44     private Organization org;
45     private int mask;
46     private Date now;
47     private String tag;
48     public AuthzTransImpl(AuthzEnv env) {
49         super(env);
50         org=null;
51         mask=0;
52         tag=null;
53     }
54
55     /**
56      * @see org.onap.aaf.auth.env.test.AuthTrans#set(javax.servlet.http.HttpServletRequest)
57      */
58     @Override
59     public AuthzTrans set(HttpServletRequest req, HttpServletResponse resp) {
60         hreq = req;
61         hresp = resp;
62         user = (TaggedPrincipal)req.getUserPrincipal();
63         
64         for (REQD_TYPE rt : REQD_TYPE.values()) {
65             requested(rt,req);
66         }
67         // Handle alternate "request" for "future"
68         String request = req.getParameter("request");
69         if (request!=null) {
70             requested(REQD_TYPE.future,(request.length()==0 || "true".equalsIgnoreCase(request)));
71         }
72
73         org=null;
74         return this;
75     }
76     
77     @Override
78     public HttpServletRequest hreq() {
79         return hreq;
80     }
81
82     @Override
83     public HttpServletResponse hresp() {
84         return hresp;
85     }
86
87     @Override
88     public void setUser(TaggedPrincipal p) {
89         user = p;
90     }
91
92     /**
93      * @see org.onap.aaf.auth.env.test.AuthTrans#user()
94      */
95     @Override
96     public String user() {
97         return user==null?N_A:user.getName();
98     }
99     
100     /**
101      * @see org.onap.aaf.auth.env.test.AuthTrans#getUserPrincipal()
102      */
103     @Override
104     public TaggedPrincipal getUserPrincipal() {
105         return user;
106     }
107
108     /**
109      * @see org.onap.aaf.auth.env.test.AuthTrans#ip()
110      */
111     @Override
112     public String ip() {
113         return hreq==null?N_A:hreq.getRemoteAddr();
114     }
115
116     /**
117      * @see org.onap.aaf.auth.env.test.AuthTrans#port()
118      */
119     @Override
120     public int port() {
121         return hreq==null?0:hreq.getRemotePort();
122     }
123
124
125     /* (non-Javadoc)
126      * @see org.onap.aaf.auth.env.test.AuthzTrans#meth()
127      */
128     @Override
129     public String meth() {
130         return hreq==null?"":hreq.getMethod();
131     }
132
133     /* (non-Javadoc)
134      * @see org.onap.aaf.auth.env.test.AuthzTrans#path()
135      */
136     @Override
137     public String path() {
138         return hreq==null?"":hreq.getPathInfo();
139     }
140
141     /**
142      * @see org.onap.aaf.auth.env.test.AuthTrans#agent()
143      */
144     @Override
145     public String agent() {
146         return hreq==null?BLANK:hreq.getHeader("User-Agent");
147     }
148
149     @Override
150     public AuthzEnv env() {
151         return (AuthzEnv)delegate;
152     }
153     
154     @Override
155     public boolean requested(REQD_TYPE requested) {
156         return (mask&requested.bit)==requested.bit;
157     }
158     
159     public void requested(REQD_TYPE requested, boolean b) {
160         if (b) {
161             mask|=requested.bit;
162         } else {
163             mask&=~requested.bit;
164         }
165     }
166     
167     private void requested(REQD_TYPE reqtype, HttpServletRequest req) {
168         String p = req.getParameter(reqtype.name());
169         if (p!=null) {
170             requested(reqtype,p.length()==0 || "true".equalsIgnoreCase(p));
171         }
172     }
173
174     @Override
175     public void setLur(Lur lur) {
176         this.lur = lur;
177     }
178     
179     @Override
180     public Lur getLur() {
181         return lur;
182     }
183     
184     @Override
185     public boolean fish(Permission ... pond) {
186         if (lur!=null) {
187             return lur.fish(user, pond);
188         }
189         return false;
190     }
191     
192     /* (non-Javadoc)
193      * @see org.onap.aaf.auth.env.test.AuthzTrans#org()
194      */
195     @Override
196     public Organization org() {
197         if (org==null) {
198             try {
199                 if ((org = OrganizationFactory.obtain(env(), user()))==null) {
200                     org = Organization.NULL;
201                 }
202             } catch (Exception e) {
203                 
204                 org = Organization.NULL;
205             }
206         } 
207         return org;
208     }
209
210     /* (non-Javadoc)
211      * @see org.onap.aaf.auth.env.test.AuthzTrans#logAuditTrailOnly(com.att.inno.env.LogTarget)
212      */
213     @Override
214     public void logAuditTrail(LogTarget lt) {
215         if (lt.isLoggable()) {
216             StringBuilder sb = new StringBuilder();
217             auditTrail(1, sb);
218             lt.log(sb);
219         }
220     }
221
222     /* (non-Javadoc)
223      * @see org.onap.aaf.auth.env.test.AuthzTrans#now()
224      */
225     @Override
226     public Date now() {
227         if (now==null) {
228             now = new Date();
229         }
230         return now;
231     }
232     
233     /*
234      * (non-Javadoc)
235      * @see org.onap.aaf.auth.env.AuthzTrans#setTag(java.lang.String)
236      */
237     @Override
238     public void setTag(String tag) {
239         this.tag = tag;
240     }
241
242     @Override
243     public String getTag() {
244         return tag;
245     }
246
247     @Override
248     public void clearCache() {
249         if (lur!=null) {
250             StringBuilder report = new StringBuilder();
251             lur.clear(user, report);
252             info().log(report);
253         }
254     }
255 }