コード例 #1
0
ファイル: twitter.py プロジェクト: BlackGuyCoding/LaunchKit
def connect_app_view(request):
  twitter_handle = request.POST['twitter_handle']
  app_id = request.POST['app_id']
  app = AppStoreApp.find_by_encrypted_id(app_id)

  twitter_app_connections.create_connection(request.user, twitter_handle, app)
  return ok_response()
コード例 #2
0
ファイル: auth.py プロジェクト: yutaza/LaunchKit
def request_verification_email(request):
    email = None
    if 'email' in request.POST or not request.user.is_authenticated():
        # Should this be a separate form? Meh.
        form = ResetPasswordForm(request.POST)
        if not form.is_valid():
            return bad_request('Bad email verification request',
                               errors=form.errors)
        email = form.cleaned_data['email']

    if request.user.is_authenticated():
        unverified_emails = users.get_unverified_emails(request.user)
        if not unverified_emails:
            return bad_request('No unverified emails for this account.')

        if not email:
            email = unverified_emails[0]
        elif email not in unverified_emails:
            return bad_request('Could not find this unverified email address.')

    success = users.request_verification_email(email)
    if not success:
        return bad_request(
            'Could not request a verification email. Has the email already been verified?'
        )

    return ok_response()
コード例 #3
0
ファイル: auth.py プロジェクト: BlackGuyCoding/LaunchKit
def request_verification_email(request):
  email = None
  if 'email' in request.POST or not request.user.is_authenticated():
    # Should this be a separate form? Meh.
    form = ResetPasswordForm(request.POST)
    if not form.is_valid():
      return bad_request('Bad email verification request',
          errors=form.errors)
    email = form.cleaned_data['email']

  if request.user.is_authenticated():
    unverified_emails = users.get_unverified_emails(request.user)
    if not unverified_emails:
      return bad_request('No unverified emails for this account.')

    if not email:
      email = unverified_emails[0]
    elif email not in unverified_emails:
      return bad_request('Could not find this unverified email address.')

  success = users.request_verification_email(email)
  if not success:
    return bad_request('Could not request a verification email. Has the email already been verified?')

  return ok_response()
コード例 #4
0
ファイル: auth.py プロジェクト: BlackGuyCoding/LaunchKit
def delete_account_view(request):
  email = request.POST.get('email')
  if email != request.user.email:
    return bad_request('Please provide the current account email address, `email`.')

  destructive.delete_account(request.user)

  return ok_response()
コード例 #5
0
def screenshot_set_delete_view(request, set_id=None):
  my_set, _ = screenshots.get_set_and_shots_by_encrypted_id(request.user, set_id)
  if not my_set:
    return not_found()

  screenshots.delete_my_set(request.user, my_set)

  return ok_response()
コード例 #6
0
def subscription_unsubscribe_token_view(request):
  sub = appstore_review_notify.subscription_from_unsubscribe_token(request.POST.get('token', ''))
  if not sub:
    return bad_request('Could not find subscription with that `token`.')

  appstore_review_subscriptions.disable_subscription(sub)

  return ok_response()
コード例 #7
0
ファイル: itunes.py プロジェクト: BlackGuyCoding/LaunchKit
def subscription_unsubscribe_token_view(request):
  sub = itunes_connect.subscription_from_unsubscribe_token(request.POST.get('token', ''))
  if not sub:
    return bad_request('Could not find subscription with that `token`.')

  appstore_sales_report_subscriptions.disable_subscription(sub)

  return ok_response()
コード例 #8
0
ファイル: twitter.py プロジェクト: yutaza/LaunchKit
def connect_app_view(request):
    twitter_handle = request.POST['twitter_handle']
    app_id = request.POST['app_id']
    app = AppStoreApp.find_by_encrypted_id(app_id)

    twitter_app_connections.create_connection(request.user, twitter_handle,
                                              app)
    return ok_response()
コード例 #9
0
def subscription_delete_view(request, subscription_id=None):
  sub = appstore_review_subscriptions.get_user_subscription_by_encrypted_id(request.user, subscription_id)
  if not sub:
    return not_found()

  appstore_review_subscriptions.disable_subscription(sub)

  return ok_response()
コード例 #10
0
ファイル: slack.py プロジェクト: yutaza/LaunchKit
def slack_disconnect_view(request):
    slack.invalidate_tokens_for_user(request.user)
    appstore_review_subscriptions.invalidate_slack_channel_subscriptions(
        request.user)
    appstore_sales_report_subscriptions.invalidate_slack_channel_subscriptions(
        request.user)

    return ok_response()
