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()
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()
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()
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()
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()
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()
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()
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()
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()
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()
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()
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()
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()
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()
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()
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()
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()
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()
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()
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()
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()
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()
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()
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()
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()
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()
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()
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()
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()
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()
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()
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()
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)