Subversion Repositories SmartDukaan

Rev

Rev 1061 | Rev 2022 | 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;
94
 
95
					default:
96
						break;
97
					}
98
					User user = new User(name, password, role);
99
					users.put(name, user);
100
					System.out.println(name +password + role);
101
 
102
			     }
103
	    	   }catch(Exception ex){
104
 
105
	    	   }
106
	       }
107
	}
1153 rajveer 108
 
109
	/**
110
	 * Method no more used.
111
	 */
1050 rajveer 112
	private void loadUsers1(){
113
		InputSource inputSource = new InputSource(Utils.CONTENT_DB_PATH + "definitions" + File.separator + "users.xml");
114
		XPath xpath = XPathFactory.newInstance().newXPath();
115
 
116
		String expression = "/Definition";
117
		NodeList nodes = null;
118
		try {
119
			nodes = (NodeList) xpath.evaluate(expression, inputSource,	XPathConstants.NODESET);
120
		} catch(XPathExpressionException xpee) {
121
 
122
		}
123
 
124
		System.out.println(nodes);
125
 
126
		for(int i=nodes.getLength()-1; i>=0; i--) {
127
			System.out.println(nodes.item(i));
128
 
129
			System.out.println(nodes.getLength());
130
 
131
			Element userInfo = (Element) nodes.item(i);
132
 
133
			String name = userInfo.getElementsByTagName("Username").item(0).getTextContent();
134
			String password = userInfo.getElementsByTagName("Password").item(0).getTextContent();
135
			int roleId = Integer.parseInt(userInfo.getElementsByTagName("role").item(0).getTextContent());
136
			Role role = Role.DEVELOPER;
137
 
138
			switch (roleId) {
139
			case 0:
140
				role = Role.DEVELOPER;
141
				break;
142
 
143
			case 1:
144
				role = Role.EDITOR;
145
				break;
146
 
147
			case 2:
148
				role = Role.ADMIN;
149
				break;
150
 
151
			default:
152
				break;
153
			}
154
			User user = new User(name, password, role);
155
			users.put(name, user);
156
		}
157
 
158
	}
159
 
1153 rajveer 160
	/**
161
	 * 
162
	 * @return Singleton instance of user manager
163
	 */
1050 rajveer 164
	public static UserManager getUserManager(){
165
		return userManager;
166
	}
167
 
1153 rajveer 168
	/**
169
	 * 
170
	 * @return All users with roles.
171
	 */
1050 rajveer 172
	public Collection<User> getAllUsers(){
173
		Collection<User> allUsers = users.values();
174
		return allUsers;
175
	}
176
 
177
 
1153 rajveer 178
	/**
179
	 * 
180
	 * @return Names of all users.
181
	 */
1050 rajveer 182
	public Set<String> getAllUserNames(){
183
		Set<String> allUsers = users.keySet();
184
		return allUsers;
185
	}
186
 
1153 rajveer 187
	/**
188
	 * 
189
	 * @return Name of the admin.
190
	 */
1050 rajveer 191
	public String getAdminName(){
192
		return this.admin;
193
	}
194
 
1153 rajveer 195
	/**
196
	 * 
197
	 * @param role
198
	 * @return all users for a particular role
199
	 */
1050 rajveer 200
	public List<User> getAllUsersForRole(Role role){
201
		Collection<User> allUsers = users.values();
202
		List<User> usersForRole = new ArrayList<User>();
203
		for(User user: allUsers){
204
			if(user.getRole() == role){
205
				usersForRole.add(user);
206
			}
207
		}
208
		return usersForRole;
209
	}
210
 
211
 
1153 rajveer 212
	/**
213
	 * Create a new user.
214
	 * @param username
215
	 * @param password
216
	 * @param role
217
	 * @return false if user already exists else true 
218
	 */
1050 rajveer 219
	public boolean createUser(String username, String password, Role role){
220
		User user = new User(username, password, role);
221
		if(users.containsKey(username)){
222
			return false;
223
		}
224
		users.put(username, user);
225
		return true;
226
	}
227
 
1153 rajveer 228
	/**
229
	 * Authenticate user
230
	 * @param username
231
	 * @param password
232
	 * @return true if user is authenticated else false
233
	 */
1050 rajveer 234
	public boolean authenticateUser(String username, String password){
235
		User user = users.get(username);
236
		if(user != null && user.getPassword().equals(password)){
237
			return true;	
238
		}
239
		return false;
240
	}
241
 
1153 rajveer 242
	/**
243
	 * Get user for given username
244
	 * @param username
245
	 * @return User
246
	 */
1050 rajveer 247
	public User getUser(String username){
248
		return users.get(username);
249
	}
250
 
1153 rajveer 251
	/**
252
	 * 
253
	 * @param username
254
	 * @return Role
255
	 */
1050 rajveer 256
	public Role getUserRole(String username){
257
		return users.get(username).getRole();
258
	}
259
 
1153 rajveer 260
	/**
261
	 * Checks weather user have permission to view the entity?
262
	 * 
263
	 * @param username
264
	 * @param entityId
265
	 * @return
266
	 */