コード例 #11
0
ファイル: itunes.py プロジェクト: BlackGuyCoding/LaunchKit
def subscription_delete_view(request, subscription_id=None):
  sub = appstore_sales_report_subscriptions.get_user_subscription_by_encrypted_id(request.user, subscription_id)
  if not sub:
    return not_found()

  appstore_sales_report_subscriptions.disable_subscription(sub)

  return ok_response()
コード例 #12
0
ファイル: itunes.py プロジェクト: BlackGuyCoding/LaunchKit
def disconnect_itunes_view(request):
  connected_email = itunes_connect.itunes_credentials_email_for_user_id(request.user.id)
  if not connected_email:
    return bad_request('No connection to remove.')

  destructive.delete_itunes_connection_and_imports(request.user)

  return ok_response()
コード例 #13
0
ファイル: auth.py プロジェクト: yutaza/LaunchKit
def delete_account_view(request):
    email = request.POST.get('email')
    if email != request.user.email:
        return bad_request(
            'Please provide the current account email address, `email`.')

    destructive.delete_account(request.user)

    return ok_response()
コード例 #14
0
ファイル: websites.py プロジェクト: BlackGuyCoding/LaunchKit
def delete_website_view(request, website_id=None):
  website = AppWebsite.find_by_encrypted_id(website_id, user_id=request.user.id, for_update=True)

  if not website or website.delete_time:
    return not_found()

  websites.delete_website(website)

  return ok_response()
コード例 #15
0
ファイル: itunes.py プロジェクト: yutaza/LaunchKit
def disconnect_itunes_view(request):
    connected_email = itunes_connect.itunes_credentials_email_for_user_id(
        request.user.id)
    if not connected_email:
        return bad_request('No connection to remove.')

    destructive.delete_itunes_connection_and_imports(request.user)

    return ok_response()
コード例 #16
0
ファイル: itunes.py プロジェクト: yutaza/LaunchKit
def subscription_unsubscribe_token_view(request):
    sub = itunes_connect.subscription_from_unsubscribe_token(
        request.POST.get('token', ''))
    if not sub:
        return bad_request('Could not find subscription with that `token`.')

    appstore_sales_report_subscriptions.disable_subscription(sub)

    return ok_response()
コード例 #17
0
ファイル: auth.py プロジェクト: yutaza/LaunchKit
def reset_password_view(request):
    form = ResetPasswordForm(request.POST)
    if not form.is_valid():
        return bad_request('Bad reset password request', errors=form.errors)

    success = users.request_reset_password_email(form.cleaned_data['email'])
    if not success:
        return bad_request('Could not find a user with that email address')

    return ok_response()
コード例 #18
0
def screenshot_delete_override(request, set_id=None, shot_id=None, device_type=None):

  override = screenshots.get_shot_override_by_encrypted_id(request.user, shot_id, device_type)

  if not override:
    return not_found()

  screenshots.delete_override_image(override)

  return ok_response()
コード例 #19
0
ファイル: websites.py プロジェクト: yutaza/LaunchKit
def delete_website_view(request, website_id=None):
    website = AppWebsite.find_by_encrypted_id(website_id,
                                              user_id=request.user.id,
                                              for_update=True)

    if not website or website.delete_time:
        return not_found()

    websites.delete_website(website)

    return ok_response()
コード例 #20
0
ファイル: auth.py プロジェクト: BlackGuyCoding/LaunchKit
def reset_password_view(request):
  form = ResetPasswordForm(request.POST)
  if not form.is_valid():
    return bad_request('Bad reset password request',
        errors=form.errors)

  success = users.request_reset_password_email(form.cleaned_data['email'])
  if not success:
    return bad_request('Could not find a user with that email address')

  return ok_response()
コード例 #21
0
ファイル: config.py プロジェクト: BlackGuyCoding/LaunchKit
def config_rule_delete_view(request, rule_id):
  rule = RuntimeConfigRule.objects.filter(
      id=RuntimeConfigRule.decrypt_id(rule_id),
      user_id=request.user.id).first()
  if not rule:
    return not_found()

  runtime_config.update_namespace_status(rule.user, rule.bundle_id, rule.namespace)
  rule.delete()

  return ok_response()
コード例 #22
0
ファイル: itunes.py プロジェクト: yutaza/LaunchKit
def choose_vendor_view(request):
    vendor_id = request.POST.get('vendor_id')
    if not vendor_id:
        return bad_request()

    vendor = ItunesConnectVendor.find_by_encrypted_id(vendor_id)
    if not vendor or vendor.user_id != request.user.id:
        return bad_request()

    itunes_connect.choose_vendor(request.user, vendor)

    return ok_response()
