-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdevpi_mirror_index_acl.py
36 lines (30 loc) · 1.08 KB
/
devpi_mirror_index_acl.py
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
from devpi_server.model import ensure_acl_list
from devpi_server.model import get_principals
from pluggy import HookimplMarker
server_hookimpl = HookimplMarker("devpiserver")
@server_hookimpl
def devpiserver_add_parser_options(parser):
parser.addoption(
"--acl-mirror-index-create", type=str, metavar="SPEC",
action="store", default=None,
help="specify which users/groups may create mirror indexes.")
@server_hookimpl
def devpiserver_auth_denials(request, acl, user, stage):
if request.method != 'PUT':
return
if request.context.index is None:
return
if request.json.get('type') != 'mirror':
return
xom = request.registry['xom']
if xom.config.args.acl_mirror_index_create is None:
return
principals = get_principals(ensure_acl_list(
xom.config.args.acl_mirror_index_create))
result = []
for (_, principal, permission) in acl:
if permission != "index_create":
continue
if principal not in principals:
result.append((principal, permission))
return tuple(result)