- Add model functions for working with prototypes
- Add API calls for working with prototypes - Get UI for prototypes working (minus add)
This commit is contained in:
parent
330051f7d9
commit
e17c3590a7
9 changed files with 329 additions and 1 deletions
108
endpoints/api.py
108
endpoints/api.py
|
@ -541,6 +541,113 @@ def change_organization_details(orgname):
|
|||
|
||||
abort(403)
|
||||
|
||||
def prototype_view(p):
|
||||
def user_view(u):
|
||||
return {
|
||||
'name': u.username,
|
||||
'is_robot': u.robot,
|
||||
'kind': 'user'
|
||||
}
|
||||
|
||||
def team_view(t):
|
||||
return {
|
||||
'name': t.name,
|
||||
'kind': 'team'
|
||||
}
|
||||
|
||||
return {
|
||||
'activating_user': user_view(p.activating_user),
|
||||
'delegate': user_view(p.delegate_user) if p.delegate_user else team_view(p.delegate_team),
|
||||
'role': p.role.name,
|
||||
'id': p.uuid
|
||||
}
|
||||
|
||||
@app.route('/api/organization/<orgname>/prototypes', methods=['GET'])
|
||||
@api_login_required
|
||||
def get_organization_prototype_permissions(orgname):
|
||||
permission = AdministerOrganizationPermission(orgname)
|
||||
if permission.can():
|
||||
try:
|
||||
org = model.get_organization(orgname)
|
||||
except model.InvalidOrganizationException:
|
||||
abort(404)
|
||||
|
||||
permissions = model.get_prototype_permissions(org)
|
||||
return jsonify({'prototypes': [prototype_view(p) for p in permissions]})
|
||||
|
||||
abort(403)
|
||||
|
||||
|
||||
@app.route('/api/organization/<orgname>/prototypes', methods=['POST'])
|
||||
@api_login_required
|
||||
def create_organization_prototype_permission(orgname):
|
||||
permission = AdministerOrganizationPermission(orgname)
|
||||
if permission.can():
|
||||
try:
|
||||
org = model.get_organization(orgname)
|
||||
except model.InvalidOrganizationException:
|
||||
abort(404)
|
||||
|
||||
details = request.get_json()
|
||||
activating_user = details['activating_user']['name']
|
||||
|
||||
delegate = details['delegate']
|
||||
delegate_kind = delegate['kind']
|
||||
delegate_name = delegate['name']
|
||||
|
||||
delegate_user = delegate_name if delegate_kind == 'user' else None
|
||||
delegate_team = delegate_name if delegate_kind == 'team' else None
|
||||
|
||||
role_name = details['role']
|
||||
|
||||
if not delegate_user and not delegate_team:
|
||||
abort(400)
|
||||
|
||||
prototype = model.add_prototype_permission(org, role_name, activating_user, delegate_user, delegate_team)
|
||||
return jsonify(protoype_view(prototype))
|
||||
|
||||
abort(403)
|
||||
|
||||
|
||||
@app.route('/api/organization/<orgname>/prototypes/<prototypeid>', methods=['DELETE'])
|
||||
@api_login_required
|
||||
def delete_organization_prototype_permission(orgname, prototypeid):
|
||||
permission = AdministerOrganizationPermission(orgname)
|
||||
if permission.can():
|
||||
try:
|
||||
org = model.get_organization(orgname)
|
||||
except model.InvalidOrganizationException:
|
||||
abort(404)
|
||||
|
||||
prototype = model.delete_prototype_permission(org, prototypeid)
|
||||
if not prototype:
|
||||
abort(404)
|
||||
|
||||
return make_response('Deleted', 204)
|
||||
|
||||
abort(403)
|
||||
|
||||
|
||||
@app.route('/api/organization/<orgname>/prototypes/<prototypeid>', methods=['PUT'])
|
||||
@api_login_required
|
||||
def update_organization_prototype_permission(orgname, prototypeid):
|
||||
permission = AdministerOrganizationPermission(orgname)
|
||||
if permission.can():
|
||||
try:
|
||||
org = model.get_organization(orgname)
|
||||
except model.InvalidOrganizationException:
|
||||
abort(404)
|
||||
|
||||
details = request.get_json()
|
||||
role_name = details['role']
|
||||
prototype = model.update_prototype_permission(org, prototypeid, role_name)
|
||||
if not prototype:
|
||||
abort(404)
|
||||
|
||||
return jsonify(prototype_view(prototype))
|
||||
|
||||
abort(403)
|
||||
|
||||
|
||||
@app.route('/api/organization/<orgname>/members', methods=['GET'])
|
||||
@api_login_required
|
||||
|
@ -1140,7 +1247,6 @@ def get_filedrop_url():
|
|||
'file_id': file_id
|
||||
})
|
||||
|
||||
|
||||
def role_view(repo_perm_obj):
|
||||
return {
|
||||
'role': repo_perm_obj.role.name,
|
||||
|
|
Reference in a new issue