コード例 #23
0
ファイル: auth.py プロジェクト: yutaza/LaunchKit
def unsubscribe_view(request):
    form = UnsubscribeForm(request.POST)
    if not form.is_valid():
        return bad_request('Bad unsub request', errors=form.errors)

    token = form.cleaned_data['token']

    success = users.unsubscribe_with_token(token)
    if not success:
        return bad_request('Invalid token data.')

    return ok_response()
コード例 #24
0
ファイル: auth.py プロジェクト: yutaza/LaunchKit
def verify_email_view(request):
    form = VerifyEmailForm(request.POST)
    if not form.is_valid():
        return bad_request('Bad verification request', errors=form.errors)

    token = form.cleaned_data['token']

    success = users.verify_email_from_token(token)
    if not success:
        return bad_request('Invalid token data.')

    return ok_response()
コード例 #25
0
def config_rule_delete_view(request, rule_id):
    rule = RuntimeConfigRule.objects.filter(
        id=RuntimeConfigRule.decrypt_id(rule_id),
        user_id=request.user.id).first()
    if not rule:
        return not_found()

    runtime_config.update_namespace_status(rule.user, rule.bundle_id,
                                           rule.namespace)
    rule.delete()

    return ok_response()
コード例 #26
0
ファイル: auth.py プロジェクト: BlackGuyCoding/LaunchKit
def unsubscribe_view(request):
  form = UnsubscribeForm(request.POST)
  if not form.is_valid():
    return bad_request('Bad unsub request', errors=form.errors)

  token = form.cleaned_data['token']

  success = users.unsubscribe_with_token(token)
  if not success:
    return bad_request('Invalid token data.')

  return ok_response()
コード例 #27
0
ファイル: itunes.py プロジェクト: BlackGuyCoding/LaunchKit
def choose_vendor_view(request):
  vendor_id = request.POST.get('vendor_id')
  if not vendor_id:
    return bad_request()

  vendor = ItunesConnectVendor.find_by_encrypted_id(vendor_id)
  if not vendor or vendor.user_id != request.user.id:
    return bad_request()

  itunes_connect.choose_vendor(request.user, vendor)

  return ok_response()
コード例 #28
0
ファイル: auth.py プロジェクト: BlackGuyCoding/LaunchKit
def verify_email_view(request):
  form = VerifyEmailForm(request.POST)
  if not form.is_valid():
    return bad_request('Bad verification request', errors=form.errors)

  token = form.cleaned_data['token']

  success = users.verify_email_from_token(token)
  if not success:
    return bad_request('Invalid token data.')

  return ok_response()
コード例 #29
0
ファイル: twitter.py プロジェクト: BlackGuyCoding/LaunchKit
def tweet_review(request):
  twitter_handle = request.POST['twitter_handle']
  review_id = request.POST['review_id']
  review = AppStoreReview.find_by_encrypted_id(review_id)
  tweet_text = request.POST['tweet_text']

  if twitter_handle and review and tweet_text:
    success = twitter.tweet_review(request.user, twitter_handle, review, tweet_text)
    if success:
      return ok_response()

  return bad_request()
コード例 #30
0
def screenshot_delete_shot_view(request, set_id=None, shot_id=None):
  my_set, shots = screenshots.get_set_and_shots_by_encrypted_id(request.user, set_id)
  if not my_set:
    return not_found()

  shot = [s for s in shots if s.encrypted_id == shot_id]
  if not shot:
    return not_found()
  shot = shot[0]

  screenshots.delete_shot_in_set(my_set, shot)

  return ok_response()
コード例 #31
0
ファイル: twitter.py プロジェクト: yutaza/LaunchKit
def tweet_review(request):
    twitter_handle = request.POST['twitter_handle']
    review_id = request.POST['review_id']
    review = AppStoreReview.find_by_encrypted_id(review_id)
    tweet_text = request.POST['tweet_text']

    if twitter_handle and review and tweet_text:
        success = twitter.tweet_review(request.user, twitter_handle, review,
                                       tweet_text)
        if success:
            return ok_response()

    return bad_request()
コード例 #32
0
ファイル: auth.py プロジェクト: BlackGuyCoding/LaunchKit
def reset_password_finish_view(request):
  form = SetNewPasswordForm(request.POST)
  if not form.is_valid():
    return bad_request('Bad reset password request', errors=form.errors)

  token = form.cleaned_data['token']
  password = form.cleaned_data['password']

  success = users.reset_password_with_email_token(token, password)
  if not success:
    return bad_request('Invalid token data.')

  return ok_response()
