/
dashboard_controller.rb
144 lines (118 loc) · 4.33 KB
/
dashboard_controller.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
require 'dwolla'
class DashboardController < ApplicationController
# Generally, it is best to handle errors in every function for every case,
# however, given that this is a toy application and we will only throw API errors,
# it is ok to do this.
rescue_from Dwolla::DwollaError, :with => :rescue_dwolla_errors
def rescue_dwolla_errors(exception)
reset_session if exception.message == "Expired access token." or exception.message == "Invalid access token."
if exception.message != "Expired access token." or exception.message != "Invalid access token."
flash[:error] = "Uh oh! A Dwolla API error was encountered: \n#{exception.message}"
redirect_to :back
else
flash[:error] = "An authentication error was encountered and you were logged out. Try again?"
redirect_to '/'
end
end
def is_email?(str)
str =~ /\A([\w+\-].?)+@[a-z\d\-]+(\.[a-z]+)*\.[a-z]+\z/i
end
def home
end
# Scheduled Transactions
def create
if not logged_in?
flash[:error] = "Easy there! Log in first!"
redirect_to '/'
else
@fr = ['weekly', 'monthly']
@fs = []
DwollaVars.Dwolla::FundingSources.get(nil, session[:oauth_token]).each do |h|
@fs.push([h['Name'], h['Id']]) unless h['Name'] == "My Dwolla Balance"
end
end
end
def manage
if not logged_in?
flash[:error] = "Easy there! Log in first!"
redirect_to '/'
else
if params[:id]
@transaction = DwollaVars.Dwolla::Transactions.scheduled_by_id(params[:id], session[:oauth_token])
@fs = []
DwollaVars.Dwolla::FundingSources.get(nil, session[:oauth_token]).each do |h|
@fs.push([h['Name'], h['Id']]) unless h['Name'] == "My Dwolla Balance"
end
render 'edit'
else
@scheduled = DwollaVars.Dwolla::Transactions.scheduled({}, session[:oauth_token])['Results']
render 'manage'
end
end
end
def delete
if not params[:delete]
flash[:error] = "You've arrived here in error. Sorry!"
redirect_to '/dashboard/manage'
else
DwollaVars.Dwolla::Transactions.delete_scheduled_by_id(params[:delete][:Id], {:pin => params[:delete][:pin]}, session[:oauth_token])
flash[:success] = "You've successfully deleted the scheduled transaction"
redirect_to '/dashboard/manage'
end
end
def process_scheduled
if params[:commit] == "Create"
# If you name all of your form parameters by the
# parameters which the gem expects, you do not need
# to create another hash.
weekly_recurrence = ""
weekly_recurrence << "1," if params[:scheduled][:sun]
weekly_recurrence << "2," if params[:scheduled][:mon]
weekly_recurrence << "3," if params[:scheduled][:tue]
weekly_recurrence << "4," if params[:scheduled][:wed]
weekly_recurrence << "5," if params[:scheduled][:thu]
weekly_recurrence << "6," if params[:scheduled][:fri]
weekly_recurrence << "7" if params[:scheduled][:sat]
unless weekly_recurrence.empty?
params[:scheduled][:recurrence] =
{
:frequency => params[:scheduled][:frequency],
:onDays => weekly_recurrence,
:endDate => params[:scheduled][:endDate]
}
end
params[:scheduled][:destinationType] = is_email?(params[:scheduled][:destinationId]) ? "Email" : "Dwolla"
DwollaVars.Dwolla::Transactions.schedule(params[:scheduled], session[:oauth_token])
flash[:success] = "The scheduled transaction has been succesfully created!"
redirect_to '/'
elsif params[:commit] == "Edit"
DwollaVars.Dwolla::Transactions.edit_scheduled(params[:scheduled][:Id], params[:scheduled].except!(:Id), session[:oauth_token])
flash[:success] = "The scheduled transaction has been succesfully edited!"
redirect_to '/dashboard/manage'
end
end
# Session Management
def login
redirect_to DwollaVars.Dwolla::OAuth.get_auth_url(DwollaVars.redirect)
end
def handle_oauth
if not params['code']
flash[:error] = "There was an issue logging in with Dwolla. Try again later."
redirect_to "/"
else
# Set access token
session[:oauth_token] = DwollaVars.Dwolla::OAuth.get_token(params['code'], DwollaVars.redirect)['access_token']
# Set name, for aesthetics.
session[:name] = DwollaVars.Dwolla::Users.me(session[:oauth_token])['Name']
# Make user happy
flash[:success] = "You have been successfully logged in!"
redirect_to "/"
end
end
def logout
# Destroy the rails session hash
reset_session
flash[:alert] = "You have logged out."
redirect_to "/"
end
end