Start fleshing out support for robots.

This commit is contained in:
yackob03 2013-11-20 16:13:03 -05:00
parent f8ae8ed6cd
commit 026ed7ffb4
5 changed files with 176 additions and 28 deletions

View file

@ -15,7 +15,7 @@ from data.queue import dockerfile_build_queue
from data.plans import USER_PLANS, BUSINESS_PLANS, get_plan
from app import app
from util.email import send_confirmation_email, send_recovery_email
from util.names import parse_repository_name
from util.names import parse_repository_name, format_robot_username
from util.gravatar import compute_hash
from auth.permissions import (ReadRepositoryPermission,
ModifyRepositoryPermission,
@ -1501,3 +1501,78 @@ def get_org_subscription(orgname):
})
abort(403)
def robot_view(name, password):
return {
'name': name,
'password': password,
}
@app.route('/api/user/robots', methods=['GET'])
@api_login_required
def get_user_robots():
user = current_user.db_user()
robots = model.list_entity_robots(user.username)
return jsonify({
'robots': [robot_view(name, password) for name, password in robots]
})
@app.route('/api/organization/<orgname>/robots', methods=['GET'])
@api_login_required
def get_org_robots(orgname):
permission = AdministerOrganizationPermission(orgname)
if permission.can():
robots = model.list_entity_robots(orgname)
return jsonify({
'robots': [robot_view(name, password) for name, password in robots]
})
abort(403)
@app.route('/api/user/robots/<robot_shortname>', methods=['PUT'])
@api_login_required
def create_robot(robot_shortname):
parent = current_user.db_user()
robot, password = model.create_robot(robot_shortname, parent)
resp = jsonify(robot_view(robot.username, password))
resp.status_code = 201
return resp
@app.route('/api/organization/<orgname>/robots/<robot_shortname>',
methods=['PUT'])
@api_login_required
def create_org_robot(orgname, robot_shortname):
permission = AdministerOrganizationPermission(orgname)
if permission.can():
parent = model.get_organization(orgname)
robot, password = model.create_robot(robot_shortname, parent)
resp = jsonify(robot_view(robot.username, password))
resp.status_code = 201
return resp
abort(403)
@app.route('/api/user/robots/<robot_shortname>', methods=['DELETE'])
@api_login_required
def delete_robot(robot_shortname):
parent = current_user.db_user()
model.delete_robot(format_robot_username(parent.username, robot_shortname))
return make_response('No Content', 204)
@app.route('/api/organization/<orgname>/robots/<robot_shortname>',
methods=['DELETE'])
@api_login_required
def delete_org_robot(orgname, robot_shortname):
permission = AdministerOrganizationPermission(orgname)
if permission.can():
model.delete_robot(format_robot_username(orgname, robot_shortname))
return make_response('No Content', 204)
abort(403)