コード例 #33
0
def app_delete_view(request, country=None, app_id=None):
    app = AppStoreApp.find_by_encrypted_id(app_id)
    if not app:
        return not_found()

    if not country or country not in appstore.APPSTORE_COUNTRIES_BY_CODE:
        return not_found()

    success = appstore.mark_not_interested_in_app(request.user, app, country)
    if not success:
        return not_found()

    return ok_response()
コード例 #34
0
ファイル: auth.py プロジェクト: yutaza/LaunchKit
def reset_password_finish_view(request):
    form = SetNewPasswordForm(request.POST)
    if not form.is_valid():
        return bad_request('Bad reset password request', errors=form.errors)

    token = form.cleaned_data['token']
    password = form.cleaned_data['password']

    success = users.reset_password_with_email_token(token, password)
    if not success:
        return bad_request('Invalid token data.')

    return ok_response()
コード例 #35
0
ファイル: twitter.py プロジェクト: BlackGuyCoding/LaunchKit
def connect_twitter_finish_view(request):
  token = request.POST['token']
  verifier = request.POST['verifier']

  success, twitter_handle = twitter.finish_auth(request.user, token, verifier)
  if not success:
    return bad_request()

  app_id = request.POST['app_id']
  if app_id:
    app = AppStoreApp.find_by_encrypted_id(app_id)
    twitter_app_connections.create_connection(request.user, twitter_handle, app)

  return ok_response()
コード例 #36
0
ファイル: slack.py プロジェクト: yutaza/LaunchKit
def connect_slack_view(request):
    code = request.POST.get('code')
    service = request.POST.get('service')
    onboarding = request.POST.get('onboarding') == '1'
    if not (code and service):
        return bad_request(
            'Please provide a `code` from the Slack OAuth2 endpoint, LK `service` to connect, and `onboarding` status.'
        )

    success = slack.associate_user_with_slack(request.user, code, service,
                                              onboarding)
    if not success:
        return bad_request('Could not fetch a slack token with that `code`.')

    return ok_response()
コード例 #37
0
ファイル: twitter.py プロジェクト: yutaza/LaunchKit
def connect_twitter_finish_view(request):
    token = request.POST['token']
    verifier = request.POST['verifier']

    success, twitter_handle = twitter.finish_auth(request.user, token,
                                                  verifier)
    if not success:
        return bad_request()

    app_id = request.POST['app_id']
    if app_id:
        app = AppStoreApp.find_by_encrypted_id(app_id)
        twitter_app_connections.create_connection(request.user, twitter_handle,
                                                  app)

    return ok_response()
コード例 #38
0
ファイル: auth.py プロジェクト: BlackGuyCoding/LaunchKit
def oauth2_invalidate_token_view(request):
  form = OAuthTokenForm(request.POST)
  state = request.POST.get('state')
  if not form.is_valid():
    error_code = 'invalid_request'
    if 'client_id' in form.errors or 'client_secret' in form.errors:
      error_code = 'invalid_client'
    return _oauth_error_response(error_code, state)

  raw_token = request.POST.get('access_token')
  client_id = form.cleaned_data['client_id']
  invalidated = False
  if raw_token:
    invalidated = oauth.invalidate_client_token(client_id, raw_token)

  if not invalidated:
    return _oauth_error_response('invalid_request', state, 'Could not find that access_token.')

  return ok_response()
コード例 #39
0
ファイル: auth.py プロジェクト: yutaza/LaunchKit
def oauth2_invalidate_token_view(request):
    form = OAuthTokenForm(request.POST)
    state = request.POST.get('state')
    if not form.is_valid():
        error_code = 'invalid_request'
        if 'client_id' in form.errors or 'client_secret' in form.errors:
            error_code = 'invalid_client'
        return _oauth_error_response(error_code, state)

    raw_token = request.POST.get('access_token')
    client_id = form.cleaned_data['client_id']
    invalidated = False
    if raw_token:
        invalidated = oauth.invalidate_client_token(client_id, raw_token)

    if not invalidated:
        return _oauth_error_response('invalid_request', state,
                                     'Could not find that access_token.')

    return ok_response()
