· 9 years ago · Sep 02, 2016, 10:36 PM
1class BraintreeController < ApplicationController
2 def connect
3 scope = params[:scope] || 'read_only'
4
5 url = BraintreeClient.connect_url('http://127.0.0.1:4567/callback', scope)
6 redirect_to url
7 end
8
9 def callback
10 # TODO Add braintree_id and braintree_access_token to accounts table
11 token_params = BraintreeClient.get_token_by_code(params[:code])
12
13 account = Account.find_or_initialize_by(braintree_account_id: token_params[:braintree_user_id])
14
15 braintree_id = params[:merchantId] && braintree_access_token = token_params
16
17 if (account.new_record?)
18 #generate Account
19 account.set_handle(braintree_account.display_name || braintree_account.email[/[^@]+/])
20 if account.valid?
21 account.save
22 else
23 raise "Can't create account object!"
24 end
25
26 unless braintree_account.business_url.blank?
27 account.update({cnames: braintree_account.business_url})
28 end
29
30 #generate settings and default
31 #site_url = braintree_account.business_url.blank? ? root_url : "http://#{braintree_account.business_url}/"
32
33 account.build_setting
34 account.setting.set_default(braintree_account.display_name, braintree_account.display_name, site_url, braintree_account.email, braintree_account.timezone)
35 account.setting.save!
36 end
37
38 unless current_user.accounts.where(id: account.id).any?
39 UserAccount.create!({role: account.user_accounts.count > 0 ? 'owner' : 'member',
40 user_id: current_user.id,
41 account_id: account.id})
42 end
43
44 # Add connections
45 account.add_connection({scope: token_params[:scope],
46 client_id: token_params[:braintree_client_id],
47 refresh_token: token_params[:refresh_token],
48 secret_key: token_params[:access_token],
49 publishable_key: token_params[:braintree_publishable_key]})
50
51 account.update({braintree_account_raw: braintree_account.to_json})
52
53 # Finally, queue a sync for the account:
54 AccountSyncJob.perform_later(account)
55
56 redirect_to team_home_path
57 end
58end