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