1050 rajveer 267
	public boolean canView(String username, long entityId){
268
		return RoleManager.getRoleManager().hasPermission(userManager.getUserRole(username), Action.VIEW);
269
	}
270
 
1153 rajveer 271
	/**
272
	 * 
273
	 * @param username
274
	 * @param entityId
275
	 * @return
276
	 */
1050 rajveer 277
	public boolean canDelete(String username, long entityId){
278
		if(RoleManager.getRoleManager().hasPermission(userManager.getUserRole(username), Action.DELETE)){
279
			EntityState state = StorageManager.getStorageManager().getEntityMetadata(entityId);
280
			if(state.getStatus() != EntityStatus.READY){
281
				return true;
282
			}
283
		}
284
		return false;
285
	}
286
 
1153 rajveer 287
	/**
288
	 * 
289
	 * @param username
290
	 * @param entityId
291
	 * @return
292
	 */
1050 rajveer 293
	public boolean canEdit(String username, long entityId){
294
		if(RoleManager.getRoleManager().hasPermission(userManager.getUserRole(username), Action.EDIT)){
295
			EntityState state = StorageManager.getStorageManager().getEntityMetadata(entityId);
296
			if(state.getStatus() ==  EntityStatus.ASSIGNED &&  state.getAssignedTo().equalsIgnoreCase(username)){
297
				return true;
298
			}
299
		}
300
		return false;
301
	}
302
 
1153 rajveer 303
	/**
304
	 * 
305
	 * @param username
306
	 * @param entityId
307
	 * @return
308
	 */
1050 rajveer 309
	public boolean canAssign(String username, long entityId){
310
		if(RoleManager.getRoleManager().hasPermission(userManager.getUserRole(username), Action.ASSIGN)){
311
			EntityState state = StorageManager.getStorageManager().getEntityMetadata(entityId);
312
			if(state.getStatus() !=  EntityStatus.READY){
313
				return true;
314
			}else{
315
				if(userManager.getUserRole(username) == Role.ADMIN){
316
					return true;
317
				}
318
			}
319
		}
320
		return false;
321
	}
322
 
1153 rajveer 323
	/**
324
	 * 
325
	 * @param username
326
	 * @param entityId
327
	 * @return
328
	 */
1050 rajveer 329
	public boolean canComplete(String username, long entityId){
330
		if(RoleManager.getRoleManager().hasPermission(userManager.getUserRole(username), Action.COMPLETE)){
331
			EntityState state = StorageManager.getStorageManager().getEntityMetadata(entityId);
332
			if(state.getStatus() == EntityStatus.ASSIGNED && state.getAssignedTo().equalsIgnoreCase(username)){
333
				return true;
334
			}
335
		}
336
		return false;
337
	}
338
 
1153 rajveer 339
	/**
340
	 * 
341
	 * @param username
342
	 * @return
343
	 */
1050 rajveer 344
	public boolean canCreate(String username){
345
		return RoleManager.getRoleManager().hasPermission(userManager.getUserRole(username), Action.CREATE);
346
	}
347
 
1153 rajveer 348
	/**
349
	 * 
350
	 * @param username
351
	 * @param entityId
352
	 * @return
353
	 */
1050 rajveer 354
	public boolean canMarkReady(String username, long entityId){
355
		if(RoleManager.getRoleManager().hasPermission(userManager.getUserRole(username), Action.READY)){
356
		EntityState state = StorageManager.getStorageManager().getEntityMetadata(entityId);
357
			if(state.getStatus() ==  EntityStatus.COMPLETE){
358
				return true;
359
			}
360
		}
361
		return false;
362
	}
363
 
364
	/*
365
	public boolean canView(String username, long entityId){
366
		return RoleManager.getRoleManager().hasPermission(userManager.getUserRole(username), Action.VIEW);
367
	}
368
 
369
	public boolean canEdit(String username, long entityId){
370
		if(RoleManager.getRoleManager().hasPermission(userManager.getUserRole(username), Action.EDIT)){
371
			EntityState state = StorageManager.getStorageManager().getEntityMetadata(entityId);
372
			if(state.getStatus() ==  EntityStatus.)
373
		}
374
		return false;
375
	}
376
 
377
	public boolean canDelete(String username, long entityId){
378
		return RoleManager.getRoleManager().hasPermission(userManager.getUserRole(username), Action.DELETE);
379
	}
380
 
381
	public boolean canAssign(String username, long entityId){
382
		return RoleManager.getRoleManager().hasPermission(userManager.getUserRole(username), Action.ASSIGN);
383
	}
384
	public boolean canComplete(String username, long entityId){
385
		return RoleManager.getRoleManager().hasPermission(userManager.getUserRole(username), Action.COMPLETE);
386
	}
387
	public boolean canMarkReady(String username, long entityId){
388
		return RoleManager.getRoleManager().hasPermission(userManager.getUserRole(username), Action.READY);
389
	}
390
	public boolean canCreate(String username, long entityId){
391
		return RoleManager.getRoleManager().hasPermission(userManager.getUserRole(username), Action.CREATE);
392
	}
393
*/
394
}