コード例 #40
0
ファイル: itunes.py プロジェクト: BlackGuyCoding/LaunchKit
def connect_itunes_view(request):
  apple_id = request.POST.get('apple_id', '').strip()
  password = request.POST.get('password', '')
  if not (apple_id and password):
    return bad_request('Please provide an Apple ID and password.', errors={'kind': 'auth'})

  vendors_response = itunes_connect.associate_user_with_itunes_connect(request.user, apple_id, password)
  if not vendors_response:
    # task queue down, etc.
    return unavailable_response()

  if vendors_response.auth_error:
    return bad_request('Could not authenticate with iTunes Connect.', errors={'__all__': vendors_response.auth_error, 'kind': 'auth'})
  elif vendors_response.vendors_error:
    return bad_request('Could not fetch iTunes Connect vendors.', errors={'__all__': vendors_response.vendors_error, 'kind': 'vendors'})
  elif vendors_response.connection_error:
    return bad_request('Could not talk to iTunes Connect.', errors={'__all__': vendors_response.connection_error, 'kind': 'connection'})
  elif not vendors_response.vendors:
    return bad_request('No vendors associated with this account.', errors={'__all__': 'No vendors associated with account', 'kind': 'vendors'})

  return ok_response()
コード例 #41
0
ファイル: itunes.py プロジェクト: yutaza/LaunchKit
def connect_itunes_view(request):
    apple_id = request.POST.get('apple_id', '').strip()
    password = request.POST.get('password', '')
    if not (apple_id and password):
        return bad_request('Please provide an Apple ID and password.',
                           errors={'kind': 'auth'})

    vendors_response = itunes_connect.associate_user_with_itunes_connect(
        request.user, apple_id, password)
    if not vendors_response:
        # task queue down, etc.
        return unavailable_response()

    if vendors_response.auth_error:
        return bad_request('Could not authenticate with iTunes Connect.',
                           errors={
                               '__all__': vendors_response.auth_error,
                               'kind': 'auth'
                           })
    elif vendors_response.vendors_error:
        return bad_request('Could not fetch iTunes Connect vendors.',
                           errors={
                               '__all__': vendors_response.vendors_error,
                               'kind': 'vendors'
                           })
    elif vendors_response.connection_error:
        return bad_request('Could not talk to iTunes Connect.',
                           errors={
                               '__all__': vendors_response.connection_error,
                               'kind': 'connection'
                           })
    elif not vendors_response.vendors:
        return bad_request('No vendors associated with this account.',
                           errors={
                               '__all__': 'No vendors associated with account',
                               'kind': 'vendors'
                           })

    return ok_response()
コード例 #42
0
ファイル: websites.py プロジェクト: yutaza/LaunchKit
def track_website_view_view(request):
    website_id = AppWebsite.decrypt_id(request.POST.get('website_id'))
    referer = request.POST.get('referer') or None
    if referer:
        referer = referer[:200]
    host = request.POST.get('host', '')[:64]
    user_agent = request.POST.get('user_agent', '')[:256]

    path = request.POST.get('path') or None
    if path:
        path = path[:256]

    view = AppWebsiteView(
        website_id=website_id,
        host=host,
        referer=referer,
        user_agent=user_agent,
        remote_ip=request.remote_addr,
        path=path,
    )
    view.save()

    return ok_response()
コード例 #43
0
ファイル: websites.py プロジェクト: BlackGuyCoding/LaunchKit
def track_website_view_view(request):
  website_id = AppWebsite.decrypt_id(request.POST.get('website_id'))
  referer = request.POST.get('referer') or None
  if referer:
    referer = referer[:200]
  host = request.POST.get('host', '')[:64]
  user_agent = request.POST.get('user_agent', '')[:256]

  path = request.POST.get('path') or None
  if path:
    path = path[:256]

  view = AppWebsiteView(
    website_id=website_id,
    host=host,
    referer=referer,
    user_agent=user_agent,
    remote_ip=request.remote_addr,
    path=path,
  )
  view.save()

  return ok_response()
コード例 #44
0
ファイル: twitter.py プロジェクト: yutaza/LaunchKit
def disconnect_app_view(request):
    connection_id = request.POST['connection_id']
    connection = TwitterAppConnection.find_by_encrypted_id(connection_id)

    twitter_app_connections.disconnect(request.user, connection)
    return ok_response()
コード例 #45
0
ファイル: debug.py プロジェクト: yutaza/LaunchKit
def health_check(request):
    health_check_error = debug.passes_health_check()
    if not health_check_error:
        return ok_response()
    return unavailable_response(message=health_check_error)
コード例 #46
0
ファイル: debug.py プロジェクト: BlackGuyCoding/LaunchKit
def health_check(request):
  health_check_error = debug.passes_health_check()
  if not health_check_error:
    return ok_response()
  return unavailable_response(message=health_check_error)
コード例 #47
0
ファイル: twitter.py プロジェクト: BlackGuyCoding/LaunchKit
def disconnect_app_view(request):
  connection_id = request.POST['connection_id']
  connection = TwitterAppConnection.find_by_encrypted_id(connection_id)

  twitter_app_connections.disconnect(request.user, connection)
  return ok_response()