Add support for org-based subscriptions
This commit is contained in:
parent
97a7cd23e7
commit
e356a10378
5 changed files with 109 additions and 35 deletions
|
@ -1076,19 +1076,19 @@ def subscription_view(stripe_subscription, used_repos):
|
|||
|
||||
@app.route('/api/user/plan', methods=['PUT'])
|
||||
@api_login_required
|
||||
def subscribe():
|
||||
# Amount in cents
|
||||
amount = 500
|
||||
|
||||
def subscribe_api():
|
||||
request_data = request.get_json()
|
||||
plan = request_data['plan']
|
||||
|
||||
token = request_data['token'] if 'token' in request_data else None
|
||||
user = current_user.db_user()
|
||||
return subscribe(user, plan, token)
|
||||
|
||||
def subscribe(user, plan, token = None):
|
||||
private_repos = model.get_private_repo_count(user.username)
|
||||
|
||||
if not user.stripe_id:
|
||||
# Create the customer and plan simultaneously
|
||||
card = request_data['token']
|
||||
card = token
|
||||
cus = stripe.Customer.create(email=user.email, plan=plan, card=card)
|
||||
user.stripe_id = cus.id
|
||||
user.save()
|
||||
|
@ -1112,18 +1112,30 @@ def subscribe():
|
|||
|
||||
else:
|
||||
cus.plan = plan
|
||||
|
||||
# User may have been a previous customer who is resubscribing
|
||||
if 'token' in request_data:
|
||||
cus.card = request_data['token']
|
||||
if token:
|
||||
cus.card = token
|
||||
|
||||
cus.save()
|
||||
|
||||
response_json = subscription_view(cus.subscription, private_repos)
|
||||
|
||||
return jsonify(response_json)
|
||||
|
||||
|
||||
@app.route('/api/organization/<orgname>/plan', methods=['PUT'])
|
||||
@api_login_required
|
||||
def subscribe_org_api(orgname):
|
||||
permission = AdministerOrganizationPermission(orgname)
|
||||
if permission.can():
|
||||
request_data = request.get_json()
|
||||
plan = request_data['plan']
|
||||
token = request_data['token'] if 'token' in request_data else None
|
||||
organization = model.get_organization(orgname)
|
||||
return subscribe(organization, plan, token)
|
||||
|
||||
abort(403)
|
||||
|
||||
|
||||
@app.route('/api/user/plan', methods=['GET'])
|
||||
@api_login_required
|
||||
def get_subscription():
|
||||
|
@ -1140,3 +1152,24 @@ def get_subscription():
|
|||
'plan': 'free',
|
||||
'usedPrivateRepos': private_repos,
|
||||
})
|
||||
|
||||
|
||||
@app.route('/api/organization/<orgname>/plan', methods=['GET'])
|
||||
@api_login_required
|
||||
def get_org_subscription(orgname):
|
||||
permission = AdministerOrganizationPermission(orgname)
|
||||
if permission.can():
|
||||
private_repos = model.get_private_repo_count(orgname)
|
||||
organization = model.get_organization(orgname)
|
||||
if organization.stripe_id:
|
||||
cus = stripe.Customer.retrieve(organization.stripe_id)
|
||||
|
||||
if cus.subscription:
|
||||
return jsonify(subscription_view(cus.subscription, private_repos))
|
||||
|
||||
return jsonify({
|
||||
'plan': 'bus-free',
|
||||
'usedPrivateRepos': private_repos,
|
||||
})
|
||||
|
||||
abort(403)
|
||||
|
|
Reference in a new issue