1 package org.fhw.cabaweb.webfrontend.security.realm;
2
3 import java.sql.Timestamp;
4 import java.util.Collection;
5 import java.util.Iterator;
6
7 import org.apache.commons.logging.Log;
8 import org.apache.commons.logging.LogFactory;
9 import org.fhw.cabaweb.data.DataInterfaceGruppenmitglieder;
10 import org.fhw.cabaweb.ojb.dataobjects.Gruppenmitglieder;
11 import org.securityfilter.realm.SimpleSecurityRealmBase;
12
13 /***
14 * Klasse für das Security Realm Interface.
15 * Check von Benutzername Passwort gegen die Datenbank.
16 * Check von Benutzername Role, ob Benutzer in dieser Rolle ist.
17 *
18 * @author <a href="mailto:thomas.vogt@tvc-software.com">Thomas Vogt</a>
19 * @version Version 1.1 06.07.2004
20 */
21 public class CabaWebSecurityRealm extends SimpleSecurityRealmBase
22 {
23 /***
24 * The <code>Log</code> Instanz für diese Anwendung.
25 */
26 private Log log = LogFactory.getLog("org.fhw.cabaweb.webfrontend.security.realm.CabaWebSecurityRealm");
27
28 /***
29 * Authentifizierung des Benutzers.
30 *
31 * Implementiert die Funktionalität der Kontrolle von Benutzername und Passwort gegen
32 * den in der Datenbank gespeicherten Hash und Namen.
33 *
34 * @param username Der Benutzername
35 * @param password Das Plaintext Passwort
36 *
37 * @return true wenn Benutzer authentifiziert wurde, false wenn Benutzername/Passwort Kombination falsch war.
38 */
39 public boolean booleanAuthenticate(String username, String password)
40 {
41 if (username != null)
42 {
43 DataInterfaceGruppenmitglieder dig = new DataInterfaceGruppenmitglieder();
44 Collection gruppenmitglieder = dig.sucheLogInName(username);
45
46 Iterator iter = gruppenmitglieder.iterator();
47 if (gruppenmitglieder.size() == 1)
48 {
49 Gruppenmitglieder grpmitglied = (Gruppenmitglieder) iter.next();
50 String passwordhashDB = grpmitglied.getPassworthash();
51 String passwordhashUSER = grpmitglied.getPassworthash();
52
53 if (grpmitglied.getProjektgruppe() != null && grpmitglied.getProjektgruppe().getProjekte() != null && grpmitglied.getProjektgruppe().getProjekte().getAktiv() != null && grpmitglied.getProjektgruppe().getProjekte().getAktiv().equals(Boolean.FALSE))
54 {
55 if (log.isDebugEnabled())
56 {
57 log.debug(" The Project the user '" + username + "' is subscribed to is inactive - Therefore the user is not allowed to login.");
58 }
59
60 return false;
61 }
62
63 if (passwordhashDB.equals(passwordhashUSER) && grpmitglied.getAktiv().equals(Boolean.TRUE))
64 {
65 if (grpmitglied.getProjektgruppe() == null || grpmitglied.getProjektgruppe().getAktiv().equals(Boolean.FALSE))
66 {
67 if (log.isDebugEnabled())
68 {
69 log.debug(" Authenticated user " + username + " but group or user is deactivated.");
70 }
71
72 return false;
73 }
74
75 if (log.isDebugEnabled())
76 {
77 log.debug(" Authenticated DB Hash " + passwordhashDB + " against given " + passwordhashUSER + " for name " + username);
78 }
79
80 grpmitglied.setLetzterlogin(new Timestamp(System.currentTimeMillis()));
81 dig.editieren(grpmitglied);
82
83 return true;
84 }
85 else
86 {
87 if (log.isDebugEnabled())
88 {
89 log.debug(" Unable to authenticate DB Hash " + passwordhashDB + " against given " + passwordhashUSER + " for name " + username);
90 }
91 return false;
92 }
93 }
94 else
95 {
96 if (log.isDebugEnabled())
97 {
98 log.debug(" (IMPOSSIBLE ???) There were found " + gruppenmitglieder.size() + " user(s) for this name " + username);
99 }
100
101 return false;
102 }
103 }
104 else
105 {
106 if (log.isDebugEnabled())
107 {
108 log.debug(" No User given");
109 }
110
111 return false;
112 }
113 }
114
115 /***
116 * Authentifizierung des Benutzers.
117 *
118 * Implementiert die Funktionalität der Kontrolle von Benutzername und Role gegen
119 * den in der Datenbank gespeicherten Namen und dessen Rollenzuordnung.
120 *
121 * @param username Der Benutzername
122 * @param role Die Rolle auf die der Benutzer geprüft werden soll
123 *
124 * @return true wenn Benutzer diese Rolle hat, false wenn Benutzer diese Rolle NICHT hat.
125 */
126 public boolean isUserInRole(String username, String role)
127 {
128 if (username != null && role != null)
129 {
130 DataInterfaceGruppenmitglieder dig = new DataInterfaceGruppenmitglieder();
131 Collection gruppenmitglieder = dig.sucheLogInName(username);
132
133 Iterator iter = gruppenmitglieder.iterator();
134 if (gruppenmitglieder.size() == 1)
135 {
136 Gruppenmitglieder grpmitglied = (Gruppenmitglieder) iter.next();
137
138 if (role.compareTo("Administrator") == 0)
139 {
140 if (log.isDebugEnabled())
141 {
142 log.debug(" Is User " + username + " an Administrator ???");
143 }
144
145 if (grpmitglied.getBenutzerrolle().getAdmin().booleanValue() == true)
146 {
147 if (log.isDebugEnabled())
148 {
149 log.debug(" User " + username + " is an Administrator !");
150 }
151
152 return true;
153 }
154 else
155 {
156 return false;
157 }
158 }
159 else if (role.compareTo("Projektleiter") == 0)
160 {
161 if (log.isDebugEnabled())
162 {
163 log.debug(" Is User " + username + " a Projektleader ???");
164 }
165
166 if (grpmitglied.getBenutzerrolle().getProjektleiter().booleanValue() == true)
167 {
168 if (log.isDebugEnabled())
169 {
170 log.debug(" User " + username + " is a Projectleader !");
171 }
172
173 return true;
174 }
175 else
176 {
177 return false;
178 }
179 }
180 else if (role.compareTo("Benutzer") == 0)
181 {
182 if (log.isDebugEnabled())
183 {
184 log.debug(" Is User " + username + " a 'simple' User ???");
185 }
186
187 if (grpmitglied.getBenutzerrolle().getGruppenmitglied().booleanValue() == true)
188 {
189 if (log.isDebugEnabled())
190 {
191 log.debug(" User " + username + " is a 'simple' User !");
192 }
193
194 return true;
195 }
196 else
197 {
198 return false;
199 }
200 }
201 else
202 {
203 if (log.isDebugEnabled())
204 {
205 log.debug(" Unknown Role " + role + " for " + username);
206 }
207
208 return false;
209 }
210 }
211 else
212 {
213 if (log.isDebugEnabled())
214 {
215 log.debug(" !!! DON'T KNOW HOW THIS COULD HAVE HAPPENED ?!? DATABASE OK ?!? There were found " + gruppenmitglieder.size() + " user(s) for this name " + username + " and role " + role);
216 }
217
218 return false;
219 }
220 }
221 else
222 {
223 if (log.isDebugEnabled())
224 {
225 log.debug(" No User or no role given ");
226 }
227
228 return false;
229 }
230 }
231 }