AT&T 2.0.19 Code drop, stage 3
[aaf/authz.git] / auth / auth-deforg / src / main / java / org / onap / aaf / org / DefaultOrgIdentity.java
1 /*******************************************************************************
2  * ============LICENSE_START====================================================
3  * * org.onap.aaf
4  * * ===========================================================================
5  * * Copyright © 2017 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.org;
23
24 import java.io.IOException;
25 import java.util.List;
26
27 import org.onap.aaf.auth.env.AuthzTrans;
28 import org.onap.aaf.auth.local.AbsData.Reuse;
29 import org.onap.aaf.auth.org.Organization;
30 import org.onap.aaf.auth.org.OrganizationException;
31 import org.onap.aaf.auth.org.Organization.Identity;
32 import org.onap.aaf.cadi.config.Config;
33 import org.onap.aaf.org.Identities.Data;
34
35 /**
36  * Org Users are essential representations of Identities within the Org.  Since this is a highly individual 
37  * thing for most Orgs, i.e. some use LDAP, some need feed, some use something else, this object will allow
38  * the Organization to connect to their own Identity systems...
39  * 
40  *
41  */
42 public class DefaultOrgIdentity implements Identity {
43         private static final String CONTRACTOR = "c";
44         private static final String EMPLOYEE = "e";
45         private static final String APPLICATION = "a";
46     private static final String NON_ACTIVE = "n";
47
48         private final static int TIMEOUT = Integer.parseInt(Config.AAF_CONN_TIMEOUT_DEF);
49         
50         private DefaultOrg org;
51         //package on purpose
52         Data identity;
53         private AuthzTrans trans;
54
55         public DefaultOrgIdentity(AuthzTrans trans, String key, DefaultOrg dorg) throws OrganizationException {
56                 this.trans = trans;
57                 org = dorg;
58                 identity=null;
59                 try {
60                         org.identities.open(trans, TIMEOUT);
61                         try {
62                                 Reuse r = org.identities.reuse();
63                                 int at = key.indexOf(dorg.atDomain);
64                                 String search;
65                                 if(at>=0) {
66                                         search = key.substring(0,at);
67                                 } else {
68                                         search = key;
69                                 }
70                                 identity = org.identities.find(search, r);
71                                 if(identity==null) {
72                                         identity = Identities.NO_DATA;
73                                 }
74                         } finally {
75                                 org.identities.close(trans);
76                         }
77                 } catch (IOException e) {
78                         throw new OrganizationException(e);
79                 }
80         }
81         
82         @Override
83         public boolean equals(Object b) {
84                 if(b instanceof DefaultOrgIdentity) {
85                         return identity.id.equals(((DefaultOrgIdentity)b).identity.id);
86                 }
87                 return false;
88         }
89
90         @Override
91         public String id() {
92                 return identity.id;
93         }
94
95         @Override
96         public String fullID() {
97                 return identity.id+'@'+org.getDomain();
98         }
99
100         @Override
101         public String type() {
102                 switch(identity.status) {
103                         case EMPLOYEE: return DefaultOrg.Types.Employee.name();
104                         case CONTRACTOR: return DefaultOrg.Types.Contractor.name();
105                         case APPLICATION: return DefaultOrg.Types.Application.name();
106                         case NON_ACTIVE: return DefaultOrg.Types.NotActive.name();
107                         default:
108                                 return "Unknown";
109                 }
110         }
111
112         @Override
113         public Identity responsibleTo() throws OrganizationException {
114                 if("".equals(identity.responsibleTo) && isFound()) { // cover the situation of Top Dog... reports to no-one.
115                         return this;
116                 } else {
117                         return org.getIdentity(trans, identity.responsibleTo);
118                 }
119         }
120
121         @Override
122         public List<String> delegate() {
123                 //NOTE:  implement Delegate system, if desired
124                 return DefaultOrg.NULL_DELEGATES;
125         }
126
127         @Override
128         public String email() {
129                 return identity.email;
130         }
131
132         @Override
133         public String fullName() {
134                 return identity.name;
135         }
136
137         @Override
138         public String firstName() {
139                 return identity.fname;
140         }
141
142         @Override
143         public String mayOwn() {
144                 // Assume only Employees are responsible for Resources.
145                 if(identity.status==null|| identity.status.length()==0) {
146                         return "Identity must have valid status";
147                 } else if(EMPLOYEE.equals(identity.status)) {
148                         return null; // This is "Yes, is Responsible"
149                 } else {
150                         return "Reponsible Party must be an Employee";
151                 }
152         }
153
154         @Override
155         public boolean isFound() {
156                 return identity!=Identities.NO_DATA; // yes, object comparison intended
157         }
158
159         @Override
160         public boolean isPerson() {
161                 return !identity.status.equals(APPLICATION);
162         }
163
164         @Override
165         public Organization org() {
166                 return org;
167         }
168
169
170 }