Skip to content

Commit 178a82e

Browse files
Merge pull request #15 from HackTheOxidation/feat/AclAndRbac
Cleanup, print and rbac
2 parents 8042449 + 3c7f245 commit 178a82e

File tree

5 files changed

+95
-87
lines changed

5 files changed

+95
-87
lines changed

src/main/java/printserver/client/Client.java

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import java.util.Scanner;
99

1010
public class Client {
11+
private final static String PRIVILEGE = "You don't have the required privileges for this operation";
1112
public static void main(String[] args) {
1213

1314
try (Scanner scanner = new Scanner(System.in)) {
@@ -51,7 +52,7 @@ public static void main(String[] args) {
5152

5253
System.out.print(":> ");
5354
choice = scanner.nextInt();
54-
String printer = null;
55+
String printer;
5556

5657
switch (choice) {
5758
case 1:
@@ -61,13 +62,13 @@ public static void main(String[] args) {
6162
System.out.print("Enter the name of the printer: ");
6263
printer = scanner.next();
6364

64-
ps.print(filename, printer);
65+
if(!ps.print(filename, printer)) System.out.println(PRIVILEGE);
6566
break;
6667
case 2:
6768
System.out.print("Enter the name of the printer: ");
6869
printer = scanner.next();
6970

70-
ps.queue(printer);
71+
if(!ps.queue(printer)) System.out.println(PRIVILEGE);
7172
break;
7273
case 3:
7374
System.out.print("Enter the name of the printer: ");
@@ -76,28 +77,28 @@ public static void main(String[] args) {
7677
System.out.print("Enter the number of the job to prioritize: ");
7778
int job = scanner.nextInt();
7879

79-
ps.topQueue(printer, job);
80+
if(!ps.topQueue(printer, job)) System.out.println(PRIVILEGE);
8081
break;
8182
case 4:
82-
ps.start();
83+
if(!ps.start()) System.out.println(PRIVILEGE);
8384
break;
8485
case 5:
85-
ps.stop();
86+
if(!ps.stop()) System.out.println(PRIVILEGE);
8687
break;
8788
case 6:
88-
ps.restart();
89+
if(!ps.restart()) System.out.println(PRIVILEGE);
8990
break;
9091
case 7:
9192
System.out.print("Enter the name of the printer: ");
9293
printer = scanner.next();
9394

94-
ps.status(printer);
95+
if(!ps.status(printer)) System.out.println(PRIVILEGE);
9596
break;
9697
case 8:
9798
System.out.print("Enter the name of the printer: ");
9899
printer = scanner.next();
99100

100-
ps.readConfig(printer);
101+
if(!ps.readConfig(printer)) System.out.println(PRIVILEGE);
101102
break;
102103
case 9:
103104
System.out.print("Enter the name of the printer: ");
@@ -106,7 +107,7 @@ public static void main(String[] args) {
106107
System.out.print("Enter the configuration value to set: ");
107108
String value = scanner.next();
108109

109-
ps.setConfig(printer, value);
110+
if(!ps.setConfig(printer, value)) System.out.println(PRIVILEGE);
110111
break;
111112
case 0:
112113
System.out.println("Shutting down...");

src/main/java/printserver/common/PrintServer.java

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,21 +4,21 @@
44
import java.rmi.RemoteException;
55

66
public interface PrintServer extends Remote {
7-
void print(String filename, String printer) throws RemoteException;
7+
boolean print(String filename, String printer) throws RemoteException;
88

9-
void queue(String printer) throws RemoteException;
9+
boolean queue(String printer) throws RemoteException;
1010

11-
void topQueue(String printer, int job) throws RemoteException;
11+
boolean topQueue(String printer, int job) throws RemoteException;
1212

13-
void start() throws RemoteException;
13+
boolean start() throws RemoteException;
1414

15-
void stop() throws RemoteException;
15+
boolean stop() throws RemoteException;
1616

17-
void restart() throws RemoteException;
17+
boolean restart() throws RemoteException;
1818

19-
void status(String printer) throws RemoteException;
19+
boolean status(String printer) throws RemoteException;
2020

21-
void readConfig(String printer) throws RemoteException;
21+
boolean readConfig(String printer) throws RemoteException;
2222

23-
void setConfig(String printer, String value) throws RemoteException;
23+
boolean setConfig(String printer, String value) throws RemoteException;
2424
}

src/main/java/printserver/server/EncryptedAuthenticator.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,17 @@ protected void addUser(String username, String password) throws NoSuchAlgorithmE
3232
public PrintServer authenticate(String username, String password) throws RemoteException {
3333
try {
3434
Login login = this.authenticateLogin(username, password);
35-
if(login.isAuthenticated()) return new Proxy(db.getPriviligesForUser(username));
35+
if(login.isAuthenticated())
36+
{
37+
String role = db.getRoleForUser(username);
38+
List<String> aclPrivileges = db.getPriviligesForUser(username);
39+
List<String> rbacPrivileges = db.getPrivilegesForRole(role);
40+
System.out.println("Username: " + username);
41+
System.out.println("Role: " + role);
42+
System.out.println("ACL privileges: " + aclPrivileges);
43+
System.out.println("RBAC privileges: " + rbacPrivileges);
44+
return new Proxy(username, rbacPrivileges);
45+
}
3646
} catch (Exception e) {
3747
System.out.println("DEBUG - authenticate: " + e.getMessage());
3848
}

src/main/java/printserver/server/PrintServant.java

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,39 +10,48 @@ public PrintServant() throws RemoteException {
1010
super();
1111
}
1212

13-
public void print(String filename, String printer) throws RemoteException {
13+
public boolean print(String filename, String printer) throws RemoteException {
1414
System.out.println("Invoked print() with filename: " + filename + ", printer: " + printer);
15+
return true;
1516
}
1617

17-
public void queue(String printer) throws RemoteException {
18+
public boolean queue(String printer) throws RemoteException {
1819
System.out.println("Invoked queue() with printer: " + printer);
20+
return true;
1921
}
2022

21-
public void topQueue(String printer, int job) throws RemoteException {
23+
public boolean topQueue(String printer, int job) throws RemoteException {
2224
System.out.println("Invoked topQueue() with printer: " + printer + ", job: " + job);
25+
return true;
2326
}
2427

25-
public void start() throws RemoteException {
28+
public boolean start() throws RemoteException {
2629
System.out.println("Invoked start()");
30+
return true;
2731
}
2832

29-
public void stop() throws RemoteException {
33+
public boolean stop() throws RemoteException {
3034
System.out.println("Invoked stop()");
35+
return true;
3136
}
3237

33-
public void restart() throws RemoteException {
38+
public boolean restart() throws RemoteException {
3439
System.out.println("Invoked restart()");
40+
return true;
3541
}
3642

37-
public void status(String printer) throws RemoteException {
43+
public boolean status(String printer) throws RemoteException {
3844
System.out.println("Invoked status() with printer: " + printer);
45+
return true;
3946
}
4047

41-
public void readConfig(String printer) throws RemoteException {
48+
public boolean readConfig(String printer) throws RemoteException {
4249
System.out.println("Invoked readConfig() with printer: " + printer);
50+
return true;
4351
}
4452

45-
public void setConfig(String printer, String value) throws RemoteException {
53+
public boolean setConfig(String printer, String value) throws RemoteException {
4654
System.out.println("Invoked setConfig() with printer: " + printer + ", value: " + value);
55+
return true;
4756
}
4857
}

src/main/java/printserver/server/Proxy.java

Lines changed: 46 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -4,91 +4,79 @@
44
import java.util.List;
55

66
public class Proxy extends PrintServant{
7-
private final List<String> acl;
7+
private final List<String> permissions;
8+
private final String username;
89

9-
public Proxy(List<String> access) throws RemoteException {
10+
public Proxy(String username, List<String> permissions) throws RemoteException {
1011
super();
11-
acl = access;
12+
this.permissions = permissions;
13+
this.username = username;
1214
}
1315

1416
@Override
15-
public void print(String filename, String printer) throws RemoteException {
16-
if (acl.contains("print")) {
17-
super.print(filename, printer);
18-
} else {
19-
System.out.println("Permission for print is denied");
20-
}
17+
public boolean print(String filename, String printer) throws RemoteException {
18+
if (permissions.contains("print")) return super.print(filename, printer);
19+
System.out.println(getPermissionDenied("print"));
20+
return false;
2121
}
2222

2323
@Override
24-
public void queue(String printer) throws RemoteException {
25-
if (acl.contains("queue")) {
26-
super.queue(printer);
27-
} else {
28-
System.out.println("Permission for queue is denied");
29-
}
24+
public boolean queue(String printer) throws RemoteException {
25+
if (permissions.contains("queue")) return super.queue(printer);
26+
System.out.println(getPermissionDenied("queue"));
27+
return false;
3028
}
3129

3230
@Override
33-
public void topQueue(String printer, int job) throws RemoteException {
34-
if (acl.contains("topQueue")) {
35-
super.topQueue(printer, job);
36-
} else {
37-
System.out.println("Permission for topQueue is denied");
38-
}
31+
public boolean topQueue(String printer, int job) throws RemoteException {
32+
if (permissions.contains("topQueue")) return super.topQueue(printer, job);
33+
System.out.println(getPermissionDenied("topQueue"));
34+
return false;
3935
}
40-
36+
4137
@Override
42-
public void start() throws RemoteException {
43-
if (acl.contains("start")) {
44-
super.start();
45-
} else {
46-
System.out.println("Permission for start is denied");
47-
}
38+
public boolean start() throws RemoteException {
39+
if (permissions.contains("start")) return super.start();
40+
System.out.println(getPermissionDenied("start"));
41+
return false;
4842
}
4943

5044
@Override
51-
public void stop() throws RemoteException {
52-
if (acl.contains("stop")) {
53-
super.stop();
54-
} else {
55-
System.out.println("Permission for stop is denied");
56-
}
45+
public boolean stop() throws RemoteException {
46+
if (permissions.contains("stop")) return super.stop();
47+
System.out.println(getPermissionDenied("stop"));
48+
return false;
5749
}
5850

5951
@Override
60-
public void restart() throws RemoteException {
61-
if (acl.contains("restart")) {
62-
super.restart();
63-
} else {
64-
System.out.println("Permission for restart is denied");
65-
}
52+
public boolean restart() throws RemoteException {
53+
if (permissions.contains("restart")) return super.restart();
54+
System.out.println(getPermissionDenied("restart"));
55+
return false;
6656
}
6757

6858
@Override
69-
public void status(String printer) throws RemoteException {
70-
if (acl.contains("status")) {
71-
super.status(printer);
72-
} else {
73-
System.out.println("Permission for status is denied");
74-
}
59+
public boolean status(String printer) throws RemoteException {
60+
if (permissions.contains("status")) return super.status(printer);
61+
System.out.println(getPermissionDenied("status"));
62+
return false;
7563
}
7664

7765
@Override
78-
public void readConfig(String printer) throws RemoteException {
79-
if (acl.contains("readConfig")) {
80-
super.readConfig(printer);
81-
} else {
82-
System.out.println("Permission for readConfig is denied");
83-
}
66+
public boolean readConfig(String printer) throws RemoteException {
67+
if (permissions.contains("readConfig")) return super.readConfig(printer);
68+
System.out.println(getPermissionDenied("readConfig"));
69+
return false;
8470
}
8571

8672
@Override
87-
public void setConfig(String printer, String value) throws RemoteException {
88-
if (acl.contains("setConfig")) {
89-
super.setConfig(printer, value);
90-
} else {
91-
System.out.println("Permission for setConfig is denied");
92-
}
73+
public boolean setConfig(String printer, String value) throws RemoteException {
74+
if (permissions.contains("setConfig")) super.setConfig(printer, value);
75+
System.out.println(getPermissionDenied("setConfig"));
76+
return false;
77+
}
78+
79+
private String getPermissionDenied(String methodName){
80+
return String.format("Permission for %s is denied for user %s", methodName, username);
9381
}
9482
}

0 commit comments

Comments
 (0)