-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathgenerate.py
More file actions
153 lines (131 loc) · 4.67 KB
/
generate.py
File metadata and controls
153 lines (131 loc) · 4.67 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
#!/usr/bin/env python3
import random
import string
import sys
import numpy
users = []
userRoles = []
roles = []
permissions = []
files = []
operations = ['read', 'write']
predsAssign = []
preds = ['enc', 'eager', 'cspNoEnforce', 'colludingProne']
def randName(n=10):
return ''.join(random.choice(string.ascii_lowercase) for _ in range(n))
def printProlog(txt):
print(':- format("{}~n", []).'.format(txt))
print(txt)
def addUser(user=None):
if user is None:
user = 'user_' + randName()
printProlog(':- addUser({}, []).'.format(user))
printProlog(':- initUserC({}).'.format(user))
users.append(user)
def deleteUser(user=None):
if user is None:
user = random.choice(users)
printProlog(':- deleteUser({}).'.format(user))
users.remove(user)
def addRole(role=None):
if role is None:
role = 'role_' + randName()
printProlog(':- addRole({}, []).'.format(role))
roles.append(role)
def deleteRole(role=None):
if role is None:
role = random.choice(roles)
printProlog(':- deleteRole({}).'.format(role))
roles.remove(role)
def addResource(user=None, file=None, threshold=None):
if user is None:
user = random.choice(users)
if file is None:
file = 'file_' + randName()
if threshold is None:
threshold = random.randint(1, 10)
printProlog(':- addResource({}, {}, [], {}).'.format(user, file, threshold))
files.append(file)
def deleteResource(file=None):
if file is None:
file = random.choice(files)
printProlog(':- deleteResource({}).'.format(file))
files.remove(file)
def assignUserToRole(user=None, role=None):
if user is None:
user = random.choice(users)
if role is None:
role = random.choice(roles)
printProlog(':- assignUserToRole({}, {}).'.format(user, role))
userRoles.append((user, role))
def revokeUserFromRole(user=None, role=None):
if user is None and role is None:
user, role = random.choice(userRoles)
if user not in users or role not in roles:
return
printProlog(':- revokeUserFromRole({}, {}).'.format(user, role))
userRoles.remove((user, role))
def assignPermissionToRole(role=None, op=None, file=None):
if role is None:
role = random.choice(roles)
if op is None:
op = []
for _ in range(random.randint(1, len(operations) - 1)):
op.append(random.choice(operations))
# op = random.choice(operations)
if file is None:
file = random.choice(files)
printProlog(':- assignPermissionToRole({}, {}, {}).'.format(role, op, file))
permissions.append((role, op, file))
def revokePermissionFromRole(role=None, op=None, file=None):
if role is None and op is None and file is None:
role, op, file = random.choice(permissions)
if role not in roles or file not in files:
return
printProlog(':- revokePermissionFromRole({}, {}, {}).'.format(role, op, file))
permissions.remove((role, op, file))
def assignPredicate(pred=None, entity=None):
if pred is None:
pred = random.choice(preds)
if entity is None:
if pred in ['enc', 'eager', 'cspNoEnforce']:
entity = random.choice(files)
elif pred == 'colludingProne':
entity = random.choice(users)
# entity = random.choice(users + roles + files)
printProlog(':- assignPredicate({}, {}).'.format(pred, entity))
predsAssign.append((pred, entity))
def revokePredicate(pred=None, entity=None):
if pred is None and entity is None:
pred, entity = random.choice(predsAssign)
printProlog(':- revokePredicate({}, {}).'.format(pred, entity))
predsAssign.remove((pred, entity))
def main():
if len(sys.argv) < 2:
print("Please, add a parameter")
return
n = int(sys.argv[1])
c = numpy.random.choice([addUser, deleteUser,
addRole, deleteRole,
addResource, deleteResource,
assignUserToRole, revokeUserFromRole,
assignPermissionToRole, revokePermissionFromRole,
assignPredicate, revokePredicate], n,
p=[
0.080, 0.040,
0.080, 0.040,
0.080, 0.040,
0.145, 0.040,
0.145, 0.040,
0.180, 0.090
])
for f in c:
try:
f()
except IndexError:
# skip
pass
printProlog(':- verifyConsistency.')
printProlog(':- printTuples.')
if __name__ == '__main__':
main()