|
@@ -9,20 +9,16 @@ |
9 |
9 |
|
import org.litesoft.exceptions.*; |
10 |
10 |
|
import org.litesoft.orsup.*; |
11 |
11 |
|
import org.litesoft.orsup.base.*; |
12 |
|
- |
import org.litesoft.orsup.selection.*; |
13 |
12 |
|
import org.litesoft.orsup.transact.*; |
14 |
|
- |
import org.litesoft.prioritizer.client.boviews.*; |
15 |
|
- |
import org.litesoft.prioritizer.server.*; |
16 |
|
- |
import org.litesoft.prioritizer.server.pos.*; |
17 |
13 |
|
import org.litesoft.security.*; |
18 |
14 |
|
import org.litesoft.sql.*; |
19 |
15 |
|
import org.litesoft.util.*; |
20 |
16 |
|
|
21 |
|
- |
public abstract class SecurityUserViewPoServerVoDataProvider<T extends SecurityUserView<T>> extends PoServerVoDataProvider<T> |
|
17 |
+ |
public abstract class SecurityUserViewPoServerVoDataProvider<VO extends SecurityUserView<VO>, PO extends SecurityUser<PO>, RRPO extends SecurityRestrictedResource<RRPO>> extends PoServerVoDataProvider<VO> |
22 |
18 |
|
{ |
23 |
19 |
|
private String mDefaultUserLoginEmail = Utils.noEmpty( System.getProperty( "User" ) ); |
24 |
20 |
|
|
25 |
|
- |
private String getDefaultUserLoginEmail() |
|
21 |
+ |
protected String getDefaultUserLoginEmail() |
26 |
22 |
|
{ |
27 |
23 |
|
String zInitialUserEmail = mDefaultUserLoginEmail; |
28 |
24 |
|
mDefaultUserLoginEmail = null; |
|
@@ -32,7 +28,7 @@ |
32 |
28 |
|
private final String[] mDemoUserEmails; |
33 |
29 |
|
private final Set<String> mSetOfDemoUserEmails; |
34 |
30 |
|
|
35 |
|
- |
protected SecurityUserViewPoServerVoDataProvider( VoMetaData<T> pVOMetaData, MetaDataStore pMetaDataStore, String... pDemoUserEmails ) |
|
31 |
+ |
protected SecurityUserViewPoServerVoDataProvider( VoMetaData<VO> pVOMetaData, MetaDataStore pMetaDataStore, String... pDemoUserEmails ) |
36 |
32 |
|
{ |
37 |
33 |
|
super( pVOMetaData, pMetaDataStore ); |
38 |
34 |
|
mSetOfDemoUserEmails = new HashSet<String>( Arrays.asList( mDemoUserEmails = pDemoUserEmails ) ); |
|
@@ -43,14 +39,14 @@ |
43 |
39 |
|
{ |
44 |
40 |
|
super.LLinitialize(); |
45 |
41 |
|
|
46 |
|
- |
register( new SecurityUserViewServerFunctionLogin<T>() ); |
47 |
|
- |
register( new SecurityUserViewServerFunctionLogout<T>() ); |
48 |
|
- |
register( new SecurityUserViewServerFunctionSwitchRestrictedResources<T>() ); |
49 |
|
- |
register( new SecurityUserViewServerFunctionChangePassword<T>() ); |
50 |
|
- |
register( new SecurityUserViewServerFunctionValidatePassword<T>() ); |
51 |
|
- |
register( new SecurityUserViewServerFunctionValidateLogonEmailAvailable<T>() ); |
52 |
|
- |
register( new SecurityUserViewServerFunctionNextDemoLoginUser<T>() ); |
53 |
|
- |
register( new SecurityUserViewServerFunctionFetchCurrentLoginUser<T>() ); |
|
42 |
+ |
register( new SecurityUserViewServerFunctionLogin<VO>() ); |
|
43 |
+ |
register( new SecurityUserViewServerFunctionLogout<VO>() ); |
|
44 |
+ |
register( new SecurityUserViewServerFunctionSwitchRestrictedResources<VO>() ); |
|
45 |
+ |
register( new SecurityUserViewServerFunctionChangePassword<VO>() ); |
|
46 |
+ |
register( new SecurityUserViewServerFunctionValidatePassword<VO>() ); |
|
47 |
+ |
register( new SecurityUserViewServerFunctionValidateLogonEmailAvailable<VO>() ); |
|
48 |
+ |
register( new SecurityUserViewServerFunctionNextDemoLoginUser<VO>() ); |
|
49 |
+ |
register( new SecurityUserViewServerFunctionFetchCurrentLoginUser<VO>() ); |
54 |
50 |
|
} |
55 |
51 |
|
|
56 |
52 |
|
public SCresult changePassword( SecurityUserView pUserView ) |
|
@@ -75,7 +71,7 @@ |
75 |
71 |
|
{ |
76 |
72 |
|
while ( zError == null ) |
77 |
73 |
|
{ |
78 |
|
- |
User zUser = getUserByEmailFromCurrentDS( zLogonEmail ); |
|
74 |
+ |
SecurityUser<PO> zUser = getUserByEmailFromCurrentDS( zLogonEmail ); |
79 |
75 |
|
if ( (zUser == null) || !zUser.validatePassword( zCurrentPassword ) ) |
80 |
76 |
|
{ |
81 |
77 |
|
zError = "Invalid Credentials"; |
|
@@ -115,7 +111,7 @@ |
115 |
111 |
|
if ( null == zError ) |
116 |
112 |
|
{ |
117 |
113 |
|
zError = "Invalid"; |
118 |
|
- |
User zUser = getUserByEmailFromCurrentDS( pUserView.getLogonEmail() ); |
|
114 |
+ |
SecurityUser<PO> zUser = getUserByEmailFromCurrentDS( pUserView.getLogonEmail() ); |
119 |
115 |
|
if ( (zUser != null) && zUser.validatePassword( zCurrentPassword ) ) |
120 |
116 |
|
{ |
121 |
117 |
|
return null; |
|
@@ -131,7 +127,7 @@ |
131 |
127 |
|
{ |
132 |
128 |
|
throw new DisplayableRuntimeException( zError ); |
133 |
129 |
|
} |
134 |
|
- |
User zUser = getUserByEmailFromCurrentDS( pLogonEmail ); |
|
130 |
+ |
SecurityUser<PO> zUser = getUserByEmailFromCurrentDS( pLogonEmail ); |
135 |
131 |
|
return createView( zUser, false ); |
136 |
132 |
|
} |
137 |
133 |
|
|
|
@@ -143,7 +139,7 @@ |
143 |
139 |
|
if ( null == (zError = cursoryPasswordCheck( pPassword, SecurityUserViewNames.aCurrentPassword )) ) |
144 |
140 |
|
{ |
145 |
141 |
|
zError = "Invalid Credentials"; |
146 |
|
- |
User zUser = getUserByEmailFromMasterDS( pLogonEmail ); |
|
142 |
+ |
SecurityUser<PO> zUser = getUserByEmailFromMasterDS( pLogonEmail ); |
147 |
143 |
|
if ( zUser != null ) |
148 |
144 |
|
{ |
149 |
145 |
|
if ( zUser.validatePassword( pPassword ) ) |
|
@@ -160,7 +156,7 @@ |
160 |
156 |
|
{ |
161 |
157 |
|
try |
162 |
158 |
|
{ |
163 |
|
- |
User zUser = getUserByEmailFromMasterDS( pLogonEmail ); |
|
159 |
+ |
SecurityUser<PO> zUser = getUserByEmailFromMasterDS( pLogonEmail ); |
164 |
160 |
|
if ( zUser != null ) |
165 |
161 |
|
{ |
166 |
162 |
|
return updateLoggedInUserFromMasterDS( zUser ); |
|
@@ -173,21 +169,10 @@ |
173 |
169 |
|
return null; |
174 |
170 |
|
} |
175 |
171 |
|
|
176 |
|
- |
public SecurityUserView switchRestrictedResources( SecurityRestrictedResourceView pRestrictedResourceView ) |
177 |
|
- |
{ |
178 |
|
- |
User zUser = CurrentUserAccessor.get().getRequiredUser(); |
179 |
|
- |
RestrictedResource zRestrictedResource = (RestrictedResource) getNotUsDataProvider( RestrictedResourceView.class ).getExistingPO( DataStoreLocator.get().getUnfilteredFinder(), (RestrictedResourceView)pRestrictedResourceView ); |
180 |
|
- |
if ( zRestrictedResource == null ) |
181 |
|
- |
{ |
182 |
|
- |
throw new DisplayableRuntimeException( "RestrictedResourceNotFound", pRestrictedResourceView.toString() ); |
183 |
|
- |
} |
184 |
|
- |
UserRestrictedResourcePair zPair = zUser.loginToRestrictedResourceIfAcceptable( zRestrictedResource ); |
185 |
|
- |
return finiUserLogin( zPair.getUser(), zPair.getRestrictedResource() ); |
186 |
|
- |
} |
|
172 |
+ |
abstract public SecurityUserView switchRestrictedResources( SecurityRestrictedResourceView pRestrictedResourceView ); |
187 |
173 |
|
|
188 |
|
- |
private SecurityUserView updateLoggedInUserFromMasterDS( User pUser ) |
|
174 |
+ |
private SecurityUserView updateLoggedInUserFromMasterDS( SecurityUser<PO> pUser ) |
189 |
175 |
|
{ |
190 |
|
- |
|
191 |
176 |
|
if ( !pUser.isDemo() ) |
192 |
177 |
|
{ |
193 |
178 |
|
initializeRealDB(); |
|
@@ -210,7 +195,7 @@ |
210 |
195 |
|
{ |
211 |
196 |
|
zNextIndex = 0; |
212 |
197 |
|
} |
213 |
|
- |
User zUser = getUserByEmailFromCurrentDS( mDemoUserEmails[zNextIndex] ); |
|
198 |
+ |
SecurityUser<PO> zUser = getUserByEmailFromCurrentDS( mDemoUserEmails[zNextIndex] ); |
214 |
199 |
|
if ( zUser != null ) |
215 |
200 |
|
{ |
216 |
201 |
|
zUser.setDemo(); |
|
@@ -236,59 +221,25 @@ |
236 |
221 |
|
} |
237 |
222 |
|
} |
238 |
223 |
|
|
239 |
|
- |
public SecurityUserView currentLoggedInUserView() |
240 |
|
- |
{ |
241 |
|
- |
return CurrentUserAccessor.get().getUserView( getDefaultUserLoginEmail() ); |
242 |
|
- |
} |
|
224 |
+ |
abstract public SecurityUserView<VO> currentLoggedInUserView(); |
243 |
225 |
|
|
244 |
|
- |
public void logoutUser() |
245 |
|
- |
{ |
246 |
|
- |
CurrentUserAccessor.get().logout(); |
247 |
|
- |
CurrentRestrictedResourceAccessor.get().logout(); |
248 |
|
- |
} |
249 |
|
- |
|
250 |
|
- |
private SecurityUserView finiUserLogin( User pUser ) |
251 |
|
- |
{ |
252 |
|
- |
return finiUserLogin( pUser, CurrentRestrictedResourceAccessor.get().getOptionalRestrictedResource() ); |
253 |
|
- |
} |
|
226 |
+ |
abstract public void logoutUser(); |
254 |
227 |
|
|
255 |
|
- |
private SecurityUserView finiUserLogin( User pUser, RestrictedResource pRestrictedResource ) |
256 |
|
- |
{ |
257 |
|
- |
UserRestrictedResourcePair zUserRestrictedResourcePair = pUser.getLoginRestrictedResource( pRestrictedResource ); |
258 |
|
- |
User zUser = zUserRestrictedResourcePair.getUser(); |
259 |
|
- |
RestrictedResource zRestrictedResource = zUserRestrictedResourcePair.getRestrictedResource(); |
260 |
|
- |
CurrentRestrictedResourceAccessor zRestrictedResourceAccessor = CurrentRestrictedResourceAccessor.get(); |
261 |
|
- |
zRestrictedResourceAccessor.updateRestrictedResource( zRestrictedResource ); |
262 |
|
- |
if ( !zRestrictedResource.equals( zUser.getLastRestrictedResource() ) ) |
263 |
|
- |
{ |
264 |
|
- |
Transaction zTransaction = zUser.getFinder().createTransaction(); |
265 |
|
- |
zUser = zUser.copyInto( zTransaction ); |
266 |
|
- |
zUser.setLastRestrictedResource( zRestrictedResource ); |
267 |
|
- |
zTransaction.commit(); |
268 |
|
- |
} |
269 |
|
- |
zRestrictedResourceAccessor.updateRestrictedResource( zRestrictedResource ); |
270 |
|
- |
UserView zUserView = CurrentUserAccessor.get().updateUser( zUser ); |
271 |
|
- |
zUserView.setCurrentRestrictedResource( zRestrictedResourceAccessor.getRestrictedResourceView() ); |
272 |
|
- |
if ( !zUser.canAccessAllRestrictedResources() ) |
273 |
|
- |
{ |
274 |
|
- |
zUserView.setAlternateRestrictedResourceOptions( convertToRestrictedResourceOptions( zUser.getAlternateRestrictedResourceOptions( zRestrictedResource ) ) ); |
275 |
|
- |
} |
276 |
|
- |
return zUserView; |
277 |
|
- |
} |
|
228 |
+ |
abstract protected SecurityUserView finiUserLogin( SecurityUser<PO> pUser ); |
278 |
229 |
|
|
279 |
|
- |
private User getUserByEmailFromMasterDS( String pLogonEmail ) |
|
230 |
+ |
private SecurityUser<PO> getUserByEmailFromMasterDS( String pLogonEmail ) |
280 |
231 |
|
{ |
281 |
232 |
|
return getUserByEmail( ServerContext.getMasterServerStore().get( DataStore.class ).getUnfilteredFinder(), pLogonEmail ); |
282 |
233 |
|
} |
283 |
234 |
|
|
284 |
|
- |
private User getUserByEmailFromCurrentDS( String pLogonEmail ) |
|
235 |
+ |
private SecurityUser<PO> getUserByEmailFromCurrentDS( String pLogonEmail ) |
285 |
236 |
|
{ |
286 |
237 |
|
return getUserByEmail( DataStoreLocator.get().getUnfilteredFinder(), pLogonEmail ); |
287 |
238 |
|
} |
288 |
239 |
|
|
289 |
|
- |
private User getUserByEmail( Finder pFinder, String pLogonEmail ) |
|
240 |
+ |
private SecurityUser<PO> getUserByEmail( Finder pFinder, String pLogonEmail ) |
290 |
241 |
|
{ |
291 |
|
- |
User zUser = pFinder.findOne( User.class, WCF.isEqual( User.CD_LogonEmail, pLogonEmail ) ); |
|
242 |
+ |
SecurityUser<PO> zUser = findUserByEmail( pFinder, pLogonEmail ); |
292 |
243 |
|
if ( isUserDemo( zUser ) ) |
293 |
244 |
|
{ |
294 |
245 |
|
zUser.setDemo(); |
|
@@ -296,30 +247,7 @@ |
296 |
247 |
|
return zUser; |
297 |
248 |
|
} |
298 |
249 |
|
|
299 |
|
- |
private AlternateRestrictedResourceOption[] convertToRestrictedResourceOptions( RestrictedResource[] pRestrictedResources ) |
300 |
|
- |
{ |
301 |
|
- |
AlternateRestrictedResourceOption[] rv = new AlternateRestrictedResourceOption[pRestrictedResources.length]; |
302 |
|
- |
PoServerVoDataProvider<RestrictedResourceView> zRestrictedResourceViewDP = getNotUsDataProvider( RestrictedResourceView.class ); |
303 |
|
- |
for ( int i = 0; i < pRestrictedResources.length; i++ ) |
304 |
|
- |
{ |
305 |
|
- |
rv[i] = zRestrictedResourceViewDP.createView( pRestrictedResources[i], false ); |
306 |
|
- |
} |
307 |
|
- |
Arrays.sort( rv ); |
308 |
|
- |
return rv; |
309 |
|
- |
} |
310 |
|
- |
|
311 |
|
- |
@Override |
312 |
|
- |
protected WhereClause augment_getMatchingVOs( WhereClause pWhereClause ) |
313 |
|
- |
{ |
314 |
|
- |
User zUser = CurrentUserAccessor.get().getRequiredUser(); |
315 |
|
- |
if ( !zUser.canAccessAllRestrictedResources() ) // If no user it will blow up with a null pointer exception which is appropriate. |
316 |
|
- |
{ |
317 |
|
- |
pWhereClause = WCF.and( pWhereClause, User.getLimitToCurrentRestrictedResourceAndVisible() ); // Add filter to where clause to only select based on RestrictedResource. |
318 |
|
- |
} |
319 |
|
- |
return super.augment_getMatchingVOs( pWhereClause ); |
320 |
|
- |
} |
321 |
|
- |
|
322 |
|
- |
private boolean isUserDemo( User pUser ) |
|
250 |
+ |
private boolean isUserDemo( SecurityUser<PO> pUser ) |
323 |
251 |
|
{ |
324 |
252 |
|
return ((pUser != null) && mSetOfDemoUserEmails.contains( Utils.deNull( pUser.getLogonEmail() ).toLowerCase() )); |
325 |
253 |
|
} |
|
@@ -345,4 +273,6 @@ |
345 |
273 |
|
{ |
346 |
274 |
|
DataLoader.INSTANCE.loadDemoData(); |
347 |
275 |
|
} |
|
276 |
+ |
|
|
277 |
+ |
abstract protected SecurityUser<PO> findUserByEmail( Finder pFinder, String pLogonEmail ); |
348 |
278 |
|
} |