Subversion Repositories SmartDukaan

Rev

Rev 2022 | Rev 7362 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
1050 rajveer 1
package in.shop2020.content.security;
2
 
3
import in.shop2020.metamodel.core.EntityState;
4
import in.shop2020.metamodel.core.EntityStatus;
5
import in.shop2020.storage.bdb.StorageManager;
6
import in.shop2020.util.Utils;
7
 
8
import java.io.File;
9
import java.util.ArrayList;
10
import java.util.Collection;
11
import java.util.HashMap;
12
import java.util.List;
13
import java.util.Map;
14
import java.util.Set;
15
 
16
import javax.xml.parsers.DocumentBuilder;
17
import javax.xml.parsers.DocumentBuilderFactory;
18
import javax.xml.xpath.XPath;
19
import javax.xml.xpath.XPathConstants;
20
import javax.xml.xpath.XPathExpressionException;
21
import javax.xml.xpath.XPathFactory;
22
 
23
import org.w3c.dom.Document;
24
import org.w3c.dom.Element;
25
import org.w3c.dom.NodeList;
26
import org.xml.sax.InputSource;
27
 
1153 rajveer 28
 
29
/**
30
 * Singleton class for managing users.
31
 * 
32
 * @author rajveer
33
 *
34
 */
1050 rajveer 35
public class UserManager {
36
 
37
	private static UserManager userManager;
38
	private Map<String, User> users;
39
	private String admin = "admin";
40
	static{
41
		synchronized(UserManager.class){
42
			userManager = new UserManager();
43
		}
44
	}
45
 
46
	private UserManager(){
47
		//TODO Load initial list of users
48
		users = new HashMap<String, User>();
49
		this.loadUsers();
50
//		System.out.println(users);
51
//		users.put("vrinda", new User("vrinda", "vrinda", Role.EDITOR));
52
//		users.put("smriti", new User("smriti", "smriti", Role.DEVELOPER));
53
//		users.put("priyanka", new User("priyanka", "priyanka", Role.DEVELOPER));
54
//		users.put("rajveer", new User("rajveer", "rajveer", Role.ADMIN));
55
 
56
	}
57
 
58
	public static void main(String[] args){
59
		System.out.println(UserManager.getUserManager().getAllUsers());
60
	}
61
 
1153 rajveer 62
	/**
63
	 * Read the xml file and populate current users with their roles.
64
	 */
1050 rajveer 65
	private void loadUsers() {
66
	       String xmlFile = Utils.CONTENT_DB_PATH + "definitions" + File.separator + "users.xml";
67
	       File file = new File(xmlFile);
68
	       if(file.exists()){
69
	    	   try{
70
				 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
71
			     DocumentBuilder builder = factory.newDocumentBuilder();
72
			     Document doc = builder.parse(xmlFile);
73
			     NodeList list = doc.getElementsByTagName("User");
74
			     for(int i=0; i<list.getLength(); i++) {
75
			       Element element = (Element)list.item(i);
76
			       String name = element.getElementsByTagName("Username").item(0).getTextContent();
77
			       String password = element.getElementsByTagName("Password").item(0).getTextContent();
78
					int roleId = Integer.parseInt(element.getElementsByTagName("Role").item(0).getTextContent());
79
 
80
					Role role = Role.DEVELOPER;
81
					switch (roleId) {
82
					case 0:
83
						role = Role.DEVELOPER;
84
						break;
85
 
86
					case 1:
87
						role = Role.EDITOR;
88
						break;
89
 
90
					case 2:
91
						role = Role.ADMIN;
92
						admin = name;
93
						break;
7286 amit.gupta 94
 
95
					case 3:
96
						role = Role.REVIEWWRITER;
97
						break;
98
 
99
					case 4:
100
						role = Role.REVIEWADMIN;
101
						break;
1050 rajveer 102
					default:
103
						break;
104
					}
105
					User user = new User(name, password, role);
106
					users.put(name, user);
107
					System.out.println(name +password + role);
108
 
109
			     }
110
	    	   }catch(Exception ex){
111
 
112
	    	   }
113
	       }
114
	}
1153 rajveer 115
 
116
	/**
117
	 * Method no more used.
118
	 */
1050 rajveer 119
	private void loadUsers1(){
120
		InputSource inputSource = new InputSource(Utils.CONTENT_DB_PATH + "definitions" + File.separator + "users.xml");
121
		XPath xpath = XPathFactory.newInstance().newXPath();
122
 
123
		String expression = "/Definition";
124
		NodeList nodes = null;
125
		try {
126
			nodes = (NodeList) xpath.evaluate(expression, inputSource,	XPathConstants.NODESET);
127
		} catch(XPathExpressionException xpee) {
128
 
129
		}
130
 
131
		System.out.println(nodes);
132
 
133
		for(int i=nodes.getLength()-1; i>=0; i--) {
134
			System.out.println(nodes.item(i));
135
 
136
			System.out.println(nodes.getLength());
137
 
138
			Element userInfo = (Element) nodes.item(i);
139
 
140
			String name = userInfo.getElementsByTagName("Username").item(0).getTextContent();
141
			String password = userInfo.getElementsByTagName("Password").item(0).getTextContent();
142
			int roleId = Integer.parseInt(userInfo.getElementsByTagName("role").item(0).getTextContent());
143
			Role role = Role.DEVELOPER;
144
 
145
			switch (roleId) {
146
			case 0:
147
				role = Role.DEVELOPER;
148
				break;
149
 
150
			case 1:
151
				role = Role.EDITOR;
152
				break;
153
 
154
			case 2:
155
				role = Role.ADMIN;
156
				break;
157
 
158
			default:
159
				break;
160
			}
161
			User user = new User(name, password, role);
162
			users.put(name, user);
163
		}
164
 
165
	}
166
 
1153 rajveer 167
	/**
168
	 * 
169
	 * @return Singleton instance of user manager
170
	 */
1050 rajveer 171
	public static UserManager getUserManager(){
172
		return userManager;
173
	}
174
 
1153 rajveer 175
	/**
176
	 * 
177
	 * @return All users with roles.
178
	 */
1050 rajveer 179
	public Collection<User> getAllUsers(){
180
		Collection<User> allUsers = users.values();
181
		return allUsers;
182
	}
183
 
184
 
1153 rajveer 185
	/**
186
	 * 
187
	 * @return Names of all users.
188
	 */
1050 rajveer 189
	public Set<String> getAllUserNames(){
190
		Set<String> allUsers = users.keySet();
191
		return allUsers;
192
	}
193
 
1153 rajveer 194
	/**
195
	 * 
196
	 * @return Name of the admin.
197
	 */
1050 rajveer 198
	public String getAdminName(){
199
		return this.admin;
200
	}
201
 
1153 rajveer 202
	/**
203
	 * 
204
	 * @param role
205
	 * @return all users for a particular role
206
	 */
1050 rajveer 207
	public List<User> getAllUsersForRole(Role role){
208
		Collection<User> allUsers = users.values();
209
		List<User> usersForRole = new ArrayList<User>();
210
		for(User user: allUsers){
211
			if(user.getRole() == role){
212
				usersForRole.add(user);
213
			}
214
		}
215
		return usersForRole;
216
	}
217
 
218
 
1153 rajveer 219
	/**
220
	 * Create a new user.
221
	 * @param username
222
	 * @param password
223
	 * @param role
224
	 * @return false if user already exists else true 
225
	 */
1050 rajveer 226
	public boolean createUser(String username, String password, Role role){
227
		User user = new User(username, password, role);
228
		if(users.containsKey(username)){
229
			return false;
230
		}
231
		users.put(username, user);
232
		return true;
233
	}
234
 
1153 rajveer 235
	/**
236
	 * Authenticate user
237
	 * @param username
238
	 * @param password
239
	 * @return true if user is authenticated else false
240
	 */
1050 rajveer 241
	public boolean authenticateUser(String username, String password){
242
		User user = users.get(username);
243
		if(user != null && user.getPassword().equals(password)){
244
			return true;	
245
		}
246
		return false;
247
	}
248
 
1153 rajveer 249
	/**
250
	 * Get user for given username
251
	 * @param username
252
	 * @return User
253
	 */
1050 rajveer 254
	public User getUser(String username){
255
		return users.get(username);
256
	}
257
 
1153 rajveer 258
	/**
259
	 * 
260
	 * @param username
261
	 * @return Role
262
	 */
1050 rajveer 263
	public Role getUserRole(String username){
264
		return users.get(username).getRole();
265
	}
266
 
1153 rajveer 267
	/**
268
	 * Checks weather user have permission to view the entity?
269
	 * 
270
	 * @param username
271
	 * @param entityId
272
	 * @return
273
	 */
1050 rajveer 274
	public boolean canView(String username, long entityId){
275
		return RoleManager.getRoleManager().hasPermission(userManager.getUserRole(username), Action.VIEW);
276
	}
277
 
1153 rajveer 278
	/**
279
	 * 
280
	 * @param username
281
	 * @param entityId
282
	 * @return
283
	 */
1050 rajveer 284
	public boolean canDelete(String username, long entityId){
285
		if(RoleManager.getRoleManager().hasPermission(userManager.getUserRole(username), Action.DELETE)){
286
			EntityState state = StorageManager.getStorageManager().getEntityMetadata(entityId);
287
			if(state.getStatus() != EntityStatus.READY){
288
				return true;
289
			}
290
		}
291
		return false;
292
	}
293
 
1153 rajveer 294
	/**
295
	 * 
296
	 * @param username
297
	 * @param entityId
298
	 * @return
299
	 */
1050 rajveer 300
	public boolean canEdit(String username, long entityId){
301
		if(RoleManager.getRoleManager().hasPermission(userManager.getUserRole(username), Action.EDIT)){
302
			EntityState state = StorageManager.getStorageManager().getEntityMetadata(entityId);
303
			if(state.getStatus() ==  EntityStatus.ASSIGNED &&  state.getAssignedTo().equalsIgnoreCase(username)){
304
				return true;
305
			}
306
		}
307
		return false;
308
	}
309
 
1153 rajveer 310
	/**
311
	 * 
312
	 * @param username
313
	 * @param entityId
314
	 * @return
315
	 */
1050 rajveer 316
	public boolean canAssign(String username, long entityId){
317
		if(RoleManager.getRoleManager().hasPermission(userManager.getUserRole(username), Action.ASSIGN)){
2022 rajveer 318
		    return true;
319
		    /* Now content editor will be able to change status from ready to non ready
1050 rajveer 320
			EntityState state = StorageManager.getStorageManager().getEntityMetadata(entityId);
321
			if(state.getStatus() !=  EntityStatus.READY){
322
				return true;
2022 rajveer 323
			}
324
			else{
1050 rajveer 325
				if(userManager.getUserRole(username) == Role.ADMIN){
326
					return true;
327
				}
328
			}
2022 rajveer 329
			*/
1050 rajveer 330
		}
331
		return false;
332
	}
333
 
1153 rajveer 334
	/**
335
	 * 
336
	 * @param username
337
	 * @param entityId
338
	 * @return
339
	 */
1050 rajveer 340
	public boolean canComplete(String username, long entityId){
341
		if(RoleManager.getRoleManager().hasPermission(userManager.getUserRole(username), Action.COMPLETE)){
342
			EntityState state = StorageManager.getStorageManager().getEntityMetadata(entityId);
343
			if(state.getStatus() == EntityStatus.ASSIGNED && state.getAssignedTo().equalsIgnoreCase(username)){
344
				return true;
345
			}
346
		}
347
		return false;
348
	}
349
 
1153 rajveer 350
	/**
351
	 * 
352
	 * @param username
353
	 * @return
354
	 */
1050 rajveer 355
	public boolean canCreate(String username){
356
		return RoleManager.getRoleManager().hasPermission(userManager.getUserRole(username), Action.CREATE);
357
	}
358
 
1153 rajveer 359
	/**
360
	 * 
361
	 * @param username
362
	 * @param entityId
363
	 * @return
364
	 */
1050 rajveer 365
	public boolean canMarkReady(String username, long entityId){
366
		if(RoleManager.getRoleManager().hasPermission(userManager.getUserRole(username), Action.READY)){
367
		EntityState state = StorageManager.getStorageManager().getEntityMetadata(entityId);
368
			if(state.getStatus() ==  EntityStatus.COMPLETE){
369
				return true;
370
			}
371
		}
372
		return false;
373
	}
374
 
7286 amit.gupta 375
	public boolean canApproveReview(String username){
376
		return RoleManager.getRoleManager().hasPermission(userManager.getUserRole(username), Action.REVIEWAPPROVE);
377
	}
378
 
379
	public boolean canPublishReview(String username){
380
		return RoleManager.getRoleManager().hasPermission(userManager.getUserRole(username), Action.REVIEWPUBLISH);
381
	}
382
 
383
	public boolean canPhaseOutReview(String username){
384
		return RoleManager.getRoleManager().hasPermission(userManager.getUserRole(username), Action.REVIEWPHASEDOUT);
385
	}
386
 
387
	public boolean canCreateReview(String username){
388
		return RoleManager.getRoleManager().hasPermission(userManager.getUserRole(username), Action.REVIEWADD);
389
	}
390
 
391
	public boolean canAddRemoveReview(String username){
392
		return RoleManager.getRoleManager().hasPermission(userManager.getUserRole(username), Action.REVIEWADDREMOVE);
393
	}
394
 
395
	public boolean canRemoveReview(String username){
396
		return RoleManager.getRoleManager().hasPermission(userManager.getUserRole(username), Action.REVIEWREMOVE);
397
	}
398
 
399
	public boolean canOrderReview(String username){
400
		return RoleManager.getRoleManager().hasPermission(userManager.getUserRole(username), Action.REVIEWREMOVE);
401
	}
402
 
403
	public boolean canAddDeleteReviewSourceList(String username){
404
		return RoleManager.getRoleManager().hasPermission(userManager.getUserRole(username), Action.REVIEWSOURCELISTADDDELETE);
405
	}
406
 
407
 
408
 
1050 rajveer 409
	/*
410
	public boolean canView(String username, long entityId){
411
		return RoleManager.getRoleManager().hasPermission(userManager.getUserRole(username), Action.VIEW);
412
	}
413
 
414
	public boolean canEdit(String username, long entityId){
415
		if(RoleManager.getRoleManager().hasPermission(userManager.getUserRole(username), Action.EDIT)){
416
			EntityState state = StorageManager.getStorageManager().getEntityMetadata(entityId);
417
			if(state.getStatus() ==  EntityStatus.)
418
		}
419
		return false;
420
	}
421
 
422
	public boolean canDelete(String username, long entityId){
423
		return RoleManager.getRoleManager().hasPermission(userManager.getUserRole(username), Action.DELETE);
424
	}
425
 
426
	public boolean canAssign(String username, long entityId){
427
		return RoleManager.getRoleManager().hasPermission(userManager.getUserRole(username), Action.ASSIGN);
428
	}
429
	public boolean canComplete(String username, long entityId){
430
		return RoleManager.getRoleManager().hasPermission(userManager.getUserRole(username), Action.COMPLETE);
431
	}
432
	public boolean canMarkReady(String username, long entityId){
433
		return RoleManager.getRoleManager().hasPermission(userManager.getUserRole(username), Action.READY);
434
	}
435
	public boolean canCreate(String username, long entityId){
436
		return RoleManager.getRoleManager().hasPermission(userManager.getUserRole(username), Action.CREATE);
437
	}
438
*/
439
}