c68f71ab4fddeb562458153505c729cff4522319
[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 boolean fish(Permission ... pond) {
181         if (lur!=null) {
182             return lur.fish(user, pond);
183         }
184         return false;
185     }
186     
187     /* (non-Javadoc)
188      * @see org.onap.aaf.auth.env.test.AuthzTrans#org()
189      */
190     @Override
191     public Organization org() {
192         if (org==null) {
193             try {
194                 if ((org = OrganizationFactory.obtain(env(), user()))==null) {
195                     org = Organization.NULL;
196                 }
197             } catch (Exception e) {
198                 
199                 org = Organization.NULL;
200             }
201         } 
202         return org;
203     }
204
205     /* (non-Javadoc)
206      * @see org.onap.aaf.auth.env.test.AuthzTrans#logAuditTrailOnly(com.att.inno.env.LogTarget)
207      */
208     @Override
209     public void logAuditTrail(LogTarget lt) {
210         if (lt.isLoggable()) {
211             StringBuilder sb = new StringBuilder();
212             auditTrail(1, sb);
213             lt.log(sb);
214         }
215     }
216
217     /* (non-Javadoc)
218      * @see org.onap.aaf.auth.env.test.AuthzTrans#now()
219      */
220     @Override
221     public Date now() {
222         if (now==null) {
223             now = new Date();
224         }
225         return now;
226     }
227     
228     /*
229      * (non-Javadoc)
230      * @see org.onap.aaf.auth.env.AuthzTrans#setTag(java.lang.String)
231      */
232     @Override
233     public void setTag(String tag) {
234         this.tag = tag;
235     }
236
237     @Override
238     public String getTag() {
239         return tag;
240     }
241
242     @Override
243     public void clearCache() {
244         if (lur!=null) {
245             StringBuilder report = new StringBuilder();
246             lur.clear(user, report);
247             info().log(report);
248         }
249     }
250 }