556
556
if req.method != "POST":
557
557
req.throw_error(req.HTTP_METHOD_NOT_ALLOWED,
558
558
"Only POST requests are valid methods to create_user.")
559
# Check if this user has CAP_MANAGEPROJECTS
559
# Check if this is allowed to manage groups
560
560
if not req.user.hasCap(caps.CAP_MANAGEGROUPS):
561
561
req.throw_error(req.HTTP_FORBIDDEN,
562
562
"You do not have permission to manage groups.")
634
634
req.content_type = "text/plain"
635
635
req.write(response)
637
# TODO: write userservice/assign_to_group
638
# Required cap: CAP_MANAGEGROUPS
639
# Assigns a user to a project group
640
# Required: loginid, groupid
637
def handle_assign_group(req, fields):
638
""" Required cap: CAP_MANAGEGROUPS
639
Assigns a user to a project group
643
if req.method != "POST":
644
req.throw_error(req.HTTP_METHOD_NOT_ALLOWED,
645
"Only POST requests are valid methods to create_user.")
646
# Check if this user is allowed to manage groups
647
if not req.user.hasCap(caps.CAP_MANAGEGROUPS):
648
req.throw_error(req.HTTP_FORBIDDEN,
649
"You do not have permission to manage groups.")
650
# Get required fields
651
login = fields.getfirst('login')
652
groupid = fields.getfirst('groupid')
653
if login is None or groupid is None:
654
req.throw_error(req.HTTP_BAD_REQUEST,
655
"Required: login, groupid")
656
groupid = int(groupid)
661
loginid = db.get_user_loginid(login)
662
except common.db.DBException, e:
663
req.throw_error(req.HTTP_BAD_REQUEST, repr(e))
665
# Add assignment to database
672
"group_member", # table
673
frozenset(["loginid", "groupid"]), # fields
675
except pg.ProgrammingError, e:
676
req.throw_error(req.HTTP_FORBIDDEN, repr(e))
678
# Rebuild the svn config file
679
# Contact the usrmgt server
680
msg = {'rebuild_svn_group_config': {}}
682
usrmgt = chat.chat(usrmgt_host, usrmgt_port, msg, usrmgt_magic)
683
except cjson.DecodeError, e:
684
req.throw_error(req.HTTP_INTERNAL_SERVER_ERROR,
685
"Could not understand usrmgt server response: %s"%e.message)
687
if 'response' not in usrmgt or usrmgt['response']=='failure':
688
req.throw_error(req.HTTP_INTERNAL_SERVER_ERROR,
689
"Failure creating repository: %s"%str(usrmgt))
692
return(cjson.encode({'response': 'okay'}))
642
694
# Map action names (from the path)
643
695
# to actual function objects